Объектно-ориентированное программирование¶
Общие сведения¶
Объектно-ориентированное программирование (ООП) фокусируется на объектах, которыми разработчики хотят манипулировать, а не на логике, необходимой для манипулирования ими. Программу можно представить в виде взаимосвязанных взаимодействующих между собой объектов.
Этот подход к программированию хорошо подходит для больших, сложных и активно обновляемых или поддерживаемых программ.
ООП способствует совместной разработке, когда проект можно разделить на составляющие. Дополнительные преимущества ООП включают повторное использование кода, масштабируемость а также эффективность.
Класс¶
Класс (Class) - это описание типа объекта, представленая такими его членами:
- поля - переменные, обычно доступ осуществляется через свойства
- свойства - характеристики объекта и его состояние
- методы - действия, возможные с данным типом объекта
- события - объекты для подключения внешних делегатов - обработчиков событий.
Также у класса могут определяться конструкторы и деструктор, которые предназначены для задания исходного состояния объекта в момент создания и его уничтожения соответственно.
Объект¶
Объект (Object) представляет собой экземпляр заданного типа у которого полностью автономная не статическая часть класса и все не статические свойства и методы класса воздействуют только на текущий объект.
Базовые принципы ООП¶
Абстракция¶
Абстра́кция в объектно-ориентированном программировании — это использование только тех характеристик объекта, которые с достаточной точностью представляют его в данной системе. Основная идея состоит в том, чтобы представить объект минимальным набором полей и методов и при этом с достаточной точностью для решаемой задачи.
Полиморфизм¶
Возможность в дочерних классах переопределять методы, помеченные в родительском классе как виртуальные, или реализовывать в классе методы в соответствии с абстрацией в виде интерфейсов.
Это позволяет клиентскому коду работать с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
Многие языки программирования поддерживают и параметрический полиморфизм как разультат обобщённого программирования (англ. generic programming) — парадигмы программирования, заключающаяся в таком описании данных и алгоритмов, которое можно применять к различным типам данных, не меняя само это описание.
При применении генериков классы соответствующего типа создаются автоматически на этапе компиляции или интерпретации при выполнении кода и при этом поддерживается строгая типизация.
Наследование¶
Наследование как обобщение — способность объекта или класса базироваться на другом объекте или классе. Это главный механизм для повторного использования кода. Наследственное отношение классов четко определяет их иерархию.
Наследование может выполняться и как реализация — определение интерфейса и его реализация в классах.
Наследование описывается словом «является».
Инкапсуляция¶
Объекты инкапсулируют внутри себя данные и методы работы с ними, предоставляя публичные интерфейсы для взаимодействия.
Отношения между классами и объектами¶
Кроме отношения между классами как наследование
широко используется ассоциация
— это отношение, при котором объекты одного типа неким образом связаны с объектами другого типа и описывается словом «имеет» или «включает» по типу как:
композиция
— включение объектом-контейнером объекта-содержимого и управление его поведением; последний не может существовать вне первогоагрегация
— включение объектом-контейнером ссылки на объект-содержимое; при уничтожении первого последний продолжает существование
Связь между объектами можно осуществлять и частичную через делегацию
- подключение метода одного объекта или одновременно нескольких к делегату другого объекта. Делегат по сути это специальное свойство объекта представляющего собой ссылку на объект, который указывает на метод или коллекцию методов с определенной сигнатурой.