инкапсуляция, полиморфизм, наследование
Объектно-ориентированное программирование основано на «трех китах» - трех важнейших принципах, придающих объектам новые свойства. Этими принципами являются инкапсуляция, наследование и полиморфизм.
В целях повышения защищенности программ в ООП почти не используются глобальные переменные
Реализация задач одной и той же идеи разными способами;
SOLID и ООП неразрывно связаны. Так получилось, что именно в ООП языках появилась удобная и безопасная поддержка динамического полиморфизма. Фактически, в контексте SOLID под ООП понимается именно динамический полиморфизм.
Полиморфизм дает возможность для разных типов использовать один код. Полиморфизм можно грубо разделить на динамический и статический:
-
Динамический полиморфизм — это про абстрактные классы, интерфейсы, утиную типизацию, т.е. только в рантайме будет понятно, с каким типом будет работать наш код.
Утиная типизация: Если что-то выглядит как утка, плавает как утка и крякает как утка, то, скорее всего, это утка
Пример: Строка и массив — это разные типы данных, но они ведут себя одинаково. А если строка выводится как массив, заполняется как массив и меняется как массив, то с практической точки зрения это и есть массив и с ним можно работать как с массивом. Это и есть утиная типизация, когда нам неважно, что там на самом деле — важно, как оно себя ведёт и как с ним работать.
-
Статический полиморфизм — это в основном про шаблоны (genererics). Когда уже на этапе компиляции из одного шаблонного кода генерируется код специфичный для каждого используемого типа.
Cпособность объекта или класса базироваться на другом объекте или классе;
Cвойство скрывать свои данные и способы их обработки;
private, filreprivate, internal
Преимущества
- Классы позволяют проводить конструирование из полезных компонент, обладающих простыми инструментами, что дает возможность абстрагироваться от деталей реализации.
Недостатки
- ООП порождает огромные иерархии классов, что приводит к тому, что функциональность расползается или, как говорят, размывается по базовым и производным членам класса, и отследить логику работы того или иного метода становится сложно.
2.2.2.2.1 About Imperative Theme | Back To iOSWiki Contents | 2.2.2.2.3 POP Theme