面向对象分析与设计_第1页
面向对象分析与设计_第2页
面向对象分析与设计_第3页
面向对象分析与设计_第4页
面向对象分析与设计_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

二课程总学时本课程开设一学期。课堂教学:64学时(16周,每周4学时)

上机实验:32学时(16周,每周1次2学时)三教材和参考书教材:《面向对象分析设计与编程OOA/OOD/OOP/AOP》(吴炜煜编著清华大学出版社)参考书:UML与系统分析设计

(张龙祥编著人民邮电出版社)

UML基础与Rose建模实用教程(谢星星等编

清华大学出版社)第一页,共七十页。四课堂教学内容和进度计划第1章面向对象技术概述12学时第2章C++语言基础

4学时第3章类与对象的构造设计4学时第4章继承性与派生类4学时第5章多态性与虚函数4学时第6章文件的输入与输出

8学时第7章统一建模语言UML及其在系统分析与设计中的应用16学时第8章UML在数据库分析与设计中的应用12学时

第二页,共七十页。五实验安排安排16次实验,每次2学时,大约每周进行一次实验。六成绩考核学完本课的成绩计算方法:平时占50%,期末闭卷考试50%。平时成绩计算方法:平时考勤、课堂纪律、课堂表现、上机实验、练习等。七教学方法采用理论联系实际的方法,把课堂理论讲授和上机实验相结合。理论学习:课前预习、上课认真听讲、保质保量完成作业。上机实验:上机前弄清实验规程,严格按实验指导进行操作,保质保量完成实验任务。第三页,共七十页。八上课时间和地点

理论课:

1班星期三上午第1、2大节W34082班星期一下午第3、4大节W3406实验课:

1班星期三下午第3大节X2407c2班星期一上午第2大节X2507

九教学反馈

电话:2759253第四页,共七十页。第1章面向对象技术概论本章的学习目的由于面向对象技术比传统的软件开发技术能更自然和有效地开发软件,解决软件危机,因此它已成为现代软件企业广为采用的一项有效技术,所以当今学习面向对象技术具有非常重要的意义。

教学目的是使学生通过本章的学习能够理解和掌握面向对象技术的基本概念和基本知识以及基本思想方法,为后续进一步学习面向对象的分析、设计和编程奠定良好的基础。第五页,共七十页。本章的学习内容了解面向对象软件开发方法的发展历程及其重要意义了解面向对象技术的基本概念了解面向对象技术的特点和优点初步了解面向对象分析与设计的一般方法第六页,共七十页。

1.1面向对象方法的提出(1)软件概念的提出

二十世纪四十年代诞生了世界上第一台电子计算机—ENIAC,至今才半个来世纪,聚然间发生了巨大而深刻的计算机革命。计算机科学技术已经成为一门系统完善、复杂深刻的工程技术学科,它的应用已从国防、科技、工业、农业渗透到人类生活的各个方面,无处不在。出现了各种各样的计算机,包括巨型机、大型机、小型机、个人电脑、工作站和网络等等,五花八门,应有尽有。但是,无论怎样尖端,怎样高深,一个计算机系统都是由硬件和软件两部分构成。人们在第一台电子计算机上就已实现了冯.诺依曼提出的存储程序思想,即将程序和数据存储在计算机内存中,用程序来控制计算机的运行。这种程序、数据及相关文档统称为软件(software)。由于计算机是在程序的控制下运行,所以软件成为了计算机的灵魂,是组成计算机系统不可缺少的部分。第七页,共七十页。(2)软件开发方法的发展计算机诞生之后,计算机技术一直处于高速发展状态,计算机科学技术的发展由原来只依靠硬件的发展逐渐变为更多地依靠软件的发展。事实上,软件技术的发展经历了多代历程。第一代(20世纪50-60年代),是以FORTRAN和ALGOL等编程语言为标志的算法技术时代。那时,程序设计全靠人们发挥创造才能,全靠技巧和窍门。基于这种算法技术的软件生产率非常低,程序很难看懂,甚至程序员自己写的程序过一段时间后自己也看不懂,这给软件的修改、维护带来极大的困难。于是60年代末出现了“软件危机”。第八页,共七十页。第二代(20世纪70年代末开始到80年代盛行的),以PASCAL、COBOL等编程语言和关系数据库管理系统为标志的结构化系统分析和设计技术。

