UML是一种定义良好,功能强大,易于表达且普遍适用分建模语言,它的作用域不只限于面向对象的分析和设计,还支持从需求分析开始的软件开发全过程。
UML2.0一共包括13种图形,活动图(activity diagram),类图(class diagram),通信图(communication diagram),组件图(component diagram),复合结构图(composite structure diagram),部署图(deployment diagram),交互概观图(interactive overview diagram),对象图(object diagram),包图(pacage diagram),顺序图(sequence diagram),状态机图(state machine diagram),定时图(timeing diagram),用例图(use case diagram),正常的软件开发过程很少有使用所有图形的情况。UML是一门语言,更是使程序开发高效化的工具。
用例图
用例图用于描述系统的功能,每一个用例代表系统一个功能模块。
用例图对于功能的实现不做任何说明,仅仅是对系统功能的描述。
用例图包括用例(用椭圆表示),角色(与系统交互的其它实体,用一个小人来表示),用例与用例直接的关系(用简单线段表示).
用例图和系统的各个类可能几乎没有任何关系,用例应当简洁,配以较多的文字说明。
类图
类图用于显示系统的静态结构。
类在类图中用三个矩形来表示,最上面的矩形用于显示类名,第二个矩形用于显示变量,最下面的部分包含类的方法。
书写规范:
类名书写规范:正体字说明类是可被实例化的,斜体字说明类为抽象类。
属性和方法书写规范:修饰符 [描述信息] 属性、方法名称 [参数] [:返回类型|类型]
属性和方法之前可附加的可见性修饰符:
加号(+)表示public;减号(-)表示private;#号表示protected;省略这些修饰符表示具有package(包)级别的可见性。
如果属性或方法具有下划线,则说明它是静态的。
举例:-age :int
类除了可以表示实体的内部静态结构,还可以表示实体之间的关系。
类之间的基本关系三种——关联,泛化,依赖。
关联
关联是指一个类可以访问另一个类,当使用一条实线来表示双向关联,带箭头的实线表示单向关联。
关联和属性的区别在于:类内的某个熟悉引用到另一个实体时,就变成了关联。
关联有两种特殊情况——聚合和组合。
当某个实体的集合成为另一实体时,且该实体还可以是另一个实体的一部分,即为聚合,若不能为另一实体的一部分,为组合。聚合使用空心菱形框的实线表示,组合用实心菱形框的实线表示。
举例:一个学生可以参加多个社团,学生和社团之间的关系即为聚合。
泛化
泛化和继承是同一个概念,都是说子类是一种特殊的父类。
类实现接口可视为一种特殊的继承,这种实现用带空心三角形的虚线表示。
依赖
若一个类的改动会影响到另一个类,则称这两个类存在依赖关系。依赖关系用带箭头的虚线表示,箭头指向被依赖的实体。
依赖常见原因如下:
改动的类发消息给另一个类作为数据部分
改动的类是另一个类作为数据部分
改动的类是另一个类作为操作参数
组件图
组件图通常包含组件,接口,port的图元,其用途在于现实系统的软件对其他软件组件的依赖关系。
UML用来表示组件的图形是一个矩形(矩形的左边上还有两个小矩形),表示接口的是圆圈,组件边界上的小矩形来表示port。
常用一条实线连接到组件的边界的圆圈表示接口。
部署图
部署图用于描述软件系统如何部署到硬件环境上,其用途是显示软件系统的不同组件将在何处物理运行,以及他们彼此如何通信。
部署图与组件图的表示类似,不过加入了节点的概念。节点是各种计算资源的通用名称,主要包括处理器和设备两种类型,区别在于处理器是可以执行程序的硬件构架(如计算机主机),设备是不具备计算能力的硬件构件(如打印机)
顺序图
顺序图现实具体用例的详细流程,描述了对象之间的交互,重点在于描述消息和时间顺序。
顺序图有两个维度:垂直维度,以发生的时间顺序现实消息/调用序列;水平维度,显示消息被发送到的对象实例
顺序图的顶端是每个类的实例,类名和对象名用:隔开。
对象的激活期不是其存在的时间,而是它占据CPU的时间。
活动图
用于描述用例内部活动或方法的流程,如果除去并行活动描述,就变成了流程图。
状态机图
在系统活动期间具有三个或更多潜在状态的对象才需要使用状态机图。
初始状态:使用实心圆表示
状态之间的转换:使用带箭头的线段绘制(线段附近有调用的函数名)
状态:使用圆角矩形绘制
判断点:使用空心圆绘制
一个或多个终止点:使用内部包含实心的圆绘制