Глава 3. Объектно-ориентированные анализ и проектирование_____________71
санное и подчеркните наиболее значимые существительные и глаголы. Рассматривайте существительные как потенциальные объекты и глаголы как вероятные функции-члены. По большей части глаголы можно сделать существительными и наоборот; всегда смотрите на получившийся список с обеих точек зрения — это, в конечном итоге, тоже мозговой штурм.
Структурный анализ. Помните пример процедурного программирования из раздела "Процедурное и объектно-ориентированное программирование", где анализировалась задача совершения вклада на сберегательный счет? Мы все очень хорошо знакомы с практикой разделения задачи на подзадачи. То ли это обусловлено нашим образованием, то ли это в нашей природе, но для большинства из нас это не представляет особого труда. Выделив этапы и под-этапы, попытайтесь увидеть объекты и их взаимосвязи. В примере со сберегательным счетом в изначально процедурном подходе мы совершенно непринужденно обнаружили объекты — сберегательные счет
и книжку.
«
Какой бы аналитический подход к проблеме (хоть ваш собственный и неповторимый) вы ни применяли, всегда помните, что же вы ищете. Помните, ключевые характеристики объектов — это абстракция, инкапсуляция, модульность и иерархия. Когда вы очертили объекты — любым доступным вам методом — начните с того, что постарайтесь понять, какая информация абсолютно необходима взаимодействующим классам (инкапсуляция). Разберитесь, какие классы взаимосвязаны, а какие нет (модульность). И наконец посмотрите, какие классы обладают похожими характеристиками и функционированием (иерархия). Помните, что пока вы находитесь на стадии анализа и проектирования, вы вольны как угодно комбинировать объекты, разделять их и так далее. Когда же начнется реализация, возвращаться будет уже слишком' поздно. Экспериментируйте, пока есть возможность!
Проектирование
Как уже упоминалось, объектно-ориентированные анализ и проектирование — весьма близкие родственники. Когда задача проанализирована, остается на самом деле только уточнить детали реализации. Здесь самое время сосредоточиться на взаимосвязях между объектами и модулями. Рассмотрите типы наследования между объектами, определите необходимые типы сообщений, число параметров и так далее. Существует ряд систем обозначения, рассмотрение которых выходит за рамки данной главы, для» запечатления вашего проекта на бумаге. Набросайте следующие вещи: имена классов, сообщения, которыми они будут обмениваться, открытые и закрытые данные; все увековечьте для потомства. Хорошее документирование проекта может существенно облегчить его воплощение в жизнь; а вот обрывочные заметки на салфетках вряд ли помогут в ваших титанических трудах.