
- •2 Выделение объектов проблемной области: объектно-ориентированная модель задачи, информационная и математическая модели объектов Пример. Представление доски в аудитории в виде объекта
- •Выводы:
- •3 Концептуальная модель класса объектов
- •4 Инкапсуляция атрибутов и методов в классе объектов Понятие инкапсуляции
- •Инкапсуляция в концептуальной модели ооп
- •Реализация членов-функций
- •Указатель this: назначение и использование
- •Проблема защиты членов-данных класса
- •Защита на уровне уровня доступа
- •Защита на уровне значений
- •10 Защита членов-данных, заданных указателями и ссылками
- •11 Защита членов-данных объекта, передаваемого в качестве параметра функции или возвращаемого функцией
- •Реализация и семантика (смысл) чдодвоКов
- •2.11.2 Инициализация чдодвоКов
- •14 ??? Использование членов класса, общих для всех объектов класса, для учета и идентификации объектов класса.
- •15 ??? Использование членов класса, общих для всех объектов класса, для обеспечения тестирования и отладки оо программ
- •2.12.1 Свойства ctorов, предназначенные для реализации модели ооп
- •Автоматический вызов ctorа
- •18 ??? Создание объектов прямым заданием значений членов-данных
- •19 ??? Создание объектов копированием и преобразованием
- •20 ??? Создание объектов класса, использующего объекты других классов в качестве членов-данных
- •22 Проектирование класса по контракту
- •23 Отношение наследования в концептуальной модели ооп.
- •25 Управление доступом в производном классе к членам базового класса
- •27,28 Создание объектов производного класса и задание их начальных состояний
- •29 Назначение виртуальных функций
- •Назначение вф
- •30 Задание виртуальных функций
- •31 Вызов виртуальных функций.
- •32 Виртуальные деструкторы
- •33 Организация вычислений в концептуальной модели ооп
- •Преимущества и недостатки множественного наследования
- •38 Понятие "полиморфизм" в модели ооп. Виды полиморфизма
- •Виды полиморфизма
Преимущества и недостатки множественного наследования
а) Плюсы: Позволяет создавать новые классы надежным методом, используя ранее разработанные без их изменения. Это сокращает затраты на разработку класса и является формой повторного использования кода.
б) Минусы: Увеличивает сложность создания и модификации системы классов. Уве- личивает связь (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
Полиморфное выражение — выражение, которое может принимать значения разных типов.