Форум Сообщества Аналитиков

Общий раздел => Для всех => Тема начата: DAS от 03 Февраля 2018, 21:43:16

Название: Помогите с диаграммой классов для описания предметной области
Отправлено: DAS от 03 Февраля 2018, 21:43:16
Добрый день!
Помогите, пожалуйста, с диаграммой классов для описания предметной области.

Задача:
Имеются напитки: Напиток 1, Напиток 2, Напиток 3, Напиток 4 (это Напиток 1 + Напиток 3), Напиток 5 (Напиток 2 + Напиток 3).
Есть добавки к напиткам: Добавка 1, Добавка 2 (только для Напитка 2 или Напитка 3), Добавка 3
Каждый напиток и добавка - это название + цена.

Еще может быть комплекс - это когда выбирают один (любой) напиток и одну добавку по фикс. цене.


Я начал решать следующим образом:
1) Имеется базовый класс "Напитки". Содержит наименование и цену.
2) Выделаю производные классы:
2.1) Класс "Основные напитки" - один или несколько объектов класса (1).
2.2) Класс "Вспомогательные напитки" - один объект класса (1).

Далее мне нужно как то показать зависимость 2.2. от 2.1 (т.е. вот это "Добавка 1, Добавка 2 (только для Напитка 2 или Напитка 3), Добавка 3").
И также не могу понять как отобразить вариант "комплекс" - возможность выбора одного (любого) напитка и одну добавку по фикс. цене.
Название: Re: Помогите с диаграммой классов для описания предметной области
Отправлено: Galogen от 03 Февраля 2018, 22:14:54
Плохо понятна цель задачи. Является ли условие исчерпывающим?
Да и лучше, если вы уже предложите какой-то свой вариант диаграммы.

Вы предложили класс Напитки (правда обычно класс называют Напиток)
А почему не предложили класс Добавка?
Далее видимо должен появится класс Комплекс.

Напитки как я могу понять делятся на простые (основные) и составные. Правильно я понимаю, что составные состоят только из двух простых основных? Если так, то можно изобразить агрегаций одного составного - двух простых.

Утверждение: Добавка 2 (только для Напитка 2 или Напитка 3) - не уверен, что можно как-то изобразить на диаграмме классов.

Утверждение: это когда выбирают один (любой) напиток и одну добавку по фикс. цене. - я так понимаю, что кто-то задает цену и нужно подобрать напиток + добавку стоимость которых в сумме = равна заданной?
Название: Re: Помогите с диаграммой классов для описания предметной области
Отправлено: DAS от 04 Февраля 2018, 10:32:45
Вы предложили класс Напитки (правда обычно класс называют Напиток)
А почему не предложили класс Добавка?
Класс добавка я назвал "вспомогательный класс" (2.2). Но, действительно, не правильно в названии классов. Нужно "Напиток" (2.1) и "Добавка" (2.2).

Правильно я понимаю, что составные состоят только из двух простых основных? Если так, то можно изобразить агрегаций одного составного - двух простых.
Нет, составной может состоять из двух и более простых основных.

Утверждение: это когда выбирают один (любой) напиток и одну добавку по фикс. цене. - я так понимаю, что кто-то задает цену и нужно подобрать напиток + добавку стоимость которых в сумме = равна заданной?
Цену не задают. Есть просто выбрана функция "комплекс", то можно выбрать только один напиток и добавку.
Название: Re: Помогите с диаграммой классов для описания предметной области
Отправлено: Galogen от 04 Февраля 2018, 21:41:21
ОК, я вам задаю вопросы, чтобы вы сами на них ответили и нарисовали диаграмму, сравнив ее с исходными требованиями. Т.е. начните предлагать ваши варианты.
Название: Re: Помогите с диаграммой классов для описания предметной области
Отправлено: DAS от 05 Февраля 2018, 10:16:07
Начал рисовать. Возникает много вопросов:
1) Допустимо ли Товар сделать абстрактным классом, и что от него идет ассоциация с классом "Строка заказа"?
2) Можно ли как то показать, что Напиток1 = Товар 1 + Товар 2?
Название: Re: Помогите с диаграммой классов для описания предметной области
Отправлено: Galogen от 05 Февраля 2018, 21:52:14
Начал рисовать. Возникает много вопросов:
1) Допустимо ли Товар сделать абстрактным классом, и что от него идет ассоциация с классом "Строка заказа"?
2) Можно ли как то показать, что Напиток1 = Товар 1 + Товар 2?


Забавно, юный падаван. Оказалось, что в задаче ещё куча дополнительных возможностей и требований :)

Если в заказе в качестве товара может выступать, то что определено иерархией класса Товар, то Товар - абстрактный класс - изображается курсивом.
Естественно в этом случае ассоциация от Товара к Строке Заказа - единственно верная.

Смущает класс Еда, Еда - это не класс, а обобщение (https://ru.wikipedia.org/wiki/%D0%9F%D0%B8%D1%89%D0%B0). На самом деле и напиток - еда, так что неверное выделение. Я ведь не еду покупаю, а конкретное блюдо, полуфабрикат, и т.п. Пищевой продукт  - если нужно более корректно.

Комплекс в вашей конструкции - как у собаки пятая нога, у телеги пятое колесо. Зачем, что, куда? Насколько я понимаю, я могу купить этот комплекс (вообще набор) по какой-то фиксированной цене и этот набор предопределен как некий товар.

Товар - может быть представлен: напитком, добавкой (что за штука?), пищевым продуктом (едой, пищей) и комплексом. При этом комплекс состоит, включает - напиток, продукт и добавку по какой-то фикспрайс
Название: Re: Помогите с диаграммой классов для описания предметной области
Отправлено: [прилетело НЛО и...] от 08 Февраля 2018, 20:09:13
В текущей версии комплекс -- не товар (значит, не имеет стоимости, не может быть включён в заказ).
Единственная операция на диаграмме кажется странной. Что, куда предполагается добавить?
Минимальные мощности 1 не всюду уместны. Например, водку (добавку) можно добавить в томатный сок (напиток), но не обязательно её ещё и в борщ (еда) плескать или в пельмени из шприца заряжать (еда). Опять же водку можно и в виноградный сок добавить (ну хорошо-хорошо, пусть будет чай+сахар, кофе+сахар).
Начать было удобно с внятного текстового описания ПО, которую предстоит визуально моделировать.