由于早期的软件比较简单,开发一个软件就等同于编一个程序,算法设计出来了就解决了问题。那时程序处理的数据也很杂乱,数据结构不统一,实现相同功能的不同程序处理的数据结构或数据模型可能相差很大,这对于软件的统一化和标准化以及软件的集成和推广应用很不利。当软件变得很大很复杂时,开发一个软件只编一个程序的方法就不适应了。于是人们提出了结构化软件开发方法。这种方法提倡通过系统分析和设计将该大的系统划分为多个功能模块,每个功能块又可以进一步划分为更小的功能子模块,直到各个子模块容易编程实现为止。在编程实现了各个模块之后,将这些模块组装起来就构成了完整的应用系统。这种技术主要强调程序模块化结构和数据结构,采用自顶向下逐步求精的设计方法和单入口单出口的控制结构,从而大大改善了程序的可读性。第九页,共七十页。伴随着结构化软件开发技术的出现,人们还提出了软件工程方法,使软件开发工作从以前只考虑程序的编写技巧转变到利用软件工程的方法,使软件系统的生产过程遵循一系列的规范化步骤,包括需求分析、总体设计、详细设计、编程实现、软件测试、软件维护等。从而大大改善了软件的质量与可维护性,但软件开发的成本却大大增加了,未能完全克服软件危机。第十页,共七十页。第三代(上个世纪80年代开始至今还盛行的)以Smalltalk、C++等为代表的面向对象软件开发方法(OO)。

传统的结构化程序设计以算法为核心,把本来密切相关的数据和对数据的操作分离开来,很难保持数据和操作的一致性,其软件开发方法也不符合人们的自然思维习惯,设计出来的软件系统其解空间与问题空间不一致,致使程序难以理解、修改和扩充,最终导致程序复杂性问题和软件危机。

为了超越程序复杂性障碍,克服软件危机,人们提出了面向对象软件开发方法。面向对象开发方法一改过去传统的以功能分析和功能分解为基础的面向过程的结构化分析与设计方法,第十一页,共七十页。

面向对象开发方法模拟人们理解和处理客观世界的方式来分析问题,把系统视为一系列对象的集合,其面向对象的设计又将分析的结果映射到某种面向对象实现工具的结构上,使映射过程有着比较直接的对应关系,使分析者、设计者和编程者都可使用相同的概念,从而使面向对象的软件开发能比较自然地模拟客观世界的活动,使问题描述空间与解空间在结构上尽可能一致。因此,采用面向对象方法可以更有效地开发大型软件系统。面向对象方法的封装、继承、多态等机制不仅支持软件复用,而且使软件维护工作可靠有效,可实现软件系统的柔性制造,更好地克服软件危机。因此,它已成为成熟的广为采用的软件开发方法。

到20世纪末,面向对象软件工程逐渐发展成熟,特别是统一建模语言(UML)标准的形成和广泛使用,使面向对象软件开发方法已成为软件开发的主流技术。第十二页,共七十页。(3)面向对象软件开发方法的发展面向对象软件开发方法始于面向对象语言的研究和发展。面向对象语言的发展有三个重要的里程碑:20世纪70年代的Simula-67是第一个面向对象的语言,对后来的许多面向对象语言的出现产生了很大的影响。它首次提出了对象和类的概念和方法,启示了一种崭新软件思维方法的出现。80年代初的Smalltalk语言,它的广泛使用掀起了一场“面向对象运动”,随之诞生了多种面向对象的语言,可分为几类。对流行的语言进行面向对象的扩充得到的语言,如混合性语言C++和纯面向对象语言Java.第十三页,共七十页。

自80年代末期到90年代

,面向对象技术的研究和应用不再局限于编程阶段,而是向着系统分析和系统设计阶段发展,即系统分析和系统设计阶段也开始采用面向对象方法。这标志着面向对象方法已经发展成一种完整的方法论和系统化的技术体系—面向对象软件工程。

我们用面向对象语言编程求解问题之前需要先按面向对象的方法进行分析和设计,然后才能根据设计模型进行有效编程。所以我们在学习用面向对象技术求解实际问题之前应该先学习面向对象的基本概念,再学习面向对象的分析和设计,然后再学习面向对象的编程实现,这样才能全面掌握用面向对象技术求解问题的方法。第十四页,共七十页。

1.2面向对象的基本概念

为了更好地理解面向对象的思想和方法,有必要先介绍一些面向对象的基本概念。

