Книга: Технологии программирования
8.8.6. Перестройка иерархии классов
8.8.6. Перестройка иерархии классов
Пытаясь провести классификацию некоторых новых объектов, задаем следующие вопросы: В чем сходство этого объекта с другими объектами общего класса? В чем его различия? Каждый класс имеет набор поведений и характеристик, которые его определяют. Начнем с верхушки фамильного дерева образца и будем спускаться по ветвям, задавая эти вопросы на протяжении всего пути. Более высокие уровни являются более общими, а вопросы — более простыми. Каждый уровень является более специфическим, чем предыдущий уровень, и менее общим.
Без сомнения, это тривиальная задача, но установить идеальную иерархию классов для определенного применения очень трудно. Прежде чем написать строку кода программы, необходимо хорошо подумать о том, какие классы необходимы и на каком уровне. По мере того как увеличивается понимание, может оказаться, что необходимы новые классы, которые фундаментально изменяют всю иерархию классов.
На втором и третьем шагах итеративной процедуры проектирования производится выявление того, насколько адекватно классы и их иерархия подходят по сути проекта. Проектировщики вынуждены реорганизовывать, улучшать проект и повторять все шаги сначала, и так до тех пор, пока качество проекта не будет удовлетворительным.
При перестройке иерархии классов применяются четыре процедуры: расщепление класса на два и более; абстрагирование (обобщение); слияние; анализ возможности использования существующих разработок.
Расщепление применяется в следующих случаях:
1) если имеется сложный класс, иногда имеет смысл разделить его на несколько простых классов и тем самым обеспечить поэтапную разработку;
2) класс содержит ряд несвязанных между собой функций или набор независимых друг от друга данных.
Обобщение — выявление в группе классов общих свойств и вынесение их в общий базовый класс. Признаки необходимости обобщения таковы:
1) общая схема использования;
2) сходство между наборами операций;
3) сходство реализаций;
4) эти классы часто фигурируют вместе в дискуссиях по проекту.
Слияние — объединение нескольких небольших, но тесно взаимодействующих классов в один. Таким образом, взаимодействие будет скрыто в реализации нового класса.
Использование существующих разработок. Обособленный класс или группа классов из уже существующего проекта может быть легко интегрирована в новый класс. Однако подобная интеграция вносит определенные ограничения в структуру системы и может сказаться на эффективности разработки самой программы. Изготовители систем объектно-ориентированного программирования поставляют системы с совместимыми библиотеками классов. Очевидно, чем больше готовых библиотечных классов будет использовано в программе, тем меньше кода придется писать при реализации программы.
- 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. Пример простейшего проекта
- Навигация по иерархии узла
- Глава 1 Предел возможностей иерархии в мире перемен
- 9.7.4. Иерархии классов и абстрактные классы
- 8.8.5. Шаг 4. Задание интерфейсов классов
- У14.4 Наследование без классов
- 8.4. Перемещение по иерархии файлов
- 8.4.3. Перемещение по иерархии: nftw()
- 3.6. Качество классов и объектов
- Соотношение классов и записей
- 14.1. Высший уровень иерархии
- Лекция № 12. Связи классов сущностей
- 6. Лекция: Объявление классов