面向对象UML学习笔记

面向结构

结构化程序设计思想就是把大的程序分解为具有层次结构的若干个模块,每个模块再分解为下一层模块,如此自顶向下、逐步求精,从而把复杂的大模块分解为许多功能单一的小模块。其特征是以函数为中心,也就是以功能为中心来描述系统,用函数来作为划分程序的基本单位。

面向对象

面向对象 = 对象 + 分类 + 继承 + 消息通信

面向对象是以对象为基础、以事件或消息来驱动对象执行处理的程序设计技术。它是一种自下而上的程序设计方法,从问题的一部分着手,一点一点地构建出整个程序。其以数据为中心,使用类作为表现数据的工具,类是划分程序的基本对单位。

对象

对象指客观世界存在的有形或无形的事物。从系统的建模和实现而言,对象是描述客观事物的一个实体,是构成系统的一个独立的基本单元,它由一组属性和操作组成。

系统分析设计阶段:对象表示一种概念,它把现实世界的有关实体模型化。

系统实现阶段:对象表示在应用程序中出现的实体的实际数据结构。

对象 = 数据 + 操作

对象的基本特征:

1、  以数据为中心。数据和操作相关联。

2、  对象是主动的。对象是进行处理的主体,当系统需要完成某对象内部的某个操作时,不能从外部直接加工对象自己的数据,而是必须通过公共接口向该对象发送消息。

3、  实现了数据的封装。对象的数据和操作被封装在对象的内部,对外是隐蔽、不可见的。

4、  模块性好。对象是面向对象软件系统的基本模块,对象的操作围绕着对其内部数据所需进行的处理来设置,没有无关的操作。

类是一组具有相同属性和相同操作的对象的集合。

属性

类中对象所具有的数据值,表示了类的特征。

操作

对象封装自身数据并对数据进行处理的过程成为操作,也叫方法或服务。

相同的操作可以用与不同的类,这叫多态。

消息

指对象之间在交互中所传送的通信信息。格式:

Message:[destination,operation,parameters]

  

关联和链

类的关联

 

 

封装

把对象的全部属性和操作组合在一起,构成一个不可分割的、独立的对象,不允许外界直接存取对象的属性,只保留与外界对象发生联系的有限接口。

继承

指子类可以自动拥有、共享父类的全部属性与操作。

多态

在基类中定义的属性和操作被其子类继承后,可以具有不同的数据类型或表现出不同的行为。

面向对象的模型

对象模型:表示了静态的、结构化的系统数据性质,描述了系统的静态结构,它是从客观世界实体的对象关系角度来描述,表现了对象的交互关系。该模型主要关心对象的结构、属性和操作,它是三个模型的核心。

动态模型:是与时间和变化有关的系统性质,描述了系统的控制结构,它表示了瞬间的、行为化的系统控制性质,它关心的是系统的控制,操作的执行顺序,它表示从对象的事件和状态的角度触发,表现了对象的相互行为。

功能模型:描述了系统的所有计算,指出发生了什么,确定什么时候发生。表明一个计算如何从输入值得到输出值,它不考虑计算的次序。其由多张数据流图组成。

UML定义

UML:Unified Modeling Language是一个通用的可视化建模语言,用于对软件进行描述、可视化处理、构造和建立软件系统制品的文档,可用于对系统的理解、设计、浏览、配置、维护和信息控制。

UML描述了系统的静态和动态行为:

UML将系统描述为一些离散的相互作用的对象并最终为外部用户提供一定功能的模型结构,静态结构定义了系统中的重要对象的属性和操作以及这些对象之间的关系。动态行为定义了对象的时间特性和对象为完成目标而相互进行通信的机制。

UML在软件开发各阶段的使用

1.  用户需求

该阶段可使用用例图来捕获用户的需求,用例图从用户的角度来描述系统的功能,表示了操作者与系统的一个交互过程。 通过用例建模,描述对系统感兴趣的外部角色和他们对系统的功能要求。 

2.  系统分析

分析阶段主要关心问题域中的主要概念,如对象、类以及它们之间的关系等,需要建立系统的静态模型,可用类图来描述。

为了实现用例,类之间需要协作,可以用动态模型的状态图、顺序图和合作图来描述。在分析阶段,只考虑问题域中的对象建模,通过静态模型和动态模型来描述系统结构和系统行为。 

