Классы и объекты VB .NET

Среда программирования Visual Basic

Формы Windows, графический вывод и печать

  • Немного истории
  • Дизайнер форм
  • Сохранение пропорций: свойства Anchor и Dock
  • Снова о простой программе
  • Свойства форм
  • Элементы меню и новый редактор меню Visual Studio
  • Создание диалоговых окон
  • Наследование форм
  • Построение нестандартных элементов на базе наследования
  • Переопределение события
  • Добавление новых событий

Полиморфизм

В традиционной трактовке термин «полиморфизм» (от греческого «много форм») означает, что объекты производных классов выбирают используемую версию метода в зависимости от своего положения в иерархии наследования. Например, и в базовом классе Employee, и в производном классе Manager присутствует метод для повышения зарплаты работника. Тем не менее метод RaiseSalаrу для объектов класса Manager работает не так, как одноименный метод базового объекта Employee.

Классическое проявление полиморфизма при работе с классом Manager, производным от Empl oyee, заключается в том, что при вызове метода по ссылке на Empl oyee будет автоматически выбрана нужная версия метода (базового или производного класса). Допустим, в программе метод RaiseSalary вызывается по ссылке на Employee.

В VB5 и VB6 смысл термина «полиморфизм» был расширен, и к традиционному полимор-физму на базе наследования добавился полиморфизм на базе интерфейсов (объект, реализующий интерфейс, вызывал метод интерфейса вместо другого метода с тем же именем). Объект, реализующий интерфейс Manager, правильно выберет метод RaiseSalary в зависимости от контекста использования.

В обоих случаях объект выбирает метод в зависимости от полученного сообщения. При отправке сообщения не нужно знать, к какому классу фактически принадлежит объект; достаточно разослать сообщение всем объектам Employee и поручить выбор полиморфного метода компилятору.

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

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

Почему? Потому что в главной программе можно будет использовать конструкции следующего вида:

For Each reagent in Reagents

reagent.Method

Next

Показанный цикл будет автоматически работать с новым реактивом, а необходимость в долгих поисках Sel ect Case отпадет.

Select Case reagent Case iodine

' Действия с йодом Case benzene

' Действия с бензолом

' И т. д. для 100 разных случаев в 100 местах

В приведенном выше фрагменте цикл For Each перебирает все возможные реактивы, и благодаря волшебному свойству полиморфизма компилятор найдет метод, который должен вызываться для каждого конкретного реактива. Правильное использование полиморфизма избавит вас от громоздких команд Select Case, выбирающих нужное действие в зависимости от типа объекта.

;
Атомные станции с реакторами РБМК 1000 Преобразование энергии на АЭС Конструкция реактора РБМК-1000 Турбина реакторной установки Сепаратор-пароперегреватель Насосы атомной станции с реактором РБМК Система радиационного контроля Атомные станции с реакторами ВВЭР Система управления и контроля Атомные станции с реакторами БН-600 Высшая Математика Курс лекций - 1 семестр Интегралы - второй семестр примеры решения задач Конспекты - третий семестр Производная - 4 семестр ТФКП теория функции Дифференциалы задачи Mathematica учебник Ядерное разоружение Ядерные испытания Ядерная физика MATLAB электронный учебник Maple 7 математический анализ Первообразная курсовые задания Типовой по Кузнецову Смоленская АЭС Чернобыльская катастрофа