与人们认识客观世界一样,面向对象技术认为客观世界是由各种各样的事物或实体组成,每个事物或实体都可用一个对象来表示。因此,客观世界可看成是由各种各样的对象组成,每个对象都有各自的内部状态和行为操作,不同对象间相互作用和联系就构成了各种不同的系统,从而形成了客观世界。因此,在面向对象的程序中,客观系统自然被描绘成一系列完全自治、封装的对象,因此对象是组成面向对象程序的基本单位。第十五页,共七十页。(1)对象(Object)对象是客观实体的抽象表示,是由描述对象的属性的数据和对这些数据进行的操作行为两部分组成。属性是用来描述对象静态特征的数据项。行为是用来描述对象动态特征的操作方法或算法。第十六页,共七十页。(2)对象的特征具有一个状态,由与其相关联的属性值集合所表征。具有唯一的标识名,可以区别于其他对象。有一组操作方法,每个操作方法决定对象的一种行为。对象的状态一般只能被自身的行为所改变。对象的操作包括自操作(施于自身)和它操作(施于其他对象)。对象之间以消息传递的方式进行通信。一个对象的成员仍可以是一个对象。voiddisplay(){PersonA;cout<<学号<<endl;cout<<姓名<<endl;cout<<性别<<endl;cout<<成绩<<endl;A.print();}

第十七页,共七十页。(3)类(Class)

在面向对象程序中,一般不会逐个描述具体对象,而是将注意力集中于一类具有相同特性的对象,抽象出这类对象的共同特性和行为,用“类”进行一般性描述。类

类是具有相同属性和行为的对象集合的抽象描述;

类的内部包括属性和行为两个主要部分。第十八页,共七十页。(4)实例(instance)

类是对具有相同属性和行为的一组对象的抽象描述。因此,类可作为一种用户自定义类型和创建对象的样板,而按照这种样板所创建的一个个具体对象就是类的实际例子,通常称为实例。例如,studentS1(051001,李明,男,90)第十九页,共七十页。(5)属性(attribute)

属性就是类中所定义的数据成员,是对客观实体的性质的抽象表示

。例如,学生类中有属性:学号、姓名、性别、成绩等。第二十页,共七十页。(6)方法(method)

方法就是对象所能执行的某项操作,也就是类中定义的服务函数。方法描述了对象执行操作的算法。在C++中把类中定义的方法称为成员函数。例如,学生类中用于显示学生属性数据的成员函数display()就是一个方法。第二十一页,共七十页。(7)消息(message)消息就是请求某个对象执行它所包含的某项处理操作的指令信息。实质是对某个类对象的操作函数的调用。例如,studentS1;

S1.display()是一个消息。一个消息一般由三部分组成:接收消息的对象名、操作函数名、函数的参数。消息是对象之间的通信机制。一个对象可以同时向多个对象发送消息,也可以接受多个对象发来的消息。第二十二页,共七十页。(8)封装性(encapsulation)所谓封装就是把对象的属性和操作结合成一个独立的单位,使外界不能直接访问或修改这些属性数据和操作代码,外界只能通过对象提供的接口函数来改变或获取对象的属性数据,这就实现了消息隐蔽。封装是面向对象技术的一个基本特征。封装的目的是实现信息的有效隐蔽。例如,classStudent

{private:

char*id;

//学号

char*name;

//姓名

intage;

//年龄

public:

voidmodify()

{age=age+1;}

voiddisplay(){······}

}第二十三页,共七十页。

封装的优点:(a)封装起了信息隐蔽作用,增强了对象的独立性,使外界只关心对象对外所提供的接口,忽略其内部细节。

(b)封装使外界不能随意存取对象的内部属性,从而有效地避免外部错误对它的影响,提高了系统的安全性和可靠性。

(c)封装的结果隐蔽了程序的复杂性,提供了代码的重用性,降低了软件开发的难度。例如,classStudent{private:char*id;//学号

char*name;//姓名

intage;//年龄

public:

voidmodify()

{age=age+1;}

voidprint(){···}

}main(){StudentS1;S1.modify();

S1.print();}第二十四页,共七十页。(9)继承性(inheritance)如果在一个已定义的类上,增加一些特殊属性或操作,可以形成一个新的类,这个类不仅继承了前一个类的全部特征,而且具有新的特性,因此可看作前一个类的特例,是对前一个类的继承。前一个类称为父类,新产生的类叫做子类。通过继承关系可形成一种类层次结构,叫做继承结构。第二十五页,共七十页。

