Форум Сообщества Аналитиков
Дисциплины => Системный Анализ и Требования => Тема начата: kirka от 18 Октября 2015, 18:41:30
-
Приветствую всех!
Описываю программу по учету за предприятиями во всех странах мира. Вот готовлю диаграмму с атрибутами. Читал книгу по UML, но не понял когда применять белые стрелки. Понял что для установления связи с родителем можно применять линию с закрашенным ромбом на конце (Предприятие же не может существовать без страны? классификатоор точно не может существовать без предприятия, это мне понятно).
Вопросы:
1. Подскажите пожалуйста, правильно ли я установил связи между объектами?
2.Классификатор (в него пользователи могут добавлять новые продукцию) нужно отдельно описывать? Если да, то в диаграмме правильно изобразил?
Страна (Атрибуты)
• Название страны – выбор из классификатора стран
• Население - *число*
Промышленные предприятия (Атрибуты)
• Название предприятия - *строка 1-100*
• Количество работающих - *число*
• Название страны – ссылка на название родительской страны
• Выпускаемая продукция – ссылка на классификатор продукции
Энергетика (Атрибуты)
• Название предприятия - *строка 1-100*
• Количество работающих - *число*
• Название страны – ссылка на название родительской страны
• Выпускаемая продукция – ссылка на классификатор продукции
Классификатор продукции (пользователь может самостоятельно может добавлять новые продукты в этот классифиатор). Атрибуты классификатора:
• Название продукции
• Название предприятия – ссылка на название родительское предприятие
-
Здравствуйте.
1. Если уж следовать стандарту UML, то наименование классов нужно делать в единственном числе
2. Ромб заполненный - это композиция, разновидность агрегации, которая сама разновидность ассоциации. В вашем случае дотаточно иметь агрегацию, но я бы начал с простой ассоциации.
3. чем пром предприятие отличается от энергетики? По-моему, это виды предприятий, проще ввести атрибут: Вид предприятия. Можно создать абстрактный класс - Предприятие, от которого унаследовать разные виды предприятий. Но делать это нужно, если у разновидностей, есть какие-то особые атрибуты
4. Классификатор продукции - должен быть независимым классов. Между Предприятием и Классификатором продукции будет связь - многие ко многим, которую можно разрешить или промежуточным классом Выпускаемая продукция, или классом-ассоциацией Выпускаемая продукция.
А вообще мне к вам совет изучите нотацию рисования классов в UML: http://www.uml-diagrams.org/class-diagrams-overview.html
-
1)Для начала рекомендую понять принципы ООП.
2) Разобраться с постановкой задачи. Просто текстом для себя распишите должно быть то то и то то. 1) 2) 3)...
3) Какая то странная у вас классификация: Предприятия и энергетика. Наверное энергетика это специализация предприятия?
-
Спасибо большое что обратили внимание
Внес правки.
Вопросы следующие:
1. В родительском объекте "страна" атрибуты "Столица государства", "Крупные города страны" - используют 2 справочника классифакатор стран. городов. Я правильно указал связь со справочниками?
1.1 В каждом из объектов у атрибутов есть небольшие справочники. Пример: Дорога, атрибут "Тип" (грунтовая, асфальтовая), у мостов, атрибут грузоподъемность (1000, 2000, 3000, 5000). Стоит ли указывать такие мелкие классификаторы в диаграмме?
2. Инфраструктура - это дороги, мосты, аэродромы, Телекоммуникационные сети и т.д.
в диаграмме есть "Инфраструктура", у которо в принципе нет как таковых атрибутов, но есть у ее дочек атрибуты. Т.е.е у объектов "Дороги", "Мосты", "Аэродромы" и т.д. Я оставил пустым "инфраструктура", но сделал их зависимыми от "инфраструктура". Посмотрите пожалуйста правильно ли я нарисовал?
-
Учите матчасть. Неуд. ;)
Ниже пример моделирования утверждений:
Страна идентифицируется своим названием и своей столицей.
Важной характеристикой являются ее численность населения и ее крупные города.
Первая модель отображена через ассоциации. Обратите внимание на связь столица, со стороны Страны кратность много, ясно что один и тот же город не будет являться столицей нескольких стран. Т.е. можно было поставить кратность 1, но тут уже практические соображения заставляют меня делать так, как я сделал.
Подумайте над примерами и попробуйте сделать аналогично. Рисуйте например в draw.io, чего в пайнте или где вы там рисуете мучиться.
-
Давайте сначала выясним, с какой целью разрабатывается диаграмма классов. Я здесь вижу минимум три возможных применения:
1) описание структуры данных (например, для последующей реализации в базе данных)
2) описание структуры классов для объектно-ориентированного программирования (например, для реализации на языках типа C++ или Java)
3) описание предметной области - просто чтобы понять, что мы моделируем
В разных случаях у нас получатся разные диаграммы.
Использование атрибутов public/private имеет смысл только во втором случае (по крайней мере, я не знаю других способов применения).
-
Учите матчасть. Неуд. ;)
Город. Название: int
Дивный новый мир, в котором все города пронумерованы ;)
-
Город. Название: int
Дивный новый мир, в котором все города пронумерованы ;)
Ладно стебаться, просто ЕА по умолчанию ставит int. Кстати у каждого города есть код, буде тебе известно. ))
-
В Class Model1.png и Сlass Model2.png разные ситуации:
1) КАЖДЫЙ город является крупным ровно для ОДНОЙ страны;
2) город МОЖЕТ быть крупным для ЛЮБОГО набора стран.
-
В Class Model1.png и Сlass Model2.png разные ситуации:
1) КАЖДЫЙ город является крупным ровно для ОДНОЙ страны;
2) город МОЖЕТ быть крупным для ЛЮБОГО набора стран.
а вот это не обязывает хранить в виде атрибутов. Есть население в каждом городе. Можно сделать настройку для критерия "крупности" туда, заложить любые критерии, но в любом случае к крупным город будет относиться через сопоставление населения с настройками крупности.
Атрибут список крупные городов в стране можно рассматривать как элемент оптимизации. (Возможно преждевременной)
-
Внес правки.
Повторюсь: постановка задачи -"учет предприятий во всех странах мира" слишком абстрактная. Бессмысленно смотреть ваши потуги сделать нечто, если вы даже сами не понимаете что вы хотите сделать.
-
Замена ассоциации атрибутом эквивалентна только тогда, когда кратность убираемого полюса ассоциации 0..* (чтобы заменить ассоциацию "крупные города страны" можно ввести в Город атрибут Страна, но нельзя ввести в Страну атрибут Крупные Города).
-
В Class Model1.png и Сlass Model2.png разные ситуации:
1) КАЖДЫЙ город является крупным ровно для ОДНОЙ страны;
2) город МОЖЕТ быть крупным для ЛЮБОГО набора стран.
Да, Вадим, Вы правы. Если подходить более точно, то и мои модели не верны. Я просто хотел показать топикстартеру, что такое ассоциация, и как она связана с атрибутом. Что между двумя классами - могут быть несколько связей.
-
Замена ассоциации атрибутом эквивалентна только тогда, когда кратность убираемого полюса ассоциации 0..* (чтобы заменить ассоциацию "крупные города страны" можно ввести в Город атрибут Страна, но нельзя ввести в Страну атрибут Крупные Города).
Ну я действительно поспешил и не внес атрибут страна в Город. Однако Ваше утверждение о невозможности ввести атрибут крупные города в Страну не считаю верным.
Это зависит от направления навигации с одной стороны и возможностей реализации в коде с другой, но в виде UML, препятствий нет.
-
Используем Magic Draw
Три этапа преобразований - переход от ассоциаций к атрибутному составу. В город перетащена страна 1 раз, нет смысла перетаскивать ее дважды.Обратите внимание на стрелку навигации.
-
Спасибо большое. За рекомендацию программы также!
1.Вы внутри объектов указали атрибуты со знаком -. Это вы просто перечисляли так? или же действительно обозначили видимость этих атрибутов?
2. Galogen, вы представили 3 схемы. А какаая из них подходит под мою диаграмму, подскажите пожалуйста?
ЗЫ:
Страна
+Столица (город)
+Крупные города
+Население страны
Город
+Название
+Население города
-
2. Galogen, вы представили 3 схемы. А какаая из них подходит под мою диаграмму, подскажите пожалуйста?
Все три одинаковые. Вам лучше использовать первую. Но на самом деле проблема не в этом.
Вы ведете учет предприятий. Потому главный объект - это предприятие, все остальное - атрибуты. Например, предприятие имеет тип, месторасположение и т.п.
Место расположение = адрес, адрес содержит город, город входит в страну. И т.п.
Опишите то, что вы планируете хранить и для чего использовать