Название: Алгоритмы и программы (Афанасьева Т. В.)

Жанр: Информационные системы и технологии

Просмотров: 1329


13.3. наследование

 

Достоинства объектно–ориентированного программирования про- являются только в случае, если все объекты расположить в виде иерархической структуры, в которой отражены наследование свойств родительских (выше расположенных) объектов дочерними (ниже расположенными) объектами, или потомками.

Наследование – это такое отношение между объектами, когда дочерний объект повторяет структуру и поведение другого объекта (родителя).

Наследование – это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование,   называется   базовым,   родительским   или   суперклассом. Новый класс – потомком, наследником или производным классом.

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

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

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

в объекте–родителе TPOINT, остальные TLINE автоматически наследует от своего родителя.

 

Пример 13.3. type

TLine = object (TPoint)

X, Y Integer; {Координаты начала линии} Color word; {Цвет линии)

Visible Boolean; (Признак светимости) XE.YE: Integer; {Координаты второго конца) Procedure SetLocation(NewX, NewY: integer);

{Задает новое положение начала линии) Procedure SetColor(NewColor: word);

{Устанавливает цвет линии) Procedure SetVIsible(Vis: Boolean);

{Выводит или гасит линию}

Procedure GetLocation(var XLoc, YLoc: integer);

{Возвращает координаты начала линии} Function GetColor: word;

{возвращает цвет линии} Function GetVisible: Boolean;

{Возвращает признак светимости линии}

Procedure SetLIneLocationfxl.X1,Y1,x2 ,y2: integer);

{Задает новое положение линии на экране}

Procedure GetLineLocatlon(var x11,y1l,x2l,y2l):integer);

{Возвращает координаты линии} Procedure SetLineVisible(vis: Boolean);

{Выводит или гасит линию)}

end; {Конец описания объекта TLIne }

 

Из этого примера видно главное преимущество наследования: при описании объекта-потомка вам нет необходимости заново описывать уж существующие в объекте-родителе поля и методы. Потомок просто использует их нужным образом для реализации требуемых от него действий; все, в чем нуждается потомок,  это описать специфичные для него поля методы, недостающие в объекте-родителе.

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

Как  и  любое  другое  дерево,  дерево  объектов  имеет  «корень»  

объект,  являющийся  прародителем  всех  других  объектов  иерархии,  и

«ветви» – порожденные от него потомки. По мере передвижения от корня к ветвям и перехода с ветви на ветвь объекты разрастаются в своих размерах, присоединяя к себе все новые и новые поля и методы. Если иерархия объектов хорошо продумана, на каждом ее уровне к объекту- родителю добавляются только необходимые поля и методы.

Механизм наследования  это, пожалуй, самое мощное свойство ООП. Без наследования объекты превращаются в простую комбинацию данных и подпрограмм, не дающую качественных преимуществ по сравнению с традиционными для Паскаля процедурами и модулями.