Дж. Рамбо, М. Блаха - UML 2.0 - Объектно-ориентированное моделирование и разработка (1158633), страница 84
Текст из файла (страница 84)
Речь идет ие о частоте прослеживаний, а о количестве различных способов использования ассоциации. Сильно связанные классы должны находиться в одном и том же пакете. Пример с банкоматом. На рис. 15.8 показан последний вариант модели классов предметной области банкомата после выполнения проектирования классов. (Помните, что в полную модель классов входит и модель классов приложения — рис. 13.8.) 15.12.
Резюме 349 15.12. Резюме Проектирование классов не начинается на пустом месте. Этот процесс состоит в уточнении модели, полученной на предшествовавших этапах. При проектировании классов модель обрастает деталями: вы проектируете алгоритмы, реорганизуете операции, оптимизируете классы, корректируете наследование и уточняете определения пакетов. Первый этап проектирования классов состоит в добавлении операций, реализующих варианты использования. Варианты использования определяют требуемое поведение, но не его реализацию. Проектировшик должен придумать операции, которые обеспечат поведение, заданное вариантами использования. После этого нужно выбрать для каждой операции наиболее подходящий алгоритм.
В первую очередь нужно учитывать вычислительную сложность, однако в некоторых случаях можно жертвовать быстротой ради простоты. Высокоуровневые операции рекурсивно определяются через низкоуровневые, которые тоже нужно придумывать. Рекурсия прекрашается, когда вы достигаете уже имеющихся операций или таких, реализация которых очевидна. В исходном проекте множество операций неизбежно будет содержать несоответствия, избыточные элементы и неэффективные конструкции. Это естественно, потому что невозможно создать хороший проект целиком за один раз.
Более того, по мере своего развития проект одновременно ухудшается. Операция или класс, созданные для выполнения одной задачи, не будут оптимальными для выполнения другой. Занимаясь проектированием, вы должны периодически реорганизовывать операции для повышения их ясности и устойчивости к изменениям. Возможно, вам придется переработать аналитическую модель для повышения эффективности.
В процессе оптимизации информация, содержашаяся в модели, не удаляется; напротив, к ней добавляются новые, избыточные данные, ускоряющие обращение к элементам модели и сохраняющие промежуточные результаты. Полезно бывает перепланировать алгоритмы и сократить количество подлежащих выполнению операций. Не забывайте о пользе воплощения (преврашения в объект сушности, изначально объектом не являвшейся). Например, помешение вклада на счет, снятие денег со счета и трансфер между счетами обычно считаются операциями, потому что это действия, выполняемые некоторыми объектами. Однако в нашем примере мы сделали транзакцию объектом, чтобы иметь возможность описывать ее.
В процессе проектирования классов можно корректировать определения классов и операций для улучшения качества иерархии наследования. К таким корректировкам относятся изменение списка аргументов метода, перемешение атрибутов и операций из класса в суперкласс, определение абстрактного суперкласса для вынесения в него общего поведения нескольких классов, а также деление операции на наследуемую и конкретизирующую части.
Используйте делегирование вместо наследования, если класс подобен другому классу, но не является его подклассом. Программы приходится разбивать на физические блоки, с которыми работают редакторы и компиляторы. Это удобно и для совместной работы внутри команды программистов. Сокрытие информации позволяет гарантировать, что будущие 350 Глава 15 ° Проектирование классов изменения затронут лишь ограниченный объем кода. Пакеты должны быть цель- ными, а сущности внутри них должны объелиняться одной темой. Таблица 15.1.
Ключевые понятия главы выводимый атрибут абстрагирование суперкласса улучшение наследования алгоритм структура данных делегирование выводимая ассоциация политика чз реализация реализация наследования рекурсия реорганизация воплощение ответственность вариант использования индекс сокрытие информации оптимизация пакет Библиографические замечания Алгоритмы и структуры данных рассматриваются в любом базовом курсе информатики.
В качестве хорошей литературы по этой теме можно рекомендовать [АЬо-83] и [5ес]йетч!с]с-95]. Добавление индексов и изменение порядка доступа для повышения производительности — широко используемая методика оптимизации баз данных. Примеры ее использования приводятся в [111!шап-02]. Одна из первых попыток найти правила определения видимости, сохраняющие объектно-ориентированную модульность, была сделана в работе [ЫеЬегЬегг-88].
В [Меуег-97] приводятся рекомендации по стилю использования классов и операций. В первом издании этой книги этап проектирования классов назывался этапом проектирования обьектов (оЪ]есс с!ез18п). Литература [АЬо-93] А!Егес] АЬо, ]оЬп НорсгоЕс, апс] ]ейгеу ()Ишап. Раса 5сгцссцгез апс] А18опсЬшз. Возсоп: АсЫ!зоп-Жез1еу, 1983. [Сор!сеп-92] ]ашез О. Сор!1еп. А8чапсес[ С++: Ргойгашш|пй 5су1ез апд 1йош. ВозСоп: Адйзоп-Жез!еу, 1992. [Ротч!ег-99] МагВп РоМег. Ве[ассог!п81 1шргоч!пй сЬе Е)ез!8п оЕ Ех!зс!п8 Сос]е. Возсоп; Ас]йзоп-%'ез!еу, 1999. [Сапппа-95] ЕпсЬ Оапппа, В!сЬагс] Не!ш, Ва!рЬ ]оЬпзоп, апс] ]оЬп 'ч'11зз!без.
Оегййп Рассегпз: Е!ешепсз оЕ Кецзаые ОЬ]есс-Ог!епсес! 5о(пчаге. Возсоп: Адйзоп'чч'ез!еу, 1995. [ЫегЬегЬегг-88] К. 1леЪегЬегг, 1. Нойапд, А. К1е1. ОЬ]есс-опепсес[ ргойгашш(п8: ап оЬ)ессгче зепзе о(зсу!е. ООРЯ А88 аз АСМ 51СР1.АХ 23, 11 (ХочешЬег 1988), 323-334. [Меуег-97] Вегсгап8 Меуег. ОЬ]есс-Опепсес[ 5о(сччаге Сопзсгцссюп, 5есопс1 Еййоп. ()Ррег 5асЫ!е К!чег, Щ: Ргепйсе На!1, 1997. [Вес[йецчс]с-95] ВоЬегс 5ес]8етч!сй, РЬ!1!рре Р!а]о1ес, апс1 РеСег Оогс]оп. Ап 1псгос1цсйоп со сЬе Апа1угйз оЕ А18опсЬшз. Возсоп: АсЫ1зоп-'ч(гез1еу, 1995.
Упражнения 351 [И!вап-02] Де((геу Ш!вап апд !епп!Еег чч'Ыов. А Р!гзс Сопгзе гп ПагаЪазе 5узгевз. Пррег БасЫ!е К!чег, Щ: Ргепг!се На!1, 2002. !'ч!г!г(з-Вгос!с-90! КеЪесса чч'!г(з-Вгос!с, Впап чч'!!!сегзоп, апс1 1.ацгеп ч!г!епег. Е)ез!Вп!пй ОЪ|есс-Ог!епгед Во!гааге. Пррег ЗасЫ!е К!чег, Щ: Ргепске На!1, 1990. Упражнения 15.1. (6) Рассмотрите варианты использования из упражнения 13.9 и перечислите по крайней мере четыре области ответственности для каждого из них.
(Замечание для преподавателя: можно предоставить студентам наш ответ к упражнению 13.9.) 15.2. (6) Рассмотрите три первых варианта использования из упражнения 13.16 и перечислите по крайней мере четыре области ответственности для каждого из них.
(Замечание для преподавателя: можно предоставить студентам наш ответ к упражнению 13.16.) 15.3. (4) Напишите алгоритмы построения перечисленных ниже геометрических фигур в графическом терминале. Фигуры не закрашиваются. Терминал работает в растровом режиме. Укажите все сделанные вами предположения: 1) окружность; 2) эллипс; 3) квадрат; 4) прямоугольник. 15.4.
(3) Обсудите, подходит ли алгоритм прорисовки эллипса из предыдущего упражнения для построения окружностей, а алгоритм прорисовки прямоугольников для квадратов. 15.5. (3) Аккуратное упорядочение операций умножения и сложения позволяет свести к минимуму количество арифметических операций, необходимых для вычисления значения полинома. Например, полипом вида а4х + а,х + + а,х' + а,х + а, можно вычислить почленно, добавляя каждое слагаемое к обшей сумме после его вычисления. Это потребует 10 операций умножения и 4 операции сложения. Можно изменить порядок арифметических операций в соответствии со следующей формулой: х(х(х(ха4 + аз ) + а, ) + а, ) + а„так что потребуется всего 4 умножения и 4 сложения. Сколько операций потребуется для вычисления полинома и-го порядка каждым из методов? Обсудите преимущества и недостатки каждого метода.
15.6. (4) Усовершенствуйте диаграмму классов на рис. У15.1, обобщив классы ЕЕ!!пав (Эллипс) и Вес!аде (Прямоугольник) посредством класса бгарЕпсРг!т(г(пе (ГрафическийПримитив). У вас должна получиться единственная ассоциация типа один-к-одному с классом ВоипйпВВох (ОграничиваюшийПрямоугольник). Фактически вы измените значение кратности с 0..1 на ровно 1. На рис. У15.1 класс ВоипйтяВох используется ЕЕВрзе и йесгапяЕе совместно. Ограничивающий прямоугольник — это прямоугольник минимальной пло|цади, содержащий соответствующий аллипс или прямоугольник.
352 Глава 15 ° Проектирование классов Рис. У15.1. Часть диаграммы с общим классом 15.7. (5) Какие классы из предыдущего упражнения должны предоставлять операцию г7е!еге (удаление), видимую внешнему мнру7 Удаление означает уничтожение объекта. Поясните свой ответ. 15.8. (4) Измените диаграмму классов на рнс. У15.2 таким образом, чтобы параметры полей содержались в отдельном классе. Определенные категории страниц могут иметь заданные по умолчанию значения полей, но для некоторых страниц значения по умолчанию могут перекрываться.
Рис. У15.2. Часть диаграммы классов для газеты 15.9. (3) Измените диаграмму на рис. У15.2 таким образом, чтобы можно было определить, на какой странице (Райе) находится строка (Ь!пе), без предварительного поиска соответствующей колонки (Со!итп). 15.10. (7) Напишите псевдокод для каждого метода на рис. У15.3. Операция !л!г!а!!ге (ннициализация) помещает 52 карты в колоду (!)ес/г). Операции !пзегт (вставка) и г!е!еГе (удаление) принимают в качестве единственного аргумента карту (Саг!) и осуществляют помещение карты в совокупность или удаление ее оттуда. При этом принудительно выполняется перерисовка совокупности.