Наследование. Любой объект может быть объявлен потомком ранее описанного объекта
Любой объект может быть объявлен потомком ранее описанного объекта. В этом случае он наследует все данные и методы объекта-родителя и может дополнять их своими данными и методами. При объявлении объекта-потомка за словом OBJECT в круглых скобках указывается имя объекта-родителя. У объекта может быть сколько угодно потомков, но только один родитель. При объявлении объекта-потомка TUNE перечислены лишь те данные и методы, которых недостает в объекте-родителе 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 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 SetLineVJsible(vis: Boolean); {Выводит или гасит линию)} end; {Конец описания объекта TLIne_Another} Из этого примера видно главное преимущество наследования: при описании объекта-потомка вам нет необходимости заново описывать уж существующие в объекте-родителе поля и методы. Потомок просто использует их нужным образом для реализации требуемых от него действий все, в чем нуждается потомок,? это описать специфичные для него поля методы, недостающие в объекте-родителе. Наследование распространяется на любые объекты, в том числе и объекты-потомки: если в качестве родителя указано имя объекта, который сам по себе является потомком, новый объект наследует все свойства своего родителя и все свойства своих прародителей. Таким образом, наследование обеспечивает создание дерева родственных объектов. Как и любое другое дерево, дерево объектов имеет "корень"? объект являющийся прародителем всех других объектов иерархии, и "ветви" порожденные от него потомки. По мере передвижения от корня к ветвям и перехода с ветви на ветвь объекты разрастаются в своих размерах, присоединяя к себе все новые и новые поля и методы. Если иерархия объектов хорошо продумана, на каждом ее уровне к объекту-родителю добавляются только необходимые поля и методы, поэтому в таком разрастании на самом деле нет ничего плохого. Более того, компоновщик Турбо Паскаля тщательно проверит откомпилированную программу и удалит из нее все лишнее - в том числе в исполняемую программу (ЕХЕ-файл) не будут включены методы, которые по каким-либо причинам не используются в программе. Механизм наследования? это, пожалуй, самое мощное свойство ООП. Без наследования объекты превращаются в простую комбинацию данных и подпрограмм, не дающую качественных преимуществ по сравнению с традиционными для Паскаля процедурами и модулями. Наоборот, механизм наследования позволяет строить библиотеку по принципу "от простого - к сложному". Вводя с помощью наследования новый объект в свою библиотеку, программист в максимальной степени использует уже созданные (и, возможно, отлаженные) ранее объекты. Такой принцип конструирования программ называется восходящим программированием. В отличие от нисходящего программирования, он не дает возможности поэтапного создания программы. Мелкие детали реализации объектов заслоняют собою генеральный алгоритм, поэтому при использовании ООП рекомендуется сочетание подходов: методами нисходящего программирования генеральный алгоритм расчленяется на ряд относительно крупных и законченных в смысловом отношении фрагментов (модулей), а реализация этих фрагментов может основываться на объектно-ориентированном программировании.
|