Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Подклассы, суперклассы и наследование

Поиск

Некоторые объекты могут иметь подобные, но не идентичные атрибуты и методы. Если степень такого подобия достаточно высока, то имеет смысл использовать совместно некоторыесвойства (атрибуты и методы).

Наследование (inheritance) позволяет определить один класс на основе более общего класса. Такие менее общие классы называют подклассами, а более общие – суперклассами. Процесс образования суперкласса называется обобщением, а процесс образования подкласса – специализацией. По умолчанию подкласс наследует все свойства суперкласса и в дополнение к ним определяет свои собственные уникальные свойства. Кроме того подкласс также может переопределять унаследованные методы. Все экземпляры подкласса являются также экземплярами суперкласса. Более того, согласно принципуподстановки, для любого метода и конструкции вместо экземпляра суперкласса всегда можно использовать экземпляр его подкласса.

Понятия подкласса, суперкласса и наследования аналогичны таким же понятиям, которые рассматривались в модели типа сущность-связь, за исключением того, что в объектно-ориентированной парадигме наследование относится как к состоянию, так и к поведению. Связь между подклассом и суперклассом обычно называется связью типа AKO (A KIND OF). Например, подкласс «Управляющий» связан с суперклассом «Сотрудник» связью АКО. Связь меду экземпляром и его классом иногда называют связью типа IS-A. Например, экземпляр «Римма Иванова» связан с классом «Управляющий» связью IS-A.

Существует несколько видов наследования: единичное, множественное, повторноеиизбирательное. На рис. 2.3.6.1 показан пример единичного наследования, когда подклассы «Управляющий» и «Сотрудник-продавец» наследуют свойства суперкласса «Сотрудник». Термин «единичное наследование» означает, что подклассы наследуют не более чем от одного суперкласса.

Суперкласс «Сотрудник» сам по себе может быть подклассом суперкласса «Человек», образуя таким образом иерархию классов.

Рис. 2.3.6.1. Пример единичного наследования

 

Рис. 2.3.6.2. Пример множественного наследования

Термин «множественноенаследование» означает, что подкласс наследует свойства двух суперклассов. Например, подкласс «Управляющий по продажам» наследует свойства суперклассов «Управляющий» и «Сотрудник-продавец».

Повторноенаследование – это особый случай множественного наследования, в котором суперклассы происходят от общего суперкласса.

Селективноенаследование позволяет подклассу наследовать ограниченное количество свойств его суперкласса.

Переопределение

Как уже упоминалось, свойства, а именно, атрибуты и методы автоматически наследуются подклассами от их суперклассов. Однако свойства суперкласса в подклассе можно определить заново. В таком случае используется именно то определение свойства, которое приводится в подклассе, а сам этот процесс называется переопределением.

Например, в классе «Сотрудник» может быть определен метод повышения зарплаты за счет выплаты комиссионных – «Зарплата с комиссией».

method зарплата с комиссией (float доход отделения);

{

зарплата = оклад + 0,02*доход отделения;

}

Однако для класса «Управляющий» может потребоваться выполнить те же расчеты, исходя из другого процента комиссионных. Это можно сделать за счет переопределения метода «Зарплата с комиссией» в самом подклассе «Управляющий».

method зарплата с комиссией (float доход отделения);

{

зарплата = оклад + 0,05*доход отделения;

}

Возможность переопределения является важной характеристикой наследования, поскольку позволяет легко управлять отдельными классами с минимальным влиянием на остальную часть системы.

Перегрузка

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

Например, многие классы могут иметь один и тот же метод, предназначенный для распечатки сведений о разных объектах 2.3.7.1 и 2.3.7.2.

Листинг 2.3.7.1. Метод распечатки для объекта «Отделение»

method печать () {

печать («Номер отделения»);

печать («Улица», улица);

печать («Город», город);

}

Листинг 2.3.7.2. Перегрузка метода распечатки для объекта «Сотрудник»

method печать () {

печать («Номер сотрудника»: но);

печать («Фамилия», fname);

печать («Имя», ename);

печать («Адрес», address);

печать («Зарплата», salary);

}

Таким образом, перегрузка может существенно упростить приложение, поскольку позволяет использовать одно и то же имя для одной и той же операции, независимо от класса, в котором она представлена. Следовательно, конкретное значение этой операции определяется на основе контекста. Это позволяет избежать необходимости постоянно создавать уникальные имена для методов. (Например, «Печать данных об отделениях», «Печать данных о сотрудниках», которые выполняют практически те же функции).



Поделиться:


Последнее изменение этой страницы: 2017-02-05; просмотров: 652; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.219.12.88 (0.007 с.)