继承关系可以分为如下几种:一代继承:从父类到子类只延伸一次。如图(a)所示。多代继承:从父类到子类延伸多次。如图(b)所示。单继承:如果在一个继承层次结构中,每个子类只有一个直接父类,则这种继承称为单继承。如图(a)和(b)所示。多继承:如果在一个继承层次结构中,每个子类可有不止一个直接父类,则这种继承称为多继承。如图(c)所示。第二十六页,共七十页。(10)多态性(polymorphism)

为了正确反映客观世界的多态性,面向对象程序设计中也采用了多态性,即在不同类中,可用相同的函数名实现功能不同的函数。如下图所示。多态性的优点:高层代码(算法)只需写一次,低层便可多次复用,可提高程序设计的灵活性和效率。第二十七页,共七十页。(11)抽象性

抽象就是忽略事物中与当前目标无关的非本质特征,更充分地注意与当前目标有关的本质特征,从而找出事物的共性,把具有共性的事物划分为一类。类的定义明确指出类是一组具有相同属性和行为的对象集合的抽象描述。将客观事物抽象成对象和类是面向对象的第一步。因此,抽象性是面向对象的的基本特征。(12)分类性

分类性是指将具有相同的数据(属性)和行为(操作)的对象抽象成一类。

第二十八页,共七十页。

1.3面向对象的分析方法面向对象的分析(object-orientedanalysis,OOA)是面向对象软件工程方法的第一个环节,包括一套概念原则、过程步骤、表示方法、提交文档等规范要求。OOA的基本任务是:运用面向对象方法,对问题域和系统责任展开分析,正确认识其中事物和它们之间的关系,发现描述问题域和系统责任所需要的对象和类,并定义类的属性和服务,以及它们之间所形成的结构和连接,最终的目的是产生一个符合用户需求,并能直接反映问题域和系统责任的OOA模型及其详细说明,为后续的面向对象设计object_orienteddesign,OOD)和面向对象编程实现(object_orientedprogramming,OOP)提供指导。OOA与OOD能够自然地过渡和结合,这是面向对象方法的一个优点。第二十九页,共七十页。

1.3.1OOA方法评价

由于面向对象方法更适应于解决当今的庞大、复杂和易变的系统开发问题,更易于设计模型,因此它已成为当前比较流行的软件开发方法。自20世纪80年代后期以来,相继出现了许多OOA和OOD方法,例如:Booch方法(OOD)Cood-Yourdon方法(OOAD)Jacobson方法(OOSE)Rumbaugh方法(OMT)Wassman-Pircher(OOSD)等。

第三十页,共七十页。评价一个分析方法的优劣主要看它是否具有OOA的如下优点:(1)面向对象分析方法应该能够自然地模拟人们理解和处理客观事物的方式来分析问题,表达需求,直观性较好。OOA应该便于与分析有关的人员之间的交流。(2)有利于对问题域和系统责任的理解和分析,有利于克服系统的复杂性困难。所建立的系统模型清晰,与程序中的类层次结构保持对应,便于系统扩充和改造。(3)把属性数据和操作服务作为对象整体来看待,比较自然地描述客观实体。对象在问题域中比较稳定,当需求变化时,只需增加新的对象,而原有的对象可以保留使用。第三十一页,共七十页。(4)根据对象间的相关性最小原则来分析和说明问题,从而有利于实行封装性原则,更好地适应系统需求的变化、制作和提取可复用部件,支持软件复用。(5)可用类这样的有效机制来显式地表示对象集合的共性;抽象得到的类层次结构又可以比较直接地转化为OOP的程序结构,使得编程思路清晰,编程效率较高。(6)分析方法与设计方法比较一致,从而便于建造一个问题域模型。(7)适合开发一大类系统,实用性较强;开发出来的系统可扩展性强。第三十二页,共七十页。1.3.2OOA步骤面向对象分析的关键是对问题域中的事物进行识别,确定必要的类及其相互关系。根据分析问题的繁简程度和设计进程的需要,把问题域分解成一些类和对象,并以消息的形式建立各对象之间的联系。面向对象分析的大致步骤如下:(1)分析问题域,明确用户需求了解与问题相关的业务领域知识,明确用户对系统的需求,定义系统的职责范围和边界,探讨问题的初步解决方案。

