Область действия свойств и методов объектного типа при использовании наследования, страница 2

50) Использование наследования необъходимо если процедура построения фигур работает с фиксированным набором объектов,описаных в модуле или в самой программе,а пользователь хочет определить новый тип фигуры. Для этого применяются виртуальные методы.

Метод становится виртуальным, если за его объявлением в типе объекта стоит зарезервированное слово virtual. необходимо помнить, что если метод объявлен в родительском типе как virtual, то все методы с аналогичными именами в дочерных типах также должны объявляться виртуальными, во избежании ошибки компилятора.

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

51)Динамические объекты распологаются в куче,а в сегменте данных распологается только адрес и смещение этого объекта в куче и в сегменте данных он занимает 4 байта.Таким образом при создании большой программы рекомендуется пользоваться динамическими объектами.

Одним из способов размещения объектов в памяи яв-ся использованиепроцедуры NEW,применяемой для работы с указателями:

var

sum:real;

p:^tperson;

......

new(p);

Процедура New выделяет в динамической памяти область, достаточную для хранения экземпляра типа,определенного указателем, и возвращает адрес этой области в указателе.

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

P^.init('Иван Петров','25-10-1994',40000);

Подобно доугим типам данных, размещаемые в динамической памяти объекты могут удаляться в случае необходимости с помощью процедуры Dispose:

Dispose(p)- удаление ненужного динамического объекта,освобождение занимаемой им динамической памяти.

55)Область действия свойств и методов объектного типа при использовании наследования.

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

Областью действия свойств и методов объектного типа при наследовании является сам предок и потомок. Методы которые в объектном типе(потомке) одинаково называются с методами предка но выполняют разные функции должны быть помечены св-вом virtual,а если в состав объекта входят виртуальные методы обязан быть хоть один конструктор(constructor)

Tpoint= object

procedure show; virtual;

procedure move(dx,dy);

end;

tcircle=object(Tpoint)

procedure show; virtual;

end;

56)переменные объектного типа могут быть статические и динамические т.е. распологаться в сегменте данных(статические) или в куче(динамические). В последнем случае мы могли бы использовать такую программу:

Unit graphapp; (для легкости примера создаём модуль)

interface

type

tgraphapp=object

procedure init;

procedure run;

end;

implementation

..........

end.

program gra; (программа пример использования динамических методов)

uses graphapp;

type

pgraphapp= ^tgraphapp;

var

app:pgraphapp;

begin

app:=New(pgraphapp,init);

app^.run;

end;

Для инициализации динамической переменной App используется вызов функции NEW. В этом случае первым парамеиром указывается имя типа инициализируемой переменной, а второй осуществляет вызов метода-конструктора,который нужен для настройки таблицы виртуальных методов.

57)переменные объектного типа могут быть статические и динамические т.е. распологаться в сегменте данных(статические) или в куче(динамические). В отличии от динамических объектов статические распологаются полностью в сегменте данных, а это плохо когда программа большая и памяти может не хватить.Динамические объекты распологаются в куче,а в сегменте данных распологается только адрес и смещение этого объекта в куче и занимает 4 байта.Таким образом при создании большой программы рекомендуется пользоваться динамическими объектами.

Одним из способов размещения объектов в памяи яв-ся использованиепроцедуры NEW,применяемой для работы с указателями:

var

sum:real;

p:^tperson;

......

new(p);

Процедура New выделяет в динамической памяти область, достаточную для хранения экземпляра типа,определенного указателем, и возвращает адрес этой области в указателе.