Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Уст.лекции_ООП.doc
Скачиваний:
14
Добавлен:
22.09.2019
Размер:
359.42 Кб
Скачать

2.3 Соотношение основных понятий ооп

Рисунок 2 – Соотношение основных понятий ООП

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

ОБЪЕКТ.МЕТОД

ОБЪЕКТ.СВОЙСТВО.МЕТОД

3 Вопрос

Принципы объектно-ориентированного программирования. Понятие инкапсуляции, наследования и полиморфизма. Привести примеры программного описания.

Принципы, составляющие суть объектно-ориентированного программирования:

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

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

  3. Полиморфизм (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. Концепция полиморфизма обеспечивает применение к объекту именно того метода, который соответствует типу объекта.