第二章面向对象的分析与设计方法Word下载.docx
《第二章面向对象的分析与设计方法Word下载.docx》由会员分享,可在线阅读,更多相关《第二章面向对象的分析与设计方法Word下载.docx(57页珍藏版)》请在冰豆网上搜索。
·
1989~1991,SallyShlaer和SteveMellor出了两本关于OO分析与设计的书;
1987年,DavidHarel引入了状态图,用以描述系统或子系统有限状态的变化过程;
1991~1995,PeterCoad和EdYourdon经过研究,开发出了较为简捷的面向原型的分析方法;
1990年Smalltalk协会开发出了一种称为CRC(ClassResponsibilityCollaboration)卡的工具用于对象模型的分析过程;
1991年JimRumbaugh小组对象的OMT(ObjectModelingTechnique)模型,后经GradyBooch作了进一步的完善(主要是符号体系和术语)成为目前公认的最实用化的OO模型;
几乎在同一年,IvarJacobson(当时在为Ericsson服务)为OMT引入了UseCase的概念,成为了后来的UML的基础;
到目前为止,面向对象的分析与设计方法的新概念、新思路、新论点仍在不断的出现。
图2-1只是截止到1998年以前的面向对象的分析与设计方法模型理论发展的历程示意图。
由于面向对象的分析与设计方法目前还没有国际通用的建模套路,故本书内容所采用的是目前较为成熟的OMT(ObjectModelingTechnique)建模理论。
图1
-1面向对象的分析与设计方法模型理论发展的历程示意图
1.3面向对象的分析与设计方法的优势
之所以会在计算机软件开发中掀起面向对象的分析与设计方法的研究和学用热潮是与面向对象的分析与设计方法相对于传统的面向过程的分析设计方法而存在的明显优势分不开的。
在传统的面向过程的分析设计方法中,处理数据的过程部分永远是被动地伴随数据流的变化而变化的。
常常是分析数据流的人员并不研发与之相关的处理过程。
这种从文档内就明显存在的二者的脱节给日后的维护工作带来了巨大的困难。
而面向对象的分析与设计方法在自始至终的环节上都将被处理的数据集合(即对象)及其处理过程紧密的联系在一起,从根本上避免了上述问题的发生。
另外,随着软件品种的日益丰富,软件开发商迫切的希望能够充分的利用已有的软件资源,避免对功能雷同或类似的软件部件进行重复开发,从而降低开发成本且提高开发速度。
面向对象的分析与设计方法正是适应了此种需要并提出了多种可操作的解决方案。
而传统的面向过程的分析设计方法已无法满足这种需要了。
在适应多任务环境、并行计算、安全防范等方面,面向对象的分析与设计方法更是有着传统的面向过程的分析设计方法无法比拟的优势。
2面向对象的分析法(ObjectOrientedAnalysis)
2.1对象(Object)概述
使人类赖以生存的客观物质世界都是由不同的对象所构成的。
将一个工业的阀门看作一个软件系统中的对象进行一些深入的分析可能有助于理解对象的概念。
一个正常工作的阀门应具有开启、关闭的状态,此时它还会处于内含的液(气)体的压力之下,具备一定的抗压强度。
当阀门处在开启状态后,液(气)体还有通过阀门时的流量、温度等对阀门有一定影响的形态的存在。
在外力的刺激作用下,阀门的开关可以发生移动而改变内部液气体的流量、压力、温度等直至打开或关闭阀门的状态。
如果此种移动定义为开移(即开阀门的移动)或关移(关阀门的移动)两个动作的话,对即非开又非关的移动便可定义为流量调节的移动。
因此一个阀门对象的以上特性可以归纳为下述两类:
表现自身所处状态、位置、品质的数据描述;
能够改变自身所处状态、位置、品质的所有的动作行为描述;
因此可以将表现自身所处状态、位置、品质等特性的数据描述集中在一起,而将与之相关联全部的动作行为也集中在一起并使其包围数据描述。
于是,据此可以绘制出如图2-1所示的阀门对象图。
在该图中以直线将不同的动作分割开来。
推而广之,客观世界中的所有对象都具有这两类特性。
并且对上述内容进一步抽象,将封装于内圆的那些表现对象内部各种所处状态、位置、品质的数据描述的总合称为属性(Attribute或知识);
将外包的与属性相关联动作或操作行为的总合称为方法(Method),并将一个具有完整的属性和方法的客观实体称为一个对象(如图2-2)。
图2-2的图形通常又被简称为田田圈。
具此,前面讨论的阀门可用如图2-2所示的田田圈表示出来。
2.2封装(Encapsulation)
由上所述,一个对象中的属性和方法具有极为紧密的联系。
每一个方法的行为目标就是田田圈内的部分或全部的属性数据。
每个属性成员数据的某个时刻的数值又是前一次方法实施的结果。
于是将一个具有完全的内置属性与外置方法的构成体就称为封装。
面向对象分析法中所讨论的对象都具有封装的特性。
图2-2所示的田田圈也正是一个对象封装的典型形态。
实际上将此概念推广至自然界中的对象,封装特性也是同样存在的。
封装具有下述的三个特点:
封装将发生关联的所有属性与方法捆绑到一起,形成了具有明确边界的对象布局;
属性内容的改变只受到对象内部方法的作用,与对象边界以外的任何因素的变化无直接关系。
每个对象的方法都不能自主动作,而是由来自对象外的信号或者由来自本对象中另外方法的信号才能触发。
2.3对象方法的引用—消息
每个对象外层的方法是外界可以看到并能直接引用的。
但引用一个对象的方法却要经过特定的访问形式才能实现。
这个访问形式便称为消息(Message)。
一个消息必须包含下述两项内容:
接收消息的对象标识;
所引用的该对象的方法标识;
一个消息可能包含下述另外两项内容:
被访问的方法所需的参数;
在引用完成后可能存在返回信息。
因此从上述意义上讲,一个消息的定义又可以叙述如下:
促使对象动作的来自外界的触发信息的总和被称为消息。
如果一个系统由两个以上的对象所构成的,则发出消息的一方被称为客户方(Client),而接收消息的一方被称为服务器方(Server)。
所以可以得出下述结论:
若要使得一个对象产生一个动作或改变某种状态,则必须有一个对象向其发出一个消息。
而消息可能返回的信息也必然应回传给消息的发出者。
因而这样又称一对消息的发/收方构成了一个客户—服务器结构模型(如图2-3所示)。
当然,客户方和服务器方并不是一成不变的。
在一个系统中通常会因运行条件的不同而相互转变它们之间的角色位置。
例1:
试将下述C语言语句按对象消息结构予以说明:
“doubled=0;
d+=2.5;
”。
解:
若视d为一个对象,则“=”和“+=”将是对象d方法中的一员。
两式中的数值0和2.5应视为消息所使用的参数(如图2-4所示)。
实际上,题中两个消息的发出者分别是编译器和一个临时存在的对象d’。
例2:
设a=,b=,c=a+b,试绘其相应的消息传递图。
依据上题的分析思路便可获得如图2-5所示的消息流程图。
2对象数据类型的抽象与类
如同传统的面向过程分析与设计方法研究问题一样,在面向对象的分析与设计方法中研究的对象应尽量避免使用过于个性化的单个对象作为样本,通常是采用在对分散的、孤立的对象进行抽象之后的而获得的具有同类对象共性的抽象化的对象类进行。
2.1对象的抽象—类
在面向对象的分析与设计方法中将被抽象化的对象称做类(Class)。
这与C语言中的用户自定义数据类型struct结构的情景十分相似。
类就如同一个对象的模具,可以制造出一个个装有具体属性数值的对象来。
如一个学生对象应有描述学生学号、姓名等属性数据成员;
还应有对这些属性数据成员进行输入/输出操作的相应方法。
于是可将它们绘制成如图2-6所示的对象生成流图。
在现实世界中的对象内的属性和方法可以按数学模型设立访问权限,这些访问权限是通过具体的语言所提供的相应的语法予以支持。
由此可得出类的如下特点:
一个类是同一类对象的抽象存在形式,包含全部的属性数据结构及其相应方法的描述但不包含具体的属性数值;
用一个类可以生成多个含具体属性数值的同类的对象;
类的属性成员的值将随对象的不同而不同,而所有的同类对象却只引用一套方法。
2.2OMT系统的符号定义
为了能够明确地将具体的对象与其抽象形式—类相区别,OMT确定用下述两种符号分别代表对象和类:
两者之间的主要差别在属性描述上,类中的属性结构描述只要声明属性的类型、长度的等定性结构。
而对象中属性值描述则必须给以确定的数值(如图2-7所示)。
当要对类的所有成份进行精细描述时可使用如图2-8所示的图符来表述。
一个学生类及其对象的描述如图2-9所示
2.4应用OMT构建对象模型的基本内容和步骤
OMT构建对象模型的步骤是围绕以下三项基本内容展开的:
对象模型(ObjectModel)、动态模型(DynamicModel)和功能模型(FunctionModel)。
一.对象模型所要解决的问题
系统中对象的提取与类标注;
系统中对象间的关系;
对象类中的属性结构和方法的描述;
二.动态模型所要解决的问题
描述系统的控制机制;
描述系统的工作形态的变化形式;
三.功能模型所要解决的问题
描述系统内各对象的数据流入/流出形态;
描述系统内各对象的数据流入/流出的相应处理过程;
OMT作为一种经典的面向对象的分析与设计方法,不仅仅是上述的三个分析与设计步骤,而且还提出的一整套与上述步骤相配套的文档描述格式、图形符号和对象演化技术。
这些内容将在后续章节中陆续讨论到。
2.5类间的相互关系
不同类的对象必然要产生相互的关系。
这种关系概括起来可分为三类:
包容(Aggregration)关系、继承(Inheritance)关系和关联(Association)关系。
一.包容关系
⒈描述
现实当中,一个对象往往可以由一个以上的其他对象所构成。
如一个学校由若干学生、课程和教师所构成;
而课程可以由数学、外语等不同内容的具体课程所构成(如图2-10示意图所示)。
但倘若学校缺了其中一部分,则学校的性质就发生了变化。
因此,在一个类中若存在至少有一个属性成员不是简单的数据类型而是另外一个类的关系就被称为包容关系(如图2-11所示)。
这些内容
学校
学生课程教师
数学……外语
图2-10学校的包容关系示意
都不是用简单的数据类型能够代替的。
类的包容关系有下述特点:
包容类含有一个以上的不同于自身特性的类对象,舍此而无法存在;
被包容的类作为包容类的一个必须的组成部分而存在于包容类之中;
即具有自身的原有性质,也不受包容类中其它被包容的类对象的影响;
作为包容类的一个