BonBonSlick
@BonBonSlick
Vanilla Full Stack Web Architector

Сколько вообще принципов ООП, не только основных?

Solid? (single responsibility, open-closed, Liskov substitution, interface segregation и dependency inversion)
Вики

Инкапсуляция, полиморфизм, абстракция и наследование? (что везде пишут)

Думаю вторые это как основные, но у них есть некоторые схожости по моему мнению с первым. Вот и возник вопрос, сколько вообще принципов? Или я что то не так понимаю?
  • Вопрос задан
  • 3735 просмотров
Решения вопроса 3
qonand
@qonand
Software Engineer
Принципы ООП это инкапсуляция, наследование, полиморфизм и абстракция. Остальные принципы просто выступают в качестве рекомендаций для создания более качественного кода в рамках ООП. Помимо S.O.L.I.D есть еще:
  • LOD
  • Inversion of Control
  • CQS
  • GRASP-паттерны (как по мне это все-таки больше принципы чем паттерны)
Ответ написан
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Не стоит забывать так же такие основополагающие принципы как KISS и YAGNI:)
Ответ написан
@chaetal
Не путайте принципы объектно-ориентированного программирования vs. правила хорошого объектного дизайна (читай "эвристики", некоторые наборы практик, которые при некоторых условиях и в каких-то случаях могут привести к более-менее качественной реализации поставленных задач).

Вопрос был поставлен именно про принципы ООП, так что речь именно о них.

Начну с того, что вопрос не очень корректен. "Неосновных" принципов можно нагородить много, только зачем? Чем меньше (и проще), тем лучше.

Общепринятая формула "инкапсуляция, наследование, полиморфизм и абстракция" ("три кита ООП на черепахе-абстракции) — как раз пример того, как простую и мощную идею можно напрочь убить. Такие принципы часто плохо сформулированы, вызывают массу вопросов, плохо применяются на практике и, в конечном итоге, приводят к выводам о "сомнительной пользе от ООП".

Можно предложить короткую и всеобъемлющую формулу в виде, близком к тому, который был сформулирован автором термина ООП: объекты и сообщения. Объекты — это "закрытые" сущности, которые умеют отвечать на сообщения. Сообщения — это "просьба" объекту что-то сделать; отличается от "обычного" вызова процедуры/функции/метода тем, что объект волен реагировать на полученное сообщение по своему усмотрению, то есть на этапе компиляции вы не можете точно сказать, какой именно код будет выполнен ("позднее связывание"). К этим принципам можно добавить еще самоподобие — все в программной системе является объектом (что призвано сделать систему более простой за счет единообразия).

При реализации конкретного языка программирования, к этим принципам придется добавить еще какие-то детали: как собственно реализованы объекты (например, являются экземплярами классов), как определяется их поведение (при получении сообщения, объект лезет в свой класс и ищет там соответствующий метод; если метод не найдет, ищем в родительском классе…) и т.д.

Такое определение может показаться непонятным, но из него можно вывести все необходимое в виде следствий или частных случаев. Относительно вышеупомянутых "трех китов ООП" в упрощенном виде это изложено здесь.

Короче, вопрос-то сложный ;) Если есть желание на самом деле лучше разобраться в ООП и его принципах, рекомендую почитать The Early History Of Smalltalk. Да и вообще посмотреть на Smalltalk(лучше всего сейчас на Pharo), Self… и, может быть, на Erlang (на уровне процессов).

А принципы проектирования (практики) выводятся из этой же формулы "объекты + сообщения" на основе практики — это отдельная и, наверное, еще большая тема. Кстати, есть гипотеза, что правильно используя Test-Driven Development, все нужные принципы получатся сами собой.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
vechnoe
@vechnoe
Tornado, Django, Postgres, Asyncio, Clojure
В ООП сомнительная польза
www.yegor256.com/2016/08/15/what-is-wrong-object-o...
www.yegor256.com/2017/03/28/solid.html
SOLID is a money-making instrument, not an instrument to make code better.


Ну а если освоить, то Гради Буч. Объектно-ориентированный анализ и проектирование
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы