Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВМ.doc
Скачиваний:
3
Добавлен:
21.09.2019
Размер:
159.74 Кб
Скачать

12) Исп свойства наследования атрибутов класса.

По мере разработки ОО программы вы часто сталкиваетесь с ситуацией, когда нужны похожие, но не в точности одинаковые классы. Если эти классы обладают неким общим поведением, то можно воспользоваться ОО парадигмой – наследование. Рассмотрим наследование на примере управления зоомагазином. Одним из предметных классов будет класс животные для предоставления любого животного из тех, которыми торгует магазин. Среди данных, описывающих объекты класса, могут быть как русские, так и латинские названия животного, возраст и пол. Однако подбор остальных сведений зависит от конкретного вида животного. Так, например, важнейшая информация о рептилиях – это длина. В описаниях всех животных есть общие данные наряду со специфическими. Эти связи можно проследить на диаграмме рис. 4.1.

Класс животные содержит общие данные: Млекопитающие, Рептилии, Рыбы. Добавляя к этому классу специфичную информацию, вкл. все 4 атрибута, которые определены в классе животные. Линии направляют от подгрупп к классу животные. Это на первый взгляд противоречит соглашению понятия класса животное, поскольку все данные из класса животное распр. вниз. Такое направление стрелок диктуется принятым соглашением ООП, хотя это и противоречит интуитивным соображениям. В ООП терминологии подгруппы называются подклассами или производными классами. Класс Животные по отношению к ним называется суперклассом или базовым классом. Для усвоения понятия класса надо запомнить, что подклассы являются специализацией суперкласса. Т.о. отношения между базовым и производным классом ЯВЛЯЕТСЯ. Млекопитающее является животным. Слово является неадекватно описывает ситуацию, если вы не имеете дело с наследованием.

13) Особенности исп множественного наследования в классах.

Предположим, что пишем программу для учёта оборудования в пункте учёта лыж. Вы создаёте класс для товара общего вида и его подклассы для предоставления конкретных типов сдаваемых на прокат товаров как показано на рисунке 4.2. Лыжи, ботинки, палки являются частным случаем арендуемого товара. Однако когда вы переходите к рассмотрению товара и клиентов, берущих его, возникает проблема, хотя между арендатором и товаром существует непосредственная связь. Это не наследование, ведь слово является нельзя писать. Взятый напрокат товар не является арендатором. Ситуация с товарами и сдаваемым напрокат инвентарём ещё сложнее. Классы инвентарь, лыжи, ботинки, палки описывают виды товаров, но не материальные предметы. Например в пункте проката может быть много пар однотипных лыж, и много пар ботинок одной модели и размера.

Поэтому конкретные предметы описываются классом предмет проката. Тут предметом проката могут быть Б, П, Л. Это может быть только 1 предмет, а не 3 как на рисунке 4.2. Поэтому предмет проката – это не пара лыж, ботинок, палок. Существует ещё одна проблема, которая заключается в том, что нет класса, который содержал бы информацию о размере и длине предмета. Одно из возможных решений состоит в том, чтобы создать отдельный класс для каждого предмета проката как на рисунке 4.3. Обратите внимание на направление стрелок. Физическое расположение элементов на диаграмме не соответствует наследованию. Следует помнить, что по соглашению ООП стрелки направлены от производного класса к базовому. Класс пара лыж наследует информацию о типе предмета от класса лыжи и он также получает данные о сдаваемом напрокат предмете от класса предмет проката. Объект класса лыж отражает также сдаваемый напрокат предмет. В таком виде структура класса проходит тест на соответствие отношения «является». Стало быть именно эта структура определяет правильное условие наследование. Необходимо отметить, что в данной структуре вы получили класс содержащий такую информацию, как длина и размер. Кроме того в этой структуре класс арендатор вообще не принимает участия в иерархии наследования. Когда некий класс получает информацию более чем от одного базового класса, то следует говорить о множественном наследовании. Не каждый класс в иерархии наследования используется для создания объектов. Классы, из которых создаются объекты принято называть конкретными , а классы, которые присутствуют только для того, чтобы предоставить только атрибуты и методы называются виртуальными или абстрактными.