C++程序设计--对象分册(第8章).

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2020/1/111本章学习重点掌握内容:面向对象的分析面向对象的设计与实现第8章面向对象程序设计方法与实例2020/1/112第8章面向对象程序设计方法与实例8.1面向对象方法学概述8.2面向对象的模型8.3面向对象程序设计过程8.4电梯模拟系统2020/1/1138.1面向对象方法学概述面向对象(Object-Oriented,缩写为OO)方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。面向对象方法是一种新的思维方法,它不是把程序看作是工作在数据上的一系列过程或函数的集合,而是把程序看作是相互协作而又彼此独立的对象的集合。每个对象就像一个微型程序,有自己的数据、操作、功能和目的。2020/1/1148.1面向对象方法学概述面向对象(Object-Oriented,缩写为OO)方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。面向对象方法是一种新的思维方法,它不是把程序看作是工作在数据上的一系列过程或函数的集合,而是把程序看作是相互协作而又彼此独立的对象的集合。每个对象就像一个微型程序,有自己的数据、操作、功能和目的。2020/1/1158.1面向对象方法学概述面向对象方法在概念和表示方法上的一致性,保证了软件工程各项开发活动之间的平滑(“无缝”)过渡。面向对象开发过程的核心是面向对象分析(OOA)和面向对象设计(OOD)两个阶段,但二者的界限比较模糊。OOA通过分析用例,提取用户的需求,从而建立问题域逻辑模型的过程;OOD是建立面向对象的求解域模型的过程。从OOA到OOD实际是一个多次反复、逐步迭代模型的过程。面向对象(OO)是认识事物的一种方法,是一种以对象为中心的思维方式。这里先介绍它的几个主要概念:对象、类、封装、继承、消息、结构与关联、多态性。2020/1/1161、对象世界上所有的事物都可以称为对象。对象可以是有形的如:一台电视机等。也可以是无形的如:帐户、一项记录等。对象具有静态特征和动态特征。对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体,这个封装体有可以唯一地标识它的名字,而且向外界提供一组服务(即公有的操作)。属性和操作是对象的两大要素。属性是对象静态特征的描述,操作是对象动态特征的描述。对象名也称为对象标识。如电视的属性有:品牌、尺寸、重量等。操作有:收视、选台、音量调节等。8.1.1对象和类2020/1/1172、类类是对象的蓝图。根据抽象的原则对客观对象进行归纳和划分,把具有相同特征的对象归为一个类。它是一个抽象的概念。类是对象模版,用于创建具有相同属性和相同操作(服务)的对象。它包括属性和方法(注:类的服务、行为和操作只是叫法上的区别)。3、封装封装是指按照信息隐藏的原则,把对象的属性和操作结合在一起,构成一个独立的封装体。封装性也就是信息隐藏,通过封装把对象的实现细节对外界隐藏起来了。8.1.1对象和类2020/1/118外部对象不能直接操作对象的属性,只能使用对象提供的接口。具有封装性的条件如下:有一个清晰的边界。所有私有数据和实现操作的代码都被封装在这个边界内,从外面看不见更不能直接有确定的接口(即协议)。接口就是对象之间通信的桥梁,只能通过向对象发送消息来使用它。受保护的内部实现。实现对象功能的细节(私有数据和私有方法)不能在定义该对象的类的范围外进行访问。8.1.1对象和类2020/1/1194、继承继承使得一个类可以继承另一个类的属性和方法。这样通过抽象出共同的属性和方法组建新的类,便于代码的重用。如图8.1的继承关系。Button-pressed:bool+pressButton():void8.1.1对象和类elevatorButton-elevatorRef:Elevator+pressButton():voidfloorButton-floorNumber:int+pressButton():void图8.1继承中的父子类2020/1/1110子类电梯按钮和楼层按钮继承了父类Button的全部属性和服务,同时又具有自身新的属性和服务。一般和特殊是相对而言的,在哺乳动物和狗及猫之间,哺乳动物是一般类(称为基类、超类或父类),狗和猫是特殊类(也称子类);在狗和黑狗之间狗是一般类,黑狗是特殊类。5、消息向某个对象发出的服务请求称作消息。对象提供的服务规定的消息格式称作消息协议。消息包括:被请求的对象标识、被请求的服务标识、输入信息和应答信息。如:向电梯按钮类发送请求按下电梯按钮的消息elvatorButton.pressButton()。8.1.1对象和类2020/1/11118.1.1对象和类6、结构与关联一个系统一般由很多对象组成,对象之间并不是互相孤立的,而是存在着各种各样的关系。包括:部分/整体、一般/特殊、实例连接、消息连接。(1)部分/整体对象之间存在的部分与整体的结构关系。如电梯按钮是电梯类的一个组成部分,电梯由电梯按钮、门、楼层、响铃等组成。如图8.2的组合关系。2020/1/11128.1.1对象和类Elevator-door:Door+processPossibleArrival():voidelevatorButton-elevatorRef:Elevator+pressButton():voidDoor-open:bool+closeDoor():void图8.2组合关系2020/1/11138.1.1对象和类组合和聚合。组合关系中部分和整体的关系很紧密。聚合关系中则比较松散,一个部分对象可以属于几个整体对象。(2)一般/特殊对象之间的结构关系,很多时候也称作泛化和特化关系。(3)实例连接对象之间的实例连接称作链接,对象类之间的实例连接称作关联。(4)消息连接消息连接表现了这样一种联系:一个对象发送消息请求另一个对象的服务,接收消息的对象响应消息,执行相应的服务。2020/1/11147、多态性所谓多态性是指不同对象接收相同的消息时产生不同的行为。这里的消息主要是对类中成员函数的调用,而不同的行为就是指类成员函数的不同实现。即在类等级的不同层次中可以共享(公用)一个行为(方法)的名字,然而不同层次中的每个类却各自按自己的需要来实现这个行为。当对象接收到发送给它的消息时,根据该对象所属于的类动态选用在该类中定义的实现算法。如图8.1中,当向按钮对象发送消息pressButton()时,不同按钮对象如电梯内部按钮和楼层按钮会自动判断自己的所属类并执行相应的服务。8.1.1对象和类2020/1/1115面向对象的模型,分别从三个不同侧面描述了所要开发的系统。对象模型定义了“做什么”的实体,功能模型指明了系统应该“做什么”,动态模型明确规定在何种状态下,接受什么事件的触发而“做什么”。一个典型的软件系统组合了上述三方面内容:它使用数据结构(对象模型),执行操作(动态模型),并且完成属性值的变化(功能模型)。8.2面向对象的模型2020/1/11161.对象模型是一个类(属性和方法)、对象(类的实例)、类或对象之间关系的定义集。对象模型表示静态的、结构化系统的“数据”性质,为建立动态模型和功能模型提供了实质性的框架。对象模型把面向对象的概念与常用的信息建模概念结合起来,增强了模型的可理解性和表达能力。对象模型还表示了类/对象之间的结构关系。类/对象之间的关系一般可概括为关联、归纳(继承)、组合(或聚集)三类。8.2面向对象的模型2020/1/11178.2面向对象的模型2.动态模型表示瞬间的、行为化的系统“控制”性质,它规定了对象模型中对象状态的合法变化序列。对象有自己的生命周期,它由多个阶段组成,每个特定阶段都有规范该对象行为的一组运行规则。对象的状态是对象属性的一种抽象,事件是某个特定时刻发生的一个系统行为是引起对象状态转换的控制信息。对象对事件的响应,取决于当时的状态,响应包括改变自己的状态,或者是形成一个新的触发行为(事件)。动态模型描绘对象的状态,触发状态转换的事件,以及对象行为(对事件的响应),即基于事件共享而互相关联的一组状态集合构成了系统的动态模型。2020/1/11183.功能模型指明了系统应该“做什么”,直接地反映了用户对目标系统的需求。面向对象的功能模型由一组用例组成,用例模型描述的是外部执行者(Actor)所理解的系统功能。用例模型描述了待开发系统的功能需求用例模型将系统看作黑盒,从外部执行者的角度来理解系统用例模型驱动了需求分析之后各阶段的开发工作,不仅在开发过程中保证了系统所有功能的实现,而且被用于验证和检测所开发的系统,从而影响到开发工作的各个阶段和UML的各个模型。在UML中,一个用例模型由若干个用例图描述,用例图主要元素是用例和执行者。8.2面向对象的模型2020/1/1119传统程序设计方法的主要思想是自顶向下逐步分解。整个系统由分层的子程序集合构成。这要求程序设计师必须对系统的调用关系非常清楚,这对于开发大型系统来讲是是非困难的,而且构建的系统稳定性较差,任何上层子程序的修改都会引整个系统的改变。而面向对象得程序设计方法提供一种崭新的系统设计方案,就是将系统看成一系列相关联的对象的集合,而对象之间是通过消息传递的方法相互作用来完成任务,每个对象用自己的方法管理数据。本节就介绍这种软件开发的方法,它将软件开发过程分为3个阶段:面向对象的分析、面向对象的设计、面向对象的实现。不同阶段则使用不同的模型来描述。8.3面向对象程序设计过程2020/1/11208.3.1面向对象的分析面向对象分析的任务是确定系统能够做什么?谁来使用这个系统?同时建立用例模型,并定义系统中的问题领域类,主要由系统用户和开发人员合作完成。1.需求分析分析的第一步是定义用例,以描述所开发系统的外部功能需求。用例模型的主要构件是用例、角色和系统边界。用例用于描述系统所有功能需求,系统边界用于界定系统功能的范围,而角色用于描述与系统功能有关的外部实体,它可以是用户,也可以是外部系统。2020/1/1121使用面向对象程序设计方法时,在本阶段不需要严格的系统规格说明书,可以使用图表(如用例图)来描述系统的功能,除了用用例图描述系统需求外,还可以用文字(或活动图)对每个用例进行需求说明,更具体地描述该用例与角色的交互。例如电梯模拟系统的用例图如下:8.3.1面向对象的分析2020/1/11228.3.1面向对象的分析乘客处理电梯呼叫标示移动方向处理楼层呼叫标示电梯位置电梯模拟系统移动停止电梯开关门触发紧急处理器图8.3电梯模拟系统用例图2020/1/11232.特定领域类分析分析阶段的另一项工作是特定领域分析,以列出系统中的特定领域类。我们可以通过阅读规格说明、用例以及寻找系统处理的概念来进行特定领域分析,也可以通过用户和领域专家的讨论,以识别出要处理的所有关键类及它们的相互关系。这里的特定领域是指具体的商业领域,而不是整个系统领域。在本实例中,可以确定电梯模拟系统中特定领域类为电梯、调度、门、按钮、楼层等,并使用类图来描述系统领域类及其关系。8.3.1面向对象的分析2020/1/1124需要强调的是,这一阶段对特定领域类的描述具有一定的素描性质,也就是说特定领域类的操作和属性不一定与最终实现时的定义一致。因为此时还没有涉及到系统功能的具体实现,不可能准确、完整地定义它们。有一些操作需要在设计阶段细化时才能确定。此外,为了描述问题领域中类的动态行为,可以使用UML中的任何一种动态图(如顺序图、活动图、协作图、状态图)。本阶段的各动态图都具有素描性质,主要是为了协助对领域类及其相互关系的分析,为下一阶段的具体设计打下基础。8.3.1面向对象的分析2020/1/1125设

1 / 82
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功