Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Проги, ЛЕКЦИИ / Программирование Лекция 13 ооп.pps
Скачиваний:
40
Добавлен:
12.02.2015
Размер:
289.28 Кб
Скачать

Объекты в языке Паскаль

Запись

Type

TEmployee = record Name: string[25]; Title: string[25];

Rate: Real; end;

Объект

Type

TEmployee = object Name: string[25]; Title: string[25];

Rate: Real; end;

Поля объекта

var MyEmployee: TEmployee; with MyEmployee do

begin

Name := 'Sanderson, Arthur'; Title := 'Word processor'; Rate := 9.45;

end;

Плохая техника программирования

Другой вариант

procedure InitTEmployee (var Worker:TEmployee; NewName, NewTitle: String; NewRate: Real);

begin

with Worker do begin

Name := NewName ; Title := NewTitle; Rate := NewRate;

end;

 

end;

 

var

AnEmployee: TEmployee;

Begin

 

InitTEmployee (AnEmployee,'Sara Adams’, ‘Account manager’, 150);

End.

Методы

type TEmployee = object

Name, Title: string[25]; Rate: Real;

procedure Init (NewName, NewTitle: string[25];NewRate: Real);

end;

procedure TEmployee.Init (NewName, NewTitle: string[25];

 

NewRate: Real);

 

begin

Name := NewName; Title := NewTitle;

Rate := NewRate;

end;

var

AnEmployee: TEmployee;

Begin

AnEmployee.Init('Sara Adams’, ‘Account manager’, 150);

End.

Доступ только через методы

type

TEmployee = object

 

Name, Title: string[25];

 

Rate: Real;

 

procedure Init (AName, ATitle: String;

 

ARate: Real);

 

function GetName : String;

 

function GetTitle : String;

 

function GetRate : Real;

end;

Function TEmployee.GetName: String; Begin GetName := Name; end;

Секция private

type NewObject = object

поля; { общедоступные }

методы;

{ общедоступные }

private

поля; { приватные }

методы;

{ приватные }

end;

 

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

Правила наследования

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

Доступ к полям и методам родительских типов в рамках описания любых дочерних типов выполняется так, как будто-бы они описаны в самом дочернем типе.

Ни в одном дочернем типе не могут быть использованы идентификаторы полей родительских типов.

Дочерний тип может доопределить произвольное число собственных методов и информационных полей.

Любое изменение текста в родительском методе автоматически оказывает влияние на все методы порожденных дочерних типов, которые его вызывают.

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

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

Type THourly = object(TEmployee) Time: Integer;

procedure Init(AName, ATitle: string;ARate:Real, Atime: Integer); function GetTime : Integer;

end;

Function

THourly.GetTime: Integer; Begin GetTime := Time; end;

Procedure

THourly.Init(AName, ATitle: string; ARate: Real, Atime: Integer);

begin TEmployee.Init(AName, ATitle, ARate); Time := ATime;

end;

Var Worker:THourly; Begin

With Worker do begin

Init(‘Ivanov’,’assistant’,20.5,12);

Writeln(GetName,GetTitle,GetRate,GetTime);

End;

End.

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

Родительский

Тип

Родительский Parent Тип

Parent

Потомок

Temp(Parent)

A (Parent)

Полe X

Поле NewA

 

Потомок

Потомок

Потомок

A(Parent)

B(Parent)

C(Parent)

Поле NewA

Поля NewB, X

Поля NewС, X

Потомок

Потомок

B(Temp)

C(Temp)

Поля NewB

Поля NewС

Присваивание значений всех полей Предок:=Потомок Var Va:A; Vb:B; Vc:C; Vp:parent; Begin Vp:=Vb; Vp:=Vc; Va:=Vc;