Это домашнее задание к занятию, на котором вы начали знакомиться с основами моделирования.
Задание
Для того чтобы потренироваться в моделировании будет необходимо найти интересную лично для вас задачу. При этом очень желательно, чтобы предметная область позволяла выделить хотя бы 3-4 класса и 2-3 связи между ними. Нет большого смысла рисовать диаграмму, если у вас есть только один класс :)
Вы можете:
- Продолжить работу над задачей, ТЗ (техническое задание) для которой вы писали на прошлом занятии.
- Выбрать любую подходящую и понравившуюся задачу из рассмотренных другими студентами в домашней работе к предыдущему занятию.
- Взять задачу из предложенных инструктором.
Если вы хотите как следует попрактиковаться, то рекомендую выбрать не одну, а 2-3 разных задачи, причем желательно, чтобы хотя бы одна из них была из области, с которой вы раньше не сталкивались.
Для выбранной задачи сделайте следующее:
- Найдите группы объектов, обладающих одними и теми же свойствами, то есть определитесь с тем, какие вам необходимы классы для описания предметной области.
- Для каждого класса выпишите все свойства, необходимые для решения задачи.
- Посмотрите, нет ли у вас объектов, которые относятся сразу к нескольким классам. Если есть, то нельзя ли упростить модель, используя наследование?
- Разберитесь какие ассоциации существуют между классами. Что они обозначают? Какова их кратность?
- Возьмите листок бумаги и карандаш и нарисуйте диаграмму классов для вашей модели. Отобразите на ней классы, их свойства и связи между ними.
Если не нашли задачу
1.
Представьте, что вы фермер и выращиваете зерновые культуры (пшеницу, ячмень, гречиху). Вы арендуете земельные паи у местных жителей и платите фиксированную сумму в год за гектар или процент от стоимости урожая (по договоренности, с каждым по-разному). Для каждой культуры вам известны: закупочные цены, урожайность с гектара и затраты на обработку земли. Примеры задач: расчет рентабельности обработки каждого пая, обеспечение севооборота, выплата арендной платы владельцам паев (ради интереса пусть будет путем перевода на банковскую карту).
2.
Вы работаете в школе завучем. Вам необходимо составлять расписание уроков, учитывая запросы учителей (никто не хочет 1 и 5 урок, всем подавай подряд) и доступность и специализацию классов (физику не стоит вести в спортзале).
3.
Вы решили написать свою программу для управления роботом-пылесосом. Необходимо обеспечить уборку каждой комнаты в квартире по заданному графику. Например, на кухне желательно убираться дважды в день, в гостиной ежедневно, а в комнате для гостей - по требованию. Учтите, что для работы роботу необходимо знать не только геометрию комнат и как передвигаться между ними, но и расположение предметов в помещениях, а также место, где находится его зарядное устройство.
Сдача работы
Результаты вашей работы добавьте в комментарий к этому посту или, как вариант, красиво оформите и выложите в своем блоге, а в коммент тогда достаточно вставить ссылку на ваш пост.
Для облегчения процесса знакомства с работами друга-друга и последующего голосования под этим постом желательно воздержаться от других комментариев, кроме решений домашних работ и вопросов, связанных с их выполнением. Все вопросы по материалу занятия, пожалуйста, задавайте тут.
Итоги по выбору лучшей домашней работы будут подводиться в понедельник, 18 сентября, после 10 часов утра по МСК.
Готовы? Поехали!
Желаю успеха,
@wealthycat (Валерий), инструктор курса @sc-programming
Расчет рентабельности обработки каждого пая. Пока что как-то так
Хорошая работа!
Есть правда пара замечаний:
Хотел уточнить:
Ну да, все свойства наследуются. Именно поэтому наследование применяется не сказать чтобы часто. Я бы для Фермера и Местного Жителя ввел общего предка, скажем, Физлицо - куда вынес бы ФИО и другие общие свойства. Второй вариант, это изменить кратность ассоциации между местным жителем и паем, поставить там 0-1, вместо 1.
Ага, может. В реале, такие штуки надо будет уточнять у заказчика, а пока учимся можно просто постулировать - да или нет.
Я бы все же советовал ручками рисовать, на практике вы редко будете пользоваться софтом для рисования диаграмм, обычно этим балуются бизнес аналитики или архитекторы при составлении документации. Для остальных - блокнот или доска с маркерами. Для разработчика схемы нужны чтобы быстро разобраться с задачей, объяснить ее другим и т.д. - программы хоть и выдают красивый результат менее удобны в этом чем обычный карандаш с резинкой :) Еще учтите, что сейчас мы занимаемся анализом предметной области, а программы обычно заточенны под проектирование (очень похоже, но все же разные вещи - думаю, курс поможет понять в чем), отсюда, кстати, и вылезли плюсики :)
Я тут некоторое время думал как бы лучше подойти к своей задаче, которую описывал для прошлого задания и пока пришел вот к такому решения. Конечно может быть не совсем корректными названия классов, но как мне кажется у меня оно должно быть примерно так.
Надеюсь я все правильно понял. Со следующими занятиями я могу немного пролететь, так как завтра утром уеду на неделю и не знаю получится ли оттуда нормально участвовать.
В целом выглядит хорошо.
А что означает связь между Персонажем и Архитипом?
В этом нет ничего страшного, вернетесь - нагоните.
Что можно из архитипа сделать своего персонажа добавив ему определенные вещи, а можно так не делать и оставить архитип. Или в таком случае не нужна связь?
За это отвечает наследование. Вторая связь, выходит, там лишняя.
Значит да.
Вот что у меня получилось про пылесос.
Если что-то не понятно, пишите, постараюсь объяснить подробнее. Жду исправелнную модель)
Я про маршрут не могу понять. Или его проводят по маршруту, занося его в память под каждую комнату или он сам определяет куда ехать в зависимости от наличия препятствий, поэтому обозначил каждый маршрут просто как маршрут. Есть отдельный маршрут к розетке или месту парковки. он задается отдельно для каждого помещения.
Нам не важно сейчас как определяется маршрут, важно просто внести в модель что для этого нужно. Смотрите, в каждой комнате есть двери - одна или несколько. На мой взгляд, для прокладки маршрута надо знать где двери находятся и в какую комнату ведут. Вот и все. Хотя нет. Еще нужно учитывать где стоит мебель, которую надо объезжать. Как-то так.
Создание заготовки для обзорной публикации на основе публикаций участников эстафеты, которые я одобрила.
Выглядит хорошо, но есть пара проблем:
Благодарю за комментарий. Пробую разобраться.
Выглядит хорошо, но можно улучшить пару мелочей:
P.S. Советую (не настаиваю) не мучаться с графическим редактором, делайте просто карандашом на бумажке и фотографируйте.
В доме просто не оказалось ни одной чистой бумажки)) только маленькие листочки. В дальнейшем буду делать на бумаге.
Спасибо, обдумаю и исправлю.
Мое ДЗ
https://golos.id/sc-programming/@annahobotova/domashka-1-03
@sc-programming
а почему бы и нет:) а вообще такие предметы как стулья или кровати могут находиться в нескольких комнатах сразу. А также из полного перечня предметов может что-то и не находится в комнатах или быть убранным вообще, тогда 0. Логика была такая, что у предмета есть 3 варианта "существования"/нахождения.
Второе направление проставлю, но такой вопрос: а разве само нахождение предметов в комнате не определяет сколько в ней находится? или таким образом мы проставяем "пропускную способность" комнаты (сколько она должна вместить, предельный уровень)?
Разумеется могут, но ведь это будут разные стулья и у каждого из них будет свое положение в пространстве. А ваша модель читается именно так, что один и тот же стул находится в нескольких комнатах.
Вот это можно и оставить, хотя не понятно зачем пылесосу знать о таких предметах.
В принципе да, определяет. Но тут есть нюанс. Если у нас есть только ассоциация предмет -> комната, то для того чтобы узнать какие предметы находятся в данной комнате нам придется перебрать все предметы и проверить для каждого а находится ли он в нашей комнате. Поэтому мы добавляем вторую ассоциацию комната -> предмет. Эти две ассоциации по сути несут одну и ту же информацию, хотя у них будет разное название и разная кратность, и обозначаются они одной линией. Добавление обоих названий и кратностей делает нашу модель более полной и удобной для чтения.
Очень понравилось, что вы выложили промежуточный вариант работы.
Вы идете в правильном направлении, но модель еще нужно дорабатывать. Справа, там где Предмет, Комната, Траектория - все норм, а вот слева, еще надо подумать :) Думаю вы разберетесь, но если все же не получится - пишите, помогу.
Думаю правильно было бы объединить дни недели частоту, поэтому они сейчас представлены как Класс Время
Да, так гораздо лучше. Есть еще одна штука, не заметил сразу. У вас как-то странно записаны имена ассоциаций и их кратности - они, по идее, должны быть с обоих концов ассоциации.
@annahobotova
А интересно получилось :) Предмет может быть нигде (0), в одной (1) или сразу в нескольких комнатах?
И еще второе направление проставьте, там где оно имеет смысл. Например, Комната содержит от 0 до бесконечности предметов.
так лучше?
Выкладываю свою работу: https://golos.id/djand/@djand/dz-1-03-ot-wealthycat
Диаграмма к задачке про робот-уборщик:
В этой задачке я убираю расположение предмета при расчете убираемой поверхности для того, чтобы робот-уборщик не посчитал сам предмет мусором и не выкинул его на помойку. Зато поверхность предмета робот-уборщик пусть чистит и убирает с нее мусор.
Моделировать пылесос мне показалось не интересно.
С расписанием как-то тяжелее
Тут похуже. Согласен с классами Учитель, Предмет и Кабинет (названия классов всегда в единственном числе, так принято, хотя и подразумеваются множества). В вот дальше явно криво. Что такое Рабочее время не понятно, для Рассписания явно нужна дополнительная сущность Урок, которая будет связана с Учителем, Предметом и Кабинетом и будет иметь дополнительные свойства, такие как время_проведения. Не ясно что такое Нагрузка, при этом у него есть свойство "Программа занятий...", которое тянет на полноценную сущность, то есть не является элементарным. Короче, надо дорабатывать :)
Ну да тут запутано немного, "Нагрузка" - учебный план (уроки,часы, нормативы).
В "Рабочее время" пытался вынести условия, так как не совсем понимаю как их учитывать( учителя не хотят 1 и 5 уроки, чтобы не было пробелов в уроках у детей). Попробую доработать вечером
Все привет! Вот моя домашняя работа:)
В целом все хорошо, но есть парочка замечаний :)
С репутацией не понятно. Там по идее две связи должно быть - кто поставил лайк и к чему он относится (пост, коммент)
Еще я бы убрал айдишки, обозначения областей видимости и типы данных - все это относится скорее к реализации, при анализе предметной области - это преждевременно. Еще заметил, что в модели есть свойства, которые отвечают за связи между сущностями, например, Reputation, User - это тоже реализация, причем в стиле ООП, если нужно будет модель трансформировать в схему реляционной БД будем мешать - имхо лишнее, тем более что имена для них выбраны не лучшим образом (Post.user - Post.createdBy: User, Comment.post - Comment.replyTo: Post)
Еще советую поля именовать с прописной буквы, чтобы отличать их от классов, которые с заглавной.
Задача про фермера.
Пояснение к моему творению:
Классы:жители и зерновые культуры,фермер тоже является жителем и у него одинаковые свойства с жителями, земельные паи, и значит он может наследовать жителям.
У класса зерновых культур есть свойства: цены, урожайность,затраты.
Вот такое решение на мой взгляд, подозреваю что с кратностью перемудрил.
На мой взгляд это достаточно странное ограничение. Да, фермер может быть жителем/владельцем пая, но может и не быть. Не уверен, что здесь нужно использовать наследование. Не проще ли ввести классы "Пай", "Владелец пая" и связать их ассоциацией? Насчет класса "Фермер" - зачем он нужен вообще? Что бы связать "Пай" и "Зерновые культуры" не лучше ли ввести класс "Посев/Урожай/..", как запись о том, чем конкретно был засеян пай в этом сезоне.
Еще не понятно, как с такой моделью считать расходы на аренду земли. Не ясно, что такое "паи" - это по-идее отдельная сущность, у нее есть свойства, например, размер и владелец.. И что такое "аренда" и "затраты"?
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
knopki, dreamer, vik, vadbars, voltash, bobrik, on1x, oksana0407, vika-teplo, borisss, ogion, nerengot, lokkie, wind33, verdon, chupaaa, izbushka
Поэтому я тоже проголосовал за него!
Узнать подробности о сообществе можно тут:
Разрешите представиться - Кит Добрый
Правила
Инструкция по внесению Инвестиционного взноса
Вы тоже можете стать Инвестором и поддержать проект!!!
Если Вы хотите отказаться от поддержки Доброго Кита, то ответьте на этот комментарий командой "!нехочу"