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

Преимущества и недостатки множественного наследования

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

б) Минусы: Увеличивает сложность создания и модификации системы классов. Уве- личивает связь (coupling) между классами — а, как известно, изменения в базовом классе могут повлечь серьезные проблемы в производных (проблема хрупкости базовых класов, fragile base class problem).

8) Полезность множественного наследования оценивается специалистами неоднозначно. Оно серьезно усложняет поддержку иерархии классов.

Согласно исследованиям, проведенным в ≈ 1997 году, в 95% случаев применение множественного наследование бесполезно. Якобы «ответ» на скептическое отношение к множественному наследованию: следует проектировать классы с учетом возможности множественного наследования! (Как будто нет других насущных проблем проектирования…)

9) Есть ли случаи, в которых множественное наследование оправданно? Да, их два.

а) Для создания конкретного класса, объединяющего в себе свойства нескольких конкретных классов. — полезность спорна

б) Для создания класса на основе интерфейсов, и конкретного класса, задающего некоторую реализацию этого интерфейса. Такой класс называется миксином (mix-in).

Определение 31

Интерфейсом называется абстрактный класс, содержащий только чисто вир-туальные функции. Пример. В пакете форм существует элемент управления «Полотно» (Canvas), на котором можно рисовать. Этот класс использует стандартные средства захвата и освобождения системных ресурсов, реализованные в данном пакете форм. Концептуально:

– Полотно является (isA) элементом управления (Control).

– Полотно должно предоставлять функциональность по рисованию (IDrawable).

– Полотно должно обеспечить функциональность по освобождению системных ресурсов (IDisposable).

– Интерфейсы IDrawable и IDisposable задают, что можно сделать (на-личие функций), но не определяют, как (функции чисто виртуальные). Можно сказать, что они определяют контракт, выполняемый классом Can-vas, наследующим от них. При этом отношения isA между Canvas и IDraw-able, IDisposable не устанавливается.

Пример кода:

class Canvas: public IDrawable, public IDisposable, public Control {

public:

// реализация чисто виртуальной функции из IDrawable

virtual void draw( Core::DeviceContext &dc );

// реализация чисто виртуальной функции из IDisposable

virtual void dispose();

~Canvas();

// …

};

38 Понятие "полиморфизм" в модели ооп. Виды полиморфизма

1) Полиморфизм (греч.) — много форм (много проявлений).

Определение 26

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

Определение 27

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

2) Полиморфизм является способом повторного использования ранее разработанного программного обеспечения.

3) Модель полиморфизма в ООП использует для своей реализации два понятия — полиморфный объект и полиморфная функция.

4) В ООП в качестве полиморфных объектов могут выступать две сущности:

а) полиморфная переменная;

б) полиморфное выражение.

Определение 28

Полиморфная переменная — переменная в программе, которая может принимать значения разных типов.

Определение 29

Полиморфное выражение — выражение, которое может принимать значения разных типов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]