Как найти классы
Ключевые концепции
- Идентификация классов - одна из принципиальных задач ОО-конструирования ПО.
- Идентификация классов - двойственный процесс - предложение кандидатов и их отбор. Нужно уметь находить потенциальных кандидатов и уметь отсеивать неподходящих.
- Идентификация классов - это идентификация подходящих абстракций в моделируемой области пространстве решений.
- "Подчеркивание существительных в документе требований" - это не подходящая техника для обнаружения потенциальных классов, так как ее результаты зависят от стиля написания документа. Она может приводить как к появлению лишних кандидатов, так и к пропуску нужных.
- Классы разделяются на три группы. Классы анализа связаны с концепциями моделируемого внешнего мира. Классы проектирования описывают архитектурные решения. Классы реализации описывают структуры данных и алгоритмы.
- Классы проектирования обычно требуют наибольшей изобретательности.
- При проектировании внешних классов помните, что внешние объекты включают концепции наряду с материальными предметами.
- Применяйте критерий абстракции данных всякий раз, когда нужно решить, представляет ли данное понятие настоящий класс.
- Классы реализации включают как эффективные, так и отложенные классы, описывающие абстрактные категории.
- Наследование обеспечивает повторное использование с одновременной адаптацией к изменившимся условиям.
- Способ получения классов состоит в оценке кандидатов и поиске необнаруженных абстракций, в частности путем анализа межмодульных передач данных.
- Использование Case-технологии или сценариев может быть полезно как средство проверки правильности и как руководство на заключительных этапах реализации, но не должно использоваться на этапах анализа и проектирования.
- Лучшим источником классов являются библиотеки повторного использования.
Библиографические замечания
Советы по использованию существительных документа требований в качестве начальной точки нахождения классов стали популярными благодаря Гради Бучу [Booch 1986], который заимствовал эту идею из ранней статьи Эббота [Abbot ACM, 26, 1983]. Дальнейшие рекомендации появились в [Wirfs-Brock 1990].
Статья по формальным спецификациям [M 1985a] анализировала проблемы, связанные с естественным языком документа требований. В ней изучались описания, широко используемые в литературе по верификации программ, и была введена таксономия возникающих дефектов: шум, двусмысленность, противоречие, излишняя спецификация, ссылки вперед. В ней обсуждалось, как формальные спецификации могут справиться с некоторыми из проблем.
[Walden 1995] рассмотрел полезные рекомендации для идентификации классов.
В приложении B [Page-Jones 1995] перечислены "симптомы" отбраковки кандидатов, уведомляющие проектировщиков об опасных сигналах, подобно тем, что были рассмотрены в данной лекции.
[Ong 1993] описывает инструментарий преобразования не ОО-программ, главным образом Fortran программ в ОО-форму. Преобразование является полуавтоматическим. Автор описывает некоторые из эвристик идентификации классов, согласующиеся с данной лекцией, в частности COMMON -блоки.
Simula 1 описана в [Dahl 1966]. Более подробное описание языка Simula дается в "лекции 17" .
Книги по типовым структурам данных являются надежным источником классов реализации, включая известный трехтомник Кнута [Knuth 1981, Knuth 1973], [Aho 1974, Aho 1983].
[Gore 1996] представляет фундаментальные структуры данных и алгоритмы полностью в ОО-манере.
Источники классов проектирования приведены в [Gamma 1995], где даны образцы проектирования, и в [M1994], содержащей библиотеку классов и обсуждающей в деталях понятия "класса описателя" и "класса итератора". В книге [Krief 1996] представлена модель Smalltalk MVC.
Упражнения
У4.1 Floors как integers
Определите класс FLOOR как наследника INTEGER, ограничив применимые операции.
У4.2 Инспектирование объектов
Даниел Холберт и Патрик О-Брайен обсуждали проблему, возникающую при проектировании окружения разработки ПО:
Рассмотрим свойство inspector, используемое для отображения информации об объекте в окне отладки. Для разных объектов нужны разные инспекторы. Например, информация о точке может быть выведена в простом формате, а о большом идвумерном массиве может потребовать вертикального и горизонтального скроллинга. Прежде всего следует решить, где описать поведение инспектора - в классе, связанном с инспектируемым объектом, или в отдельном классе?
Отвечая на это вопрос, рассмотрите все за и против каждого варианта. Заметьте, могут оказаться полезными результаты обсуждения, приведенные в последующих лекциях, посвященных наследованию.