
- •Объектно-ориентированное программирование
- •1 Вопрос
- •1.2 Достоинства и недостатки ооп
- •1.3 Пример описания объектного типа
- •2 Вопрос
- •2.1 Основные понятия ооп
- •2.2 Примеры программного описания
- •2.3 Соотношение основных понятий ооп
- •3 Вопрос
- •4 Вопрос
- •4.1 Правила наследования
- •5 Вопрос
- •5.1 Пример использования директив
- •6 Вопрос
- •6.1 Пример описания виртуального метода
- •7 Вопрос
- •7.1 Пример использования
- •8 Вопрос
- •8.2 Пример объявления
- •9 Вопрос
- •9.1 Глобальная обработка исключений
- •9.2 Локальная обработка исключений
- •9.3 Пример использования операторов
- •10 Вопрос
- •1.4 Закрытие файла
- •1.5 Ввод из файла
- •1.6 Определение конца файла
2.3 Соотношение основных понятий ооп
Рисунок 2 – Соотношение основных понятий ООП
В объектно-ориентированном программировании используется следующий формат записи работы с объектами:
ОБЪЕКТ.МЕТОД
ОБЪЕКТ.СВОЙСТВО.МЕТОД
3 Вопрос
Принципы объектно-ориентированного программирования. Понятие инкапсуляции, наследования и полиморфизма. Привести примеры программного описания.
Принципы, составляющие суть объектно-ориентированного программирования:
Инкапсуляция (encapsulation). Свойство классов объединять данные и методы обработки данных, а также скрывать внутреннюю программную реализацию самого класса.
Наследование (inheritance) - это возможность определения нового класса объектов как расширения уже существующего посредством сохранения полей и методов предка и описания лишь новых полей и методов.
Полиморфизм (polymorphism) - возможность существования в разных классах одинаково названных методов, но выполняющих различные функции.
Инкапсуляция – это важнейший принцип объектно-ориентированного подхода. Означает сочетание структур данных с методами их обработки в абстрактных типах данных – классах объектов, т.е. термин «инкапсуляция» означает замыкание в общей оболочке Object…end всех составляющих описаний.
Пример «замыкания» в общей оболочке:
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Edit1: TEdit;
ImageList1: TImageList;
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
Наследование означает, что если нужно создать новый класс, лишь немного отличающийся от старого, то совершенно нет необходимости в переписывании заново уже существующих полей и методов. Можно объявить, что новый класс TNewObject
TNewObject = class(TOldObject);
является потомком или дочерним классом старого класса TOldObject, называемого предком или родительским классом, и добавить к нему новые поля, методы и свойства — иными словами, то, что нужно при переходе от общего к частному.
Примечание
Примером, иллюстрирующим наследование, является иерархия классов VCL.
В Object Pascal все классы являются потомками класса TObject. Поэтому, если нужно создать дочерний класс прямо от TObject, то в определении его можно не упоминать. Следующие два выражения одинаково верны:
TMyObject = class(TObject); TMyObject = class;
Полиморфизм – это свойства различных объектов выполнять одно и тоже действие по своему, т.е. способность объектов реагировать на запрос (вызов метода) сообразно своему типу. При этом одно и тоже имя метода может использоваться для различных классов.
По определенным свойствам любого элемента определенной категории можно установить, что он принадлежит к этой категории. Сама категория определяется общими свойствами, которые имеют все экземпляры этой категории.
Пусть определены три класса, один из которых является базовым для двух других:
tуре
// базовый класс
TPerson = class
fname: string; // имя
constructor Create(name:string);
function info: string; virtual;
end;
// производный от TPerson TStud = class(TPerson)
fgr:integer; // номер учебной труппы
constructor Create(name:string;gr:integer);
function info: string; override; end;
// производный от TPerson TProf = class(TPerson)
fdep:string; // название кафедры
constructor Create(name:string;dep:string);
function info: string; override; end;
В каждом из этих классов определен метод info. В базовом классе при помощи директивы virtual метод info объявлен виртуальным. Объявление метода виртуальным дает возможность дочернему классу произвести замену виртуального метода своим собственным. В каждом дочернем классе определен свой метод info, который замещает соответствующий метод родительского класса (метод порожденного класса, замещающий виртуальный метод родительского класса, помечается директивой override).
function TPerson.info:string;
begin
result := '';
end;
function TStud.info:string;
begin
result := fname + ' гp.' + IntTostr(fgr);
end;
function TProf.info:string;
begin
result := fname + ' каф.' + fdep;
end
Во время работы программы каждый элемент массива может содержать как объект типа Tstud, так и объект типа TProf. Концепция полиморфизма обеспечивает применение к объекту именно того метода, который соответствует типу объекта.