Определение объектов

Оглавление

Введение. Ошибка! Закладка не определена.

Определение объектов. 1

Инкапсуляция. 2

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

Полиморфизм.. 6

Контрольные вопросы.. 8

Лекция №28

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

Объекты представляют собою упрощенное, идеализированное описание реальных сущностей предметной области. Если соответствующие модели адекватны решаемой задаче, то работать с ними оказывается намного удобнее, чем с низкоуровневым описанием всех возможных свойств и реакций объекта.

Объектно-ориентированное программирование (ООП) – это методика разработки программ, в основе которых лежит понятие объекта как некоторой структуры, соответствующей объекту реального мира, его поведению. Задача, решаемая с использованием методики ООП, описывается в терминах объектов и операций над ними.

Определение объектов

Address : string[40]; Procedure Init(n,a : string); End; Var Student : TPerson;

Type TPerson =Object

Name : string[20];

Address : string[40];

Procedure Init(n,a:string);

Procedure Show;

Function GetAddress:string;

End;

Var Person : TPerson;

В примере объявлены два метода-процедуры Init и Show и метод-функции GetAddress. Метод Init предназначен для инициализации полей объекта, метод Show предназначен для вывода содержимого полей объекта на экран, метод GetAddress обеспечивает доступ к полю Address.

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

Переменную, описываемую типом ИмяОбъекта, называют экземпляром объекта:VAR ЭкземплярОбъекта : ИмяОбъекта;В программе может быть сколько угодно экземпляров одного объекта. Вызов метода – это оператор (или выражение) вида:<ИмяЭкземпляраОбъекта>.<ИмяМетода>[<СписокФактическихПараметров>]

Например,

Procedure TPerson.Init(n,a:string);

Begin

Name:=n;

Address:=a;

End;

При этом в заголовок метода можно не включать список формальных параметров. Наряду с обычными параметрами в описании методов можно использовать и поля объектов. Все данные объекта становятся автоматически глобальными по отношению к методам. Как правило, к данным объекта извне непосредственно не обращаются. Имена формальных параметров метода и имена полей данных этого объекта не должны совпадать.

Например, в результате выполнения Student.Show; будет применен метод Show, в результате чего на экран будет выведено содержимое полей объекта Student.

Вместо прямого доступа к полям следует использовать методы. Например,

Type TPerson =Object

Procedure Init(n,a:string);

Function GetName:string;

Function GetAddress:string;

Procedure SetAddress(NewAddress:string);

End;

В объявлении типа TPerson включены объявления методов. Метод Init обеспечивает инициализацию объекта. Метод SetAddress позволяет изменить значение поля Address, методы GetName и GetAddress – получить значения соответствующих полей.

Инкапсуляция

Для защиты полей объекта от прямого доступа используют директиву private (частный, закрытый от других).Ее помещают перед объявлением полей, прямой…

Type

TPerson =Object

Procedure Init(n,a:string);

Function GetName:string;

Function GetAddress:string;

Procedure SetAddress(NewAddress:string);

Private

Address : string; End; Директива private также используется для ограничения использования некоторых методов объекта. Поля и методы,…

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

Полиморфизм

Type

TPerson =Object

FName : string[25];

FAddress : string[25];

End;

TStud =object( TPerson)

FGroup : integer;

Procedure Print;

End;

TProf =object(TPerson)

FKaf : integer;

Procedure Print;

End;

Var Pperson: ^TPerson;Pstud : ^TStud;Pprof : ^TProf;Для приведенного определения следующие инструкции присваивания являются верными:

Pperson:= Pstud;

Pperson:= Pprof;

Описанное свойство указателей на объектные типы позволяет организовать список студентов и преподавателей как массив указателей на объектный тип TPerson, например, так: Spisok : array[1..n] of ^TPerson;

Тогда инструкция For i:=1 to n do Spisok[i]^.print; выведет на экран список преподавателей и студентов. Элемент массива может быть указателем на TStud или на TProf. Поэтому нельзя заранее сказать какой из методов будет вызван – TStud.Print или TProf.Print. Решение о выборе метода принимается во время выполнения программы.

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

Ниже приведена программа, иллюстрирующая понятие «полиморфизм». Программа сначала формирует список, состоящий из объектов типа TStudent и Tprofessor, затем, применяя метод Print к элементам массива, выводит этот список на экран.

Program PolVir;

Const lenlist =10; {длина списка}

Type TPerson =Object

FName : string[30];

FAddress : string[40];

Procedure Init(Name, Address : string); {конструктор объекта}

Procedure Done; {деструктор объекта}

Procedure Print;

End;

TStudent =object( TPerson)

FGroup : integer;

Procedure Init(Name, Address : string; Group: integer);

Procedure Done; Procedure Print;

End;

TProfessor =object( TPerson)

FKafedra : string[30];

Procedure Init(Name, Address, Kafedra : string);

Procedure Done; Procedure Print;

End;

PStudent=^Tstudent;

PProf=^TProfessor;

Procedure TPerson.Init(Name, Address: string);

Begin

FName:=Name;

FAddress:= Address;

End;

Procedure TPerson.Done;

Begin

End;

Procedure TPerson.Print;

Begin

Writeln(FName);

Writeln(FAddress);

End;

Procedure TStudent.Init(Name, Address: string;Group:integer);

Begin

TPerson.Init(Name,Address);

FGroup:=Group;

End;

Procedure TStudent.Done;

Begin

End;

Procedure TStudent.Print;

Begin

TPerson.Print;

Writeln(‘гр. ’,FGroup);

End;

Procedure TProfessor.Init(Name, Address, Kafedra: string);

Begin

TPerson.Init(Name,Address);

FKafedra:=Kafedra;

End;

Procedure TProfessor.Done;

Begin

Inherited Done;

End;

Procedure TProfessor.Print;

Begin

TPerson.Print;

Writeln(‘каф. ’,Fkafedra);

End;

Var list : array[1..lenlist] of ^TPerson;

I: integer;

Begin {инициализация списка}

For i:=1 to lenlist do list[i]:=NIL;

{создать пять объектов и поместить в список}

List[1]:=new(PStudent,Init(‘Михаил Иванов’,’Лесной пр., д.29’,238);

List[2]:=new(PStudent,Init(‘Иван Жук’,’Весенняя ул., д.2, кв.17’,133);

List[3]:=new(PProf,Init(‘Игорь Манин’,’Некрасова ул., д.45, кв.8’,’ПОИТ’);

List[4]:=new(PProf, Init(‘Нина Непомнящая’,’Ромашковая ул., д.12,кв.10’,’ПОИТ’);

List[5]:=new(PStudent,Init(‘Кузьма Прутков’,’Долгобродская ул., д.2, корп.2, кв.17’,473);

{вывести объекты – элементы списка}

For i:=1 to lenlist do

If list[i] <> NIL then list[i]^.print;

{уничтожить объекты}

For i:=1 to lenlist do

If list[i] <> NIL then

Begin

Dispose(list[i],Done); {разрушение объекта}

List[i]:=Nil;

End;

Readln;

End.

Контрольные вопросы

  1. Опишите основные понятия – объект, класс.
  2. Дайте определение понятиям «инкапсуляция», «полиморфизм», «наследование».
  3. Приведите примеры.