Ответы на экзаменационные вопросы № 1-34 по дисциплине "Программирование" (Средства модульного программирования в системе Турбо-Паскаль. ООП. Объекты в динамической памяти), страница 24

Излож. мат-л позв. созд. в очень упрощ. вар-те мод-ь, расчит. зарпл. сотрудн. инститт. разл. катег. Ранее были определ. методы Tsaff.Getsum  и Tteacher. Getsum нам понад еще 2 метод. Tsaff. Showsum и Tteacher. Showsum, вывод на экран. знач фу –ии Getsum                Unit Persons;

Interface

Type Tperson = object

Name:string[6];

Money:real;

Procedure Init(nm:string; m:real);

End;

Tstaff = object(Tperson)

Bonus:ral;

Procedure Init(nm:string;m,b:real);

Function Getsum:real;

Procedure Showsum;

End;

Tteacher = object(Tstaff)

Hours:word;

Procedure Init(nm:string;m,b:real;h:word);

Function Getsum:real;

Procedure Showsum;

End;

Implementetion

Procedure Tperson.Init;

Begin

Name:=nm;

Money:=m;

End;

Procedure Tstaff.Init;

Begin

Tperson(nm,m);

Bonus:=b;

End;

Procedure Tteacher.Init;

Begin

Tstaff.Init(nm.m.b);

Hours:=h;

End;

Function  Tstaff .Getsum;

Begin

Getsum:=money+bonus;              

End;

Function  Tteacher. Getsum;

Begin

Getsum:= Tstaff .Getsum + 0.01* hours* money;

End;

Procedure Tstaff . Showsum;

Begin

Writeln(getsum);

End;

Procedure Tteacher. Showsum;

Begin

Writeln(getsum);

End;

End.

Прогр., использ. од. Persons, мож. выгляд., наприм. след образ.

Uses Persons;

Var saff:tstaff; teacher:tteacher;

Begin

Staff.Init(‘Иванов’, 300,100);

Teacher.Init(‘Петров’, 200,200,100);

Staff.Showsum

End.

В наш. прим. был опред. род. тип Tperson, не используем. в дальнейш. для опис. перемен. Такие типы наз. абстрактн.Понятно, что в дан. конкр. случ. этот тип оказ. беспол-м, иерарх. объектов можно было нач. с Tstaff. Однока в общ. слу. использов. абстрактн. типов мож. упрост. описан.

(Срытие данных)

Если объект сд. в мод., то доступ к полям и методам объекта извне,т.е. чаще всего из использ. модуль программы, можно огранич. Для этого использ. лиректива private, окрывающ. секцию скрытых полей и методов.Те элементы объекта, кот были перечислены в этой секции, не дост. пользоват., получивш. TPU файл. Часто так делают, чтобы предупред. ошибочн. действия пользоват. с объекн. данными.Скрытые поля и методы доступны лишь в рамках той програм. еден.(прогр или мод), где описан соов. объект.

Директ. public отменяет действ. директ. private, поэт. все элем. объекта, след. за этой дир., доступы в люб. прогр. еден.

Директ. private и public могут произв. образ. чередов. в предел.  одн. объекта.

Type Myobject = object

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

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

Private

Поля;                    {сткрытые.}

Методы;               {сткрытые.}

Public

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

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

end;

Директ. Public закрыв. поля и методы, описан. ниже (до public), от пользоват. модуля, оставл. их доступн. для всех методов дан. модуля

29.ООП. Наследование, его назначение. Наследование полей. Наследование и

переопределение методов.

Пусть все сотр. инстит. в соотв. со спос. начислен. заработн. платы дел.-ся на 2 категор.: просто сотрудн., для кот. размер ежемес. выплат сост.. из велич., задаваем. полем money в типе Tperson, и некот. премии, и препод., для кот. ежемес. выплаты превыш. зарплату сотрудн. на некот. велич., завис. от кол-ва аудиторных часов.

Таким образ., нам понадоб. еще 2 типа: Tstaff, для расч. зарплаты сотрудн. с доп. к типу Tperson полем Bonus, и Tteacher, с еще одним полем – hours. Если бы мы имели дело с обычн. Turbo Паскалем, то должны были бы ввести новый тип, Tstaff, и пределить его след. образом

Type Tstaff = record

Staff:Tperson;

Bonus:real;

End;

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

Type Tstaff = object(Tperson)

Bonus:real;

End;