HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Теги: java, liskov substitution, ошибка порядка наследования, solid, базовый класс, setheight(), setwidth(), референс базового типа</p>
1 <p>Теги: java, liskov substitution, ошибка порядка наследования, solid, базовый класс, setheight(), setwidth(), референс базового типа</p>
2 <p>Согласно тесту Тьюринга, если что-то плавает как утка, крякает как утка и летает как утка, то это что-то - утка. Но что делать, если при этом она не работает без батареек?</p>
2 <p>Согласно тесту Тьюринга, если что-то плавает как утка, крякает как утка и летает как утка, то это что-то - утка. Но что делать, если при этом она не работает без батареек?</p>
3 <p>Если в вашем приложении объект пришёл к вам по референсу на базовый класс, но ведёт себя не так, как вы ждёте от базового класса, то у вас в приложении нарушен один из принципов SOLID - Liskov Substitution. Ошибка частая и не сразу заметная.</p>
3 <p>Если в вашем приложении объект пришёл к вам по референсу на базовый класс, но ведёт себя не так, как вы ждёте от базового класса, то у вас в приложении нарушен один из принципов SOLID - Liskov Substitution. Ошибка частая и не сразу заметная.</p>
4 <h2>Ошибка порядка наследования</h2>
4 <h2>Ошибка порядка наследования</h2>
5 <p>Например, у вас в приложении есть квадрат и прямоугольник. Что из них базовый класс? Школьная математика нам подсказывает, что квадрат - частный случай прямоугольника. Но в проектировании это не так.</p>
5 <p>Например, у вас в приложении есть квадрат и прямоугольник. Что из них базовый класс? Школьная математика нам подсказывает, что квадрат - частный случай прямоугольника. Но в проектировании это не так.</p>
6 <p>Если прямоугольнику два метода<strong>setHeight()</strong>и<strong>setWidth()</strong>вполне подходят, то что они должны делать с квадратом? Например, первый может задавать размер квадрата, а второй… ничего не делать. Или наоборот. Это не так важно.</p>
6 <p>Если прямоугольнику два метода<strong>setHeight()</strong>и<strong>setWidth()</strong>вполне подходят, то что они должны делать с квадратом? Например, первый может задавать размер квадрата, а второй… ничего не делать. Или наоборот. Это не так важно.</p>
7 <p>Важно, что архитектура у вас при наследовании квадратом методов прямоугольника сломана. И если кто-то получит на квадрат референс базового типа, он не сможет с ним работать.</p>
7 <p>Важно, что архитектура у вас при наследовании квадратом методов прямоугольника сломана. И если кто-то получит на квадрат референс базового типа, он не сможет с ним работать.</p>
8 <p><strong>Или другой пример:</strong>есть подвижный объект и неподвижный. Кто из них базовый? Ждём ваш ответ в комментариях!</p>
8 <p><strong>Или другой пример:</strong>есть подвижный объект и неподвижный. Кто из них базовый? Ждём ваш ответ в комментариях!</p>
9  
9