[ДОМАШНЕЕ ЗАДАНИЕ 1.03] Практика моделирования — диаграмма классов


Это домашнее задание к занятию, на котором вы начали знакомиться с основами моделирования.


cover_homework_konti.jpg

Задание

Для того чтобы потренироваться в моделировании будет необходимо найти интересную лично для вас задачу. При этом очень желательно, чтобы предметная область позволяла выделить хотя бы 3-4 класса и 2-3 связи между ними. Нет большого смысла рисовать диаграмму, если у вас есть только один класс :)

Вы можете:

  1. Продолжить работу над задачей, ТЗ (техническое задание) для которой вы писали на прошлом занятии.
  2. Выбрать любую подходящую и понравившуюся задачу из рассмотренных другими студентами в домашней работе к предыдущему занятию.
  3. Взять задачу из предложенных инструктором.

Если вы хотите как следует попрактиковаться, то рекомендую выбрать не одну, а 2-3 разных задачи, причем желательно, чтобы хотя бы одна из них была из области, с которой вы раньше не сталкивались.

Для выбранной задачи сделайте следующее:

  1. Найдите группы объектов, обладающих одними и теми же свойствами, то есть определитесь с тем, какие вам необходимы классы для описания предметной области.
  2. Для каждого класса выпишите все свойства, необходимые для решения задачи.
  3. Посмотрите, нет ли у вас объектов, которые относятся сразу к нескольким классам. Если есть, то нельзя ли упростить модель, используя наследование?
  4. Разберитесь какие ассоциации существуют между классами. Что они обозначают? Какова их кратность?
  5. Возьмите листок бумаги и карандаш и нарисуйте диаграмму классов для вашей модели. Отобразите на ней классы, их свойства и связи между ними.

Если не нашли задачу

1.

Представьте, что вы фермер и выращиваете зерновые культуры (пшеницу, ячмень, гречиху). Вы арендуете земельные паи у местных жителей и платите фиксированную сумму в год за гектар или процент от стоимости урожая (по договоренности, с каждым по-разному). Для каждой культуры вам известны: закупочные цены, урожайность с гектара и затраты на обработку земли. Примеры задач: расчет рентабельности обработки каждого пая, обеспечение севооборота, выплата арендной платы владельцам паев (ради интереса пусть будет путем перевода на банковскую карту).

2.

Вы работаете в школе завучем. Вам необходимо составлять расписание уроков, учитывая запросы учителей (никто не хочет 1 и 5 урок, всем подавай подряд) и доступность и специализацию классов (физику не стоит вести в спортзале).

3.

Вы решили написать свою программу для управления роботом-пылесосом. Необходимо обеспечить уборку каждой комнаты в квартире по заданному графику. Например, на кухне желательно убираться дважды в день, в гостиной ежедневно, а в комнате для гостей - по требованию. Учтите, что для работы роботу необходимо знать не только геометрию комнат и как передвигаться между ними, но и расположение предметов в помещениях, а также место, где находится его зарядное устройство.

Сдача работы

Результаты вашей работы добавьте в комментарий к этому посту или, как вариант, красиво оформите и выложите в своем блоге, а в коммент тогда достаточно вставить ссылку на ваш пост.

Для облегчения процесса знакомства с работами друга-друга и последующего голосования под этим постом желательно воздержаться от других комментариев, кроме решений домашних работ и вопросов, связанных с их выполнением. Все вопросы по материалу занятия, пожалуйста, задавайте тут.


Итоги по выбору лучшей домашней работы будут подводиться в понедельник, 18 сентября, после 10 часов утра по МСК.


Готовы? Поехали!

Желаю успеха,
@wealthycat (Валерий), инструктор курса @sc-programming


logo

Comments 42


Я тут некоторое время думал как бы лучше подойти к своей задаче, которую описывал для прошлого задания и пока пришел вот к такому решения. Конечно может быть не совсем корректными названия классов, но как мне кажется у меня оно должно быть примерно так.

Надеюсь я все правильно понял. Со следующими занятиями я могу немного пролететь, так как завтра утром уеду на неделю и не знаю получится ли оттуда нормально участвовать.

15.09.2017 13:39
0

В целом выглядит хорошо.

А что означает связь между Персонажем и Архитипом?

Со следующими занятиями я могу немного пролететь

В этом нет ничего страшного, вернетесь - нагоните.

15.09.2017 13:53
0