例如,题库管理系统的用户需求可以从如下三个方面描述:系统问题域说明:应用系统的业务范围系统边界说明:确定系统与用户之间接口系统功能说明:系统需要实现的功能第三十三页,共七十页。系统问题域说明:

在公共题库的支持下每个教师:输入习题:可用系统编写习题及答案,并存入习题库;组成作业:从习题库中选择一组习题来组成作业,并在要求时间公布习题答案;从习题库中选择一组习题组成考试试卷,并公布试题;可以批改学生的作业;学生答题后可收卷,阅卷评分。每个学生:用系统完成作业或答题并提交给系统;可在习题库中选择习题自己练习;可以在公布答案后核对自己的作业;系统管理员:负责习题、编班和权限管理,维护习题库。第三十四页,共七十页。系统边界说明:系统的用户有本校教师、学生、系统管理员。学校以班组织学生,每班每学期有若干课程。每门课的习题由一位教师负责。只有本科教师可提交或修改习题。系统功能说明:教师编写习题及答案入库。教师选择作业题公布于习题板上,向学生布置作业;教师选择试题公布于考试板上(有考题,时间和评分要求).每个学生每门课程都有一个练习本。记录学生对每道习题(或试题)的解答。教师通过练习本批改习题(或试题)。习题库提供入库,提取,权限,查询等管理。第三十五页,共七十页。(2)确定对象和类。即分析确定并标识构成系统的对象,再对对象进行抽象分类。先把系统看成由一些子系统组成,把每个子系统划分成一个主题,主题是由一组类和对象组成。

例如,对于题库管理系统,发现对象的出发点:问题域、系统功能和边界説明从需求中找出关键名词或名词短语作为侯选对象:

教师,系统,习题,答案,作业,时间,学生,试题,系统管理员,权限,学校,班,学期,课程,习题板,考试板,练习本,习题库。分析和筛选对象:教师,学生,习题板,练习本班,课程习题,考试板,习题答案习题库服务第三十六页,共七十页。确定类:对具有相同属性和操作集合的各组对象进行抽象描述,得到组成系统的类。第三十七页,共七十页。(3)确定系统各部分的分类和组成结构第一是按照一般—特殊关系,标识类间的继承关系,确定分类结构;第二是按照整体—部分关系,标识一个对象是有哪些对象组成,确定组装结构。

例如,对于题库管理系统,分类结构可如下确定:习题板与考试板是父子关系—考试板可看作为特殊的习题板,除习题板的共性外,增加了评分标准.第三十八页,共七十页。对于题库管理系统,组成关系可如下确定:班与学生是组成的关系(1对n)习题板与习题是组成的关系(1,0对n)练习本与习题答案是组成关系(1对n)第三十九页,共七十页。(4)找出并建立每个对象及其相互之间的联系。即以应用为基础来标识对象,定义对象的内部特征(属性和方法),建立实例连接和消息连接。消息连接体现了对象间的通信关系和接口协议形式。例如,对于题库管理系统,实例连接关系如下:练习本与学生对象之间存在一对多的实例连接关系。由练习本中的学生ID属性体现。练习本与考试板对象之间存在一对多的实例连接关系。练习本用快照复制答案作为考试板中答卷属性的体现。课程与教师对象之间存在一对多的实例连接关系。由课程中负责教师ID属性体现。

班教师习题板练习本学生考试板习题课程习题解答1nnnnnnn11110,10,1第四十页,共七十页。

对于题库管理系统,对象之间消息连接可以如下确定:

教师向习题发消息:调用编写习题,编写答案,习题入库等方法。教师向习题板发消息,可调用选题,公布答案,查询答案,查询习题等方法。例如:习题板.select(),习题板.answer(),…教师向考试板发消息可调用收卷,阅卷方法。学生向练习本发消息,可调用提取作业,核对答案,自选习题等方法。学生向习题解答发消息,可调用答题方法。教师向练习本发消息,可调用检查作业方法。练习本向习题板发消息,可调用查询习题,查询答案方法。练习本调用自选习题时,要向习题库发消息去提取习题。习题对象向习题库发消息可调用习题入库,提取习题方法。习题板对象向习题库发消息可调用习题入库,提取习题方法。第四十一页,共七十页。类图:

班教师习题板练习本学生考试板习题库系统管理员习题课程习题解答1nn1nnnn1n110,10,1第四十二页,共七十页。(5)进一步协调和优化模型中各个组成部分(包括类/对象)的性能和相互关系,精炼侯选的类/对象,使系统成为由不同部分组成的最小集合。(6)分析和设计模型中每个组成部分(包括类/对象)的功能实现细节,检查分析模型的一致性和完整性。

