Атомная энергетика. Ядерные реакторы АЭС. Атомный флот. Ядерное оружие |
|||
| РБМК-1000 | |||
| Гражданский суда | |||
| Авиация | |||
Высшая математика |
|||
| Задачи | |||
| Практикум | |||
| Карта сайта | |||
Любой объект может быть объявлен потомком ранее описанного объекта. В этом случае он наследует все данные и методы объекта-родителя и может дополнять их своими данными и методами. Например, объект TUNE, описывающий линию, можно объявить следующим образом:
Type
TPoint = object
…
end;{Конец
описания объекта TPoint}
TLine = object(TPoint)
XE, YE: Integer;
{Координаты
второго конца}
Procedure SetLineLocation(x1,y1,x2,y2:Integer);
{Задает
новое положение линии на экране}
Procedure GetLineLocation(var x1l,у11,х21,у21:
Integer);
{Возвращает координаты линии}
Procedure SetLineVisible(Vsi:
Boolean);
{выводит или гасит линию}
end; {Конец описания объекта TLINE)
При объявлении объекта-потомка за словом OBJECT в круглых скобках указывается имя объекта-родителя. У объекта может быть сколько угодно потомков, но только один родитель.
При объявлении объекта-потомка TLINE перечислены лишь те данные и методы, которых недостает в объекте-родителе TPOINT, остальные TLINE автоматически наследуют от своего родителя.
Таким образом, описание объекта-потомка TLINE эквивалентно такому описанию объекта TLINE_ANOTHER:
Type
TLine_Another = object
X, Y: Integer; {Координаты начала линии}
Color:
word; {Цвет линии}
Visible: Boolean;{Признак светимости}
XE,YE: Integer;
{Координаты второго конца}
Procedure SetLocation(NewX, NewY: Integer);
{Задает новое положение начала линии}
Procedure SetColor(NewColor: word);
{Устанавливает
цвет линии}
Procedure SetVisible(Vis: Boolean);
{Выводит
или гасит линию}
Procedure GetLocationf(var XLoc, YLoc: Integer);
{Возвращает координаты начала линии}
Function GetColor: word;
{Возвращает цвет линии}
Function GetVisible:
Boolean;
{Возвращает признак светимости линии}
Procedure
SetLineLocatlon(x1,y1,x2,y2: Integer);
{Задает новое положение линии
на экране}
Procedure GetLlneLocatlon(var x1l,у11,x2l,y2l:
Integer):
{Возвращает координаты линии}
Procedure SetLineVisible(Vis:
Boolean);
{Выводит или гасит линию}
end; {Конец описания объекта
TLine_Another}
Из этого примера видно главное преимущество наследования: при описании объекта-потомка Вам нет необходимости заново описывать уже существующие в объекте-родителе поля и методы. Потомок просто использует их нужным образом для реализации требуемых от него действий. Все, в чем нуждается потомок, — это описать специфичные для него поля и методы, недостающие в объекте-родителе.
Наследование распространяется на любые объекты, в том числе и на объекты-потомки: если в качестве родителя указано имя объекта, который сам по себе является потомком, новый объект наследует все свойства своего родителя и все свойства своих прародителей. Таким образом, наследование обеспечивает создание дерева родственных объектов.
Как и любое другое дерево, дерево объектов имеет «корень» — объект, являющийся прародителем всех других объектов иерархии, и «ветви» -порожденные от него потомки. По мере передвижения от корня к ветвям и перехода с ветви на ветвь объекты разрастаются в своих размерах, присоединяя к себе все новые и новые поля и методы. Если иерархия объектов хорошо продумана, на каждом ее уровне к объекту-родителю добавляются только необходимые поля и методы, поэтому в таком разрастании на самом деле нет ничего плохого. Более того, компоновщик Турбо Паскаля тщательно проверит откомпилированную программу и удалит из нее все лишнее — в том числе в исполняемую программу (ЕХЕ-файл) не будут включены методы, которые по каким-либо причинам не используются в программе.
Механизм наследования — это, пожалуй, самое мощное свойство ООП. Без наследования объекты превращаются в простую комбинацию данных и подпрограмм, не дающую качественных преимуществ по сравнению с традиционными для Паскаля процедурами и модулями. Наоборот, механизм наследования позволяет строить библиотеку по принципу «от простого — к сложному». Вводя с помощью наследования новый объект в свою библиотеку, программист в максимальной степени использует уже созданные (и, возможно, отлаженные) ранее объекты. Такой принцип конструирования программ называется восходящим программированием. В отличие от нисходящего программирования, он не дает возможности поэтапного создания программы. Мелкие детали реализации объектов заслоняют собою генеральный алгоритм, поэтому при использовании ООП рекомендуется сочетание подходов: методами нисходящего программирования генеральный алгоритм расчленяется на ряд относительно крупных и законченных в смысловом отношении фрагментов (модулей), а реализация этих фрагментов может основываться на объектно-ориентированном программировании.
Другое применение ООП — это разработка коммерческих библиотек программирования. Прекрасным примером такого рода применения ООП является уже упоминавшаяся библиотека Turbo Vision.
| Основные понятия об информации и информатике |