Что можно из архитипа сделать своего персонажа добавив ему определенные вещи, а можно так не делать и оставить архитип. Или в таком случае не нужна связь?

15.09.2017 14:33
0

Что можно из архитипа сделать своего персонажа добавив ему определенные вещи, а можно так не делать и оставить архитип.

За это отвечает наследование. Вторая связь, выходит, там лишняя.

15.09.2017 15:27
0

Значит да.

15.09.2017 16:13
0

Задача про фермера.

Пояснение к моему творению:
Классы:жители и зерновые культуры,фермер тоже является жителем и у него одинаковые свойства с жителями, земельные паи, и значит он может наследовать жителям.
У класса зерновых культур есть свойства: цены, урожайность,затраты.
Вот такое решение на мой взгляд, подозреваю что с кратностью перемудрил.

15.09.2017 16:20
0

фермер тоже является жителем и у него одинаковые свойства с жителями, земельные паи, и значит он может наследовать жителям

На мой взгляд это достаточно странное ограничение. Да, фермер может быть жителем/владельцем пая, но может и не быть. Не уверен, что здесь нужно использовать наследование. Не проще ли ввести классы "Пай", "Владелец пая" и связать их ассоциацией? Насчет класса "Фермер" - зачем он нужен вообще? Что бы связать "Пай" и "Зерновые культуры" не лучше ли ввести класс "Посев/Урожай/..", как запись о том, чем конкретно был засеян пай в этом сезоне.

Еще не понятно, как с такой моделью считать расходы на аренду земли. Не ясно, что такое "паи" - это по-идее отдельная сущность, у нее есть свойства, например, размер и владелец.. И что такое "аренда" и "затраты"?

16.09.2017 07:32
0

Мое ДЗ

16.09.2017 20:11
0

Все привет! Вот моя домашняя работа:)

17.09.2017 08:44
0

В целом все хорошо, но есть парочка замечаний :)

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

Еще я бы убрал айдишки, обозначения областей видимости и типы данных - все это относится скорее к реализации, при анализе предметной области - это преждевременно. Еще заметил, что в модели есть свойства, которые отвечают за связи между сущностями, например, Reputation, User - это тоже реализация, причем в стиле ООП, если нужно будет модель трансформировать в схему реляционной БД будем мешать - имхо лишнее, тем более что имена для них выбраны не лучшим образом (Post.user - Post.createdBy: User, Comment.post - Comment.replyTo: Post)

Еще советую поля именовать с прописной буквы, чтобы отличать их от классов, которые с заглавной.

17.09.2017 13:20
0

Расчет рентабельности обработки каждого пая. Пока что как-то так

17.09.2017 11:03
0

Хорошая работа!

Есть правда пара замечаний:

  1. В вашей модели получается, что сам фермер всегда является владельцем пая, ассоциация ведь тоже наследуется.
  2. Есть непонятная ассоциация между Фермером и Местным жителем. Что это такое?
  3. Ассоциации хорошо бы подписать, например, Местный житель владеет Паем, Пай принадлежит Местному жителю
  4. Видимость (плюсики) не нужны - это относится к реализации, когда строите модель предметной области все это преждевременно
17.09.2017 13:27
0

Хотел уточнить:

  1. Получается наследуются все свойства, не может быть чтобы класс "фермер" не унаследовал свойство "количество паев", но в тоже время у него может быть 0 в этой графе.
  2. Думал что фермер может быть местным жителем, по аналогии сотрудник-начальник.
  3. Учту на будущее.
  4. на счет видимости не знал, просто пользовался сервисом http://staruml.io/ еще не до конца разобрался)
17.09.2017 13:34
0
  1. Ну да, все свойства наследуются. Именно поэтому наследование применяется не сказать чтобы часто. Я бы для Фермера и Местного Жителя ввел общего предка, скажем, Физлицо - куда вынес бы ФИО и другие общие свойства. Второй вариант, это изменить кратность ассоциации между местным жителем и паем, поставить там 0-1, вместо 1.
  2. Ага, может. В реале, такие штуки надо будет уточнять у заказчика, а пока учимся можно просто постулировать - да или нет.
  3. Я бы все же советовал ручками рисовать, на практике вы редко будете пользоваться софтом для рисования диаграмм, обычно этим балуются бизнес аналитики или архитекторы при составлении документации. Для остальных - блокнот или доска с маркерами. Для разработчика схемы нужны чтобы быстро разобраться с задачей, объяснить ее другим и т.д. - программы хоть и выдают красивый результат менее удобны в этом чем обычный карандаш с резинкой :) Еще учтите, что сейчас мы занимаемся анализом предметной области, а программы обычно заточенны под проектирование (очень похоже, но все же разные вещи - думаю, курс поможет понять в чем), отсюда, кстати, и вылезли плюсики :)