总之,OOA模型描述了表示某个特定论域中的对象以及它们的结构关系和通信关系。OOA模型有两个用途。首先,OOA模型是将现实世界形式化的“视图”。它用一系列对象表示软件系统主要的组织结构以及现实世界强加给软件系统的各种规则和约束条件。其次,OOA模型规定了对象间如何协同才能完成软件系统所指定的工作。这种协同在模型中是以表明对象之间通信方式的一组消息连接来表示的。OOA模型为后续的OOD和OOP提供指导。第四十三页,共七十页。1.3.3OOA模型的建立过程OOA过程就是分析和确定用户需求并建立问题域精确模型(OOA模型)的过程。在建立OOA模型时,我们将选用PeterCoad和EdYourdon在1991年提出的一种循序渐进的面向对象分析方法。

OOA模型的建立过程可以划分为五个层次,它们分别是:(1)对象-类层

划分待开发系统及其环境信息的基本构造单位,标出反映问题域的对象和类,并用符号进行规范的描述,用信息提供者熟悉的术语为对象和类命名。

例如,对于题库管理系统,我们抽出了如下对象/类:教师,学生,习题板,练习本班,课程习题,考试板,习题答案习题库服务第四十四页,共七十页。(2)属性层

定义对象类和某些结构中的数据属性

。继承结构中所有类的公共属性可放于通用类中。标识对象必需的属性并放在合适的继承层次上,属性的特殊限制和实例连接关系也应标识出来。第四十五页,共七十页。(3)服务层

要表示对象的服务或行为,就是要定义类上的操作。列出对象需要做什么(即方法),也给出对象间的消息连接(并应以箭头指示消息从发送者到接受者)。第四十六页,共七十页。(4)结构层

识别现实世界中对象之间的结构关系。当一种对象是另一种对象的一部分时,用整体-部分关系表示;当一个类属于另一个类时,用类之间继承关系表示。

班教师习题板练习本学生考试板习题库系统管理员习题课程习题解答1nn1nnnn1n110,10,1第四十七页,共七十页。(5)主题层

将复杂的系统划分为更小的主题,是管理大系统的一个方法,这里所说的“主题”可以看成是子模型或子系统,可将相关类或对象划分为一个主题。

班教师习题板练习本学生考试板习题库系统管理员习题课程习题解答1nn1nnnn1n110,10,1第四十八页,共七十页。1.3.4OOA视图面向对象技术专家提出了多种表示OOA模型的标记,其中下列标记是比较简明和常用的标记。第四十九页,共七十页。图1.4显示了OOA模型的符号表示及其说明。第五十页,共七十页。第五十一页,共七十页。1.3.5OOA提交在正式完成OOA之后,应该提交面向对象分析模型及其他面向对象分析文档,包括:用于指导设计和实现的分析方案说明。精选的候选类清单。提交数据字典(定义数据流图中的各个基本成分的具体含义的文档)。使用OOA模型符号或者UML图示,绘制的类图、主题图等,包括对类间继承关系、整体-部分关系的描述。类定义模板(一些类的抽象描述

,包括属性说明,方法和消息说明)。类的描述可按OOA工具和CASE工具的要求,通过填写对话框中的表格来完成。OOA方案的优化规则。第五十二页,共七十页。1.4面向对象的设计初步

虽然OOA与OOD分两个阶段进行,但它们是紧密结合的,可以很自然地从OOA过渡到OOD,这正是面向对象方法的一个重要优点。OOA与OOD的主要区别是:OOA与问题域更接近,OOD与系统的实现更接近。下面介绍面向对象设计(OOD)的基本策略。1.4.1OOD模型获得OOD模型有多种方法,这里介绍有代表性的OOAD方法,它采用扩展OOA模型来得到OOD模型,即在OOA模型横向划分5个层次的基础上,将目标系统纵向划分成4个部分:问题域部分、人机交互部分、任务管理部分、数据管理部分,如下图所示。第五十三页,共七十页。第五十四页,共七十页。建立OOD模型包括4个部分的工作:(1)问题论域部分:在OOA模型的基础上,细化和优化分析结果。主要根据需求的变化,对面向对象的分析阶段产生的模型中的类和对象(包括属性,操作和类之间的结构关系)进行重新组合和分解;根据面向对象的设计原则,增加必要的类,属性、操作和关系。

