Сегодняшняя статья представляет собой небольшую памятку, в которой кратко, в тезистной форме изложены основные понятия объектно-ориентированного программирования (ООП).
- Программа в ООП представляет собой набор взаимодействующих абстрактных объектов.
- Объекты имеют атрибуты (свойства, переменные). Эти атрибуты для объектов прописаны программистом.
- Над объектами можно выполнять операции (методы, действия, функции) с целью модификации этих или других объектов. Сами операции также прописываются для объектов программистом.
- ООП поддерживает инкапсуляцию (сокрытие данных). Это принцип, согласно которому данные внутри объекта доступны только через операции (методы) объекта, называемые интерфейсом объекта.
- Для однозначной идентификации объектов (отделения одного объекта от другого) используются дескрипторы (уникальные идентификаторы) объектов.
- Объекты, имеющие одинаковые атрибуты и методы группируются в классы. Это даёт программисту возможность не описывать каждый объект в отдельности, а вместо этого один раз описать класс объектов, а далее создавать необходимое количество экземпляров объектов описанного класса.
- При описании классов можно использовать вложенность (в ООП это называется наследованием). Допустим существует некий класс, описывающий общие свойства группы объектов. Если объекты в группе можно разделить по каким-либо признакам на ещё более мелкие подгруппы (у объектов есть свойства и/или методы не одинаковые для всей группы, но одинаковые для подгрупп), то можно создать классы, являющиеся наследниками исходного класса. Нужно просто указать, наследником какого класса являются новые классы и они автоматически получат все атрибуты и методы родительского класса. При этом новым классам можно добавить новых атрибутов и методов, характерных только для отдельных подгрупп объектов исходной группы. Класс, от которого происходит наследование называется родительским или суперклассом. Класс, который наследует, называется дочерним, а также подклассом или субклассом.
- ООП свойственен полиморфизм. То есть у разных классов могут быть одинаковые методы (одинаковые названия), которые выполняются по-разному (содержат разный программный код). То, какая именно операция будет выполняться, зависит от того, к какому классу принадлежит объект.
- C помощью специальных модификаторов — private, protected и public можно управлять видимостью атрибутов и методов, а также доступом к ним. Модификатор public (общедоступный) обозначает открытый доступ к помеченному им атрибуту или методу, возможный как внутри класса, так и снаружи. модификатор protected делает соответствующий атрибут или метод невидимым и недоступным снаружи класса, при этом такие атрибуты и методы наследуются при создании дочерних подклассов. Модификатор private делает помеченный им атрибут или метод не только недоступным снаружи класса, но ещё и не наследуемым при создании дочерних классов.
- Для подклассов допустимо переобъявлять унаследованные от родительского класса атрибуты и методы. Такой фокус называется перекрытием (overriding). При этом после переопределения новый метод или атрибут получает приоритет и при стандартном обращении мы получаем доступ именно к нему. Однако, доступ к унаследованному от родительского класса методу также сохраняется, просто для вызова этого метода теперь нужно использовать конструкцию вида: parent::method(), где parent — имя родительского класса, метод — имя вызываемого метода.
- Наследование и перекрытие могут иметь многоуровневую структуру.
- С помощью ключевого слова final можно запретить наследование и перекрытие. Если это слово использовать перед именем класса, то от такого класса нельзя будет создавать подклассы, а если использовать это слово перед атрибутом или методом, то их нельзя будет переопределить в дочернем подклассе.