Диаграмма классов (объекты, атрибуты, связи) - правильно ли установлены связи? (Прочитано 20350 раз)
Приветствую всех!

Описываю программу по учету за предприятиями во всех странах мира. Вот готовлю диаграмму с атрибутами. Читал книгу по 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, чего в пайнте или где вы там рисуете мучиться.
« Последнее редактирование: 20 Октября 2015, 22:45:37 от Galogen »



Давайте сначала выясним, с какой целью разрабатывается диаграмма классов. Я здесь вижу минимум три возможных применения:
1) описание структуры данных (например, для последующей реализации в базе данных)
2) описание структуры классов для объектно-ориентированного программирования (например, для реализации на языках типа C++ или Java)
3) описание предметной области - просто чтобы понять, что мы моделируем

В разных случаях у нас получатся разные диаграммы.

Использование атрибутов public/private имеет смысл только во втором случае (по крайней мере, я не знаю других способов применения).
greesha.ru

Реальность - это убийство прекрасной теории бандой мерзких фактов. (Роберт Гласс)



Учите матчасть. Неуд. ;)

Город. Название: int
Дивный новый мир, в котором все города пронумерованы ;)
greesha.ru

Реальность - это убийство прекрасной теории бандой мерзких фактов. (Роберт Гласс)



Город. Название: 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 раз, нет смысла перетаскивать ее дважды.Обратите внимание на стрелку навигации.




 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19