设计包括:复用设计;把问题论域相关的类关联起来;加入一般化的类以建立类间协议;调整继承支持级别;改进性能;加入较低层的构件(即增设一组构成底层应用模型的类和对象),以实现更细或更特殊的操作。第五十五页,共七十页。(2)人机交互部分:设计用户界面模型,该用户界面模型中的类和对象提供实现人机交互操作的接口函数。用户界面设计包括菜单设计、窗口设计、输入/输出界面设计等等。(3)任务管理部分:建立一些类,用于处理有关的并发问题以及其它与特定平台有关的问题。例如,在多用户交互系统中,几个用户同时与系统进行交互,无法预知哪一个用户是下一个输入者,这些交互活动是并行发生的,需要建立一些专门的类对象来处理;在空中交通控制系统中,系统同时监控着数架飞机,有许多活动在同时发生。对于诸如此类的并发问题,需要建立一些专门的类对象来处理。第五十六页,共七十页。(4)数据管理部分:数据管理设计包括:—数据存放方式设计:数据存放设计选择数据存放的方式(文件存放、关系数据库表格存放或其他存放方式)。—数据操作的设计。为每个需要存储的对象和类增加用于存储管理的属性和操作,在类和对象的定义中加以描述。第五十七页,共七十页。上述OOD总体结构的基本思路是简单的,但是我们应当重视并理解它,对于学习和应用面向对象设计,养成良好的规范化设计风格,提高设计质量都有重要意义。详细地确定对象和类,是OOD的关键工作。一种有效的启发式方法是,对需要提供的服务和问题陈述作语法分析,其中,名词和名词短语可作为候选对象,动词可作为候选对象的服务,形容词可能表示子类关系。寻找对象的策略和方法不少,但设计经验和技巧是非常重要的。

在分析和设计中,我们要注意遵循这样的原则:把由基本对象组装复杂对象的过程与分解大粒度对象使系统细化过程相结合;把抽象化与具体化结合起来;把独立封装与继承关系结合起来等。第五十八页,共七十页。1.4.2什么是优良的OOD

OOD的关键工作是进一步确定对象、类及其联系。一个优良的OOD设计方法应具备如下基本条件:(1)继承耦合应尽可能紧密

耦合指一个软件结构内不同模块之间互连的紧密程度。继承是一般化类与特殊类之间关联耦合的一种形式。在设计时应该使特殊类尽量多地继承其父类的数据属性和服务函数,即应该提高继承耦合的程度,而不是摒弃父类的许多数据属性和服务函数去另外定义许多新的数据属性和服务函数,这样就可以节省软件开发工作量,而且使程序更简洁,编程更高效。因此,继承耦合应该尽可能紧密。第五十九页,共七十页。(2)无继承关系的类与类之间的耦合应该很松散。如果一个软件系统内不同模块之间的耦合很松散,则系统中某一部分的变化对其他部分的影响会降到最低程度。在理想情况下,对某一部分的理解、测试或修改,无须涉及系统的其他部分。在面向对象方法中,类/对象是最基本的模块,因此类与类之间的耦合应该很松散。一般说来,类/对象之间的耦合可分为两大类:(i)交互耦合应该尽可能松散对象之间的交互耦合是通过消息连接来实现的。为使交互耦合尽可能松散,应该遵守下述准则:a)尽量降低消息连接的复杂程度。即应该尽量减少消息中包含的参数个数,降低参数的复杂程度。b)减少对象发送(或接收)的消息数。(ii)继承耦合应该尽可能紧密第六十页,共七十页。(ii)继承耦合尽可能紧密只有一个例外,类的继承关系必须是紧密联系的,因而子类与父类要紧密耦合。

(3)信息隐藏某个类的数据实现细节对于别的类来说应该是隐藏的。(4)设计应该具有最优的可重用性

软件重用是提高软件开发生产率和目标系统质量的重要途径。重用的实现基本上从设计阶段开始。最优的可重用性有两方面的含义:一是尽量使用已有的类(包括开发环境提供的类库,及以往开发类似系统时创建的类);二是如果确实需要创建新类,则在设计这些新类的协议或接口函数时,应该考虑将来的可重复使用性。第六十一页,共七十页。(5)尽力使类、对象和方法的定义具有简单性;(6)对所设计的类和类族,应注意保持其协议或接口的稳定性;(7)类的层次结构设计规模适度,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论