Перейти к содержанию

Объектно-ориентированное программирование

Общие сведения

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

Этот подход к программированию хорошо подходит для больших, сложных и активно обновляемых или поддерживаемых программ.

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

ООП

Класс

Класс (Class) - это описание типа объекта, представленая такими его членами:

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

Также у класса могут определяться конструкторы и деструктор, которые предназначены для задания исходного состояния объекта в момент создания и его уничтожения соответственно.

Объект

Объект (Object) представляет собой экземпляр заданного типа у которого полностью автономная не статическая часть класса и все не статические свойства и методы класса воздействуют только на текущий объект.

Базовые принципы ООП

Абстракция

Абстра́кция в объектно-ориентированном программировании — это использование только тех характеристик объекта, которые с достаточной точностью представляют его в данной системе. Основная идея состоит в том, чтобы представить объект минимальным набором полей и методов и при этом с достаточной точностью для решаемой задачи.

Полиморфизм

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

Это позволяет клиентскому коду работать с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.

Многие языки программирования поддерживают и параметрический полиморфизм как разультат обобщённого программирования (англ. generic programming) — парадигмы программирования, заключающаяся в таком описании данных и алгоритмов, которое можно применять к различным типам данных, не меняя само это описание.

При применении генериков классы соответствующего типа создаются автоматически на этапе компиляции или интерпретации при выполнении кода и при этом поддерживается строгая типизация.

Наследование

Наследование как обобщение — способность объекта или класса базироваться на другом объекте или классе. Это главный механизм для повторного использования кода. Наследственное отношение классов четко определяет их иерархию.

Наследование может выполняться и как реализация — определение интерфейса и его реализация в классах.

Наследование описывается словом «является».

Инкапсуляция

Объекты инкапсулируют внутри себя данные и методы работы с ними, предоставляя публичные интерфейсы для взаимодействия.

Отношения между классами и объектами

Кроме отношения между классами как наследование широко используется ассоциация — это отношение, при котором объекты одного типа неким образом связаны с объектами другого типа и описывается словом «имеет» или «включает» по типу как:

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

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

Дополнительные материалы