Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
учебник_Часть_2.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
1.12 Mб
Скачать

X, y : integer; {координаты позиции}

Procedure Init(XN,YN:integer); {заголовки

блока порождения объекта}

Procedure Locate(Var XL,YL:integer);

{заг-ок блока получения координат позиции}

end;

procedure Pozicia.Init; {можно не писать параметры}

begin {поля x, y объекта глобальны для метода}

x:=XN;

y:=YN

end;

procedure Pozicia.Locate;

begin

xL:=X;

yL:=Y

end;

Var

d,m,t:integer;

p: pozicia; {описание переменной-объекта}

XX,yy:array [1..1000] of integer;

begin {основная программа}

d:=detect;

Randomize; {инициируем графический режим и генератор

initGraph (d, m, `c:\bp\bgi`); случайных чисел}

clear device; {очистка экрана}

for i :=1 to 1000

do begin

P.Init(Random(GetMax(X)),Random (GetMax(Y));

{порождение объекта}

P.Locate (xx[i], yy[i]); {запоминаем её

координаты в массиве}

end;

Cleardevice;

end.

Блоки-методы размещаются в произвольном порядке. Совпадение их имён, если методы принадлежат разным типам, не запрещено, следовательно, в заголовках методов их имена снабжаются префиксом – именем типа. Например: pozicia.init, krug.init.

Обращение к методу нужно начинать с префикса – имени действующего объекта. Например: P.Locate (параметры).

В обоих случаях разделителем служит (.).

Допустимо обращение с полями объекта как с полями записи: P.z, P.y, но нежелательно.

Объекты не запрещается использовать в блоках, не являющихся методами. Но такое применение должно быть исключением, так как противоречит идее объектов.

Доступ к полям объектов можно принудительно ограничивать. Чтобы поля были доступны лишь методам данного модуля, в объектном типе до описания группы полей записать Private, а после неё – Public. Это делают, чтобы предупредить ошибочные действия с объектными данными пользователя библиотеки объектов.

Задание для самостоятельной работы:

1. Описать тип объектов – окружностей с параметрами: координаты центра, радиус, цвет, и методами:

а) порождение окружности;

б) изменение её цвета;

в) изменение её радиуса.

2. Описать массив из 50 объектов и разработать программу, порождающую 50 разноцветных окружностей:

а) со случайным расположением;

б) «пульсирующих» – меняющих цвет и радиус.

Наследование позволяет создавать новые объекты, изменяя или дополняя свойства прежних.

Этот принцип относится только к классам объектов.

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

Наследование бывает двух видов:

  1. одиночное, когда каждый класс имеет одного и только одного предка;

  2. множественное, когда каждый класс может иметь любое количество предков.

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

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

Родительские (предки) – тип объектов, которые используются как носители общих свойств и методов для семейства типов – потомков, позволяя избежать дублирования элементов описания.

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

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

Правила наследования

1. Объект-наследник (потомок) получает все поля и методы предка.

2. Потомок может (хотя и не обязательно) добавить: собственные поля, методы или перекрыть своими методами одноимённые унаследованные методы.

3. Любой тип–потомок может быть родительским для других типов. В этом случае типы наследуют поля всех своих предков .

4. Доступ к полям и методам родительских типов в описании любых типов – потомков выполняется так, как будто они описаны в самом типе-потомке.

5. Ни в одном из типов потомков не должны использоваться имена полей и формальных параметров, совпадающих с указанными в типах–предках. Идентификаторы методов могут совпадать.

6. Имена методов в родительских типах-потомках могут совпадать. В этом случае метод дочернего типа «перекрывает» метод родительского. При этом обращение к родительскому методу остаётся возможным с помощью префикса – имени родителя (Position. Init, если у Position есть потомок, у которого также имеется метод Init).

З а м е ч а н и е. Значения полей не наследуются. Наследование – это отношение объектных типов, а не объектов.