类图 - 在模块中重复类?

时间:2012-05-24 12:36:14

标签: oop uml

我对模块之间重复课程有疑问 我有一个包含24个类的大型模块,并将其分为3个类,但是有一个类(“用户”)出现在两个模块中。我可以重复一遍吗?我需要将属性放在两个模块中? 什么是模块中类的最大理想值?

2 个答案:

答案 0 :(得分:4)

实际上说:在UML中,你可以多次描述一个类/或对象。而且,您不必显示所有成员(属性)。

描述课程的理想方式&关系,是每个类都包含在一个包中,但是,可以在同一个包或不同包中引用(具有某种关系)其他类。

以下图表在实践中是好的,并且是在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.同一个包中的示例类,省略了不必要的成员

....................................................................................
..+--------------------+............................................................
..|..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个互补图。

图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。是一个指南,而不是一条严格的道路。

干杯。

答案 1 :(得分:0)

很好的答案UMLcat。 UML可以在多个类图中重用相同的分类器。我的意思是,多年来UML与图形视图有关,有时在同一视图中与所有项目分类器相关。

UML元模型方法是简单地创建一个与图表实时同步的UML模型。在许多工具中,您可以在图形表示和模型之间使用映射器。例如,使用Eclipse,您可以使用图形映射器GMF,它可以调用模型映射器EMF,然后创建一个UML模型。因此,不可能将UML视图与以xmi格式存储在硬盘上的uml模型同步。

Omondo EclipseUML几年前推出了这个metamodedl计划。它允许您创建尽可能多的图表,这些图表与磁盘上的UML模型实时同步,并立即保存为XMI UML 2.3格式。因此,您可以在不同的视图中重用相同的分类器,因为所有模型逻辑都在磁盘上保存的modedl中并且实时同步。

往返工程不仅在代码和模型之间,而且在模型和元模型之间更深入。它为UML提供了全部功能!!