2012-05-24 2 views
0

У меня вопрос о повторении классов между модулями.
У меня был большой модуль с 24 классами и разделил его на три класса с 8. Но есть класс («пользователи»), который появляется в двух из модулей. Я могу повторить это? И мне нужно поместить атрибуты в оба модуля?
А что такое максимальный идеал для классов в модуле?Class Diagram - повторить класс в модулях?

ответ

4

Практически говоря: в UML вы можете многократно описывать класс/объект. И вам не нужно показывать всех участников (свойств).

Идеальный способ описания классов & состоит в том, что каждый класс содержится в пакете, но может быть ссылкой (иметь какое-либо отношение) с другими классами, либо в одном пакете, либо в другом пакете.

Следующие диаграммы на практическом плане ok и несколько способов описать одно и то же в U.M.L. Я пытаюсь не путать вас, со многими диаграммами.

Вся идея заключается в том, что в U.M.L у вас может быть несколько вариантов описания или моделирования той же идеи.

Рисунок 1. Пример полностью описанных классов в пределах одной и той же упаковки.

................................................................................... 
..+--------------------+........................................................... 
..|..Streams...........|........................................................... 
..+--------------------+---------------------------------------------------------+. 
..|..............................................................................|. 
..|.+----------------------------------+....+----------------------------------+.|. 
..|.|   StreamClass   |....|   ReaderClass    |.|. 
..|.+----------------------------------+....+----------------------------------+.|. 
..|.| [#] void Read()  <<abstract>> |....| [+] void Read()  <<override>> |.|. 
..|.| [#] void Write() <<abstract>> +<---+ [+] bool CanRead() <<override>> |.|. 
..|.| [+] bool CanRead() <<virtual>> |....| [+] bool CanWrite() <<override>> |.|. 
..|.| [+] bool CanWrite() <<virtual>> |....| [+] bool CanRead() <<virtual>> |.|. 
..|.+----------------------------------+....+----------------------------------+.|. 
..|..............................................................................|. 
..+------------------------------------------------------------------------------+. 
................................................................................... 

Рисунок 2. Примеры классов в пределах того же пакета, опуская unnecesary члены

.................................................................................... 
..+--------------------+............................................................ 
..|..Streams...........|............................................................ 
..+--------------------+----------------------------------------------------------+. 
..|...............................................................................|. 
..|.+----------------------------------+....+----------------------------------+..|. 
..|.|   StreamClass   |....|   ReaderClass    |..|. 
..|.+----------------------------------+....+----------------------------------+..|. 
..|.| [#] void Read()  <<abstract>> |....| [+] void Read()  <<override>> |..|. 
..|.| [#] void Write() <<abstract>> +<---+ [+] bool CanRead() <<override>> |..|. 
..|.| [+] bool CanRead() <<virtual>> |....| [+] bool CanWrite() <<override>> |..|. 
..|.| [+] bool CanWrite() <<virtual>> |....+----------------------------------+..|. 
..|.+----------------------------------+..........................................|. 
..|...............................................................................|. 
..+-------------------------------------------------------------------------------+. 
.................................................................................... 

Рисунок 3. Примеры классов в разных пакетах

................................................................................... 
.+--------------------+...................+--------------------+................... 
.|..Streams...........|...................|..Readers...........|................... 
.+--------------------+-----------------+.+--------------------+-----------------+. 
.|......................................|.|..|...................................|. 
.|.+----------------------------------+.|.|.+----------------------------------+.|. 
.|.|   StreamClass   |.|.|.|   ReaderClass    |.|. 
.|.+----------------------------------+.|.|.+----------------------------------+.|. 
.|.| [#] void Read()  <<abstract>> |.|.|.| [+] void Read()  <<override>> |.|. 
.|.| [#] void Write() <<abstract>> +<----+ [+] bool CanRead() <<override>> |.|. 
.|.| [+] bool CanRead() <<virtual>> |.|.|.| [+] bool CanWrite() <<override>> |.|. 
.|.| [+] bool CanWrite() <<virtual>> |.|.|.+----------------------------------+.|. 
.|.+----------------------------------+.|.|......................................|. 
.|......................................|.|......................................|. 
.+--------------------------------------+.+--------------------------------------+.. 
................................................................................... 

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

Рис. 4. Примеры полностью описанных классов без пакетов.

................................................................................ 
..+----------------------------------+....+----------------------------------+.. 
..|   StreamClass   |....|   ReaderClass    |.. 
..+----------------------------------+....+----------------------------------+.. 
..| [#] void Read()  <<abstract>> |....| [+] void Read()  <<override>> |.. 
..| [#] void Write() <<abstract>> +<---+ [+] bool CanRead() <<override>> |.. 
..| [+] bool CanRead() <<virtual>> |....| [+] bool CanWrite() <<override>> |.. 
..| [+] bool CanWrite() <<virtual>> |....+----------------------------------+.. 
..+----------------------------------+.......................................... 
................................................................................ 

И, наконец, иногда каждый класс полностью описывается с контейнером упакованного, а также диаграммы, в которой отображаются только отношения. Следующие 3 цифры представляют 3 дополнительные диаграммы.

Fig 5.1 Пример одного класса.

........................................... 
..+--------------------+................... 
..|..Streams...........|................... 
..+--------------------+-----------------+. 
..|......................................|. 
..|.+----------------------------------+.|. 
..|.|   StreamClass   |.|. 
..|.+----------------------------------+.|. 
..|.| [#] void Read()  <<abstract>> |.|. 
..|.| [#] void Write() <<abstract>> |.|. 
..|.| [+] bool CanRead() <<virtual>> |.|. 
..|.| [+] bool CanWrite() <<virtual>> |.|. 
..|.+----------------------------------+.|. 
..|......................................|. 
..+--------------------------------------+. 
........................................... 

Рисунок 5.2 Пример одного класса.

........................................... 
..+--------------------+................... 
..|..Readers...........|................... 
..+--------------------+-----------------+. 
..|......................................|. 
..|.+----------------------------------+.|. 
..|.|   ReaderClass   |.|. 
..|.+----------------------------------+.|. 
..|.| [#] void Write() <<abstract>> |.|. 
..|.| [#] void Read()  <<override>> |.|. 
..|.| [+] bool CanRead() <<override>> |.|. 
..|.| [+] bool CanWrite() <<override>> |.|. 
..|.+----------------------------------+.|. 
..|......................................|. 
..+--------------------------------------+. 
........................................... 

Рис 5.3 Пример отношений между классами.

................................................................................ 
..+----------------------------------+....+----------------------------------+.. 
..|   StreamClass   +<---+   ReaderClass    |.. 
..+----------------------------------+....+----------------------------------+.. 
................................................................................ 

Резюме

Помните, что U.M.L. это руководство, а не строгий путь.

Cheers.

+0

UmlCat спасибо за ваше объяснение. Очень полезно. – NakaBr

+0

любите диаграммы! – RobertMS

0

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

Подход метамоделирования UML состоит в том, чтобы просто создать модель UML, которая синхронизирована в реальном времени с диаграммами. Во многих инструментах у вас есть карты между графическим представлением и моделью. Например, с Eclipse у вас есть графический mapper GMF, который вызывает модель EMP модели, которая затем создает модель UML. Поэтому невозможно синхронизировать представление UML с моделью uml, хранящейся на вашем жестком диске, в формате xmi.

Omondo EclipseUML запустил эту инициативу metamodedl несколько лет назад. Он позволяет создавать столько диаграмм, которые синхронизируются в реальном времени с вашей моделью UML на диске, сохраненном непосредственно в формате XMI UML 2.3. Поэтому вы можете использовать один и тот же классификатор в разных представлениях, потому что вся модельная логика находится в модуле, сохраненном на диске, и синхронизируется в реальном времени.

Техническое обслуживание в оба конца не только между кодом и моделью, но и глубже между моделью и метамодели. Он дает полную мощность UML!

+0

Я проверю Omondo, кажется многообещающим. Я фактически разрабатываю большинство своих ежедневных рабочих моделей в LibreOffice вместо существующих инструментов из-за того, что не позволяет делать много вещей, что U.M.L. suppouse делать ... – umlcat