使用UML进行适当的类建模

时间:2012-04-26 13:03:28

标签: oop class uml

经过多年的编程后,我开始使用UML了,我想确保我正在使用图表中的符号。

以下图表是否恰好代表了简单的Car类?

original model

更新

实际上,我刚刚意识到Make知道模型所以我删除了箭头,但Make和Model不知道Car所以我添加了箭头:

revised model

1 个答案:

答案 0 :(得分:2)

我会对原始图表进行一些调整:

  • Make标识制造商,因此Make将拥有许多型号,并且因为没有其他制造商可以获得这些型号的所有权,所以黑色钻石显示为表示构图
  • 该关系可双向导航,因此不会显示任何箭头
  • 因为我们可以从Make导航到模型,所以Make中显示的模型的SortedSet(按年份排序)

模型

  • Model与Make有唯一的直接关系;这可以保证关系的有效性,并避免因允许其他类与Make
  • 建立关系而导致的错误连接
  • 因为Model可能用于导航到Make,Model包含对其Make的引用;这可确保任何汽车可以导航到其模型信息,并从那里(并且仅在那里)导航到其制作
  • 对于年份,选择了不可变类型Integer,因为一旦分配了该值,它将永远不会改变

汽车

  • 模型和汽车之间的关系只能从汽车导航到模型,因为业务领域不需要获得为任何给定模型制造的所有汽车的集合(并且它使事情变得更简单)
  • 为每辆车分配一个VIN,显示为UUID的实例 - 通用唯一标识符
  • Car和Engine之间的关系只能从Car导航到Engine,所以Car有一个Engine成员;有一些用例,系统中接收汽车参考的部分可能想要导航到汽车引擎

引擎

  • 鉴于引擎可以在一辆车中开始使用,但随后被转移到另一辆车中,使用白色菱形表示关系,表示聚合
  • 为引擎分配了一个部件号,该部件号是该Engine实例的特定标识符;因此显示了不可变类型字符串
  • 引擎维护里程计数器,其定义为类型:int,因为该值是可变的并且将在引擎的生命周期内发生变化

enter image description here

我希望这有用,并提供一些很好的反馈,使您的建模练习发人深思。我知道我很乐意创建图表并思考关系和一些细节。有一段时间没有这样做 -