Результаты выявления связей оформим в виде таблицы 1.2.
Таблица 1.2. Связи справочника
Для каждой картотеки создаем соответствующий класс в репозитории выбранного для моделирования CASE-инструмента. Всего следует создать 11 классов: 7 классов для событий и 4 класса для справочников. Соответствующие диаграммы классов изображены на рисунках 1.1 и 1.2.
Рис. 1.1. Диаграмма классов UML для картотек событий. Показаны атрибуты классов
рис. 1.2. диаграмма классов uml для справочников картотек. показаны атрибуты классов
Создаем новую диаграмму классов5 и помещаем в ее центр класса «Заказ гостя». Согласно списку связей указываем связанные с ним классы-картотеки. После расстановки связей между классами, которые на UML называются ассоциациями, для каждого конца ассоциации расставляем «множественность».
Множественность определяется для экземпляров, т. е. в нашем случае для карточек, и указывает, сколько карточек связано с данной карточкой:
Данный «Заказ» связан:
• с одним экземпляром «Кафе» (значок «1» – ровно один);
• с одним экземпляром класса «Сотрудник» (значок «1» – ровно один) (т. е. с официантом, проводящим обслуживание);
• со многими экземплярами «Блюд» (значок «*» – ноль или много);
• с ноль или одной «Оплатой заказа» (значок «0..1»);
• с одним «Меню» (значок «1» – ровно один).
Теперь рассмотрим другую сторону (роль) ассоциаций:
• экземпляр «Кафе» связан со многими «Заказами» (значок «0..*» – ноль или много);
• экземпляр «Сотрудника» связан со многими «Заказами» (значок «0..*»);
• экземпляр «Блюда» связан со многими «Заказами» (значок «0..*»);
• «Оплата заказа» связана ровно с одним «Заказом» (значок «1» – ровно один);
• экземпляр «Меню» связан со многими «Заказами» (значок «0..*»).
Теперь указываем «поля карточек» в картотеках как атрибуты классов, существенные для учета согласно целям моделирования.
Атрибуты «Заказа клиента»: «дата-время начала обслуживания» и «дата-время завершения обслуживания» (гости ушли, освободив столик) позволяют учитывать время, когда столик («номер столика» указан в атрибуте) был занят на время данного обслуживания. Также необходимо учитывать общую «стоимость», вычисляемую по «Меню» и количеству заказанных блюд.
• Атрибуты «Сотрудника» – фамилия, имя, отчество, должность, оклад (опционально).
• Атрибуты «Кафе» – название, адрес, число столиков.
• Атрибуты «Оплаты заказа» – дата-время оплаты (стоимость не указываем, т. к. уже есть в самом «Заказе»);
• Атрибуты «Блюда» – название, тип блюда, время приготовления.
Рис. 1.3. Диаграмма классов UML для картотеки «Заказ» гостя в кафе. Показаны атрибуты классов
Для оставшихся событий «Покупка продуктов», «Списание бракованных продуктов», «Списание бракованных блюд», «Инвентаризация» и «Меню» соответствующие диаграммы классов UML приведены ниже – на рисунках 1.4—1.8.
Рис. 1.4. Диаграмма классов UML для картотеки «Закупка продуктов» в кафе. Показаны атрибуты классов участников
Рис. 1.5. Диаграмма классов UML для картотеки «Списание бракованных продуктов» в кафе
Рис. 1.6. Диаграмма классов UML для картотеки «Списание бракованных блюд» в кафе
Рис. 1.7. Диаграмма классов UML для картотеки «Инвентаризация» в кафе
Рис. 1.8. Диаграмма классов UML для картотеки «Меню»
Теперь, продолжая шаг 5, связываем справочники друг с другом, последовательно создавая диаграммы классов для картотек «Пункт питания», «Сотрудник», «Блюдо» и «Продукты».
Рис. 1.9. Диаграмма классов UML для справочников «Кафе» и «Сотрудник»
Рис. 1.10. Диаграмма классов UML для справочников «Блюдо» и «Продукты»
Ассоциации с множественностью «Много ко многим» могут иметь собственные свойства. Например, для связи «Заказ» – «Блюдо» (рис. 1.3) таким свойством является число заказанных экземпляров блюда. Например, если заказано два мороженых, то двойка – это не атрибут «Заказа» и не атрибут «Блюда» (рецепта), это атрибут ассоциации «много ко многим».
Согласно паттерну «Объект список» удаляем из диаграммы ассоциацию между «Заказом» и «Блюдом» и вместо нее вводим новый класс «Строка списка». Эту строку следует ввести для каждого блюда, вошедшего в «Заказ». Результат применения паттерна «Объект-список» показан на рис. 1.3.
Рис. 1.11. Диаграмма Классов «Заказ» преобразовывается по паттерну «Объект – список», который применен к ассоциации «Заказ» – «Блюдо».
«Строка заказа» связана с «Заказом» композицией (закрашенный ромбик) – это значит, что при удалении «Заказа» все его «Строки заказа» также будут удалены.
Применим паттерн «Объект список» к ассоциациям «Много ко многим» для оставшихся событий «Закупка продуктов», «Списание бракованных продуктов», «Списание бракованных блюд» и «Инвентаризация», «Меню», а также к справочнику «Блюдо» – соответствующие диаграммы классов приведены ниже, на рис. 1.12—1.16.
Рис. 1.12. Диаграмма классов «Закупка продуктов» преобразуется по паттерну «Объект – список» – сравните с рис. 1.4
Рис. 1.13. диаграмма классов «списание бракованных продуктов» преобразуется по паттерну «объект – список» – сравните с рис. 1.5
Рис. 1.14. Диаграмма классов «Списание бракованных блюд» преобразуется по паттерну «Объект – список» – сравните с рис. 1.6
Рис. 1.15. Диаграмма классов «Инвентаризация» преобразуется по паттерну «Объект – список» – сравните с рис. 1.7
Рис. 1.16. Диаграмма классов «Меню» преобразуется по паттерну «Объект – список» – сравните с рис. 1.8
Рис. 1.16. Диаграмма классов «Блюдо» преобразуется по паттерну «Объект – список» – сравните с рис. 1.10