Иллюстрированный самоучитель по Visual Basic .NET

Как стать начальником? Просмотр иерархии наследования. Правила преобразования и обращения к членам классов в иерархии наследования.

Предположим, вы построили замечательную объектно-ориентированную систему учета кадров, в которой в полной мере используются все преимущества полиморфизма. А теперь попробуйте ответить на простой вопрос – как в вашей системе реализован перевод простого работника в менеджеры?

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

В нашей системе учета кадров существует только одно приемлемое решение – включить в класс Employee метод, который копирует состояние Employee в новый объект Manager, после чего помечает старый объект Employee как неиспользуемый.

Просмотр иерархии наследования

С усложнением иерархии классов в программе на помощь приходит окно классов и Object Browser. Например, из окна классов на рис. 5.1 видно, что класс Programmer является производным от класса Employee и переопределяет только конструктор и метод RaiseSalary.

Иллюстрированный самоучитель по Visual Basic .NET › Наследование и интерфейсы › Как стать начальником? Просмотр иерархии наследования. Правила преобразования и обращения к членам классов в иерархии наследования.
Рис. 5.1. Иерархия наследования в окне классов

Примечание
Программы, основанные на UML (в частности, Visio или Rational Rose), не только отображают связи между классами в иерархии наследования, но и генерируют "скелет" программы. Одни программисты в восторге от систем автоматизированного программирования, другие их ненавидят
.

Правила преобразования и обращения к членам классов в иерархии наследования

Объекты производных классов могут храниться в переменных базовых классов:

Dim tom As New Programmer("Tom". 65000)
Dim employeeOfTheMonth As Employee
employeeOfTheMonth = torn

В режиме жесткой проверки типов (Option Strict On), если объект tom хранится в переменной employeeOfTheMonth, для сохранения его в переменной Programmer приходится использовать функцию СType, поскольку компилятор заранее не знает, что такое преобразование возможно:

Dim programrnerOnCall As Programmer
programmerOnCal1 = CType(employeeOfTheMonth,Programmer)

Конечно, простое сохранение tom в переменной programmerOnCall выполняется простым присваиванием.

Примечание
При работе с объектом torn через переменную employeeOfTheMonth вам не удастся использовать уникальные члены, определенные в классе Programmer и отсутствующие в Employee. С другой стороны, как будет показано в следующем разделе, при этом сохраняется доступ ко всем членам класса Programmer, переопределяющим члены класса Employee
.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.