UML面向对象分析与建模-【4】类图和对象图

 

一、概述

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.omg.org/UML

          http://www.rational.com/UML

          http://www.software.ibm.com/ad/ocl

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1、一个设计得好的OO系统具有( )的特征。 A.低内聚、低耦合 B.高内聚、低耦合 C.高内聚、高耦合 D.低内聚、高耦合 2、在UML中,( )把活动中的活动划分为若干组,并将划分的组指定给对象,这些对象必须履行该组所包括的活动,它能够明确地表示哪些活动是由哪些对象完成的。   A.组合活动   B.同步条    C.活动     D.泳道 3、在较高的抽象层次上,传统的程序流程UML中活动最根本的区别在于( )。   A.程序流程明确地指明了每个活动的先后顺序,而活动仅描述了活动和必要的工作顺序。 B.活动不提供循环控制结构,而程序流程提供。 C.活动不能表示并发活动,而程序流程可以表示并发活动。 D.两者采用不同的形符号系统。 4、Statopia是一家大型公司,由于公司业务的扩大,准备对公司已有的软件系统进行升级,因此委托ObjectR公司负责该项工作。Statopia公司所使用的系统是很久以前开发的,且不是用OO方法开发的,该系统非常复杂,而且系统使用多线程来处理公司中并发的业务请求。由于系统开发出来后经过多次修改,因此最初的系统开发文档已经过时。ObjectR公司的专家建议在对系统升级前和Statopia公司的高层管理人员开一次讨论会,以便能更好地了解目前所使用的软件系统。那么在这次讨论会中,下面几个中哪个是最有用的? A.状态 B.部署 C.活动 D.顺序 5、“一个研究生在软件学院做助教(teaching assistant),同时还在校园餐厅打工做收银员(cashier)。也就是说,这个研究生有3种角色:学生、助教和收银员,但在同一时刻只能有一种角色。”根据上面的陈述,下面哪种设计是最合理的? A. B. C. D. 6、类和接口的关系类似于下面哪种类型的关系。 A.关联和聚集 B.关联和组合 C.脚本和用例 D.包和子系统 7、如所示,类PaymentController必须实现哪些方法?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lzhdim

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值