Дж. Рамбо, М. Блаха - UML 2.0 - Объектно-ориентированное моделирование и разработка (1158633), страница 19
Текст из файла (страница 19)
Подготовьте диаграммы классов по каждому из приведенных ниже описаний. На диаграммах следует изобразить классы и ассоциации. Атрибуты и операции можно не обозначать. 1) Башня состоит из трех стержней. На каждом стержне надето несколько дисков в определенном порядке. 2) Башня состоит из трех стержней. Диски на стержнях объединены в подмножества, называемые стопками. Стопка — это упорядоченное множество дисков. Каждый диск принадлежит ровно одной стопке. На одном стержне может быть несколько стопок, расположенных в определенном порядке. 3) Башня состоит из трех стержней.
Диски на стержнях объединены в подмножества, называемые стопками, как в п. 2. На одном стержне может находиться несколько стопок. Стопка обладает рекурсивной структурой. Стопка состоит из одного диска, находящегося в самом ее низу, и не более чем одной вложенной стопки (в зависимости от высоты данной стопки). 4) Аналогично п. 3, но с тем отличием, что на стержне находится ровно одна стопка, а все остальные являются вложенными по отношению к ней. 3.30. (8) Рекурсивный алгоритм для получения последовательности ходов ре- щения задачи, описанной в предыдущем упражнении, работает со стопками дисков.
Чтобы переместить на другой стержень стопку высоты У, где Ж>1, сначала нужно переместить стопку высоты У-1 на свободный стержень при помощи рекурсивного вызова. Затем нижний диск перекладывается на нужный стержень. Затем стопка переносится с временного стержня на конечный. Рекурсия заведомо завершается, поскольку перемещение стопки высоты 1 является тривиальной операцией.
Какая из подготовленных в предыдущем упражнении диаграмм классов лучше всего подходит Упражнения 85 для реализации данного алгоритма? Объясните, почему. Добавьте на диаграмму атрибуты и операции. Укажите аргументы операций. Опишите, что каждая из операций должна делать с тем классом, в котором она определена. 3.31. (6) Напишите выражение ОСЕ для вычисления множества названий авиакомпаний, услугами которых воспользовался клиент в некотором году (рис.
У3.6). Предположите, что имеется функция йеСУеаг(Ыасе), определяющая год по заданной дате. (Замечание для преподавателя; наш ответ к упражнению 3.10 следует дать студентам в качестве отправной точки для решения этого задания.) 3.32. (6) Напишите вырюкение ОСЕ для отбора беспосадочных рейсов из города аС1гу1 в город аС(гу2 (рис. У3.6). (Замечание для преподавателя: наш ответ к упражнению 3.10 следует дать студентам в качестве отправной точки для решения этого задания.) 3.33.
(6) Напишите выражение ОС1. для определения суммарного результата участника по оценкам одного конкретного судьи. (Замечание для преподавателя: наш ответ к упражнению 3.18 следует дать студентам в качестве отправной точки для решения этого задания.) 3.34. (6) Сравните модели классов, изображенные на рис. У3.13.
В левой модели 5ибзслргюп представляет собой класс ассоциации, в правой — обычный класс. Человек может быть подписан на несколько журналов. На один журнал может быть подписано множество человек. Для каждой подписки необходимо отслеживать дату и размер каждого платежа, а также текущий срок окончания подписки. в б Рис. У3.13. Диаграммы классов для подписки на журналы Углубленное моделирование классов Глава 4 продолжает обсуждение концепций моделирования классон и переходит к более сложным темам. Здесь рассматриваются тонкости, требующиеся для создания сложных моделей. При первом чтении зту главу можно пропустить. 4.1.
Расширенные концепции классов и объектов 4.1.1. Перечисление Тип данных — зто описание возможных значений. К типам данных относятся числа, строки и перечисления. Перечисление (еппшегаг1оп) — зто тнп данных, имеющий конечное множество значений. Например, атрибут ассезхреттпехюп (разрешениеДоступа) на рис. 3.17 представляет собой перечисление с возможными значениями тепаи (чтение) и геев-ептге (чтение и запись).
На рис. 3.25 также присутствуют перечисления, которые вынесены на рис. 4.1. БяигерепТуре (Фигура.типКисти) — перечисление, включающее возможные значения зо!Ы (сплошная), пахйес1 (штриховая) и стоггегт (пунктирная). Тгеаоппепяопа1.11ЙТуре (Двумерная.типЗаливки) — перечисление, включающее возможные значения зо1п1 (сплошная), ягеу (полутон), попе (нет), Ьипгопта1 Йпез (горпзонтальные линии) и пегт(са1 Йпез (вертикальные линии).
Ргдпгв.рва тура Тио0епвпа1опаг.аяд1турв Рис 4.1. Примеры перечислений При конструировании моделей перечисления следует обязательно выделять, потому что они встречаются достаточно часто и важны для пользователей. Пере- 1.1. Расширенные концепции классов и объектов 87 числения важны и для реализации. Все возможные значения перечисления можно указать в списке для выбора. Необходимо также ограничить возможные данные разрешенными значениями.
Не следует использовать обобщение для указания значений перечислимого атрибута. Перечисление — это просто список значений, а обобщение предназначено для упорядочивания описания объектов. Обобщение следует использовать только там, где по крайней мере один из подклассов обладает атрибутами, операциями или ассоциациями, неприменимыми к суперклассу. Как показано на рис. 4.2, не следует строить обобщение класса Сагг1, потому что в большинстве игр карты разных мастей ведут себя одинаково. Напра вильно ггравильно Сагй виа: аив гали:гали Рис.
4.2. Не используйте обобщение для моделирования перечислений В языке ()М[. перечисление является типом данных. Для объявления перечисления необходимо указать ключевое слово епитегапоп в угловых кавычках (а») над именем перечисления в верхнем разделе прямоугольника. Во втором разделе перечисляются значения перечисления (рис. 4.2). 4.1.2. Кратность Кратность — это ограничение на количество возможных значений в наборе. В главе 3 было описано применение кратности к ассоциациям. Кратность применима и к атрибутам. Указание кратности для атрибутов часто оказывается полезным, особенно в приложениях, связанных с базами данных.
Кратность атрибута определяет количество возможных значений в каждом экземпляре атрибута. Наиболее типичные значения кратности: [1] — обязательное единственное значение, [0..1] — необязательное единственное значение, [*] — произвольное количество значений. Кратность определяет, является ли атрибут обязательным (в терминах баз данных — может ли атрибут иметь пустое значение). Она также указывает, является атрибут единственным значением, или он может представлять собой совокупность значений. Если кратность не указана, предполагается, что она равна [1] 88 Глава 4 ° Углубленное моделирование классов (обязательное единственное значение). На рис.
4.3 человек должен иметь одно имя, один или несколько адресов, одну дату рождения и жожет иметь один или несколько телефонных номеров. Рис. 4.3. Задание кратности для атрибутов 4.1.3. Область действия В главе 3 описывались составляющие индивидуальных объектов. Действительно, обычно составляющими обладают именно объекты, но в некоторых случаях приходится определять составляющие класса как целого.
Обдасгпь дейспгвия (зсоре) определяет, к чему относится данная составляющая; к объекту нлн к классу. Если областью действия составляющей является класс, ее имя подчеркивается. Такая составляющая называется статической. По нашему соглашению атрибуты и операции, областью действия которых является класс, указываются в верхней части соответствующих разделов (первыми). Атрибут, областью действия которого является класс, может хранить так называемый экстент класса (множество всех его объектов). Это довольно часто применяется в базах данных. Других статических атрибутов следует избегать, поскольку их использование ухудшает качество модели. Лучше всего моделировать группы явным образом и приписывать им нужные атрибуты.
Например, в верхней части рис. 4.4 изображена простая модель голосовой почты. Каждое сообщение характеризуется ящиком владельца, датой записи, временем записи, приоритетом, содержимым сообщения и флагом, указывающим, было ли оно уже доставлено адресату. Источником сообщения может быть почтовый ящик или звонок извне. Каждый почтовый ящик характеризуется номером телефона, паролем и записанным приветствием. В классе РйопеМеззайе мы можем хранить максимальную длительность сообщения и максимальный срок его хранения. В классе РпопеМа~!Ьох можно хранить ограничение на количество сообщений. Эта модель обладает определенными недостатками, поскольку все три ограничения задаются для системы в целом.
В модели, изображенной на нижней части рисунка, эти ограничения могут быть определены по-разному для разных типов пользователей, что в результате дает более гибкую и расширяемую систему голосовой почты. Статические операции, в отличие от атрибутов, вполне допустимы. Чаше всего операции, областью действия которых являются классы, применяются для создания новых экземпляров класса.
Иногда оказывается удобным определять статические операции для получения суммарных данных. Однако следует с осторожностью относиться к статическим операциям в распределенных приложениях. 4.1. Расширенные концепции классов и объектов 89 4.1.4. Видимость Видимость (н(яЬ111гу) характеризует способность метода ссылаться на составляющую другого класса и может принимать значения риЫ1с (открытая), рготестеИ (защищенная), ргюаГе (закрытая) и расйайе (пакетная). Конкретная интерпретация зтих значений зависит от языка программирования (подробнее см. главу 18). Любой метод может свободно обращаться к открытым составляющим (рцЫ1с). Методы класса-владельца составляющей и всех его потомков могут обращаться к защищенным составляющим (ргогесгег1).