17.09.2017 13:53
0

17.09.2017 11:27
0

С расписанием как-то тяжелее

17.09.2017 12:02
0

Тут похуже. Согласен с классами Учитель, Предмет и Кабинет (названия классов всегда в единственном числе, так принято, хотя и подразумеваются множества). В вот дальше явно криво. Что такое Рабочее время не понятно, для Рассписания явно нужна дополнительная сущность Урок, которая будет связана с Учителем, Предметом и Кабинетом и будет иметь дополнительные свойства, такие как время_проведения. Не ясно что такое Нагрузка, при этом у него есть свойство "Программа занятий...", которое тянет на полноценную сущность, то есть не является элементарным. Короче, надо дорабатывать :)

17.09.2017 13:37
0

Ну да тут запутано немного, "Нагрузка" - учебный план (уроки,часы, нормативы).
В "Рабочее время" пытался вынести условия, так как не совсем понимаю как их учитывать( учителя не хотят 1 и 5 уроки, чтобы не было пробелов в уроках у детей). Попробую доработать вечером

17.09.2017 13:43
0

Выкладываю свою работу: /djand/@djand/dz-1-03-ot-wealthycat

17.09.2017 15:50
0

Диаграмма к задачке про робот-уборщик:

В этой задачке я убираю расположение предмета при расчете убираемой поверхности для того, чтобы робот-уборщик не посчитал сам предмет мусором и не выкинул его на помойку. Зато поверхность предмета робот-уборщик пусть чистит и убирает с нее мусор.

Моделировать пылесос мне показалось не интересно.

21.09.2017 08:53
0

Мое ДЗ
/sc-programming/@annahobotova/domashka-1-03

17.09.2017 20:46
0

Очень понравилось, что вы выложили промежуточный вариант работы.

Вы идете в правильном направлении, но модель еще нужно дорабатывать. Справа, там где Предмет, Комната, Траектория - все норм, а вот слева, еще надо подумать :) Думаю вы разберетесь, но если все же не получится - пишите, помогу.

18.09.2017 06:44
0

Думаю правильно было бы объединить дни недели частоту, поэтому они сейчас представлены как Класс Время

18.09.2017 18:26
0

Да, так гораздо лучше. Есть еще одна штука, не заметил сразу. У вас как-то странно записаны имена ассоциаций и их кратности - они, по идее, должны быть с обоих концов ассоциации.

18.09.2017 18:31
0

так лучше?

18.09.2017 18:55
0

@annahobotova

А интересно получилось :) Предмет может быть нигде (0), в одной (1) или сразу в нескольких комнатах?

И еще второе направление проставьте, там где оно имеет смысл. Например, Комната содержит от 0 до бесконечности предметов.

18.09.2017 18:59
0

@sc-programming
а почему бы и нет:) а вообще такие предметы как стулья или кровати могут находиться в нескольких комнатах сразу. А также из полного перечня предметов может что-то и не находится в комнатах или быть убранным вообще, тогда 0. Логика была такая, что у предмета есть 3 варианта "существования"/нахождения.

Второе направление проставлю, но такой вопрос: а разве само нахождение предметов в комнате не определяет сколько в ней находится? или таким образом мы проставяем "пропускную способность" комнаты (сколько она должна вместить, предельный уровень)?

18.09.2017 19:44
0

... такие предметы как стулья или кровати могут находиться в нескольких комнатах сразу

Разумеется могут, но ведь это будут разные стулья и у каждого из них будет свое положение в пространстве. А ваша модель читается именно так, что один и тот же стул находится в нескольких комнатах.

не находится в комнатах или быть убранным вообще, тогда 0

Вот это можно и оставить, хотя не понятно зачем пылесосу знать о таких предметах.

а разве само нахождение предметов в комнате не определяет сколько в ней находится

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

19.09.2017 10:54
0

17.09.2017 22:47
0

