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

Страницы работы

Содержание работы

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-синонемы.Деструктор - просто процедура разрушающая экземпляр объектаОни освобождают выделенную для экземпляра объекта память.

Похожие материалы

Информация о работе