我对模块之间重复课程有疑问 我有一个包含24个类的大型模块,并将其分为3个类,但是有一个类(“用户”)出现在两个模块中。我可以重复一遍吗?我需要将属性放在两个模块中? 什么是模块中类的最大理想值?
答案 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提供了全部功能!!