资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,面向对象分析与设计,复习提要,软件学院,2010.12.25.,第一部分 面向对象技术的基本概念和基本方法,1.1,软件开发方法的发展,计算机诞生之后,计算机技术一直处于高速发展状态,计算机科学技术的发展由原来只依靠硬件的发展逐渐变为更多地依靠软件的发展。事实上,,软件技术的发展经历了多代历程,。,第一代,(20,世纪,50-60,年代,),,是以,FORTRAN,和,ALGOL,等编程语言为标志的,算法技术时代,。,那时,程序设计全靠人们发挥创造才能,全靠技巧和窍门。基于这种算法技术的软件生产率非常低,程序很难看懂,甚至程序员自己写的程序过一段时间后自己也看不懂,这给软件的修改、维护带来极大的困难。于是,60,年代末出现了,“,软件危机,”,。,第二代,(20,世纪,70,年代末开始到,80,年代盛行的,),,以,PASCAL,、,COBOL,等编程语言和关系数据库管理系统为标志的,结构化系统分析和设计技术,。,为了克服软件危机,人们主要从如下两个方向做了努力:,一是从管理的角度改进软件开发方法,,,提出了,软件工程方法,大大改善了软件的质量与可维护性。,二是侧重于对软件开发过程中分析与设计方法的研究,和改进,。这方面的重要成果就是在,70,年代出现了风靡一时的,结构化开发方法,结构化系统分析和设计技术,。,。,为了改进,基于算法技术的,软件开发方法,人们提出了,软件工程方法,,使软件开发工作从只考虑程序的编写技巧转变到利用软件工程的方法,使软件系统的生产过程遵循一系列的规范化步骤:,计划,需求,分析设计,编码,测试,运行,维护,每个阶段都有其明确的任务,任务完成后都将交付给下一阶段一定规格的文档,作为下一阶段开发的依据。这种开发过程直观上就像一级一级的瀑布,所以系统开发生命周期也称为“,瀑布模型,”。软件工程方法大大改善了软件的质量与可维护性。,瀑布模型的缺点:,1,)在项目各个阶段之间极少有反馈。只有在项目生命周期的后期才能看到结果。,2,)由于软件开发过程是一个非常复杂的过程,在软件开发的每一阶段都有可能留下隐患和错误,如果等到系统已经开发完毕,在测试阶段发现了重大问题,这时的返工就会造成人力、物力、财力及时间上的巨大浪费。当软件需求不明确或不准确时容易出现问题。,其他模型:,原型模型,增量模型,螺旋模型。,第三代,(80,年代开始至今还盛行的,),以,Smalltalk,、,C+,等为代表的,面向对象软件开发方法,(OO),。,(问题,1,:,面向对象软件开发方法发展的动因,是什么?),传统的结构化程序设计以算法为核心,把本来密切相关的数据和对数据的操作分离开来,很难保持数据和操作的一致性,其软件开发方法也不符合人们的自然思维习惯,设计出来的软件系统其解空间与问题空间不一致,致使程序难以理解、修改和扩充,最终导致程序复杂性问题和软件危机。,为了超越程序复杂性障碍,克服软件危机,人们提出了面向对象软件开发方法。,(问题,2,:面向对象软件开发方法的优点有哪些?),面向对象开发方法一改过去传统的以功能分析和功能分解为基础的面向过程的结构化分析与设计方法,面向对象开发方法模拟人们理解和处理客观世界的方式来分析问题,把系统视为一系列对象的集合,其面向对象的设计又将分析的结果映射到某种面向对象实现工具的结构上,使映射过程有着比较直接的对应关系,使分析者、设计者和编程者都可使用相同的概念,从而使面向对象的软件开发能比较自然地模拟客观世界的活动,使问题描述空间与解空间在结构上尽可能一致。因此,,采用面向对象方法可以更有效地开发大型软件系统。,面向对象方法的封装、继承、多态等机制不仅支持软件复用,而且使软件维护工作可靠有效,可实现软件系统的柔性制造,,更好地克服软件危机。,因此,它已成为成熟的广为采用的软件开发方法。,到,20,世纪末,面向对象软件工程逐渐发展成熟,特别是统一建模语言,(UML),标准的形成和广泛使用,使面向对象软件开发方法已成为软件开发的主流技术,。,1.2,面向对象的基本概念,(,1,),对象:,对象是客观实体的抽象表示,是由描述对象的,属性,数据和对这些数据进行的,操作,行为,两部分组成。,(,2,),类,类是具有相同属性和行为的对象集合的抽象描述;,类的内部包括属性和行为两个主要部分。,(,3,),实例:,类是对具有相同属性和行为的一组对象的抽象描述。因此,,类可作为一种用户自定义类型和创建对象的样板,而按照这种样板所创建的一个个具体对象就是类的实际例子,通常称为,实例,。,(,4,)消息,消息就是请求某个对象执行它所包含的某项处理操作的指令信息。实质是对某个类对象的操作函数的调用,即方法的调用,。,例如,student,S1,;,S1,.display(),是一个消息。,一个消息一般由三部分组成:接收消息的对象名、操作函数名、函数的参数。,(,5,)面向对象技术的三个基本特征,封装性,继承性,多态性,(6),封装性,所谓,封装,就是把对象的属性和行为结合成一个独立的单位,使外界不能直接访问或修改这些数据和代码,外界只能通过对象提供的接口函数来改变或获取对象的属性数据,这就实现了消息隐蔽。,(7),继承性,如果在一个已定义的类上,增加一些特殊属性或操作,可以形成一个新的类,这个类不仅继承了前一个类的全部特征,而且具有新的特性,因此可看作前一个类的特例,是对前一个类的继承。前一个类称为父类,新产生的类叫做子类。通过,继承关系,可形成一种类层次结构,叫做继承结构。,(10),多态性,定义:,在不同类中,可用相同的函数名实现功能不,同的函数。,多态性的优点:,高层代码(算法)只需写一次,低,层便可多次复用,可提高程序设计的灵活性和效率。,1.3,面向对象的分析方法,1,、面向对象的分析,(OOA),是面向对象软件工程方法的第一个环节,包括一套概念原则、过程步骤、表示方法、提交文档等规范要求。,2,、,OOA,的基本任务是,:运用面向对象方法,对问题域和系统责任展开分析,正确认识其中事物和它们之间的关系,发现描述问题域和系统责任所需要的对象和类,并定义类的属性和服务,以及它们之间所形成的结构和连接,最终的目的是产生一个符合用户需求,并能直接反映问题域和系统责任的,OOA,模型及其详细说明,为后续的面向对象设计(,OOD,)和面向对象编程实现(,OOP,)提供指导。,OOA,与,OOD,能够自然地过渡和结合,这是面向对象方法的一个优点,。,3,、面向对象分析的大致步骤如下:,(1),分析问题域,明确描述用户需求,系统问题域说明,:,应用系统的业务范围,系统边界说明,:,确定系统与用户之间接口,系统功能说明,:,系统需要实现的功能,(,2,)确定对象和类,即分析确定并标识构成系统的对象,再对对象进行抽象分类。先把系统看成由一些子系统组成,把每个子系统划分成一个主题,主题是由一组类和对象组成。,(,3,),确定系统各部分的分类和组成结构,第一是按照一般,特殊关系,标识类间的继承关系,确定分类结构;,第二是按照整体,部分关系,标识一个对象是有哪些对象组成,确定组装结构。,(,4,),找出并建立每个对象及其相互之间的联系,即以应用为基础来标识对象,定义对象的内部特征(属性和方法),建立实例连接和消息连接。消息连接体现了对象间的通信关系和接口协议形式。,(,5,)进一步协调和优化,模型中,各个组成部分(,包括,类,/,对象)的性能和相互关系,精炼侯选的类,/,对象,使系统成为由不同部分组成的最小集合。,(,6,)分析和设计,模型中,每个组成部分(,包括,类,/,对象)的功能实现细节,检查分析模型的一致性和完整性。,6,、,OOA,模型的建立过程可以划分为五个层次,:,(,1,)对象,-,类层,划分待开发系统及其环境信息的基本构造单位,标出反映问题域的对象和类,并用符号进行规范的描述,用信息提供者熟悉的术语为对象和类命名。,(,2,),属性层,定义对象,类,和某些结构中的数据,属性,。,(,3,)服务层,要,表示对象的服务或行为,,就,是要定义类上的操作。列出对象需要做什么(即方法),也给出对象间的消息连接(并应以箭头指示消息从发送者到接受者)。,(,4,)结构层,识别系统中对象之间的,结构,关系。当一,种,对象是另一,种,对象的一部分时,用,整体,-,部分关系,表示;当一个类属于另一个类时,用类之间,继承关系,表示。,(,5,)主题层,将复杂的系统划分为更小的子系统,每个子系统都由相关类或对象组成,称为一个主题,这样有便于大系统的管理。,1.4,面向对象的设计初步,1,、,虽然,OOA,与,OOD,分两个阶段进行,但它们是紧密结合的,可以很自然地从,OOA,过渡到,OOD,这正是面向对象方法的一个重要优点。,OOA,与,OOD,的主要区别是:,OOA,与问题域更接近,,OOD,与系统的实现更接近。,2,、,OOD,模型,可采用扩展,OOA,模型的方法来得到,OOD,模型,即在,OOA,模型横向划分,5,个层次的基础上,将目标系统纵向划分成,4,个部分:问题域部分、人机交互部分、任务管理部分、数据管理部分,如下图所示。,3,、建立,OOD,模型包括,4,个部分的工作,:,(1),问题论域部分,:在,OOA,模型的基础上,细化分析结果,设计一组构成底层,(,即数据层,),应用模型的类和对象。,(2),人机交互部分,:设计用户界面模型,该用户界面模型中的类和对象提供实现,人机交互,操作的接口函数。用户界面设计包括 菜单设计、窗口设计、输入,/,输出界面设计等等。,(3),任务管理部分,:建立一些类,用于处理子系统之间的通讯、并发、活动调度等问题。例如,在多用户交互系统中,几个用户同时与系统进行交互,无法预知哪一个用户是下一个输入者,这些交互活动是并行发生的,需要建立一些专门的类对象来处理,;,在空中交通控制系统中,系统同时监控着数架飞机,有许多活动在同时发生。对于诸如此类的并发问题,需要建立一些专门的类对象来处理。,(,4,)数据管理部分,:提供数据管理系统中存储和检索对象数据的基本方案,包括对永久性数据的访问和管理方式。数据管理设计包括:,数据存放设计:数据存放设计选择数据存放的方式(文件存放、关系数据库表格存放或面向对象的数据库存放)。,设计相应的操作。为每个需要存储的对象和类增加用于存储管理的属性和操作,在类和对象的定义中加以描述。,4,、什么是优良的,OOD,OOD,的关键工作是确定对象、类及其联系。,一个优良的,OOD,应具备如下基本条件,:,(1),继承耦合应尽可能紧密,(2),类与类之间的耦合应该很松散,(3),信息隐藏,某个类的数据实现细节对于别的类来说应该是隐藏的,(4),设计应该具有最优的可重用性,(5),尽力使类、对象和方法的定义具有简单性,(6),对所设计的类和类族,应注意保持其协议或接口的稳定性,(7),类的层次结构设计规模适度,不要太深或太浅,(8),系统整体规模的最小化,习题,1.,试述面向对象技术的发展动因,和优点,。,2.,面向对象设计技术具有哪些特性,(,或机制)?,3.,解释下列术语的含义:类 对象 消息 方法,继承性 多态性 封装性,泛化 特化 抽象 分类,4,、建立一个校园信息管理系统,其主要功能就是对在校人员,(,包括学生和教师,),的信息资料进行管理。,(,1,)试着按,OOA,步骤做系统分析;,(,2,)画出类的层次图。,第二部分 面向对象程序设计,一、复习内容,第,2,章,C+,语言基础,第,3,章 类与对象的构造设计,第,4,章 继承性与派生类,第,5,章 多态性与虚函数,第,6,章,文件的输入与输出,二、复习要点,0,C+,语言程序结构,例如,编程打印一个,5,5,点阵:,#include,stdio.h,class matrix private:,int,rown,;,int,colm,;,public:void show(),int,i,j,;for(i=1;i=,rown,;i,+),for(j,=1;j=,colm,;j,+),printf(%c,*);,void main()matrix M(5,5);,M.show,();,*,*,*,*,*,1,、,面向对象技术的三大机制(,特征,):,(,1,),封装机制和类的设计,所谓,封装,就是允许将对象的属性数据和操作方法结合成一个独立的单位,使外界不能直接访问或修改这些数据和代码,外界只能通过对象提供的接口函数来改变或获取对象的属性数据,这就实现了消息隐蔽。,在,c+,中,类是支持数据封装的工具,即允许设计类来抽象描述一组具有,相同特性和行为的对象,即,类中可以封装一组对象的共同属性和方法,。,类是具有相同属性和行为的对象集合的抽象描述;,类的内部包括属性和行为两个主要部分。,由此可见,,类是实现数据封装的工具,对象则是数据封装的实现,。没有封装,就没有面向对象技术,类成员访问的原则是,:,(1),定义一个类时,数据成员和成员函数的默认访问权限是,私有成员。,(,2,),成员函数,可直接访问同类中的成员变量和调用同类中的成员函数,不用在函数名前加上对象名,。,(,3,),私有成员或受保护成员的作用域仅限于类的说明体和类的成员函数;,非成员函数应定义为类的,友员函数,才能访问这个类的,私有,成员。,(,4,)公用成员的作用域不但包括类说明体,还包括它所属对象的使用范围,。可以在类外访问公用成员,但必须在成员名前加上对象名。,(,5,),运算符重载函数可以是类的成员函数,也可以是类的友元函数或普通函数,。,(,2,)继承机制与,派生类的定义,所谓继承就是允许在一个已有类上,增加一些特殊属性或操作,来派生成新的类。这个派生类不仅可以继承基类成员,而且可以定义新的成员,因此可看作前一个类的特殊类。前一个类称为父类,新产生的类叫做子类。通过继承关系可形成一种类层次结构,叫做继承结构。继承是类之间共享属性与服务的一种机制。,class person,/,基类,protected:,char name11;,char sex;,int,age;,public:,person(),cout,“person”,endl,;,person(),cout,“delete person”,endl,;,int,Getage,()return 20;,class,Student:public,person,private:,char id9;,float score;,public:,student(),cout,“student”,endl,;,student(),cout,“delete student”,Getage,();,运行结果:,person,student,20,delete student,delete person,3,、多态性机制与虚函数的定义,多态性,是指在类层次结构的相同类或不同类中,可用相同的函数名实现功能不同的操作,从而可以使用相同的调用方式来调用这些具有不同功能的同名函数,,例如,p-display(),。,运行时多态,:,在类的继承层次结构中,不同层次的类中可能具有同名但实现不同的函数,需要在运行阶段才能根据对象所属的层次来确定调用哪个类中的同名函数。,只有将,同名函数说明为虚函数,通过对象指针,或对象引用来调用,虚函数,才能实现运行时多态。,例,5-2,静态联编和动态联编的应用,#include,class Student,public:,virtual,void print(),cout,“A student”,endl,;,class,GStudent:public,Student,public:,virtual void print(),cout,“A graduate student”print();,ps,=,ps,-print();,A student,A graduate studentA studentA studentA graduate student,第三部分,UML,及其应用,1,、,UML,体系包括三个部分,:,(,1,),UML,基本构造块,基本模型元素;,(,2,),UML,规则,支配构造块如何放在一,起构成模型的规则,(,3,),UML,公共机制,详细说明、修饰、通用机制和扩展机制。,2,、,UML,中的事物包括,:,结构事物(包括类、接口、用例、构件和节点等)、分组事物(包),注释事物(注解)和动作事物(交互和状态图)。,2,、,用,UML,描述的,系统模型是由一个或多个视图组成的,。,UML,提供了,9,种视图:用例图、类图、对象图、组件图、配置图、序列图、协作图、状态图和活动图。可以将上述,9,种图分为用例图、,静态视图,和,动态视图,,如下图所示。,也可以将,UML,的,9,种视图分成五类图,,UML,的内容就是由这五类图来定义:,第一类是用例图,,,从用户角度描述系统功能,并指出各功能的操作者。,第二类是静态图,(Static diagram),,,描述系统的静态结构,包括,类图,、,对象图,。,第三类是行为图,(Behavior diagram),描述系统的动态模型和参与活动的对象间的交互关系,包括,活动图,和,状态图,。,第四类是交互图,(Interactive diagram),描述对象间的交互关系,包括,序列图,和,协作图,。,第五类是实现图,(Implementation diagram),。包括,组件图,和,配置图,实现视图,。,3,、用例图,用例图的定义,:定义用例图是从用户使用系统的角度描述系统功能的图形表达方法。,一个用例,(Use Case),是用于描述系统的某项功能需求的手段,它能准确地表达活动者与系统的交互情况和系统提供的某项服务,。,Use Case,的联系,Use Case,除了与活动者有联系以外,,Use Case,之间也存在着一定的联系,包括:,(,a),泛化联系,:一个特殊的,Use Case,与另一个更一般的,Use Case,的联系。,(b),使用联系,:指一个,Use Case,使用另一个,Use Case,的功能行为。,(c),包含联系,:一个基本的,Use Case,包含了另一个更一般的,Use Case,的行为。,(d),扩展联系,:指一个基本,Use Case,可以由另一个,Use Case,的功能行为来扩展。,4,、类图的定义,类图是表达构成系统的类及其相互联系的逻辑图示,(logic view),。,类图是面向对象设计的核心,建立状态图、协作图和其他图的基础。,类与类的关系,主要有关联、聚合,/,组合、泛化,/,特化、依赖等。,5,、,序列图的定义,序列图描述了一组交互对象间的动态协作关系,它表示完成某项行为操作的参与对象和这些对象之间传递消息的时间顺序。序列图由对象类角色、生命线、激活期和消息构成。,6,、协作图的定义,一个系统的行为是由一批对象实现的,这些对象通过交互和协作来完成系统的服务。用来描述实现某些服务所涉及的对象及其相互之间的关系,(,包括消息通信,),的动态视图就称为协作图(,Collaboration,)。可用,UML,协作图来描绘业务流程。协作图不同于序列图。,7,、,状态图(,StatechartDiagram,)的定义,状态图描述系统运行过程中某类对象可能具有的状态,以及在不同状态间的跳转和触发这些跳转的外部事件。状态图侧重于描述对象在其生命周期中的动态行为,。也,可用于对反应型对象建模。,8,、活动图,定义:,活动图用于描述系统业务流程或工作流程。活动图由一系列的动作状态构成,动作的状态控制可以从一个状态转向另一个与之相邻的状态。活动图还可以表示决策、条件、动作状态的并行执行、消息的规范说明等内容。,可用一条条的,泳道,把活动分成若干组,让一个对象负责一个组,该对象必须履行该组内所包含的活动。,注:,1,、每一个活动状态包含多个动作状态,每一个动作状态由一个语句实现。,2,、活动图和状态图都是描述对象在生命周期内随时间变化的行为。,9,、组件图的定义,组件,是提供了一组接口函数的物理实现模块,它可以是软件开发过程中的产物,如源码、二进制码和可执行码等。它们是类、接口等逻辑模型的物理实现。,接口,用于描述类或组件的一个服务操作。,组件图,表示构成系统的物理组件及其相互之间的联系。,组件图可表示源代码、数据库、系统,但不表示某类事物实体。,组件必须配置在节点上运行,由节点执行。,9,、基于,UML,的面向对象系统开发方法,也可以分为如下步骤:,(,1,)系统需求分析,(a),捕获或描述功能性需求和非功能性需求;,(b),构造系统的用例模型,;,(c),详述用例,(2),系统分析,转换,用例模型,得到描述,系统基本结构的分析模型。分析模型是由一系列类和类的实例及其相互关系构成。,分析模型中的类也叫分析类。,常用方法是使用,名词,/,动词分析法,来寻找分析类。,分析类有三种,:,实体类、边界类和控制类。,(3),系统设计,(a),扩充和细化类。,进一步扩充分析阶段定义的类,定义新的类来处理技术方面的问题,包括处理非功能性需求。,(b),为每个用例建立动态模型,,包括建立序列图、协作图等,以描述如何通过类图中的对象协作实现用例中的功能。,(c),通过动态建模来修正和完善类图。,(d),设计子系统。,就是将设计模型中的部件组织成易于管理的功能模块,这也是实现模型组件化的一种方法。,(,4,)系统实现,(,a),建立组件图,。将逻辑模型元素(如类、接口等)打,包,(,把元素组织成组,),形成一个个易实现的组件,并建立组件之间的联系,构成组件图。组件图可以表示构成系统的组件及其联系,清楚地描述系统的软件体系结构。如前面的图所示。,(,b,)实现组件,。用已经编程实现的组件来实现组件图中的组件,也可以用编程语言编程实现组件图中的组件,最终实现可运行的系统。,10,、基于,UML,的关系数据库设计分为,4,个阶段,:,业务,Use Case,模型设计,:就是进行数据库的需求分析,使用用例图等建立业务模型。,逻辑数据模型设计,:主要是确定应用系统所需要的持久数据。使用类图、顺序图、活动图、状态图等建立数据库逻辑模型。如果是关系数据库设计,则需要设计出表达持久数据的实体类及其联系,并把它们映射成为关系数据库表(,Table),、视图,(View),等。,物理数据模型设计,:使用组件图、配置图等,设计数据库的物理模型。,物理实现设计,:把物理数据模型转换到实际的数据库环境。结合实际的数据库环境,定义构成数据库的基本表、文件的组织方式、索引方式等。,复习思考题:,1,、,9,种视图的定义和画法。,2,、基于,UML,的面向对象系统开发方法包括,哪些步骤?,3,、用,UML,分析和设计图书管理系统。,4,、基于,UML,的关系数据库设计哪个步骤?,5,、如何将类映射成表,?,6,、类与类之间的联系有哪些?应该怎样将它们映射成相应的关系数据库模式?,基于,UML,的会议注册管理系统的分析与设计,系统管理员可以录入、编辑、查询和统计参会者注册信息,(参会者名字,性别,年龄,单位地址,论文编号,已交版,面费,会务费)。参会者可以查看自己的注册信息,会议接,待员也查看参会者的注册信息。会议接待员 在旅馆接待 参会者。,一、会议注册管理系统的用例图,二、分析类图,三、关系数据库模式,系统管理员(,姓名,,,);,参会者(,姓名,,,);,接待员(,);,注册信息(,参会者名字,,性别,年龄,单位地址,论文编号,已交版面费,会务费),;,
展开阅读全文