Истоки ООП

6d38461ce804290eb71295055b2b4f20

Статья посвящена теме ООП, истоков его создания и пояснения почему его стоит применять.

История начинается с того, что создатель ООП, Алан Кёртис Кэй, получил степень бакалавра по молекулярной биологии. Его интерес вызывали клетки организмов, их строение и поведение. Собственно чтобы не изобретать велосипед и использовать лучшие практики природы им и был создан этот подход к программированию, ООП.

Все ООП это попытка описать поведение клеток между друг другом, отсюда и энные принципы:

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

  • Инкапсуляция (органы клетки остаются внутри клетки, доступны для управления изнутри, клетка ограничена оболочкой/капсулой).

  • Полиморфизм (после деления клеток с ними могут произойти мутации). В реальной жизни, если мутация клетки сильно отличается от начальной, то ее начинает атаковать иммунитет, в этом случае организм начинает есть сам себя. Подобные явления можно перенять, строя свой код, избегая природных ошибок.

Не смотря на внешнюю простоту, дьявол все же кроется в мелочах:

  • Изучая даже детский учебник по клеткам организма можно прийти к выводу, что эта штука настолько сложная и многогранная, что не поддается простому описанию. Взаимодействие органов клетки, ее ядра это целая наука, для передачи сигнала используются специальные химические составы с наборами данных. С наскока не разобраться. Запрограммировать такое поведение клетки не простая задачка.

  • Помимо клетки есть еще и другие структуры, которые так же обмениваются сигналами, магнитными полями, от мала до велика. Можно было использовать для сравнения животных или же атомные структуры химических соединений. Почему в качестве примера были взяты именно клетки — вопрос. Скорее всего потому, что они это хорошая золотая середина жизненного фрактала.

Раз был упомянут фрактализм, то можно поговорить о нем отдельно. Когда-то давно, люди, дробя руду, поняли, что некоторые камни раскалываются на похожие сегменты. Дробя руду еще меньше рисунок повторялся. То касалось и больших глыб. Далее эту идею применяли и к вещам, не связанные с ручным трудом. Почему бы не использовать это применительно к программированию.

Фрактализм:

  • Паттерны и принципы ООП применимы не только к классам, но и к архитектуре сервисов, групп сервисов, взаимодействию внутри команды.

  • Паттерны можно брать не только из учебников, отображение принципов есть в окружающем мире.

  • Любой программной задаче (в теории) уже есть решение на другом уровне абстракции. «В Симпсонах уже была эта серия».

Еще немного теории о возникновении жизни, в частности сложных клеток (это не мои теории, к слову):

  • Первые клетки имели лишь оболочку. Внутри ничего не было. Разнообразность поведения, размеров и химического состава привели похожие ранее клетки к новому поведению. Часть из них могла переварить/употребить те или иные хим элементы/соединения.

  • Далее клетки научились вскрывать оболочки друг друга и потреблять внутренности. Оболочки могли срастись во время поедания. В части таких моментов совпали циклы деления. По итогу ранее только оболочечная структура обрела паразита. Но он оказался полезным. Он помог доваривать мусор от основного процесса пищеварения. Так клетки обрастали органами, по факту же другими клетками, которые попали туда из-за своей жадности. Синергия. В ООП это похоже на Dependency Injection.

  • Остальные клетки, простые, без органов, конкуренции не выдержали.

Итоги:

  • Мир намного связаннее, чем кажется.

  • Все что нужно уже придумано, нужно только это отыскать. При том, что это проверенные паттерны, которые помогут избежать проблем в будущем.

  • Применение других наук в программировании обосновано. На этом может строиться ваша кривая обучения.

Данная статья предназначена в первую очередь для расширения кругозора и энной мотивации изучать другие науки, помимо информатики.

© Habrahabr.ru