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 выделяет в динамической памяти область, достаточную для хранения экземпляра типа,определенного указателем, и возвращает адрес этой области в указателе.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.