Выглядит хорошо, но можно улучшить пару мелочей:

  1. Желательно поподписывать связи с обоих сторон
  2. Можно уточнить кратности - не очень понятно 10-бесконечность, да и не везде они проставлены
  3. Как насчет класса Предмет? Может пригодится?
  4. Проверьте модель на предмет избыточных связей. Нужна ли связь Учитель - Расписание? Ведь вы обошлись без связи Аудитория - Расписание, так как эти сущности связанны опосредованно, через Урок.

P.S. Советую (не настаиваю) не мучаться с графическим редактором, делайте просто карандашом на бумажке и фотографируйте.

18.09.2017 06:54
0

В доме просто не оказалось ни одной чистой бумажки)) только маленькие листочки. В дальнейшем буду делать на бумаге.
Спасибо, обдумаю и исправлю.

18.09.2017 12:26
0

Создание заготовки для обзорной публикации на основе публикаций участников эстафеты, которые я одобрила.

18.09.2017 08:23
0

Выглядит хорошо, но есть пара проблем:

  1. Если вы наследуете пост-обзор от поста-участника, зачем нужно повтороно устанавливать ассоциации поста-обзора с изображением и текстом-поста? Ведь эти ассоциации и так наследуются от поста-участника.
  2. Не очень понятно зачем нужно наследавание текста-поста от текста-заготовки... Какие свойства там наследуются?
  3. Текст-поста ассоциируется с изображением и сам пост тоже ассоциируется с изображением - точно нужны обе эти ассоциации? Они разные по смыслу? Не достаточно ли одной, той что идет от текста и изображению?
18.09.2017 12:14
0

Благодарю за комментарий. Пробую разобраться.

  1. Согласна, если связи тоже наследуются, их можно не дублировать. И тем упростить схему.
  2. Я не знала, как связать файлик с заготовкой и файл с формирующимся каждый раз текстом. Для меня это одинаковые объекты, отличающиеся только тем, что один неизменен, а другие формируются на основе полученных за неделю данных. Может, не смогла абстрагироваться от того, что оба текст. Я не могу отнести их к одному классу. У них цели и использование разные. Могу ли я оставить оба класса как есть, только убрать связь наследования?
  3. Я проставила все связи, а нужно было только те, которые будут использоваться при решении? Т.е., например, изображение связано с текстом поста, потому, что текст формируется, включая данные об изображении, а связь с постом можно убрать? (хотя изображение есть и там, но оно идет через текст поста, а не напрямую)
18.09.2017 13:00
0
  1. Файлик с заготовкой это шаблон, он все таки немного отличается от текста. Есть интересный вариант, когда вы не редактируете шаблон в ручную, а заполняете его данными программно. Поэтому лучше всего для шаблона и текста сделать разные классы.
  2. Ну да, только те что нужны. Связи это по сути лишнее свойства. Зачем вам в посте нужен список всех картинок? Он ведь и так будет в тексте. Если еще одна связь и понадобится, в всегда сможете добавить ее на этапе проектирования или просто в коде. Пока разбираетесь с предметной областью лишние связи просто захламляют модель.
18.09.2017 13:30
0


Вот что у меня получилось про пылесос.

19.09.2017 21:39
0

1) Названия свойств записанны неверно. Комната 1, Комната 2... - это ведь одно свойство, например, название_комнаты или номер_комнаты
2) Зачем нужно свойство "периодичность", ведь и так есть связь комната-период, которая эту периодичность показывает.
3) Маршрут - это явно сложный объект. Из чего он состоит? И какие, кстати, данные нужны для его определения?
4) Не правильно проставленны кратности - не бывает кратности "бесконечность", может быть 0-бесконечность, 1-бесконечность, 1, 0-1 и тд.

Если что-то не понятно, пишите, постараюсь объяснить подробнее. Жду исправелнную модель)

20.09.2017 05:22
0

Я про маршрут не могу понять. Или его проводят по маршруту, занося его в память под каждую комнату или он сам определяет куда ехать в зависимости от наличия препятствий, поэтому обозначил каждый маршрут просто как маршрут. Есть отдельный маршрут к розетке или месту парковки. он задается отдельно для каждого помещения.

20.09.2017 05:49
0

Нам не важно сейчас как определяется маршрут, важно просто внести в модель что для этого нужно. Смотрите, в каждой комнате есть двери - одна или несколько. На мой взгляд, для прокладки маршрута надо знать где двери находятся и в какую комнату ведут. Вот и все. Хотя нет. Еще нужно учитывать где стоит мебель, которую надо объезжать. Как-то так.

20.09.2017 06:08
0