一、概述
UML的类图和对象图表达的是对象模型的静态结构方面。
类图描述的是一种静态关系,在系统的整个生命周期都是有效的。通过分析问题域和用例,就可以得到相关的类,然后再把逻辑上相关的类封装成包。这样就可以很好地体现系统的分层结构,使人们对系统层次关系一目了然。
对象图是类图的实例,它的表示方式与类图基本相似。它们的不同之处在于对象图显示类图的多个对象实例,而不是实际的类。一个对象图是类图的一个实例,对象图只能在系统的某一时间存在。
二、对象类
对象类简称类,是一种重要的分类器,用来描述结构和行为特性的机制,包括类、接口、数据类型、信号、组件、节点、用例和子系统。类是一组具有相同属性、操作关系和语义的对象的描述。
在UML建模时,不仅要抽象出形成系统的对象类,还必须描述对象类之间存在的链接关系,这种链接关系可以用一种叫做关联的结构来进行描述。对象类之间的关联有自返关联、二元关联和N元关联。自返关联就是一个对象类自身与自身的关联,即一个对象类的两个对象之间的联系。二元关联是在两个对象类之间发生的关联。N元关联是在3个或多个对象类之间发生的关联,N元关联的每一个实例是被关联的类的对象的多元组。
聚合和组合是对象类之间的一种特殊的关联关系,它主要用来描述对象类之间的整体与部分之间的关系。聚合用于表示事物的整体及部分关系较弱的情况,它描述了has-a关系,即整体对象拥有部分对象。组合表示事物的整体与部分关系较强的情况,它描述了contains-a关系。
泛化是一般事物(称为超类或父类)和该事物较为特殊的种类(称为子类)之间的关系,子类继承父类的属性和操作,或者修改了父类的某些操作。
依赖是两个模型元素之间的语义联系,指一个模型元素(提供者)的变化必然影响另一个模型元素(客户)。对于依赖可以加上构造型,规定依赖的含义和作用,常用的构造型有<<use>>(使用)<<call>>(调用)<<instantiate>>(实例)<<friend>>(友元)等。
在UML中用对象图来描述参与一个交互的各对象在交互过程中某一时刻的状态。对象图实质上是对象类图的实例。对象图冻结了系统的某一瞬间,表达系统的对象在该时刻的具体状态(属性值和操作)。
接口是一组外部可以访问的操作,用于为对象类或组件提供服务。接口可以看成是一种特殊的抽象类,不含属性,它的操作也没有方法,即没有操作的实现。
三、高级对象类
抽象类是指不能直接产生实例的对象类,抽象类的实例对象只能通过一个非抽象类的子类产生。抽象类的作用仅仅是为了其他的非抽象类对象类继承和重用它所说明的属性、操作及其它性质。
模板对象类又称参数对象类,是一个尚未完全具体说明的类。模板中提供参数表,利用参数表向模板传递信息可最终形成用户需要的具体类。参数可以是类,也可以是整数、布尔型等基本类型。
四、对象类建模
一般情况下,建立对象类图包含以下步骤。
(1) 研究和分析问题域,确定系统的需求。
(2) 发现、识别、确定系统中的类和对象,明确它们的含义和责任,确定属性和操作。
(3) 找出类之间存在的静态联系。重点分析类之间存在的一般与特殊、部分与整体关系,研究类之间的继承性和多态性,把类之间的这种联系用泛化、聚合和组合、关联、依赖等关联表达出来。
(4) 对已经发现的类之间存在的联系进行调整和优化,去除可能存在的命名冲突和功能重复等问题。
(5) 绘制对象类图并编制相应的说明。
在UML中,可以把例外情况的处理用一个专门的类—信号来表达。其建模步骤如下。
(1) 对每一个对象类和接口,找出可能出现的例外情况及其出现条件。
(2) 将每一个例外情况用一个信号类来描述,类名前加上构造型<<exception>>。
(3) 建立例外情况的层次结构,将一般性的例外情况置于顶层,把特殊性的例外情况置于底层。
(4) 找出每一个操作可能出现的例外情况,将操作和它的例外情况的信号图标之间用一条虚箭头线连接,其上标出构造型<<send>>,表示操作到它的例外情况的send依赖。
当对大型系统进行建模时,经常需要处理大量的类、接口、组件、节点和图,这时就有必要将这些元素进行分组,即把那些语义相近并倾向于一起变化的元素组织起来加入同一个包,这样方便理解和处理整个模型。建立包图的一般步骤如下。
(1) 识别系统中的模型元素(通常是对象类),把概念上或语义上相近的模型元素纳入一个包。
(2) 对于每一个模型元素,标出其模型元素的可视性(公共、保护或私有)。
(3) 确定包与包之间的依赖关系。
(4) 确定包与包之间的泛化联系,确定包元素的多态性和重载。
(5) 绘制并精化包图。
五、例子
(1) 一个公司可以雇佣多人,人也可以为多个公司工作。每个公司有一个总经理,公司中的每个雇员有一个经理,经理可以管理多个下属的雇员。请用对象类图描述上述模型。
(2) 客户想供应商发出一个订单,订单订购各种不同的零件。一个订单由若干订单行组成,每行制定供应商目录中的一种特定零件,并说明要订购多少。作为对订单的响应,供应商安排一次交货,由所有订购的零件组成。请用对象类图描述上述模型。
参考文献:
[1] 唐学忠等著. UML面向对象分析与建模. 电子工业出版社. 2008
[2] 蔡敏等著. UML基础与ROSE建模教程. 人民邮电出版社. 2006
[3] Carlo Ghezzi等著. 施平安译. 软件工程基础(第2版) 清华大学出版社. 2003
[4] 参考网站:
http://www.software.ibm.com/ad/ocl