Чтобы написать еще более сложную
программу, необходим новый подход к программированию - технология
объектно-ориентированного программирования.
OOП включает лучшие
идеи, воплощённые как в структурном программировании, так и в модульном.
«Является еще более структурным программированием, еще более модульным»
(Джеф Дантеманн?).
И, кроме того, ООП сочетает старые принципы с мощными новыми концепциями, которые позволяют оптимально организовывать программы.
Объектно-ориентированное
программирование позволяет разложить проблему на составные части.
Каждая составляющая становится самостоятельным объектом, содержащим свои
собственные коды и данные, которые относятся к этому объекту. В этом
случае программирование в целом упрощается, и программист получает
возможность оперировать гораздо большими по объёму программами.
Таким
образом, ООП – «это методология, основанная на представлении программы в
виде совокупности объектов, каждый из которых является реализацией
собственного класса» (А.Д. Александровский).
Основным понятием ООП является понятие класса.
Класс
– множество объектов, связанных общностью структуры и поведения (класс
содержит описание структуры и поведение всех объектов, связанных
отношением общности). Любой объект является экземпляром класса.
Методом называется процедура или функция, определенная внутри класса.
Базовые принципы ООП
ООП характеризуется тремя базовыми принципами:
1. Инкапсуляция
2. Наследование
3. Полиморфизм
Инкапсуляция
Инкапсуляция
представляет собой комбинирование данных (записи, структуры) с
процедурами и функциями для получения нового типа данных.
Здесь
проводится аналогия с физическими объектами. Конкретные физические
свойства определяются данными различных типов. Кроме того, любой
физический объект характеризуется и своим поведением во внешнем мире.
Поведение объекта задается процедурами и функциями.
Итак, инкапсуляция означает, что методы (коды) и данные одновременно представлены в одной и той же структуре.
Например,
Type
Coordinates = class
x, y : byte;
procedure Init (Xinit, Yinit: byte);
function GetX : byte;
function GetY : byte;
end;
Наследование
Наследование
служит для использования однажды определенного класса в построении
целой иерархии производных классов, каждый из которых наследует доступ к
данным и методам работы с ними всех своих «родителей».
То есть,
можно построить иерархию классов, которая выражает родословное дерево
классов. Классы организованы в единую древовидную структуру с общим
корнем. Свойства и методы определенного класса автоматически доступны
любому классу, расположенному ниже в иерархическом дереве.
Таким
образом, наследование – это особенность ООП, посредством которой класс
может быть определен как расширение уже существующего класса.
Например,
Type
Cursor = class (coordinates)
Hidden : Boolean;
end;
Здесь
класс «курсор» наследует все свойства и методы предварительно
описанного класса «координаты», т.е. для него определены координаты x,
y, а также методы «инициализация», «определить координату х»,
«определить координату y» (см. выше описание класса «координаты»). Кроме
того, класс «курсор» обладает собственным методом - «быть невидимым».
Наследование
позволяет различным типам данных совместно использовать один и тот же
код, приводя к уменьшению его размера и повышению функциональности.
Полиморфизм
Полиморфизм
– это придание действию (методу) одного имени, которое совместно
используется объектами всей иерархии класса, причем каждый объект
реализует это действие своим собственным, подходящим для него образом.
Другими словами, полиморфизм – это использование одинаковых имен методов на разных уровнях иерархии классов.
Достоинства ООП
С
помощью уменьшения взаимозависимости между компонентами программного
обеспечения ООП позволяет разрабатывать системы, пригодные для
многократного использования. Такие компоненты могут быть созданы и
отлажены как независимые программные единицы.
Несколько слов об использовании технологии ООП в среде Delphi на языке Object Pascal.
Для разработки приложений в Delphi используются специальным образом оформленные классы – компоненты.
Компонент
обладает набором свойств и методов. Свойства компонента изменяются либо
на этапе сборки приложения (под воздействием системы), либо программно,
в процессе работы приложения (под воздействием пользователя).
Особым
видом свойства компонента является событие. Процедура обработки события
– это реакция приложения на изменение свойства компонента под
воздействием системы или пользователя (нажатие клавиши, перемещение
курсора и т.п.)
В Object Pascal объекты существуют только в
динамической памяти (т.е. переменная, являющаяся объектом, по сути
является указателем на объект, и содержит адрес объекта).