41) Область действия свойств и методов объектного типа при использовании наследования.
Если при написании программы вы хотите создать 2 объекта,например,создающих на экране движущуюся точку и квадрат и не хотите по несколько раз писать одинаковые свойства или методы,то лучше эти свойства или методы "унаследовать" от другого обекта.Тот объектный тип у кого наследуют методы или св-ва называется предком,тот который наследует-потомком.
Областью действия свойств и методов объектного типа при наследовании является сам предок и потомок. Методы которые в объектном типе(потомке) одинаково называются с методами предка но выполняют разные функции должны быть помечены св-вом virtual,а если в состав объекта входят виртуальные методы обязан быть хоть один конструктор(constructor)
Tpoint= object
procedure show; virtual;
procedure move(dx,dy);
end;
tcircle=object(Tpoint)
procedure show; virtual;
end;
42)переменные объектного типа могут быть статические и динамические т.е. распологаться в сегменте данных(статические) или в куче(динамические). В последнем случае мы могли бы использовать такую программу:
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. В этом случае первым парамеиром указывается имя типа инициализируемой переменной, а второй осуществляет вызов метода-конструктора,который нужен для настройки таблицы виртуальных методов.
43)переменные объектного типа могут быть статические и динамические т.е. распологаться в сегменте данных(статические) или в куче(динамические). В отличии от динамических объектов статические распологаются полностью в сегменте данных, а это плохо когда программа большая и памяти может не хватить.Динамические объекты распологаются в куче,а в сегменте данных распологается только адрес и смещение этого объекта в куче и занимает 4 байта.Таким образом при создании большой программы рекомендуется пользоваться динамическими объектами.
Одним из способов размещения объектов в памяи яв-ся использованиепроцедуры NEW,применяемой для работы с указателями:
var
sum:real;
p:^tperson;
......
new(p);
Процедура New выделяет в динамической памяти область, достаточную для хранения экземпляра типа,определенного указателем, и возвращает адрес этой области в указателе.
46) Метод- это процедура или функция, включенная в объект таким образом,что экземпляр данного типа становится доступным для нее изнутри. При определении метода он дополнительно идентифицируется именем типа.
Свойство- это данные(сами переменные).К свойству объекта можно обратиться как и к полю обычной записи, с помощью оператора with либо используя префикс с именем объекта. Например:
Student.ball:=4.5;
with student do begin
name:= 'Иванов Иван Иванович';
date:='25-06-1999';
end
Основное различие между переменными типа object и record в том,что в типе record могут быть только "свойства"(переменные) разных типов,а в Object по мимо "свойств" также используются "методы"(процедуры и функции).В record можно оперделить только свойства объекта(вес,размер,название),а в object можно запрограммировать также действия выполняемые над объектом(ДВИЖЕНИЕ,ПОКАЗ НА ЭКРАНЕ,СТИРАНИЕ С ЭКРАНА).Также отличие в том что в объектах есть свойство НАСЛЕДОВАНИЯ свойств и методов из других объектов.
49) Для описания методов в Паскале имеется особый вид процедур- конструкторы и деструкторы. Конструкторы предназнвчены для создания конкретного экземпляра объекта,ведь объект- это тип данных т.е. шаблон по которому можно создать сколько угодно рабочих экземпляров данных объектного типа..Зарезервированное слово Constructor,используемое в заголовке конструктора вместо procedure,предписывает компилятору создать особый код пролога,с его помощью настраивается так называемая таблица виртуальных методов(в этой таблицебудут хранится адреса точек входа в каждый виртуальный метод объекта). Если в объекте нет виртуальных методов ,в нем может не быть ни одного конструктора и если хотя бы один метод описан как виртуальный (с последующим словом Virtual) в состав объекта должен входить хотя бы один конструктор и обращение к конструктору должо предшествовать обращению к любому виртуальному методу.
В отличии от конструктора деструктор не связан с какими то специфичными действиями: для компилятора слова destructor и procedure-синонемы.Деструктор - просто процедура разрушающая экземпляр объектаОни освобождают выделенную для экземпляра объекта память.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.