Чтобы написать еще более сложную 
программу, необходим новый подход к программированию - технология 
объектно-ориентированного программирования.  
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 объекты существуют только в 
динамической памяти (т.е. переменная, являющаяся объектом, по сути 
является указателем на объект, и содержит адрес объекта).


