Книга: Технологии программирования
8.8.4. Шаг 3. Уточнение классов с точным определением их зависимостей от других классов
8.8.4. Шаг 3. Уточнение классов с точным определением их зависимостей от других классов
Виды взаимоотношений между классами могут быть следующими: отношения наследования; отношения включения; отношения использования; запрограммированные отношения.
Еще одно взаимоотношение — отношение включения {агрегирования) — класс содержит в виде члена объект или указатель на объект другого класса. Позволяя объектам содержать указатели на другие объекты, можно создавать так называемые "иерархии объектов". Такие реализации альтернативно дополняют возможности использования иерархии классов.
Очень важным при проектировании является вопрос: какое отношение выбрать — агрегации (включения) или наследования. В принципе эти методы взаимозаменяемы, кроме случая, когда используется позднее связывание. Наиболее предпочтителен тот вариант, в котором наиболее точно моделируется окружающая действительность, т. е. если понятие X является частью понятия Y, то используется включение. Если понятие X более общее, чем Y, — то наследование.
Для составления и понимания проекта часто необходимо знать, какие классы и каким способом они используются, другими словами, отношения использования. Возможно следующим образом классифицировать те способы, с помощью которых класс X может использовать класс Y.
— X использует Y;
— X вызывает функцию-член (метод) Y;
— X читает член Y;
— X пишет в член Y;
— X создает Y;
— X размещает переменную из Y
Анализ подобных взаимосвязей позволяет выявить потребности в определенных методах классов или, наоборот, выявить их ненужность.
Запрограммированные отношения — те отношения проекта, которые не могут быть прямо представлены в виде конструкций языка. Допустим, в проекте оговорено, что каждая операция, не реализованная в классе А, должна обслуживаться объектом класса В. К запрограммированным отношениям относят также операции преобразования типов. Следует, по возможности, избегать применения этого вида отношений из-за усложнения реализации. Идеальный класс должен в минимальной степени зависеть от остального мира. Следовательно, следует стараться минимизировать зависимости.
- 8.8.1. Укрупненное изложение проектной процедуры Б. Страуструпа
- 8.8.2. Шаг 1. Выделение понятий и установление основных связей между ними
- 8.8.3. Шаг 2. Уточнение классов с определением набора операций (методов) для каждого
- 8.8.4. Шаг 3. Уточнение классов с точным определением их зависимостей от других классов
- 8.8.5. Шаг 4. Задание интерфейсов классов
- 8.8.6. Перестройка иерархии классов
- 8.8.7. Свод правил
- 8.8.8. Пример простейшего проекта
- 8.8.1. Укрупненное изложение проектной процедуры Б. Страуструпа
- Пошаговые инструкции для перехода на 3-й диалект
- Семерка - первый шаг нового семейства
- Шаг 1. Приветствие
- Шаг 1
- Шаг 6 Завершение продажи на кассе, предложение сопутствующих товаров
- Первые шаги в нефтяном деле
- 3.6. Шаг 5. Балансировка ассортимента по глубине
- Вот уже в который раз при работе в сети появляется сообщение от других пользователей. Что это может быть?
- Шаг 2. Начало беседы
- Еще один простой шаг к созданию сайта
- Как сделать движения мышью более точными?