Глава 20. Наследование и полиморфизм 537

Могут быть и другие общие роли — все четверо могут принадлежать к определенному подразделению фирмы, но для целей этого примера нам интереснее всего роль служащего.

Если дальше мы рассмотрим инженера и уборщицу, двух служащих, то что же может отличать инженера от уборщицы, за исключением того, что у них разные начальники? Ну, например, инженер может получать фиксированный оклад, а оплата труда уборщицы может быть повременной. Схема этих ролей и отношений будет выглядеть примерно так, как показано на рис. 20.2.

Рис. 20.2

Иерархия ролей в машиностроительной фирме

h05371.jpg

Вы видите, кто теперь на вершине. Попытаемся поместить в эту схему нашего начальника отдела и заместителя директора. Согласитесь, что начальник инженерного отдела в большинстве случаев — служащий с фиксированным окладом, хотя в действительности в разных компаниях бывает по-разному. Предположим, что у него все же есть некоторые обязанности инженера, но, кроме того, к ним добавились обязанности руководителя; он является кем-то вроде играющего тренера или лидера группы. Предположим, с другой стороны, что заместитель директора по производству играет только руководящую роль. Получившаяся у нас иерархия показана на рис. 20.3.

Выделив некоторые из иерархических ролей и взаимоотношений в машиностроительной фирме, мы с помощью этой иерархии можем многое сказать о каждом человеке. Например, если у служащих есть номер социального страхования (не забывайте, что автор книги — американец, — прим. перев.), то это применимо ко всем четверым — уборщице, инженеру, начальнику отдела и заместителю директора. Аналогично, если для служащего с постоянным окладом размер оклада зависит от достоинств служащего, то все они — инженер, начальник и заместитель директора — имеют некоторый установленный диапазон изменения оклада. То есть мы видим, что люди в машинно-строительной фирме "наследуют" определенные характеристики и роли, основанные на их положении в иерархии, что приводит нас к следующей теме — концепции наследования в объектно-ориентированном программировании.