3.  系统设计

在分析阶段建立的分析模型基础上,考虑定义软件系统中的技术细节用到的类,如引入处理用户交互的接口类、处理数据的类、处理通信和并行性的类。因此,设计阶段为实现阶段提供了更详细的设计说明。

4.  系统实现

实现阶段的任务是使用面向对象程序设计语言, 将来自设计阶段的类转换成源程序代码,用构件图来描述代码构件的物理结构以及构件之间的关系。用配置图来描述和定义系统中软硬件的物理体系结构。

5.  测试

UML建立的模型也是测试阶段的依据。可使用类图进行单元测试,可使用构件图、合作图进行集成测试,可使用用例图进行确认测试, 以验证测试结果是否满足用户的需求。 

UML分类

(1) 用例图: 用于表示系统的功能,并指出各功能的操作者。 

(2) 静态图: 包括类图、 对象图及包图, 表示系统的静态结构。 

(3) 行为图: 包括状态图和活动图,用于描述系统的动态行为和对象之间的交互关系。  

(4) 交互图: 包括顺序图和合作图,用于描述系统的对象之间的动态合作关系。

(5) 实现图: 包括构件图和配置图,用于描述系统的物理实现。 

用例图

从用户角度描述系统功能,并指出各功能的操作者,强调谁在使用系统,系统为执行者完成哪些功能。

 

当几个用例存在相同的动作时,为避免重复,把相同的动作构造成另一个用例,则该用例与这几个用例之间的关系就是《使用》关系。《使用》关系是UML预定义的构造型模型元素,它是泛化关系的构造型模型元素。 

使用关系的图符表示与泛化关系的图符表示一样,用带空心三角形的连线表示,在连线上标注《使用》。

《扩展》是指用例之间的一种关系。 有两个用例A和B, A与B功能相似,但是A的动作比B的动作多一点, 则A与B之间的关系是扩展关系, A扩展B。 《扩展》关系也是泛化关系的构造型模型元素, 也是预定义构造型模型元素。 

扩展与使用之间有相似之处和不同之处。这两者都从几个用例中抽取公共的行为放入一个单独的用例中,以便其他几个用例使用或扩展。 但是这两个关系的目的是不同的。

可采用下列方法来区别应使用哪种关系。 

当描述一般行为的变化时,采用扩展;

当在两个或多个用例中出现重复描述而又想避免重复时,采用使用。

用例文档

1、  用例名;

2、  简述:对本用例的简短描述,一般一两句话即可;

3、  依赖关系(可选):用于描述用例是否依赖于其他用例;

4、  参与者:命名用例中的参与者。往往有一个启动用例的主要参与者,也可能有参与用例的次要参与者;

5、  前置条件:在一个或者多个条件必须为真的情况下用例才可以开始。例如网络交易股票必须在交易时间内,且网络运行无阻的条件下才能运行;

6、  描述:对于用例的顺序性描述,包括参与者的输入及系统的相应,系统被看作是黑箱,也就是说,只关心系统对于参与者的输入做出了什么响应,而不必关心内部的实现。

7、  备选:对主顺序的可替换部分的叙述性描述,例如股民的账户可用余额不足,则提示抱歉,不能买入股票;

8、  后置条件:如果主顺序遵守这个条件,则在用例结尾处条件总为真,例如股民已经买入了委托的股票;

9、  待解问题:将有关用例中还要和用户进行讨论的问题记入文档。

实例:

1、  用例名:网络股票交易

2、  简述:股民在有效的股民账户下交易上市公司股票

3、  参与者:网络股民,证券系统

4、  前置条件:网络正常,在正常股票的交易时间内

5、  描述:

·股民打开证券交易软件

·查看所关注股票

·按交易键F12,系统提示股民输入帐号和密码

·系统检查输入的帐号、密码是否与系统中存储的匹配

·如果匹配,则弹出选择交易营业所

·如果选择初始开户的营业所,则系统弹出交易窗口

·股民可以进行查询、买入股票、卖出股票的活动

·如果交易符合要求,则交易成功

·如果关闭交易窗口,则交易结束

6、  备选:

·如果系统检查帐号、密码输入错误,则提示重新输入

·如果股民的输入超过三次错误,系统锁定

·如果选择交易营业所不对,提示继续选择

·如果交易不在交易时间,则只能查询

