Наследование – еще один фундаментальный принцип объектно-ориентированного подхода. Термин "наследование" (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); …
Теперь предположим, что
нужно смоделировать работу самосвала. Это тоже автомобиль с двигателем, коробкой передач, скоростью, расходом топлива и пр. Но у него добавляются и новые свойства и методы:
Имя объекта-родителя указывается в скобках после слова CLASS. Теперь в объекте типа Ttruck существуют (унаследованы) все свойства и методы объекта Tvehicle, а также ряд новых методов, относящихся только к самосвалам.
Наследование позволяет создавать сложные структуры из "цепляющихся" друг за друга объектов, при этом удается постепенно наращивать их сложность без опасности потерять контроль и "утонуть" в массе свойств и методов.