在学习过了UML视频之后,结合之前做过的机房收费系统,自己对UML建模工具有了重新的认识,同时也体会到了知识在实践中运用的重要性。
UML建模工具中最常用的图例包括用例图、类图、时序图、活动图、构件图和部署图,每种图都有自己的用途和自己的特色,下面将一一介绍。
(一)用例图
用例图是用来描述各个用例及其之间关系的图例,每个用例用椭圆形表示,而用例和用例之间的关系用不同的箭头表示,都包括包含(include)、扩展(extend)、泛华(generalization)三种关系。
包含(include)是指基用例在它内部说明的某一个位置上显示地合并了另一个用户的行为例如:机房收费系统中,总是存在着维护用户信息的功能,如果将它作为一个用例,那新建、编辑以及修改都要在用例详述中描述,过于复杂;如果分成新建用例、编辑用例和删除用例,则划分太细。通过包含关系就可以很好地解决这种矛盾。
Extension)用例加以封装,再让它从基用例中声明的扩展点(Extension Point)上进行扩展,从而使基用例行为更简练和目标更集中。在机房收费系统中典型的扩展就是将查询到的信息导出为报表(Report)。
泛化(generalization)关系中子用例和父用例相似,但表现出更特别的行为;子用例将继承父用例的所有结构、行为和关系。机房收费系统中各个不同用户具有的权限就遵从泛化关系。
(二)类图
类是具有相似结构、行为和关系的一组对象的描述符。类图中应该包含类的属性、方法、参数、数据类型和相应的注释。类之间的关系是类图中比较复杂的内容。有关联、聚合、组合、泛化、依赖。
关联(association):模型元素之间的一种语义联系,是类之间的一种很弱的联系。关联可以有方向,可以是单向关联,也可以是双向关联。可以给关联加上关联名来描述关联的作用。关联两端的类也可以以某种角色参与关联,角色可以具有多重性,表示可以有多少个对象参与关联。可以通过关联类进一步描述关联的属性、操作以及其他信息。关联类通过一条虚线与关联连接。对于关联可以加上一些约束,以加强关联的含义。
聚合:一种特殊的关联,聚合强调整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构。从而找出一些组成类,该整体类和组成类之间就形成了聚合关系。例如,任何一个团体都是有个体聚合而成的。
组合:一种特殊的关联,也表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在。部分对象与整体对象之间具有共生死的关系。
泛化(generalization):定义了一般元素和特殊元素之间的分类关系,类之间的这种泛化关系也就是继承关系。泛化关系是“a-kind-of”关系,定义一般元素和特殊元素之间的分类关系。在用例图中也有体现。
依赖(Dependency):指两个不同的元素中其一发生变化另一个会随之发生变化。和字面上了理解的依赖还是很相似的。
(三)时序图
时序图(Sequence Diagram)是显示对象之间交互的图,这些对象是按时间顺序排列的。顺序图中显示的是参与交互的对象及其对象之间消息交互的顺序。时序图中包括的建模元素主要有:对象(Actor)、生命线(Lifeline)、控制焦点(Focus of control)、消息(Message)等等。
时序图中非常好地体现了面向对象的思想,对象和对象之间的消息传递一定是建立在消息传递后的对象上的,而且这种消息的传递是在对象的生命周期上完成的。
(四)活动图
活动图是UML用于对系统的动态行为建模的另一种常用工具,它描述活动的顺序,展现从一个活动到另一个活动的控制流。活动图在本质上是一种流程图,它描述了系统中一个完成的时间流程的过程。
应该注意的是,活动图中只允许有一个起点(Start State)和一个终点(End State),要实现多个相关的流程可以通过添加泳道(Swimlane)来实现。
(五)构件图
构件是系统的可替代的物理部分。它表示的是实际的事物。构件是定义了良好的接口的物理实现单元。它是系统中可以替代的部分。每个构件体现了系统设计中的特定类的实现。构件图 正式描述了一个系统中各个物理部件以及他们之间关系的图例。
良好定义的构件不直接依赖于其他构件所支持的接口。在这种情况下,系统中的一个构件可以被支持正确的借口的其他构件所替代。接口是被软件或硬件所支持的一个操作集合。通过使用命名的接口可以避免在系统的各个构件之间发生依赖关系。有利于新构件的替换。
(六)部署图
部署图描述的是系统运行时的结构,展示了硬件的配置及其软件如何部署到网络结构中。一个系统模型只有一个部署图,部署图通常用来帮助理解分布式系统。有助于各个部门相互之间的协调。
UML是一种非常强大的建模语言,是系统建模很好的工具,也是一名程序设计人员的得力助手。通过此次的学习让自己对面向对象有了更加深刻的认识,也希望和大家有共鸣。
以上就是自己在学习了UML之后结合自己的机房收费系统所做的一个总结,当然,会有一些不妥之处,还请大家多多指教和批评,