Наследование – еще один фундаментальный принцип объектно-ориентированного подхода. Термин "наследование" (inheritance) не совсем точно отражает смысл происходящего. В обычной жизни наследник получает что-то только после кончины наследодателя. Программирование заметно более гуманно – здесь объект-потомок получает свойства и методы объекта-родителя еще при его жизни.
Наследованиепозволяет создавать производные объектные типы данных (классы) на основе уже существующих. При этом производные классы наследуют свойства и методы базового класса и добавляют к ним новые (Рис. 6.1).
Рис. 10.1. Принцип наследования.
Рассмотрим классический пример наследования – объект, моделирующий работу автомобиля. Очевидно, любой автомобиль – и "Запорожец", и "Мерседес" – имеют ряд общих свойств и методов. Перечислим их:
TYPE Tvehicle=CLASS
PRIVATE
power:WORD; { мощность }
speed: WORD; { скорость }
gear: BYTE; { передача }
engineon: BOOLEAN; { двигатель вкл/выкл }
fuelcons: REAL; { расход топлива }
PROCEDURE StartEngine;
PROCEDURE ChangeGear(n:BYTE);
PROCEDURE Accelerator (n:REAL);
…
Теперь предположим, что
нужно смоделировать работу самосвала. Это тоже автомобиль с двигателем, коробкой передач, скоростью, расходом топлива и пр. Но у него добавляются и новые свойства и методы:
СВОЙСТВА:
- грузоподъемность (load: WORD);
- кузов опущен/поднят (lift:BOOLEAN);
- упоры опущены/подняты (legs: BOOLEAN).
МЕТОДЫ:
- понять кузов (procedure LiftUp);
- опустить кузов (procedure LiftDown);
- понять упоры (procedure LegsUp);
- опустить упоры (procedure LegsDown).
Все же остальные свойства и методы возьмем из типа Tvehicle. Для этого нужно создать объект-потомок:
TYPE Ttruck=CLASS(Tvehicle)
{ в скобках – объект-родитель Tvehicle }
PRIVATE
load: WORD;
lift:BOOLEAN;
legs: BOOLEAN;
procedure LiftUp;
procedure LiftDown;
procedure LegsUp;
procedure LegsDown;
END;
Имя объекта-родителя указывается в скобках после слова CLASS. Теперь в объекте типа Ttruck существуют (унаследованы) все свойства и методы объекта Tvehicle, а также ряд новых методов, относящихся только к самосвалам.
Наследование позволяет создавать сложные структуры из "цепляющихся" друг за друга объектов, при этом удается постепенно наращивать их сложность без опасности потерять контроль и "утонуть" в массе свойств и методов.