UML图(Unified Modeling Language,统一建模语言)是一种用于描述、可视化、构建和记录软件系统的标准化建模语言。在UML中,有很多类型的图,其中包括领域模型(Domain Model)、对象模型(Object Model)和系统顺序图(System Sequence Diagram)等。这些图都是用于描述不同层面和方面的系统。
domain model(领域模型)
领域模型关注实际问题领域,帮助我们识别关键概念、需求和概念之间的关系。一般处理一个实际问题时,我们就首先通过domain model来分析有哪些关键概念,以及各个概念之间的关系。
比如说我们现在想做一个图书馆系统,图书馆里有书本,有用户,我们需要记录用户都借了哪些书,那我们就可以提取出两个关键概念,Libruary Account以及Book,并且他们的关系可以表示为:
对应的代码表示是这样:
class Account {
id : int ;
lateFees : int ;
borrowed: List <Book>;
boolean borrow( Book) { …}
void save();
}
class Book { … }
在画domain model时,我们就只限于画出对象名以及它所包含的属性,在这里我们library account里面其实还有一个属性即borrowedBook,但是我们已经通过一个连接线表示出了它和Book之间的包含关系,所以就不用再多余地把book也写进library account的属性了。
这里的两个概念之间用一个线段链接,并用文字注明了他们是borrow的关系,然后1个library account对应了*也就是多个Book,表示了二者的数量关系。其实大多数情况中间的线段是有箭头的(这里应该是向右的箭头,表示library account borrow Book,如果是向左的箭头,上面的注释就应该是borrowed by),箭头并不是强制的,属于可有可无。
在domain model中,对于“has a”的关系,有关于Composition和Aggregation两种不同的画法,它们之间的主要区别在于整体和部分之间的生命周期关系以及部分的独立性。直接看图:
Composition(组合)和Aggregation(聚合)在UML类图中使用实心和空心的表示法来区分 。Composition(组合):组合关系在UML类图中用实心菱形箭头表示。菱形端指向整体,箭头端指向部分,且整体和部分的生命周期是紧密相关的。在组合关系中,部分没有整体是没有意义的。比如一个person有手有脚步,如果脱离了person,那么hand和leg单独都没有意义。
Aggregation(聚合):聚合关系在UML类图中用空心菱形箭头表示。菱形端指向整体,箭头端指向部分。空心菱形表示聚合关系中整体和部分具有相对独立的生命周期。在聚合关系中,部分即使脱离整体,仍然可以独立存在。比如说轮子和汽车,轮子是可以单独存在的。
object model(对象模型)
其实object model和domain model很像,就是在domain model的基础上增加了实现细节,比如类当中成员变量的类型,类所包含的方法,参数,返回值类型等。比如对于刚刚的library account,在object model里就表示成了这样:
其中borrow(book), returnItem(book)以及payFees(int)都属于这个library account的方法,也是它的responsibilities。通过domain model我们更清楚不同对象的具体实现细节以及方法责任。如果说Domain Model处于较高的抽象层次,与现实世界的问题领域紧密相关,那么Object Model就处于较低的抽象层次,与软件实现紧密相关。
后面我计划总结一个完整的项目,从domain model,object model到最终Java代码给出例子,有空的话就会去写出来。
System Sequence Diagram(系统顺序图)
系统顺序图(System Sequence Diagram,简称SSD)是一种用于描述系统边界上事件顺序的模型,它展示了一个特定使用场景下系统的交互过程。系统顺序图只关注系统级别的组件,例如用户和整个系统。这有助于我们将重点放在系统的整体行为上,而不是关注内部细节。比如对于图书馆系统用户借书的操作,系统顺序图可以表示如下:
通过系统顺序图,我们可以清楚地表示出用户和系统之间可能的交互方式以及交互顺序,同时用虚线向回的箭头表示一些可能的相应。系统顺序图是面向对象设计过程中的一个重要工具,它可以帮助我们有效地理解和设计系统的交互。
Interaction Diagrams(交互图)
交互图(Interaction Diagrams)是一种用于表示对象之间互动和通信的建模工具,用于描述系统内部的行为和协作。交互图主要有两种常见表示法:顺序图(Sequence Diagrams)和通信图(Communication Diagrams)。这里就讲一下顺序图,顺序图和上面的系统顺序图很像,但是它可以描绘更加具体的对象或类之间的交互,而不仅仅是把整体看作一个系统那么笼统。来一张图就明白了:
对于整个图书馆系统,它里面有很多对象,通过交互图中的顺序图可以很好地描绘出这些对象之间是如何进行互动和传递信息的。
小结:
这篇文章总结了UML图中常见的几种图的定义,使用场景及画法,包括domain model, object model, system sequence diagram以及interaction diagram等。