·如果交易不符合要求,系统提示错误,重新交易

7、  后置条件:股民交易成功

网络交易图

 

网络交易细化图

创建用例图的步骤

1、确定系统涉及的总体信息。如证券交易系统包括一下功能:公司上市融资、股民股市开户、股民网络交易、电话交易、股民银证转账、股民账户转移、证监会监管、证交所发布信息、股票分红、公司股改、公司退市等。

2、确定系统的参与者,如谁使用系统的主要功能、谁需要系统支持他们的日常工作、谁来维护、管理系统使其能正常工作、系统需要控制哪些硬件、系统需要与其他哪些系统交互等。如股票交易系统包括上市公司、股民、证监会、证券系统。

3、确定系统用例。用例是系统参与者与系统在交互过程中所要完成的事务,识别用例最好的方法就是从参与者的角度分析他是如何使用系统的。如执行者要求系统提供哪些功能

、执行者需要读、产生、删除、修改或存储系统中的信息有哪些类型、执行者必须指出的系统事件有哪些、如何把这些事件表示成用例中的功能等。

4、区分用例的有限次序。如证券交易系统的用例可排序如下:公司上市、股民开户、股民银证转账、股民网络交易、证交所发布信息、证监会监管、电话交易、公司股改、股票分红、股民账户转移、公司退市。

5、细化用例。如公司上市还可以分为“申请上市”、“审查通过”、“发行股票”用例,股民开户还可以氛围“填写资料”、“录入系统”和“办理银行转帐卡”三步。

静态图

包括类图、对象图和包图

类图:描述系统中类的静态结构,不仅定义系统的中的类,还表示类之间的联系如关联、依赖、聚合等,也包括类的内部结构(属性和操作)。类在系统的整个生命周期都是有效的。

对象图:是类图的实例,不同点在于对象图显示类的多个对象实例,而不是实际的类。由于对象是类图的一个示例,所以只能在系统某一时间段存在。

  

包图:包图用于描述包中存在的类以及包与包之间的各种关系。它也是管理复杂系统的若干类以及类结构的有力工具。包还是保持系统整体结构简明、清晰的重要工具。

当一个系统有几十个、上百个类时,理解和修改这个系统也就变得更加困难,总是希望能将复杂的系统进行分解。解决这个问题的一个基本方法是将许多类组合成为一个更高层次的单位,形成高内聚、低耦合的类的集合,UML把这种分组机制称为包。

 

行为图

描述系统的动态模型和组成对象间的交互关系。

状态机由状态、转换、事件、活动、动作五部分组成。状态表示一个模型在其生命期内的状况。转换表示两个不同状态之间的联系。事件可以触发状态之间的转换。活动是在状态机中进行的一个非原子的执行,由一系列动作组成。动作是一个可执行的原子计算,它导致状态的变更或者返回一个值。

状态图:一个状态图表示一个状态机,描述类的对象所有可能的状态以及事件发生时状态的转移条件。是对类图的补充,但一般只为有多个状态且其行为易受外界影响并发生改变的类画状态图。

复合状态是已经分解为并发(and)或互斥(or)子状态的状态。

 

内部转移域是对象在该状态下,为响应收到的事件而执行的内部动作或活动的列表,执行这些动作或活动后并不改变状态。 内部转移域定义为: 

事件名参数表  [条件] /  动作表达式

一些特定的内部转移域: 

(1) entry / 动作表达式: 进入该状态时要执行的原子动作, 该转移域无参数表和条件。   (2) exit / 动作表达式:离开该状态时要执行的原子动作, 该转移域无参数表和条件。

状态可以带有一个活动,标注在内部转移域中,表示为 do / 活动名。活动是有一段时间的操作,动作是相对快速的操作。 因此活动依附于状态, 而动作依附于转移。 

一旦进入一个状态, 立即执行与entry相连的动作, 随后转移到该状态中。只要通过某个转移离开该状态,则与exit相连的动作立即被执行。 若有一个转移的出发点和终止点是同个状态,那么离开动作将首先执行然后是转移动作, 最后是进入动作。这种情况称为回授。若该状态有相关的活动, 则该活动将在进入动作结束之后执行。

       复合状态是指可进一步细分为多个子状态的状态。 这些子状态之间有“或”关系、 “与”关系。或关系子状态是指某时刻只可到达一个子状态。如图 (c)中,在汽车行驶某时刻,只可能是向前行驶或向后行驶中的一种子状态。与关系子状态是指某时刻可同时到达多个子状态。这也称为并发子状态。与关系子状态的表示如图 (d)所示,在汽车行驶状态中,除了向前、 向后只取一种子状态外,同时,低速、高速两种子状态中也只取一个子状态。 

       转移是指两个状态之间的关系,它描述了对象从一个状态进入另一个状态的情况,并执行了包含的动作。

