Принципы ООП

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

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

В объектно-ориентированном программировании код и данные могут быть объединены вместе; в этом случае говорят, что создаётся так называемый «чёрный ящик». Когда коды и данные объединяются таким способом, создаётся объект (object) – это то, что поддерживает инкапсуляцию.

Внутри объекта коды и данные могут быть закрытыми (private). Закрытые коды или данные доступны только для других частей этого объекта. Таким образом, закрытые коды и данные недоступны для тех частей программы, которые существуют вне объекта. Если коды и данные являются открытыми, то, несмотря на то, что они заданы внутри объекта, они доступны и для других частей программы. Инкапсуляция обладает рядом преимуществ.

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

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

Таким образом, наследование позволяет построить иерархию классов – единую древовидную структуру с общим корнем (TObject), и дает возможность определения новых классов на основе существующих с возможностью добавления или переопределения данных и методов.

Наследование позволяет различным типам данных совместно использовать один и тот же код, приводя к уменьшению его размера и повышению функциональности.

Рассмотрим пример иерархии классов и наследования.
Первым уровнем абстракции рассмотрим всех насекомых. Все они обладают определенными свойствами, характерными для всех насекомых вообще. Например, имеют лапки. Значение свойства «количество лапок» может отличаться для различных насекомых, но присутствует оно у всех.
Углубляясь на следующий уровень абстракции, рассмотрим разделение насекомых на два класса – насекомые с крыльями и без крылых. Насекомые с крыльями отличаются от просто насекомых тем, что имеют свойство «количество крыльев». Класс «Насекомые» является предком класса «С крыльями» в иерархии. Поэтому класс «С крыльями» имеет также и свойство «количество лапок».

Углубляясь еще дальше, разделим насекомых с крыльями еще на три класса – «бабочек», «мотыльков» и «мух». Любой из этих классов имеет все свойства «Насекомого с крыльями», и какие-то свои свойства или способы поведения, отличающие его от собратьев, стоящих вместе с ним на одном уровне иерархии.

Полиморфизм

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

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

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

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

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

Пример. Предположим, что класс «Насекомые» имеет манеру поведения, которую можно охарактеризовать как «способ перемещения». Так как этот класс имеет признак «количество ножек», то «способ перемещения» описывается так: «ножек больше одной – бегает, ножек меньше двух – ползает». Очевидно, что насекомые с крыльями вне зависимости от количества ножек предпочитают летать. Поэтому для класса «С крыльями» поведение «способ перемещения» описывается так: «может лететь – летает, иначе как насекомое без крыльев». Теперь если мы рассмотрим бабочку как насекомое, то ее поведение «способ перемещения» будет выглядеть как «летает», несмотря на то, что мы рассматриваем бабочку на самом высоком уровне абстракции как насекомое и ничего не знаем о наличии у этого насекомого крыльев.

Добавить комментарий