на начало
На главную страницу
Форум   

Статья :: Полиморфизм


Полиморфизм

Давайте рассмотрим задачу создания платежной ведомости для разных категорий служащих. Зарплата для разных категорий служащих может начисляться по-разному. Например, некоторые оплачиваемые служащие получают установленный заработок. Рабочему, получающему зарплату, заработная плата начисляется в зависимости от количества отработанных часов. Коммерческому служащему платят комиссионные, которые он зарабатывает на продажах.
Традиционный подход к этой задаче состоит в том, что поле с типом сотрудника, помещается в структуру объекта "сотрудник" и обработка данных происходит с помощью оператора выбора switch, причем для каждой категории служащих предусматривается своя case-фраза. Использование оператора выбора switch часто приводит к ошибкам, — ведь нужно быть внимательным при добавлении новой категории служащих.
Можно поступить по-другому, локализовав логику расчета зарплаты в каждом из классов служащих. Нужно только реализовать для каждого класса служащих свой собственный метод GetPay. В базовом классе можно реализовать функцию GetPay, которая будет содержать общий код для разных категорий служащих, чтобы при добавлении новой категории служащих не пришлось вносить изменения в код. Опишите метод GetPay в базовом классе, и потом в каждом производном классе переопределите его, т.е. опишите метод GetPay, который будет "подменять" метод GetPay базового класса. Вызовите метод GetPay через ссылку на объект базового класса Employee (Служащий). В результате для каждого конкретного класса служащих будет вызван свой метод GetPay.
Способность одного и того же метода выполнять разные действия в зависимости от объекта, к которому он применяется, называется полиморфизмом. Полиморфизм намного уменьшает сложность программных систем и является важной составляющей парадигмы объектного программирования.
Не следует специально менять программную модель, для того чтобы ввести полиморфизм. В примере "Бюро путешествий Acme" мы имеем дело с тремя разными абстрактными базовыми классами, но в этом случае нет необходимости использовать полиморфизм для обобщения поведения. С другой стороны классы .NET Framework часто используют полиморфизм, в чем можно убедиться, прочитав главу 5 "Управляемый C++ в .NET Framework".


Полиморфизм

страницы в данном разделе 
Глава 4. Объектно-ориентированное программирование на управляемом C++ Объектно-ориентированное программирование на управляемом C++
Обзор основных понятий объектно-ориентированного программирования Объекты
Классы Полиморфизм
Проект: "Бюро путешествий Acme" Проектирование абстракций
Логика базовых классов Проектирование инкапсуляции
Наследование в управляемом C++ Основные принципы наследования
Реализация примера "Бюро путешествий Acme" Запуск программы примера
Класс HotelReservation Класс HotelBroker
Класс Customers (Клиенты) Пространство имен
Класс TestHotel Резюме


Содержание сайта (выборка)
Apache
Протоколы TCP/IP (принципы, протоколы и архитектура)



PHP, PELR, JSP
PHP
JavaServer Pages (JSP)

Базы данных
Основы mysql
СУБД INFORMIX
СУБД POSTGRES
Основы проектирования реляционных баз данных

HTML, javascript
Спецификация HTML 4.01
Каскадные Таблицы Стилей, Уровень 2
Клиентский JavaScript. Справочник.
JavaScript руководство пользователя
Серверный JavaScript 1.4. Руководство по Использованию.

Паскаль, C, C++, C#
GCC (примеры)
FAQ Валентинa Озеровa DELPHI
C



 
© faq.pp.ru, справочник программиста