转移的图形表示是两个状态之间的带箭头连线, 箭头指向要进入的状态,在连线上标注转移的事件、 条件、 依附的动作等,其格式为

事件名 (参数表 ) [ 条件 ] / 动作表达式

活动图:用来为用例建模工作流,描述满足用例要求所要进行的活动以及活动间的约束关系。活动图可以向用户说明需要满足什么条件用例才会有效,以及用例完成后系统保留的条件或者状态。

  

泳道就是把活动图中的活动用垂直线划分成一些纵向区域, 将这些区域称为泳道。每个区域代表一个特定类、人及组织的责任区, 将这些责任者标注在每个区域的顶部。泳道是另一种形式的包,它把一个类中的各个活动的责任组织成一个包,常对应于商业模型的组织单位。泳道将活动图的逻辑描述与顺序图、合作图的责任描述结合起来。 

活动图和流程图的区别:

1、  活动图描述的是对象活动的顺序关系所遵循的规则,着重表现得是系统的行为,而非系统的处理过程;流程图注重描述处理过程,它的主要控制结构是顺序、分支和循环,各个处理过程之间有着严格的顺序和时间关系;

2、  活动图能够表示并发活动,流程图不行;

3、  活动图面向对象,流程图面向过程。

活动图和状态图都是用来描述对象的动态行为。状态图侧重于从行为的结果来描述,也就是一个一个的状态,而活动图则侧重于从行为的动作来描述,也就是一个一个的活动。

交互图

顺序图:表示对象之间的合作关系,强调对象之间消息发送的顺序,同时显示对象之间的交互。

(1) 简单消息: 是一种简单控制流, 用一般带箭头连线表示。 

(2) 同步消息: 是一种嵌套控制流, 消息发出后, 等待处理完成并收到返回消息后,才

能继续下去。同步消息用带半边箭头连线表示。 

(3) 异步消息:是一种异步控制流,消息发出后,不等返回消息就执行自己的操作,可用于

描述实时系统中的并发行为。 异步消息用带实心箭头连线表示。 

 

协作图:描述对象间的协作关系,除显示信息交换外还显示对象以及他们之间的关系。若一个对象在消息的交互中被创建,则可在对象图符的对象名之后加约束{new}; 若一个对象在消息的交互期间被删除, 则可在对象图符的对象名之后加约束{destroy}。

 

如果强调时间和顺序使用顺序图,强调上下级关系则使用协作图。

实现图

构件图:描述代码部件的物理结构及各部件之间的依赖关系。一个构件可能是一个资源代码部件、一个二进制部件或一个可执行部件,它包含逻辑类或实现类的有关信息。

 

配置图:定义系统中软硬件的物理体系结构,配置图可以显示计算结点的拓扑结构和通信路径、结点上执行的软构件、软构件包含的逻辑单元等。特别对于分布式系统,配置图可以清楚地描述系统中硬件设备的配置、通信以及在各硬件设备上各种软构件和对象的配置。

图的选择和使用

       采用面向对象技术设计系统时,首先是描述需求,其次是根据需求建立系统的静态模型构造系统的结构,然后是描述系统的行为。

       其中第一、二步建立的模型都是静态的,包括用例图、类图、对象图、组件图和部署图等。

       第三步建立的是可执行的或表示执行时的时序状态或交互关系的模型,包括状态图、活动图、顺序图和协作图等。

       在需求分析阶段,可以用用例来捕获用户需求,通过用例建模,描述对系统感兴趣的角色及系统的功能需求。

       分析阶段只要关心问题域中的主要概念和机制,需要类图来描述他们之间的关系

作者:Rocky翔
出处:http://www.cnblogs.com/RockyMyx/
本文版权归作者和博客园共有,欢迎转载,但请在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2010-09-30 15:03  RockyXiang  阅读(901)  评论(1编辑  收藏  举报