Jan 03, 2016
传统方法学
结构分析与结构设计技术的本质是功能分解,是围绕实现处理功能的过程来构造系统的。结构化方法强调过程抽象和模块化,是以过程(或操作)为中心来构造系统和设计程序的。
然而用户需求的变化大部分是针对加工的,因此这种变化对基于过程的设计来说是灾难。
面向对象的开发方法
面向对象方法从现实世界中客观存在的事物出发来构造软件系统,强调在软件开发过程中面向客观事物,在系统构造中尽可能运用人类的自然思维方式。
从 80 年代后期开始,进行了面向对象分析( OOA )、面向对象设计( OOD )和面向对象程序设计( OOP )等新的系统开发方式模型的研究,在有些文献中统称为 OO 范型。
面向对象的基本概念
1.1. 对象对象1.1. 对象对象是现实世界事物或个体的抽象表示,对象包括事物个体的属性,还包括事物的操作。对象属性值表示了对象的内部状态,操作(服务)表示了对象可以完成的职责。
在分析阶段,对象的操作是对象展现给外部的服务。对象状态的改变是由对象的操作引起的。对于民航机场的指挥控制系统, MU9114 航班就是该问题域中的对象,该对象的属性可以包含但不限于:航班号、起飞机场、降落机场、起飞时间、降落时间,位置等;可能的操作包括离港、到港等。当对 MU9114 航班对象进行离港操作时,对象的状态将从停靠状态改变成飞行状态。对于学生管理系统, 06-2 班也是一个问题域内的对象,其属性包括班级成员、班长、固定教室等,其操作可包括分配教室等等。
面向对象的基本概念
2.2. 类类 2.2. 类类 类是对具有共同特征的对象 (属性和操作 )的表示。类通常被认为是对象的模板,通过该模板可以创建特性一致的对象。对象是类的实例。使用类创建对象的过程实际上是类的实例化过程。
民航机场的指挥控制系统中,从众多的航班对象可抽象出一个航班类,
通过这个类,反过来可以实例化很多的对象: MU9114、MU9115等等。
而在学生管理系统中,通过对 04-2、 05-1等对象的抽象,形成班级类。
一旦有了班级类,又可以实例化出更多班级,如 07-1、 08-2等等。
ÀàÃû ÊôÐÔ
·þ Îñ
¶ÔÏó Ãû ÊôÐÔ
·þ Îñ
³é Ïó
¾ßÌå
面向对象的基本概念
对象类的表示方法: 用三个区域的矩形框表示,从顶到底包括类名、
属性表和操作表。Cl ass-Name
1 1 1属性名 :数据类型 =缺省值2 2 2属性名 :数据类型 =缺省值
……
1 1 1操作名 (参数列表 ):结果类型2 2 2操作名 (参数列表 ):结果类型
……
面向对象的基本概念
3.3. 关系关系3.3. 关系关系 关系用于表达相关事物之间的关联
考虑一个家庭,以及家庭内部所有成员之间的关联,
关系表示了事物之间语义上的联系。
比如父亲和孩子之间就有语义上的联系,这就是关系。
关系可以按照语义分很多种,经常涉及到的就是继承、关联、依赖等。
面向对象的基本概念
4.4. 继承继承4.4. 继承继承继承关系模拟了现实世界的一般与特殊的关系(遗传关系)。它表示类之间的内在联系以及对属性和操作的共享,即子类可以沿用父类(被继承类)的某些特征。
例如,飞行器、汽车和轮船可归于交通工具类,飞行器类可以继承交通工具类某些属性和操作。
继承性是面向对象程序设计语言的最主要的特点,是其他语言(如面向过程语言)所没有的。
继承性是面向对象程序设计语言的最主要的特点,是其他语言(如面向过程语言)所没有的。
面向对象的基本概念
继承使对象能够直接获得已有的性质和特征,而不必重复定义它们。 在面向对象的软件技术中,继承是表达类之间相似性的一种机制,即在已有的类的基础之上增量构造新的类。前者称为父类(或超类),后者称为子类。子类除自动拥有父类的全部属性和服务外,还可以进一步定义新的属性和服务。
继承使对象能够直接获得已有的性质和特征,而不必重复定义它们。 在面向对象的软件技术中,继承是表达类之间相似性的一种机制,即在已有的类的基础之上增量构造新的类。前者称为父类(或超类),后者称为子类。子类除自动拥有父类的全部属性和服务外,还可以进一步定义新的属性和服务。
继承结构举例
下面给出用 C++ 写的在日期表示形式上的类继承。
Class DATE { // 用于表示亚洲日期的类DATE ( int yy=0; int mm=0; int dd=0 ; ) voide set_date ( intyy , int mm , int dd ) ; void get_date ( int & yy, int&mm, int& dd ) ; void printed () ; protected: int year , month,day;}class E-DATE : public DATE {// 用于表示欧洲日
期的类,继承了用于表示亚洲日期的类 void printed-de ( ) ;}
面向对象的基本概念
5.5.聚合聚合5.5.聚合聚合 除遗传关系外,现实世界中还普遍存在着部分与整体的关系。
聚合关系允许利用现有的类组成新类。例如,飞机可由发动机、机身、机械控制系统、电子控制系统等构成。汽车,它是由发动机、变速箱、底盘等组成,那么我们就可以利用发动机、变速箱、底盘等类聚合成一个新的类:汽车。因为聚合是部分与整体的关系,因此,不能像继承关系那样说汽车是发动机,正确的说法应该是:发动机是汽车的组成部分。
面向对象的基本概念
6.6.消息消息6.6.消息消息消息是对象之间交互的唯一途径,一个对象要想使用其他对象的服务,必须向该对象发送服务请求消息。而接收服务请求的对象必须对请求做出响应。
当我们向银行系统的帐号对象发送取款消息时,帐号对象将根据消息中携带的取款金额对客户的帐号进行取款操作:验证帐号余额,如果帐号余额足够,并且操作成功,对象将把执行成功的消息返回给服务请求的发送对象,否则发送交易失败消息。
面向对象的基本概念
7.7. 多态多态7.7. 多态多态在一般类中定义的属性或操作(服务)被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。
多态性使得不同对象收到同一消息可产生完全不同的结果例如:几何图形类的特殊类有“椭圆”、“多边形”等,其定义的服务“绘图”可被子类继承,但其功能却不同,分别是画出椭圆和多边形。进而多边形的子类“矩形”中绘图服务是画出一个矩形。多态使得同一个属性或服务在一般类及其各个特殊类中具有不同的语义。
面向对象的基本概念封装 封装是面向对象方法的一个重要原则。它有两
个涵义:第一个涵义是把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象);第二个涵义也称作“信息隐蔽”,即尽可能隐蔽对象的内部细节,对外形成一个边界(或者说形成一道屏障),只保留有限的对外接口使之与外部发生联系。
[ 定义 ] :封装就是把对象的属性、服务结合成为一个独立的系统单位,并尽可能隐蔽对象的内部细节。
面向对象方法学核心概念
简而言之:面向对象 = 对象 + 类 + 继承 +消息
简而言之:面向对象 = 对象 + 类 + 继承 +消息
[ 定义 ] :面向对象方法是一种运用对象、类、继承、封装、聚合、消息传送、多态性等概念来构造系统的软件开发方法。
面向对象的分析方法
面向对象分析( OOA )包括使用基本需求作为指南来选择类和对象。
为对象标识属性和操作。定义、组织类的结构和层次。建造对象 - 关系模型和对象 - 行为模型。结合多种 OOA 方法,联合提出了统一建
模语言 UML ( Unified Modeling Language )。
统一建模语言
UML 是一种标准的软件建模语言,是用图形符号来表达面向对象设计,它是一种用于对软件系统的产品进行可视化描述、详细描述、构造以及文档化的标准语言。
统一建模语言
UML 具备以下三种结构:( 1 )静态对象结构( Static Object Struct
ure )看到同一时刻、同时发生的同步操作。
( 2 )动态行为( Dynamic Behavior )。 静态对象按照时间顺序的活动。( 3 )系统部署( System Deployment ) 整个控制流程的系统状况。
模型的建立
模型的目的有以下几个:( 1 )了解问题。( 2 )介入的工作者相互沟通。( 3 )找出错误。( 4 )规划和设计。( 5 )产生程序代码。
UML 的基本图标
UML提供了不同的模型图用来表示系统相关角色(如用户、分析员等)对系统的看法。 需求确认、系统分析、系统设计、系统编码、系统测试是软件工程的 5 个重要阶段。 UML 中的用例图、序列图可以用来描述系统需求: 类图、对象图、协作图可以用来分析系统; 类图、对象图、序列图、状态图、活动图可以用来设计系统; 构件图、序列图可以用来帮助系统编码; 部署图、序列图可以用来规划系统实施。
UML 的基本图标
类名
属性
方法
接口
系统维护
泛化
依赖
协作 参与者
登录
用例
类
服务器
节点
空闲
状态 交互
构件
交互
UML 的基本图标
1. 类图
UML 的基本图标
2. 对象图
对象是类的一个实例,具体实例的名字位于冒号左边,该实例所属的类名位于冒号右边。
UML 的基本图标
3. 用例图( use case diagram ) 用例从执行者的观点描述系统的行为。用例描述的行为也被称为外部行为。一个用例把系统提供的一个功能描述为一组事件,这组事件对执行者产生一个可见的结果。执行者启动一个用例来访问系统功能。然后,用例能启动其它的用例并从执行者处收集更多的信息。当执行者和用例交换信息时,它们被称为交流。
UML 的基本图标
用例图说明如何使用系统,可了解系统的需求,并表达用例与角色之间的关系。如图描述了用户使用洗衣机这个需求。
UML 的基本图标
电话卡功能的 UML 用例图,用例使用椭圆表示,系统界限用包围用例的方框表示。
电话卡
充值
使用
登录
电话卡用户
电话卡管理
中心
读卡
UML 的基本图标
4. 状态图
UML 的基本图标5. 顺序图 顺序图用来反映若干个对象之间的动态协作关
系,也就是随着时间的流逝,对象之间是如何交互的。
顺序图由若干个对象组成,每个对象用一个垂直的虚线表示(线上方是对象名),每个对象的正下方有一个矩形条,它与垂直的虚线相叠,矩形条表示该对象随时间流逝的过程(从上至下),对象之间传递的消息用消息箭头表示,它们位于表示对象的垂直线条之间,说明和其他的注释作为脚本放在图的边缘。
UML 的基本图标
UML 的基本图标
6. 构件图 构件图主要用在规划系统整合开发结构
时,定义的实现视图,描述系统构件间的结构和依赖关系。
UML 的基本图标
7. 部署图 部署图强调系统结构的静态视图。描述计算
机和设备,展示其连接关系,以及驻留在每台机器的软件。
UML 的基本图标—总结
UML 中,功能模型由用例图表示,对象模型由类图表示,而动态模型用状态图和顺序图表示。
用例图:视图 类图:视图
对象模型: 模型
状态图:视图 顺序图:视图
分析模型: 模型
动态模型: 模型
功能模型: 模型
其他特征图
⑴ 包。当你需要将图中的组织元素分组,或者在图中说明一些类或构件是某个特定子系统的一部分时,可以将这些元素组织成包。
其他特征图
⑵ 注释。可以作为图中某部分的解释,其图标是一个带折角的矩形,矩形框中是解释性文字。
面向对象分析
主动对象: 主动对象是至少有一个服务不需要接收消息就能主动执行的对象。不需要接收消息就能主动执行的服务可称为主动服务,在编程时它将对应一个并发执行的程序单位。
永久对象: 生存期可以超越程序的执行时间而长
期存在的对象。
面向对象分析
在 OOA 中运用主动对象需要注意以下两点:
( 1 )不提倡脱离系统开发的实际需要漫无目标地去发掘每个对象的主动行为。
( 2 )往往由设计决策决定是否应该把一个对象定义为主动对象,设计者可以为提高或减低系统的并发难度而人为的增加或减少主动对象的种类与数量。
面向对象分析
表示法:
普通对象的类符号 主动对象的类符号
面向对象分析
语句
子系统或系统
服务
类
属性
服务
S H P D P
一个或多个语句 组成服务
S:软件,H:硬件,P:人员,P:过程,D:数据
一个或多个服务 属于一个类或对象类
一个或多个对象类 组成子系统或系统
面向对象分析
1 、研究问题域和用户需求 OOA 的基本出发点是问题域和用户要
求,分析员的主要工作就是:通过不断地研究问题域,建立一个能满足用户需求的系统模型。
研究用户需求包括以下活动:( 1 )阅读有关文档:阅读用户提交的需
求文档等一切与用户需求有关的书面材料。
面向对象分析 ( 2 )与用户交流:了解用户的需求,搞清有
关用户需求的疑点。 ( 3 )进行实地调查:有些需求问题,通过以
上途径仍然不能完全明确,则需要到现场作适当的调查,因为以上资料可能表达得不够准确、清晰。
( 4 )记录所得认识:随时记录通过阅读、交流和调查所得到的认识,更要记录所存在的疑点。
( 5 )整理相关资料:纠正初始需求文档中不符合的内容,整理出一份确切表达系统责任的需求文档。
面向对象分析
问题域:被开发的应用系统所考虑的整个业务范围。
确定系统边界: 明确系统是什么以及系统的环境是什么,划出被开发的系统和与该系统打交道的人或物之间的明确界限,并确定它们之间的接口。
面向对象分析
2 、对象的发现和标识 没有一个建立对象的规范的方法。对
一个具体的系统而言,如何发现对象,缺少形式化的步骤。
可以用传统的三种系统分析工具:数据流图、实体 - 关系图和状态 - 变迁图。将这些工具应用于软件分析中,称为三视图。
面向对象分析
方法:
发现对象的过程
面向对象分析
三视图模型( 3VM )1. 实体 - 关系模型 2. 数据流模型 上下文图标识的外部实体表示数据流的源头和目的地,因此,外部实体就是候选对象。上下文图的数据代表了系统的输入 /输出。
3. 状态 - 变迁模型
面向对象分析
上下文图
电梯控制系统 OOA
功能需求: 总的需求就是要设计和实现一个能对一座 40
层楼的建筑物内的 4 部电梯进行调度和控制的程序,这些电梯能以常规的方式将乘客从某一层楼送到另一层楼。
目的地按钮、目的地按钮指示灯、楼层传感器、到达指示灯、召唤按钮、召唤按钮指示灯、电梯马达控制(上、下、停)、目标机。
电梯控制系统 OOA
发现对象: 通过考查该系统的问题域及系统责任可以发现
如下对象:( 1 )到达事件( ARRIVAL EVENT ): ( 2 )到达面板( ARRIVAL PANEL ): ( 3 )目的地事件( DESTINATION EVENT ):( 4 )目的地面板( DESTINATION PANEL ): ( 5 )电梯( ELEVATOR ):
电梯控制系统 OOA
( 6 )电梯马达( ELEVATOR MOTOR ): ( 7 )楼层( FLOOR ): ( 8 )超载传感器( OVERWEIGHT SENSO
R ): ( 9 )召唤事件( SUMMONS EVENT ): ( 10 )召唤面板( SUMMONS PANEL ):
电梯控制系统 OOA
对象层表示:
电梯控制系统 OOA
电梯系统的属性描述:1. 类 ARRIVAL EVENT( 1 ) Arrival _floor( 2 ) Arrival _id( 3 ) Elevator_ id9. 类 OVERWEIGHT SENSOR( 1 ) Overweight_ sensor_ id( 2 ) Overweight_ status
电梯控制系统 OOA
电梯系统的服务定义
明确每个对象所需的属性与服务。至此可以画出该系统 OOA 模 型的特征层。
对象模型
1. 一般 - 特殊关系(继承关系) 一般 - 特殊关系反映了一个类与若干个互
不相容的子类之间的分类关系。
对象模型
2. 整体 - 部分关系 整体 - 部分结构又称组装结构,用于描述
系统中各类对象之间的组成关系,通过它可以看出某个类的对象以另外一些类的对象作为其组成部分。
对象模型
对象模型
ѧУ
½ÌÎñ ×ÜÎñ ²ÆÎñ ϵ
½ÌÑÐÊÒ ÊµÑéÊÒ
对象模型
3. 关联关系(实例连接) 通常把两类对象之间的二元关系再细分
为一对一( 1:1 )、一对多( 1:M )和多对多( M:N )三种基本类型,类型的划分依据参与关联的对象的数目。 表达了对象间的静态关系,表示一个对象对另一个对象的依赖关系(实例连接)。
对象模型
ÕûÌå
²¿ ·Ö 1 ²¿ ·Ö 2
1
m
n
m
对象模型
电梯控制系统的关系层
一般 - 特殊关系: 可以发现电梯控制系统中的到达事件( ARR
IVAL EVENT )、目的地事件( DESTINATIO
N EVENT )和召唤事件( SUMMONS EVEN
T )都可以归类为事件类。故创造出一个电梯事件( ELEVATOR EVENT )作为这三个类的一般类。
电梯控制系统的关系层
整体 - 部分关系:( 1 )电梯马达( ELEVATOR MOTOR )是电梯( ELE
VATOR )的部分类,它们之间是一对一关系。( 2 )超载传感器( OVERWEIGHT SENSOR )是电梯
( ELEVATOR )的部分类,它们之间是一对一关系。( 3 )到达面板( ARRIVAL PANEL )是电梯( ELEVAT
OR )的部分类,它们之间是一对一关系。( 4 )目的地面板( DESTINATION PANEL )是电梯
( ELEVATOR )的部分类,它们之间是一对一关系。( 5 )楼层( FLOOR )是到达面板( ARRIVAL PANE
L )的部分类,它们之间是一对一关系。( 6 )召唤面板( SUMMONS PANEL )是楼层( FLOO
R )的部分类,它们之间是一对一关系。
电梯控制系统的关系层
实例连接:( 1 )电梯( ELEVATOR )与楼层( FLOOR )
之间的实例连接。( 2 )目的地面板( DESTINATION PANEL )与目的地事件( DESTINATION EVENT )之间的实例连接。
动态模型
要对一个系统了解得比较清楚,首先应当考察它的静态结构,即在某一时刻它的对象和这些对象之间相互关系的结构;然后应当考察在任何时刻对象及其关系的改变。
系统的这些涉及时序和改变的状况,用动态模型来描述。动态模型着重于系统的控制逻辑。它包括两个图,一是状态图,另一是顺序图。
动态模型
图中的椭圆表示状态,状态可以标上状态名也可以不给状态起名字,行为用关键字 do (后接冒号)标明。 从一个状态到另一个状态的转换用箭头线表示,线上表明事件名。必要时在事件名后面加一个方括号,括号内写上状态转换的条件。
动态模型
动态模型
顺序图用来反映若干个对象之间的动态协作关系,也就是随着时间的流逝,对象之间是如何交互的。
:简单手表 :显示屏 :时间
按下按钮 1()
按下按钮 1()
闪烁小时()
按下分()
按下按钮 2()
同时按下按钮 1.2
停止闪烁()
刷新() 增加分钟()
确认新时间()
手表用户
功能模型
功能模型表明了系统中数据之间的依赖关系及有关的数据处理功能,它由一组数据流图组成,建立类之间的交互和协作关系。通常建立了对象模型和动态模型之后再建立功能模型。
面向对象的系统描述
① 用例图( Use Case Diagram )从用户角度描述系统功能,并指出各功能的操作者。
② 静态图( Static Diagram )表示系统的静态结构,包括类图、对象图、包图。
③ 行为图( Behavior Diagram )描述系统的动态模型和组成对象间的交互关系,包括状态图、活动图。
面向对象的系统描述
④ 交互图( Interactive Diagram )描述对象间的交互关系,动态执行顺序,包括顺序图、协作图。
⑤ 实现图( Implementation Diagram )用于描述系统的物理实现,包括构件图、配置图。
面向对象设计 从软件系统的角度面向对象系统设计 OOD 的
有四项主要工作:① 问题域部分的设计:从对象到类,建立新类库,
最终到整个应用的构架;② 人机交互部分的设计:用户界面的实现;③ 任务管理部分的设计:系统管理,包括对象、
行为、交互的细节,支持总体客户体验的技术的各个方面:用户帮助的内容、开拓市场的资料的内容、服务和支持的细节;
④ 数据管理部分的设计:数据库的建立、维护与使用。
问题域设计
重用已有的设计和编程类;
把问题域专用类组合在一起;
创建一般化类而建立协议;
改进系统性能;
加入低层细节构件;
问题域设计
重用已有的设计和编程类;
首先考虑如何从自己的或别人的源程序(类库)中把现成的类增加到问题域部分。如用某种非面向对象方法编写的可用软件,把软件封装在一个特意设计的、基于服务的界面中,改造成类的形式。
划掉现成类中任何不用的属性和服务;把应用类中因继承既存类而成为多余的属性和操作标出,修正问题域类的结构和连接。
问题域设计
把问题域专用类组合在一起;
在面向对象设计中,通常先引入一个类以便把问题域专用的类组合在一起,它仅仅起到“根”类的作用,把全部下层的类组合在一起。即把与问题域相关的类关联,建立类的层次结构。一般/特殊结构 。
问题域设计
创建一般化类而建立协议;
有时,一组专用类(特殊类)将需要一个相似的服务(以及相应的属性)集合。在这种情况下,加入一个类,这个类定义了可以被特殊类共用的一组服务。
问题域设计
改进系统性能;
提高执行效率和速度是系统设计的主要指标之一,有时需要改变问题域的结构以提高效率。 下面有几种可望改进性能的措施:
在对象之间具有高度繁忙消息流通的情况下,把两个或更多的类加以合并以减少消息传递引起的速度损失;
在类及对象中扩充一些保存临时结果的属性,以避免重复计算造成的速度损失。
问题域设计
加入低层细节构件;
在面向对象分析时,专注于较高层的类和对象,避免考虑低层细节;在设计时,应考虑用到哪些较低层的类和对象,为了设计和编程的方便,可以在低层成分中分离出一些独立的类。
人机交互部分的设计
·描述人及其任务脚本;· 设计命令层次;
· 设计与用户的详细交互;· 进行用户界面原型设计;
· 对用户分类;
· 设计人机交互部分的类;·根据图形用户界面进行设计。