При помощи объекта типа ObjPos (см. рис. 13.1) определяется положение какого-либо символа в тексте на дисплее, но сам символ в нем не определен. Объявим объект с именем ObjSym, добавляющий символ и выполняющий определенные действия с ним (рис. 13.3).
| USES CRT; { в примере используется системный модуль CRT }
| TYPE
| >ObjSym = OBJECT
| > Line : Word; { номер строки с Sym }
| > Col : Word; { номер столбца с Sym }
| > Sym : Char; { поле-значение символа }
| >PROCEDURE Init(init_line,init_col : Word;
| > init_sym : Char);
| >FUNCTION GetLine : Word; { опрос Line }
| >FUNCTION GetCol : Word { опрос Col }
| >PROCEDURE Print { вывод Sym }
| END;
| PROCEDURE ObjSym.Init; { инициализация полей объекта }
| BEGIN
| > Line := init_line; { метод задания номера строки }
| > Col := init_col; { метод задания номера столбца }
| > Sym := init_sym { задание значения символа } END;
| >FUNCTION ObjSym.GetLine : Word;
| BEGIN
| > GetLine := Line { метод опроса номера строки }
| END;
Рис. 13.3
- 276 -
| FUNCTION ObjSym.GetCol : Word;
| >BEGIN
| > GetCol := Col
| > { метод опроса номера столбца }
| >END;
| PROCEDURE ObjSym.Print;
| >BEGIN
| > CRT.GotoXY(Col,Line);
| > { процедура из библиотеки CRT }
| > Write( Sym ) { вывод символа в позиции }
| >END;
Рис. 13.3 (окончание)
Обратите внимание на то, что в задании нового объекта использовались поля данных и два метода GetLine и GetCol, идентичные полям и методам ранее описанного объекта ObjPos. Метод Init переписан заново, а поле Sym и, по сути, метод Print просто добавлены. Можно сказать, что более сложный объект, описывающий символ в тексте, унаследовал свойства и методы объекта-позиции. Методология ООП строится как раз на построении такого ряда объектов, в котором можно было бы проследить развитие и наследование свойств от простых структур к сложным.
Синтаксически наследование выражается следующим образом. В случае определения типа объекта, как производного от уже существующего, имя прародительского объекта заключается в круглые скобки после служебного слова OBJECT:
TYPE
ИмяОбъектаНаследника = OBJECT( ИмяОбъектаПрародителя )
НовыеПоляОбъектаНаследника;
НовыеМетодыОбъектаНаследника;
END;
Пример на рис. 13.3 по правилам ООП и Турбо Паскаля должен выглядеть, как показано на рис. 13.4 (на нем не показаны, но используются определения, введенные ранее на рис. 13.1).