- •Объектно – ориентированное программирование
- •Недостатки структурного программирования
- •Недостатки структурного программирования
- •Объектно – ориентированное программирование
- •Основные понятия
- •Инкапсуляция.
- •Наследование.
- •Таксономия
- •Полиморфизм («много форм»)
- •Пример полиморфизма
- •Объекты в языке Паскаль
- •Поля объекта
- •Другой вариант
- •Методы
- •Доступ только через методы
- •Секция private
- •Наследование
- •Правила наследования
- •Наследование
- •Наследование
- •Полиморфизм. Раннее связывание.
- •Полиморфизм. Раннее
- •Позднее связывание
- •Конструктор. Позднее
- •Правила виртуальных методов
- •Динамические объекты
- •Пример программы
- •Constructor List.Init; Begin
- •Procedure List.AddNew(Item : TypeElem); Var Temp : NodePtr;
- •Var i:byte;
- •Посторение графика функции
- •Поддержка графики
- •Инициализация графического
- •Инициализация графического режима
- •Система координат
- •Коэффициент сжатия
- •Масштаб
- •Задание осей координат
- •Разметка осей
- •Задание графика
- •Вычисление координат точек
- •Построение графика
- •Выход за пределы экрана
Объекты в языке Паскаль
Запись
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;
