Комментарии 26
Это называется «галопом по Европам»: без вдумчивого погружения в каждый вопрос, проскакали по верхам. Практически с тем же успехом можно было просто написать список из 10ти пунктов, чтобы те, кто не знает пошли гуглить конкретику.
+16
Практически с тем же успехом можно было просто написать список из 10ти пунктов, чтобы те, кто не знает пошли гуглить конкретику.
Ну не знаю, кому как, но мне было достаточно еще раз напоминания, что повторяться это плохо (повторенье — мать ученья), и что нужно иметь свой класс для решения одной задачи, и лучше потратить пять минут для создания нового класса, чем городить зоопарк из методов на все случаи жизни в одном классе, потому-что времени нет делить. Или вам надо гуглить как классы создавать?)
Но композицию, LSP и им подобные да, надо все-таки гуглить… Но как говорили преподаватели у меня в универе — «Университет — это место, где учат находить знания».
0
Подавляющее большинство этих принципов относятся не конкретно к ООП, а к программированию вообще. В любой парадигме и на любом языке. Слово "класс" при необходимости меняется на слово "функция", "структура", "модуль", "файл исходных текстов" и т.д. в зависимости от особенностей конкретного языка. При отсутствии в языке явных слов private и public вместо них могут работать области видимости, слово "static" в plain C, непрозрачные структуры там же, схемы именования и др.
+5
Жду статью о бинарном поиске и сортировках!
+9
Liskov substitution описан, как мне кажется, неверно.
Даже если предположить существование некоторого метода
Даже если предположить существование некоторого метода
area(Rectangle r)
, работать он должен одинаково как для квадрата так и для прямоугольника. Иерархия квадрат -> прямоугольник нарушает LSP при определении контракта на изменение. (изменение высоты у прямоугольника не влечёт изменение ширины, в отличие от квадрата).+4
Да, почему-то очень любят использовать связь прямоугольник-квардрат как иллюстрацию наследования, хотя это очень плохой пример и (подумав) такой код никогда в реальной жизни не напишешь. Мало того, что очень сложно выбрать, кто от кого наследуется, так еще и сразу начинают лезть несоответствия вроде того, что описал Frintezza93. Из за этого обычно не рекомендуют наследоваться от реализаций, но только от специально подготовленных астрактных классов или еще лучше реализовывать интерфейсы типа Figure с метдами вроде area() и дргуих.
0
Квадрат это частный случай прямоугольника. Не каждый прямоугольник является квадратом. Квадрат наследуется от прямоугольника.
0
Пример и правда не лучший — стоило бы убрать сеттеры и передавать параметры в конструктор (Rectangle(int width, int height) и Square(int size), тогда бы было меньше вопросов. Классы не обязаны быть изменяемыми.
0
НЛО прилетело и опубликовало эту надпись здесь
Ещё пара сотен таких статей, и люди запомнят принципы
+2
Основные принципы это абстракция, инкапсуляция, наследование и полиморфизм.
0
когда-нибудь я соберусь с мыслями и пойму это
+1
Обязательно напишите статью как написать программу «Привет Мир!» на 10 разных ЯП. Это очень нужно на Habrahabr!
+2
разве это не одинаковые статьи tproger.ru/translations/10-oop-principles?
0
ООП в целом не очень полезная вещь, без неё можно писать хорошие программы. Вот тут подробнее: www.youtube.com/watch?v=QM1iUe6IofM
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
10 принципов объектно-ориентированного программирования, о которых должен знать каждый разработчик