Основные принципы ООП
9155

Основные принципы ООП


  • Абстракция - отделение концепции от ее экземпляра. Основная идея состоит в том, чтобы представить объект минимальным набором полей и методов и при этом с достаточной точностью для решаемой задачи;
  • Полиморфизм - предоставление единого интерфейса для сущностей разных типов. Подтипизация;
  • Наследование - способность объекта или класса базироваться на другом объекте или классе. Это главный механизм для повторного использования кода. Наследственное отношение классов четко определяет их иерархию;
  • Инкапсуляция - заключение объектов в общий интерфейс таким образом, что делает их взаимозаменяемыми, и защищает их состояния от недопустимых изменений.

Важно

  • Инкапсулируйте все, что может изменяться;
  • Пишите код больше под интерфейс, чем под реализацию;
  • Каждый класс в вашем приложении должен иметь только одно причину для изменения;
  • Классы - это про поведение и функциональность.

Наследование предполагает:

  • Делегирование - когда вы передаете ответственность за выполнение конкретной задачи другому классу или методу;
  • Композиция - включение объектом-контейнером объекта-содержимого и управление его поведением; последний не может существовать вне первого;
  • Агрегация - включение объектом-контейнером ссылки на объект-содержимое; при уничтожении первого последний продолжает существование.

В ООП главное - это объекты, которые в PHP есть не что иное как переменные абстрактного типа данных


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

Можно заметить, что интерфейс, с формальной точки зрения, — это просто чистый абстрактный класс, то есть класс, в котором не определено ничего, кроме абстрактных методов. Если язык программирования поддерживает множественное наследование и абстрактные методы (как, например, C++), то необходимости во введении в синтаксис языка отдельного понятия «интерфейс» не возникает. Данные сущности описываются с помощью абстрактных классов и наследуются классами для реализации абстрактных методов.

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

Получать оповещения о новых статьях:


Не нашли нужную статью? Предложите свою тему