想在软件工程中使用类图,只需要完成以下的四个方面的内容,即可轻松运用了。
(一)视图的作用
在说类图之前,先明确一个问题。我们使用UML中的各种视图的目的为了形象、生动、清晰、明确地表述所需建设的系统(以下称“目标系统”)的业务,通过这些视图的展示,我们能从不同的侧面对目标系统进行认识和描述,使得在目标系统的建设过程中,各相关人员能更加准确地交流和取得共识,共同完成一个结构宽松、逻辑严谨、安全稳定的能很好应对变化的目标系统。
(二)类图的概念及分类
类图:用于展示系统中的类及其相互之间的关系。
用UML对系统进行建模的过程中,使用了重要的面向对象的思想。面向对象的最重要基本元素之一就是对象,而类则是对对象某一方面特征的归纳和抽象。这样,避免了系统中的相同对象的重复出现和表示所带来的纷繁复杂,简化了结构,使得业务需求变得更加简练、清晰。
类图,是现实世界问题领域的抽象对象的结构化、概念化、逻辑化描述。由浅入深、逐步细化,在软件工程的不同阶段使用到的类图各有不同,分别为概念层类图、说明层类图、实现层类图。
概念层类图:业务建模阶段,与现实世界的问题领域及其中的实物有着明显的对应关系,在建立模型时所画类图常常采用实体图来表示。这样保证在需求分析人员与企业相关负责人交流了时更加方便,避开了艰涩专业的语言。
说明层类图:概念模型阶段,描述软件的接口。搭建现实世界与最终实现之间的一座桥梁。几乎采用现实世界的语言,以保证从现实世界到代码实现的过渡。
实现层类图:设计阶段,从实现的角度定义类及其实现,揭示了软件实现体的构成情况。
(三)类的获取
巧妇难为无米之炊。想画类图,那么最先就是准备类图的构件——类,找到了类就好办了,只需要根据它们之间的关系连接起来就可以了。
那么类怎么来呢?画图的时候直接写出类是件不容易的事,这样容易遗漏或者重复。遗漏好说,就是漏掉了本该有的类,一般很少发生;重复又是怎么回事呢?重复是因为类来自与对对象的抽象,如果对同类对象的抽象产生的名称不一样,就产生了两个不同的类,徒生赘余。
如果我们在画类图前先将目标系统所涉及到的所有对象先进行列举、分类(对象列举时对照业务需求进行一般是不会遗漏的),再对各类进行分别抽象,那么就不会出现遗漏和重复的情况了。
(四)分清关系
上面提到找到了类,根据它们之间的关系连接起来就可以了,说起来很轻松的事,做起来也不能,不信你试试。
类之间的关系分为关联、依赖、泛化和实现。
关联又可以细分为普通关联、聚合和组合。
(1)关联关系
①普通关联是用一条直线表示的,如A——B;描述在一段时间内A“知道”B的存在。如果带箭头,则表示这种普通关联是单向的。
②聚合关系是用一条带空心菱形箭头的直线表示的,如A——B(A聚合到B上,或者说B由A组成)。
表示整体和部分的关系,为弱依赖,即使整体不存在了,部分依然可以存在。例部门撤销了,人员不会消失。
③组合关系是用一条带实心菱形箭头的直线表示的,如A——B(A组合成为B,或者说B由A构成)。
表示整体与部分的关系,为强依赖,如果整体不存在了,组成部分将不复存在。
(2)依赖关系:是用一条带箭头的虚线表示的,如AB(A依赖于B)。依赖是更进一步的关联关系,联系更加紧密,如果B的改变会导致A随之变化,那么就称AB。
(3)泛化关系:是用一条带空心箭头的直接表示的,如A——B (A继承自B)。箭头指向的是父类,表示A对B的继承,A为子类,B为父类。
(4)实现关系:是用一条带空心情业的血统在示的 如A------B(A实现B)。如果类A所表示的是更具体的类B,则说类A实现B即(A------B),例“人类”是一个类,“学生类”也是一个类,那么我们就可以说“学生类”实现“人类”,即(学生类------人类)。
完成一个软件系统就像建造房子,有了建筑的设计图纸(业务需求)、有了砖瓦(类)、有了钢筋混凝土(关系),召集工人造房就可以开始了。
下面是机房收费系统的简单类图,由于业务简单,关系不能完全展示。