版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件工程面向对象软件开发方法面向对象方法概述面向对象(OO,ObjectOriented)技术是软件工程领域中的重要技术,这种软件开发思想比较自然地模拟了人类认识客观世界的方式,成为当前计算机软件工程学中的主流方法“面向对象”(Object-Oriented)是针对“面向过程”一词提出的,是从本质上区别于传统的结构化方法的一种新方法,新思路应该特别强调的是,面向对象技术不仅仅是一种程序设计方法,更重要的是一种对真实世界的抽象思维方式面向对象方法概述面向对象方法概述——背景传统开发方法由一整套过程、方法和工具作为支撑,在一定时期内对解决软件危机起了很大作用,曾指导开发出很多成功的系统,但其缺点也日益显现传统软件开发方法不能完全消除软件危机,并且生产率的提高不能满足需要从50年代到80年代,美国的软件生产率翻了两翻。但社会对软件的需求每年以两位数字的百分比在增长。软件的开发已成为影响计算机应用的瓶颈面向对象方法概述——背景从50年代到80年代,美国的软件生产面向对象方法概述——背景(1)传统开发方法存在的问题软件维护系统是围绕着如何实现一定的行为来进行的,当系统行为易变,需要常常修改时,修改极为困难软件结构严重依赖于系统功能,基于功能分解的系统结构将很难进行修改和扩充用户功能需求的改变将导致软件结构的相应改变,给软件的开发及维护造成很大困难数据和对数据的处理操作是分离的,对数据的修改将影响某个功能的实现传统开发方法的软件维护比软件开发效率低几十倍。80年代,美国一年花费的软件维护费用高达300多亿美元。90年代,软件维护费用占系统研制、开发总费用的70%。面向对象方法概述——背景(1)传统开发方法的软件维护比软件开面向对象方法概述——背景(2)传统开发方法存在的问题自顶向下功能分解的分析方法极大地限制了软件的可重用性结构化分析、设计技术的本质是功能分析从代表目标系统整体功能的单个处理着手,自顶向下不断把复杂的处理分解为子处理,层层分解下去,直至仅剩下若干个容易实现的子处理为止传统方法通过建立标准函数库和子程序库实现软件的可重用性,然而标准函数库等只是对建立在数学模型基础上的应用问题有可重用的功效,而对其它实际应用问题则不能很好地进行软件重用面向对象方法概述——背景(2)传统方法通过建立标准函数库和子面向对象方法概述——背景(3)传统开发方法存在的问题以输入-处理-输出为核心的分析和设计方法不符合人类的思维方式软件不能真正了解用户的需要,以致开发出的软件系统与用户预期的系统不一致,不能满足用户的需要功能与数据分离的软件设计结构与人类的现实世界环境很不一样,和人的自然思维也就很不一致,因此对现实世界的认识与编程之间存在着一道很深的理解上的鸿沟Standish94报告中指出:31%软件项目没有完全完成,53%的项目花费最先预算的200%之多,并且估计美国的公司和政府机构在1995年为了取消软件项目的生产而花费了810亿美元面向对象方法概述——背景(3)Standish94报告中指出面向对象方法概述——背景(4)传统开发方法存在的问题系统中模块之间控制作用的重要影响在系统中,实际控制发生的根源来自分散的各个模块之中时,由于在“好的模块结构”中的模块间的控制作用只能通过上下之间的调用关系来进行,造成信息传递路径过长,效率低,易受干扰,甚至出错面向对象方法概述——背景(4)面向对象方法概述——背景(5)为了解决传统开发方法的问题,在软件开发实践中人们提出了许多针对具体开发的方法快速原型法面向对象方法…….诞生了面向对象程序设计语言,并基于面向对象思想诞生了面向对象软件开发方法面向对象方法概述——背景(5)面向对象方法概述——发展历程面向对象的思想最初出现于挪威奥斯陆大学和挪威计算中心于60年代末共同研制推出的S1mula67语言中,该语言首先引入了类的概念和继承机制80年代,美国加利福尼亚Xerox研究中心推出的Smalltalk-76和Smalltalk-80语言,它具备了面向对象语言的继承和封装的主要特征,比较完善地实现了面向对象的程序设计,推动了面向对象技术的飞速发展面向对象方法概述——发展历程面向对象方法概述——发展历程(1)从80年代中期到90年代,面向对象语言十分热门,涌现出大批比较实用的面向对象编程语言如C++、ObjectPascal等随着面向对象编程语言走向实用,开始了对面向对象分析和面向对象设计的研究面向对象的分析和设计技术逐渐走向实用,最终形成了由分析、设计到编程、测试与维护一整套的软件工程体系组成的面向对象软件开发方法面向对象方法概述——发展历程(1)面向对象方法概述——发展历程(2)在面向对象软件开发方法发展中,出现了很多方法,典型的以发明者命名的方法有:Booch法、Rambaugh法、Jacobson法、Coad和Yourdon法、Wirfs-Broch法等1995年,GradyBooch、IvarJacobson和JamesRumbaugh一起合作,将各自的方法组合成一种统一的方法,称为“统一建模语言”,即(UnifiedModelingLanguage,UML)1997年提出UML1.0版本UML现已在整个行业使用面向对象方法概述——发展历程(2)OO技术的基本原理按照问题域的基本事物实现自然分割,按人们通常的思维方式建立问题域的模型,设计尽可能直接自然表现问题求解的软件系统。OO技术引入了对象(object)概念来表现事物;用消息(message)传递建立事物间的联系;用类(class)和继承(inheritance)作为适应人们一般思维方式的描述模型;用方法(method)表示作用在对象上的各种操作。OO技术的基本原理OO技术的基本原理(1)传统的程序设计方法,针对的是数学模型,出发点是“怎样做(How)?”用计算机求解一个实际问题应该怎样做?从实际问题到求解模型(数学模型)的抽象都是围绕怎样做?去进行的面向对象(OO)方法的出发点是“是什么(What)?”要求解的实际问题,到底是什么?用对象表现现实世界中的某个具体的事物OO技术的基本原理(1)OO技术的基本原理(2)面向对象(OO)方法的出发点是“(What)?”由物质组成现实世界物体多样化的表现形式构成问题域(Domain)人认识事物的规律:首先认识问题域是什么?当物体反映到头脑中后,变成意识形成抽象的概念,既逻辑世界由对象组成逻辑世界对象在具体的逻辑世界中担当一定的角色,并完成一定的功能(动作)对象有自己的属性和动作。对象表现现实世界中的某个具体的事物。OO技术的基本原理(2)OO技术的基本原理(3)基本思想客观世界是由对象组成的任何复杂的软件都是由简单的对象组合而成的面向对象的软件系统同样是由对象组成的具有相同数据和相同操作的对象可以归并为一个类类具有封装性,其数据和操作等对外界是不可见的,外界只能通过消息请求进行某些操作,提供所需要的服务所有对象都可以划分为不同的对象类每个对象类都有自己特定的数据和方法对象是对象类的一个实例OO技术的基本原理(3)OO技术的基本原理(4)基本思想对象类具有层次结构上层的类称为“父类”或“基类”,下层的类称为“子类”或“派生类”父类可以派生出子类,子类继承父类的全部特性(数据和操作),又可以有自己的新特性子类与父类形成类的层次结构对象之间通过消息机制传递相互联系OO技术的基本原理(4)OO技术的基本原理(5)思想的精髓是按照对象(事物、概念、实体)的观点考虑问题域和逻辑解决方案“面向对象”技术追求的是软件系统对现实世界的直接模拟尽量实现将现实世界中的事物直接映射到软件系统的解空间OO技术的基本原理(5)OO技术的基本原理(6)软件工程学家Codd和Yourdon认为
面向对象的程序设计技术是以对象为基础,以消息驱动对象实现操作的一种全新的程序设计方法如果一个软件系统使用这些概念来建立模型并予以实现,那么它采用的就是面向对象软件开发方法面向对象=对象+类+继承+通信OO技术的基本原理(6)面向对象=对象+类+继承+通信面向对象方法组成(1)与结构化软件开发方法类似,面向对象软件开发方法也由三部分组成面向对象分析方法(OOA)重点在于发现并描述问题域中的对象(或概念)例如:图书馆信息系统中的书(book)面向对象设计方法(OOD)重点在于定义能最终面向对象程序设计语言的实现的逻辑软件对象软件对象具有方法和属性例如:对象书(book)具有一个题目属性(title)和一个打印方法(print)面向对象程序设计方法(OOP)面向对象方法组成(1)面向对象方法组成(2)与结构化软件开发方法类似,面向对象软件开发方法也由三部分组成面向对象程序设计方法(OOP)实现所设计的构件例如采用c++、Java语言编写一个book类面向对象方法组成(2)面向对象方法组成(3)面向对象思想强调的是对象的表示领域概念用面向对象的程序设计语言表示分析过程中概念的表示booktitlePublic
class
book
{publicvoidprint();…..privateStringtitle;}面向对象方法组成(3)领域概念用面向对象的分析过程中book面向对象方法组成(4)面向对象程序设计方法(OOP)——被一些人称为“面向对象变成之父”的AlanKay,确定了以下关于OOP[Kay1993]的基本特征任何事物是一个对象通过互相联系的对象请求其他对象执行一定的行为来完成计算对象通过发送和接收消息进行通信消息是指对特定行为的请求,并且伴随着完成这项任务所需要的参数每个对象都有自己的存储空间,用来储存其他对象面向对象方法组成(4)面向对象方法组成(5)面向对象程序设计方法(OOP)——被一些人称为“面向对象变成之父”的AlanKay,确定了以下关于OOP[Kay1993]的基本特征每个对象都是一个类的实例,类用来代表一组相似的对象例如:整数、链表等类可以看作是存储仓库,用来保存与一个对象相关的行为同一个类的多个实例对象能够执行相同的行为类可以组织成一个单根树状结构,成为继成层次在该结构中,一个类实例的存储空间和行为自动地被其派生类使用面向对象方法组成(5)面向对象与面向功能的分析与设计软件项目是复杂的分而治之是处理复杂问题的主要策略将问题分解为易于管理和控制的单元结构化的分析与设计(前,流行)对问题的分解尺度主要依据功能和过程处理问题的结果是将一个复杂的过程分解为一系列具有层次关系的字过程面向对象的分析与设计(现,流行)以对象为尺度分解问题空间面向对象与面向功能的分析与设计面向对象与面向功能的分析与设计(1)以图书馆信息系统为例图书馆信息系统面向对象的分析与设计按对象或概念分解CatalogLibrarianBookLibrary结构化的分析与设计按功能或过程分解SystemRecordLoansAddResourcesReportFines面向对象与面向功能的分析与设计(1)图书馆信息系统面向对象的面向对象方法优点与人类的思维习惯相一致所开发出的系统部件可重用性好系统可维护性强生产率得到了大幅提高人的认识过程是从一般到特殊的渐进思维过程,是从是什么开始,认识事物及其本质规律,主观随意性受到限制。而传统方法是从”怎样做?“开始,到做什么?反认识规律而动,主观随意性太多。OO方法采用封装机制和信息隐藏机制,使其内部实现与外界完全隔离,具有较强的独立性(对象对外界而言,好象一个”黑匣子“)。较好地解决了“软件复杂性控制”问题。OO方法中类的继承性是一种代码重用的有效途径。开发者在设计软件的过程中,将一些精心设计、测试过的代码不断加入到已有的类库中。而类库是可供共享的代码库。因此用OOP开发的软件具有较好的可重用性。局部修改,不影响大局,错误不会传播;封装性和信息隐藏机制易于阅读、理解;符合人类习惯的思维方法,对原系统所做的修改,往往通过在原有类的基础上派生一些新类即可实现,易于贯通。派生类继承原有类的特性,只需测试新增加的特性面向对象方法优点人的认识过程是从一般到特殊OO方法采用封装机实体和对象实体客观存在的事物客观世界中的问题都是由实体及其相互之间的关系构成的例:实体和对象实体和对象对象(Object)一般说来,在系统分析和系统构造中,对象是对客观世界事物的一种抽象,是由数据(属性)及在其上的操作(行为)所组成的封装体用来描述客观事物的一个实体,它是实体的抽象,是构成系统的一个基本单位由一组属性和对这组属性进行处理的一组服务(也称操作)组成对象可以是具体实体也可以是抽象实体具体实体:学生、书等抽象实体:规则、算法、事件等封装了对象的数据属性和操作服务,将其结合成一个独立的系统单位,并尽可能隐藏对象的内部细节实体和对象实体和对象——对象(1)公式表示属性表示对象的结构特征,描述了对象的状态用来描述对象静态特征的一个数据项属性一般只能通过执行对象的操作来改变操作可以改变对象的状态用来描述对象动态特征(行为)的一个处理序列,即处理属性数据的算法通过操作可以获得或改变对象的属性对象=属性+操作实体和对象——对象(1)对象=属性+操作实体和对象——对象(2)通过传递消息实现对象的操作每当需要改变对象的状态时,只能由其它对象向该对象发出消息对象响应消息时,按照消息模式找出与之匹配的方法,并执行该操作实体和对象——对象(2)实体和对象——对象(3)三个特征标识用来唯一区分一个对象状态使用对象的属性描述行为由对象的操作体现,用于改变对象的状态行为分为自身所承受的操作以及施加于其它对象的操作两类实体和对象——对象(3)行为分为自身所承受的操作以实体和对象——对象(4)主要特点自治性对于给定的输入,经过状态转换,对象能产生输出所设操作都与数据要做的处理有关封闭性对象的封闭性是指对象具有信息隐蔽的能力对象的私有数据完全被封装在内部,对外是不可见的要使用对象的私有数据,只需知道数据的取值范围和可以对该数据施加的操作,根本无须知道数据的具体结构以及实现操作的算法实体和对象——对象(4)实体和对象——对象(5)主要特点通信性对象能够接收其它对象发来的消息,也能向其它对象发送消息通信性反映了不同对象间的联系上述特点分别刻画了对象不同方面的性质自治性反映了对象独立计算的能力封闭性和通信性说明对象是一个既封闭又开放的相对独立体实体和对象——对象(5)实体和对象——对象(6)其它特点对象的并行性反映出不同对象各自独立地处理自身的数据,彼此通过发消息传递信息完成通信;对象主动性表现对象本身是进行处理的主体,不是被动地等待处理(与传统的数据有本质不同);而对象的内聚性强,对象间的耦合性弱,则体现了模块独立性好实体和对象——对象(6)服务和消息面向对象技术的封装机制使对象是相互独立独立的,并且彼此之间信息是隐藏的在面向对象的技术中,消息是对象之间相互请求或相互协作的惟一途径对象间的联系只能通过传递消息来进行对象也只能在收到消息时才被激活消息通信机制是对象之间联系的唯一合法途径,使对象间的行为能够相互配合,从而共同完成一定的功能,形成一个统一的系统服务和消息服务和消息(1)服务(method,即操作、方法)的定义为了完成某一任务,一个对象所提供的并体现其责任的操作称为服务属于同一类的所有对象共享相同的服务服务和消息(1)服务和消息(2)消息的定义消息就是用来请求对象执行某个处理或回答某些信息的要求,是连接对象的纽带(对提供服务的对象发出的服务请求)或者说,一个对象为实现其责任而与其它对象的通信称为消息消息通常由三个部分信息组成接收消息的对象:对象标识消息选择符(也称为消息名):服务标识零个或多个变元:输入信息和应答信息服务和消息(2)服务和消息(3)通常,一个对象会向另一个对象发出消息请求某项服务,接收消息的对象响应该消息,激发所要求的服务操作,并将操作结果返回给请求服务的对象发送消息的对象称为发送者接收消息的对象称为接收者服务和消息(3)通常,一个对象会向另一个对发送消息的对象称为服务和消息(4)消息的性质同一对象可接收不同形式的多个消息产生不同的响应,达到提供不同服务的目的相同形式的消息可以送给不同的对象所做出的响应可以是截然不同的,即不同的对象可针对同一消息提供不同的服务消息的发送可以不考虑具体的接收者对象可以响应消息,也可以对消息不予理会对消息的响应并不是必须的服务和消息(4)服务和消息(5)消息的类别公有消息对象所接收的消息是由外部对象直接发送给它的消息私有消息对象所接收的消息是由对象发送给自身的消息服务和消息(5)服务和消息(6)在面向对象编程中,服务的启动是通过将“消息”传递给对此操作负责的对象来完成的。消息对服务的要求进行编码,并且伴随着执行要求所需的附加信息(参数)一起传递。“接受者”就是消息发送的对象如果接受者接受了消息,那么他同时也接受了消息所包含的服务责任接受者响应消息,执行相应的方法已实现要求服务和消息(6)服务和消息(7)消息传递与过程调用“接受者”就是消息发送的对象,过程调用没有指定的接受者消息的解释由接受者决定解释——选择响应消息的方法虽接受者的不同而不同服务和消息(7)类和类层次类类是OO技术中最重要的概念OOP中所有的操作都可归结为对类的操作类的概念符合人类对事物按照一定特点进行分类的思想例如:物质对象动物植物花树哺乳动物人鸭嘴兽…….……类和类层次物质对象动物植物花树哺乳动物人鸭嘴兽…….……类和类层次——类(1)类是一组具有相同数据结构和相同操作的对象的集合类的一个实例就是对象所有对象都是类的实例在响应消息时调用何种方法由类的接收者来决定一个特定类的所有对象使用相同的方法来响应相似的消息类与实例之间的关系,可以看成是抽象与具体的关系例如:书是一个对象类。《UML和模式应用》是“书”对象类的一个实例类和类层次——类(1)类和类层次——类(2)类的定义公式表示具有相同属性和服务的一组对象的集合它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分例如:C++中对象类的定义类=(组)数据属性+(组)数据操作类和类层次——类(2)类=(组)数据属性+(组)数据操作面向对象方法概述类和类层次类的定义例如:C++中对象类的定义CLASSperson{Private:&&私有数据和操作charname[20];intage;cahraddress[80];charsex[2];voidPrintName();viodPrintAge();voidPrintAddress();voidPrintSex();Public:&&公有操作voidPrint(){PrintName();PrintAge();PrintAddress();PrintSex();}};结构特征数据成员行为特征成员函数面向对象方法概述CLASSperson{结构特征数类和类层次——类的表示(3)类名类的名称类名一般为名词,由一个单词组成,英文首字母大写属性类的一个特性,描述了类的对象所具有的一系列特征值每一对象的属性是一些有着确定值的,用于描述对象状态信息的数据属性一般只能通过执行对象的操作来改变属性名一般小写操作类能够提供的服务操作名一般小写类和类层次——类的表示(3)类和类层次——类的表示(4)类和类层次——类的表示(4)类和类层次——类层次类可以组织成一个有层次的继承结构由很多类构成一个层次化的结构处于上层的类称为父类或基类,下层类是上层类的子类一个子类继承层次树中更高一层的父类的属性抽象父类是指没有具体实例的类(如哺乳动物),它只是用来生产子类的物质对象动物植物花树哺乳动物人鸭嘴兽…….……类和类层次——类层次物质对象动物植物花树哺乳动物人鸭嘴兽……类和类层次(1)类层次示例类和类层次(1)OO方法的特点抽象机制抽象是指将实际问题化简为计算机能处理和表示的形式将实体抽象为对象,将对象抽象为类对象具有极强的抽象表达能力OO方法采用对象来表达一切事物对象实现了抽象的数据类型用户可以根据实际问题的需要,自定义对象类,它使OO方法具有更强的解决复杂问题的能力。规范化的抽象方法OO方法的抽象技术更加接近于人类认识客观事物的思维方法。OO方法的特点OO方法的特点(1)封装机制封装是指将数据及对数据的操作集成在一起,形成一个能动的实体对象,对外隐藏细节,方便了重用,降低了系统耦合度用户不必知道对象行为的实现细节,只要根据对象提供的外部特征及接口来访问对象“封装性”是一种信息隐藏技术,其目的是将对象的设计者和对象的使用者分开OO方法的特点(1)OO方法的特点(2)封装机制——主要表现具有清楚的边界对象的数据结构和操作限定与其中具有统一的外部接口(也称消息模式)它描述了对象之间的相互作用、请求和响应通过消息传递机制实现对象之间的通信协作代码保护对象内部的实现代码受到封装壳的保护,外界不能直接修改本对象的数据和代码OO方法的特点(2)OO方法的特点(3)继承机制提供了方便的重用机制,是OO与传统系统之间的关键区分因素之一新类的定义可以是现存类所声明的数据、定义与新类所增加的声明的组合在组合过程中,新类复用现存类的定义,而不要求修改现存类类之间的继承关系是现实世界中遗传关系的直接模拟,它表示类之间的内在联系以及对属性和操作的共享即子类可以沿用父类(被继承类)的某些特征子类也具有自己独有的属性和操作OO方法的特点(3)OO方法的特点(4)继承机制对象和类的继承关系类的对象实例将继承该类的所有属性和操作类的继承关系子类将继承父类的所有属性和操作父类中的属性或操作中的任何变化都会立即被该父类的所有子类所继承,因此父类的变化可以立即传播到系统的其他部分继承的优点是软件开发中复用概念的核心便于模块修改简化模块OO方法的特点(4)OO方法的特点(5)多态是指在父类中定义的属性或服务被子类继承后,可以具有不同的数据类型或表现出不同的行为多态的本质是一个消息可以与不同的实例结合,而且这些实例属于不同类不同层次的类可以共享一个操作,但却有各自不同的实现当一个对象接收到一个请求时,它根据其所属的类,动态地选用在该类中定义的操作多态是可以大大减少需要用于扩展现存OO系统工作量的特性,是OO的基本特征之一OO方法的特点(5)OO方法的特点(6)多态——主要表现运算符重载同一个运算符可作用于多种数据类型上虚函数与动态联接这是OO方法特有的动态性质当将重载的函数名标识为虚函数时,该函数就有较大的灵活性。它既可以表示子类中的同名函数,也可表示父类中的同名函数。动态联接方式是灵活性的关键。动态联接方式允许在运行中才按照具体的数据类型、参量和确定选用哪一个函数。OO方法的特点(6)动态联接方式允许在OO方法的特点(7)多态——主要表现函数名重载相同的函数名可作用于不同的对象类上,并产生不同的行为效果有时不同的类中具有相同名称的操作,多态的特性使每次调用操作时都要确定究竟调用哪个同名操作例如门、窗、盒等类都有名为“打开”的操作,每个类的对象都自己知道如何执行自己的“打开”操作OO方法的特点(7)OO方法的特点(8)多态——示例说明例如在一个应用中需要画图,现实现了圆、矩形、三角形、平行四边形。在传统方法中一般使用下面的控制逻辑caseofgraphtype:circle:DrawCircle();rectangle:DrawRectangle
();triangle:DarwTriangle();parallelogram:DrawParallelogram
();endcase;OO方法的特点(8)caseofgraphtype:OO方法的特点(9)多态——示例说明这样的设计很直接,但当加入新的图形类型时可能非常麻烦,需要对每种新图形都创建一个新的画图程序,然后每种控制画图类型的控制逻辑都需要被更新使用OO方法,将图形抽象为一个基类graph,每种图形都是该基类的子类,每个子类中定义操作draw,完成该子类的画图操作,一个对象可以传递draw消息给任意子类的任意实例对象,画出相应的图形,由此前面的程序段将简化为graphtypedraw();OO方法的特点(9)graphtypedraw();OO方法的特点(10)多态——示例说明当新的图形类型加入到系统中时,将创建一个具有自己的操作draw的子类,但是在任何希望画图的对象中不需要进行任何的改变,因为消息draw是不变的当系统的其他部分请求绘制一个几何图形时,消息中的服务都是“draw”,但每个子类接收到该消息时却各自执行不同的绘图算法OO方法的特点(10)OO方法的特点——总结建立在对象、消息、类、继承和方法等概念基础上的面向对象软件的基本特征是对象的封装性和继承性。通过封装可以将对象的定义与对象的实现分开。这样,无论是对象功能的完善扩充,还是对象实现的修改,影响仅限于该对象内部,保证了面向对象软件的可构造性和易维护性。通过继承可以表达类与类之间的联系,大大减少了重复定义,同时也使系统的结构更加清晰、易于理解和维护多态机制为软件的结构设计提供了灵活性,减少了信息冗余,明显提高了软件的可复用性和可扩充性OO方法的特点——总结面向对象分析(OOA)OOA主要考虑与一个特定应用有关的对象及对象与对象之间在结构与相互作用上的关系OOA的关键是识别出问题域内的对象,并分析它们相互之间的关系,最终建立起问题域的精确、可理解的正确模型OOA阶段主要是明确问题中存在哪些数据实体,它们的意义是什么,而不考虑对它们的处理OOA最终目的是产生一个符合用户需求,并能够直接反映问题域的OOA模型及其软件需求规格说明面向对象分析(OOA)面向对象分析OOA基本任务运用OO方法,对问题域进行分析和理解形式地说明所面对的应用问题,最终成为软件系统基本构成的对象,还有系统所必须遵从的,由应用环境所决定的规则和约束明确地规定构成系统的对象如何协同合作,完成指定的功能找出描述问题域所需的对象及类定义这些对象和类的属性与服务定义对象和类之间所形成的结构、静态联系和动态联系面向对象分析面向对象分析——建立分析模型描述系统的功能以面向对象思想为基础,通过构造一组相关模型获得关于问题的全面认识(即问题领域模型)对象模型(objectmodel)代表了系统的静态的、结构方面的特性动态模型(dynamicmodel)代表了系统对象之间的时间的、行为的、控制方面的特性功能模型(functionalmodel)主要描述值与值之间的函数关系面向对象分析——建立分析模型描述系统的功能面向对象分析——建立分析模型描述系统的功能(1)上述三个模型从不同角度对系统进行描述,分别描述系统的一个重要方面,组合起来构成对系统的完整描述对象模型指出事件要发生在什么方面动态模型指出什么时候发生功能模型则指出要发生什么面向对象分析——建立分析模型描述系统的功能(1)面向对象分析——建立分析模型描述系统的功能(2)对象模型对象模型描述了系统中对象的结构对象的标识、对象与其它对象之间的关系、属性以及操作对象模型为动态模型和功能模型提供了重要的框架只有当事物变化时,动态模型和功能模型才有存在的意义对象模型用包含对象及对象的关系图表示面向对象分析——建立分析模型描述系统的功能(2)面向对象分析——建立分析模型描述系统的功能(3)对象模型的5个层次第一个层次主要是识别类和对象,是整个分析模型的基础第二层和第三层是属性层和服务层,用以说明前面已识别的类和对象面向对象分析——建立分析模型描述系统的功能(3)面向对象分析——建立分析模型描述系统的功能(4)对象模型的5个层次第四层是结构层OOA允许两种类型的基本结构:1)整体与部分结构(组装结构),表示聚合,即由属于不同类的成员聚合而成新的类;2)泛化与特化结构(分类结构),特化类是泛化类的子类,泛化类是特化类的父类。分类结构具有继承性。第五层是主题层,是一些类和对象的特定组合表示,用来帮助和指导模型的读者面向对象分析——建立分析模型描述系统的功能(4)面向对象分析——建立分析模型描述系统的功能(5)动态模型动态模型描述系统中与时间有关的方面以及操作执行的顺序包括引起变化的事件、事件的序列、定义事件序列上下文的状态、以及事件和状态的主次动态建模中的主要概念是事件和状态一个对象的状态是指对象所拥有的属性值和连接关系动态模型由多个状态图组成每个用来描述一个类的重要动态行为,并表明整个系统的活动方式,不同类的状态图通过共享的事件组成一个动态模型面向对象分析——建立分析模型描述系统的功能(5)面向对象分析——建立分析模型描述系统的功能(6)功能模型功能模型表示怎样从输入值得到输出值包括函数、映射、约束和功能性依赖功能是由动态模型的动作引起,并在对象模型里表示对对象的操作面向对象分析——建立分析模型描述系统的功能(6)面向对象分析——OOA的步骤建立对象模型确定类和对象首先确定问题空间中包含哪些对象,有哪些操作,这些对象之间有什么关系,它们与操作又有什么关系对象应该是实际问题域中有意义的个体或概念实体具有目标软件系统所关心的属性,还应该以某种方式与系统发生关联即对象必须与系统中其他有意义的对象进行消息传递,并提供外部服务面向对象分析——OOA的步骤面向对象分析——OOA的步骤(1)确定类和对象如何确定类和对象找出候选的类和对象选择出正确的类和对象去掉笼统的类确定对象的属性定义操作面向对象分析——OOA的步骤(1)面向对象分析——OOA的步骤(3)确定结构两个或多个对象之间的相互依赖、相互作用的关系就是关联,由关联可构成OOA的两种基本结构分类结构代表了确定的类中的继承等级组装结构由属于不同类的成员聚合而成新的类面向对象分析——OOA的步骤(3)面向对象分析——OOA的步骤(4)定义主题确定主题通过将类和对象划分成更大的单元来完成主题是类和对象的组合每个主题的规模按有助于读者通过模型理解系统来选择确定主题方法按问题域确定主题按不同主题内的对象相互依赖和交互最小的原则来确定主题面向对象分析——OOA的步骤(4)面向对象分析——OOA的步骤(5)定义属性对每个对象,确定划给该对象所需的属性关键是识别与当前所处理的问题相关的属性被确定的属性放到继承等级的正确层次注意应避免冗余的或不正确的属性属性的确定既与问题域有关,也和目标系统的任务有关。应该只考虑与具体应用直接相关的属性,不考虑那些超出所要解决问题范围的属性面向对象分析——OOA的步骤(5)面向对象分析——OOA的步骤(6)定义服务对象怎样进行消息通信是用消息的联系来确定的用来指定某一个操作综上所述分析不可能严格地按照预定顺序进行,大型、复杂系统的模型需要反复构造多遍才能建成建立模型的过程往往是反复修改的过程,只要发现模型有缺陷,就必须返回到前期阶段进行修改面向对象分析——OOA的步骤(6)面向对象分析——建模工具用例(UseCase)将客户需求收集起来之后,分析员可以创建一组标识一串待构造系统的使用场景,这些场景就被称为“用例”(use-case)CRC面向对象分析——建模工具面向对象分析——用例(UseCase)UseCase是OOA/OOD中的桥梁典型场景(scenarios)Scenario从最简单到复杂进行问题分析;用UseCase把复杂的情景图归纳到简单。采用最容易理解的表达方式,为技术人员和业务人员之间、技术人员和技术人员之间建立桥梁在OOA/OOD的发展过程中,UseCase具有突破性用例是Jacobson在面象对象的软件工程中提出的,但它实际上是独立于面象对象的用例是获取业务过程和系统需求的有效方式。而且技术本身是非常简单易学的面向对象分析——用例(UseCase)面向对象分析——用例(1)UseCase的作用使用典型场景(scenarios)来理解业务和系统,使用UseCases将这些场景获取正式化、形式化封装系统不涉及系统内部,让注意力集中到对需求或服务的充分理解上。可以非常容易地浏览、准确地定义和了解需求基于UseCase的重用面向对象分析——用例(1)面向对象分析——用例(2)UseCase的重要性是表达需求的主要手段是界面设计的辅助手段来发现和建立类的依据。是测试实例生成的基础是团队开发管理和任务分配的主要依据面向对象分析——用例(2)面向对象分析——用例(3)UseCase定义UseCase是指一个用户或其它系统与要设计的系统进行的一个交互,这个交互是了达到某个目标用Actor描述有该目标的人或系统,强调了任何人或系统拥有目标的事实目标本身是一个动词短语,如“下订单”
UseCase是指系统(BusinesssystemorInformationsystem)为角色提供的服务面向对象分析——用例(3)面向对象分析——用例(4)定义UseCase的准则容易被需求方和浏览者所理解不涉及业务体系的组织细节不应包含系统的任何实现细节不需要处理的分支交给文档来处理,确实需要处理的分支定义扩展UseCase包含的步骤不要太多(15个)不要细化到功能层面面向对象分析——用例(4)面向对象分析——用例(5)UseCase描述文档备注:最直接的说明简单文档:用简单的一句话描述清楚即可结构化文档:比较清楚的文档结构附加文档:对特殊用例的说明交互图:顺序图和协作图面向对象分析——用例(5)ATM操作过程顺序图ATM操作过程顺序图面向对象分析——用例建模用例提供了系统将被如何使用的描述用例从终端用户的观点对系统进行建模面向对象分析——用例建模面向对象分析——用例建模(1)用例在需求诱导时创建,应达到以下目标通过定义由终端用户和软件工程小组共同认可的使用场景,定义系统的功能和运行需求提供清楚而无二义性的终端用户和系统如何相互交互的描述提供确认测试的基础在OOA中,用例是分析模型的基础在UML中,用例使用图形表示,称为“用例图”。用例图也可以从不同的抽象层次表示面向对象分析——用例建模(1)面向对象分析——用例建模(2)用例描述一系列行为,是参与者为完成指定任务而执行的典型动作序列,表明系统对外所提供的服务在用例图中使用横放的椭圆表示用例一般使用动词短语来表示,用例名称通常由2~3个单词组成:第1个是动词;第2个是名词;第3个一般为形容词。用例应从参与者角度而非系统角度来命名,如“购买物品”而不是“出售物品”面向对象分析——用例建模(2)面向对象分析——用例建模(3)参与者(actor)又称为执行者,是在与系统的一次或多次交互中扮演角色的人、组织或外部系统。在用例图中使用火柴棒装人形表示,人形下写明参与者名称面向对象分析——用例建模(3)面向对象分析——用例建模(4)关联参与者和用例之间的联系,在用例图中使用实线表示。直线一端可以有箭头,箭头常表示这个关联初始调用的方向只要参与者与用户之间存在交互,就存在关联面向对象分析——用例建模(4)面向对象分析——用例建模(5)系统边框可选项,围绕用例绘制的一个方框,表示系统的范围,框内表示系统提供的功能,框外的不是。面向对象分析——用例建模(5)面向对象分析——用例建模(6)用例建模要点用例是可以不断改变的,不是一成不变的用例之间没有按照时间排序一个参与者可能涉及多个用例用例不是功能,而是一项有价值的服务关联线上最好无箭头,箭头会使人困惑,无价值图不要太大每个参与者至少涉及一个用例,一个用例至少设计一个参与者关联只存在于参与者和用例之间面向对象分析——用例建模(6)面向对象分析——用例建模(7)用例图示例面向对象分析——用例建模(7)面向对象分析——用例建模(8)识别用例之间的关系泛化(Generalization)包含(Include)扩展(Extend)识别参与者之间的关系泛化面向对象分析——用例建模(8)面向对象分析——用例建模(9)识别用例泛化关系泛化代表从一般到特殊的关系。被泛化的用例称为父用例,泛化出来的用例称为子用例。子用例继承父用例的所有行为,并有自己的新的行为或覆盖父用例的行为面向对象分析——用例建模(9)面向对象分析——用例建模(10)识别用例包含关系尽管每个用例是独立的,但也可以分解成更加简单的用例,这种用例之间的关系称为包含。即包含用例完成基本用例的一部分行为。如果若干用例的某些行为都是相同的,则可以将这些相同的行为提取出来单独组成一个用例,在其他用例中包含该用例,便包含了该用例的所有行为。面向对象分析——用例建模(10)面向对象分析——用例建模(11)识别用例包含关系没有了包含用例,基本用例的行为不完整面向对象分析——用例建模(11)面向对象分析——用例建模(12)识别用例扩展关系在一个用例中加入一些新的动作,则构成了另一个用例,这种用例之间的关系称为扩展。扩展可以对已经存在的用例增加新的功能,即通过扩展用例增加基本用例的行为扩展用例可以根据需要有选择地继承原有用例的部分行为面向对象分析——用例建模(12)面向对象分析——用例建模(13)识别用例扩展关系没有扩展用例,基本用例的行为依然完整面向对象分析——用例建模(13)面向对象分析——用例建模(14)识别参与者泛化关系被泛化的参与者称为父参与者,泛化出来的参与者称为子参与者。子参与者继承父参与者的所有属性及与用例的关联关系,并有自己的新的属性已经新的与用例的关联关系面向对象分析——用例建模(14)面向对象分析——用例建模(15)用例文档:一般使用表格描述用例编号给每个用例的一个编号用例名称用例名用例描述对该该用例的简要功能介绍,包括任务和结果参与者该用例所涉及的所有参与者前置条件该用例执行所必须满足的条件后置条件该用例执行后所改变的状态基本事件流描述用例的正常启动、处理、结束过程扩展事件流描述用例的非正常流程补充说明描述用例的其它说明面向对象分析——用例建模(15)用例编号给每个用例的一个编号面向对象分析——CRC建模Class-Responsibility-Collaborator,类-责任-协作者识别候选类并指明它们的责任和协作实际上是一组表示类的标准的索引卡片集合卡片的顶部:类的名字、类型卡片的左边:列出类的责任,包括类所包含属性及操作卡片的右边:列出协作者,即其它相关的类面向对象分析——CRC建模面向对象分析——CRC建模(1)CRC卡片面向对象分析——CRC建模(1)面向对象分析——CRC建模(2)CRC卡片示例面向对象分析——CRC建模(2)面向对象分析——CRC建模(3)识别候选类任何外部实体、事务、发生的事情或事件、角色、位置等都可以成为候选类候选类的类型边界类:表示系统存储和管理的永久信息实体类:系统与角色的接口,在每一个用例中,一个角色对应一个边界类。边界类收集来自角色的信息,并将其转换成实体类和控制类可以使用的中间接口控制类:负责协调边界类和实体类,通常在现实世界中没有对应的事物,它负责接收边界类的信息,并将其分发给实体类面向对象分析——CRC建模(3)面向对象分析——OOA目标实现关键USECASE都已获得适当的解析和描述已经提取了大部分关键对象和类为OOD做好了充分的准备在OOA阶段,重点在于分析ACTOR与系统的交互,并把业务逻辑充分体现出来在OOD阶段,在OOA模型的基础上进行层次的分离和责任的再分配,这时候的重点是业务逻辑的封装OOA的注释和说明是OOD和OOP的重要提示面向对象分析——OOA目标实现面向对象设计(OOD)OOD是用OO观点建立求解域模型的过程OOA到OOD实际上是一个逐渐扩充模型的过程面向对象分析主要模拟问题空间和系统任务而面向对象设计则是对其进行扩充,主要是增加各种组成部分OOA识别和定义的类/对象,是一些直接反映问题空间和系统任务的而OOD识别和定义的类/对象则是附加的,反映需求的一种实现面向对象设计(OOD)面向对象设计——OOD的目标提高生产率OOD是一种系统设计活动OOD使用重用类机制来改进效率,类库是这种结构的主要组成部分提高质量OOA和OOD过程能够减少开发后期发现的错误,大大提高系统的质量提高可维护性OO方法开发的系统中,稳定的是类,可变的是服务,服务的复杂程度、外部接口是最可能变化的部分,把系统中稳定的部分和易变的部分分离开来面向对象设计——OOD的目标面向对象设计——面向对象设计的准则模块化对象就是模块抽象支持过程抽象、数据抽象、规格说明抽象和参数化抽象信息隐藏通过封装性实现面向对象设计——面向对象设计的准则面向对象设计——面向对象设计的准则弱耦合对象间有两类耦合“交互耦合”(消息传递)和“继承偶合”(父、子类间的联系)强内聚服务内聚(一个服务完成一个功能)类内聚(一个类应只有一个用途)一般-特殊内聚(这是对领域知识的正确抽取)可重用尽量使用已有类;设计新类时要考虑可重用面向对象设计——面向对象设计的准则面向对象设计——设计过程在设计阶段中继续采用分析阶段中提到的五个层次,有助于从分析到设计的过渡这五个层次是用于建立系统的四个组成成分上问题论域用户界面任务管理数据管理人机交互问题域任务管理数据管理主题层类对象层结构层属性层服务层面向对象设计——设计过程人机问题域任务管理数据管理主题层面向对象设计——设计过程(1)问题域(PDC)的设计OOA阶段得到的有关应用的概念模型描述了所要解决的问题为问题域的设计奠定了基础建立了求解域的总体框架面向对象设计——设计过程(1)面向对象设计——设计过程(2)问题域(PDC)的设计OOD阶段,主要对OOA产生模型中的某些类与对象、结构、属性、操作进行组合与分解,或者增加必要的类、属性和联系复用设计
根据问题解决的需要,把从现有的类库或其它来源得到的现存类增加到问题解决方案中去把问题论域的专用类关联起来调整需求、重用设计(类)、组合问题域相关的类、为建立公共操作集合建立一般类增添一般化类来建立类间协议改进性能与加入较低层的构件调整继承层次面向对象设计——设计过程(2)面向对象设计——设计过程(3)用户界面部分(HIC)的设计
用户界面的设计结果,将对用户情绪和工作效率产生重要影响设计准则一致性使用一致的术语、一致的步骤、一致的动作减少步骤应使用户为做某件事情而需操作的步骤最少及时提供反馈信息及撤消命令易学,富有吸引力应提供联机帮助系统或参考资料面向对象设计——设计过程(3)面向对象设计——设计过程(4)用户界面部分(HIC)的设计在OOA阶段给出了所需的属性和操作,在设计阶段必须根据需求把交互的细节加入到用户界面的设计中,包括有效的人机交互所必需的实际显示和输入设计策略用户分类描述用户设计命令层次设计详细的交互设计人-机交互类通常可将其分为外行型、初学型、熟练型和专家型四类什么人、特点、期望软件用途、主要要求与喜好以及任务场景等尽量遵循用户界面的一般原则和规范,根据用户分析结果确定初步的命令系统然后再优化面向对象设计——设计过程(4)通常可将其分为外行型、初什么人面向对象设计——设计过程(5)用户界面部分(HIC)的设计
设计人-机交互类组织窗口和部件的用户界面的设计通常包括类窗口、条件窗口、检查窗口、文档窗口、画图窗口等每个类包括窗口的菜单条、下拉菜单、弹出菜单的定义还要定义用于创建菜单、加亮选择项、引用相应响应的操作每个类还负责窗口的实际显示所有有关物理对话的处理都封装在类的内部面向对象设计——设计过程(5)面向对象设计——设计过程(6)任务管理部分(TMC)的设计
任务是进程的别称,是执行一系列活动的一段程序任务是由目标软件系统中一段代码决定的处理行为常见的任务有事件驱动任务、时钟驱动任务、优先任务、关键任务和协调任务等任务管理主要包括确定和选择各类任务并分配执行它们面向对象设计——设计过程(6)面向对象设计——设计过程(7)任务管理部分(TMC)的设计识别事件驱动任务与硬件设备通信的任务是事件驱动的也就是说这些任务可由事件来激发,而事件常常是当数据到来时发出的一个信号识别时钟驱动任务以固定的时间间隔激发这类任务以执行某些处理例如:有些设备需要周期性地获得数据,在这种场合下需要使用时钟驱动任务识别协调任务当有三个或更多的任务时,应增加一个任务,用它作为协调任务面向对象设计——设计过程(7)面向对象设计——设计过程(8)任务管理部分(TMC)的设计识别优先任务和关键任务
根据处理的优先级别来安排各种任务在系统中,有些操作具有高优先级,因此必须在很强的时间限制内完成;有些操作具有较低的优先级,可进行时间要求较低的处理。关键任务是对系统的成败起关键作用的处理,这些处理要求有较高的可靠性评审各个任务必须对各个任务进行评审,确保它能满足选择任务的工程标准面向对象设计——设计过程(8)面向对象设计——设计过程(9)任务管理部分(TMC)的设计定义各个任务主要包括:它是什么任务、如何协调工作以及如何通信任务的定义name(任务名)description(描述)priority(优先级)servicesincluded(包含的操作)communicationvia(经由谁通信)面向对象设计——设计过程(9)name(任务名)面向对象设计——设计过程(10)数据管理部分(DMC)的设计
数据管理部分提供了在数据管理系统中存储和检索对象的基本结构
设计数据管理部分的目的将目标软件系统中依赖开发平台的数据存取部分与其他功能分离,数据存取通过一般的数据管理系统实现,但实现细节集中在DMC中这样既有利于软件的扩充、移植和维护,又简化了软件设计、编码和测试的过程包括选择数据管理方法和设计数据管理两部分面向对象设计——设计过程(10)面向对象设计——设计过程(11)数据管理部分(DMC)的设计
选择数据存储管理方法不同数据存储管理方法有不同的特点,适用范围也不同,应根据应用系统的特点选择适用的方法数据管理方法主要有三种文件管理关系数据库管理面向对象的数据库管理面向对象设计——设计过程(11)面向对象设计——设计过程(12)数据管理部分(DMC)的设计
数据管理部分的设计数据存储管理部分的设计包括数据存放方法的设计和相应操作的设计
数据存放方法可以根据需要采用文件系统、RDBMS或ORDBMS相应操作的设计
要根据不同的数据存储格式来设计(包括文件系统、RDBMS或ORDBMS)面向对象设计——设计过程(12)面向对象设计——设计模型面向对象设计——设计模型面向对象设计——设计模型(1)责任设计设计每个对象的所有属性和操作的数据结构和算法的设计算法可使用活动图表示消息设计设计每个对象能够和其协作者通信的细节,即设计系统的内部和外部接口。可使用顺序图表示类和对象设计设计类层次,可使用类图表示子系统设计设计所包含的子系统,可用包图、构件图、部署图等表示面向对象设计——设计模型(1)面向对象设计——包图将软件中的元素分组,组织成包包中可包含包、构件及类面向对象设计——包图面向对象设计——包图(1)某购物网站包图(部分)面向对象设计——包图(1)某购物网站包图(部分)面向对象设计——构件图构件是软件系统的一个物理单元构件是系统中遵从一组接口且提供其实现的物理的、可替换的部分只能通过构件的接口来使用构件中的操作可使用新构件替换旧构件,只要新构件符合旧构件的接口面向对象设计——构件图面向对象设计——构件图(1)接口对象或构件对外信息隐藏,但必须向外界提供访问其内部信息和操作的方法,即接口。接口是抽象原则在OO中的重要体现之一接口实际上是一组提供给访问者的一组操作集合构件的两类接口构件对外提供的接口为导出接口访问其它构件的操作使用导入接口面向对象设计——构件图(1)面向对象设计——构件图(2)构件图示例Web服务器构件图(部分)面向对象设计——构件图(2)Web服务器构件图(部分)面向对象设计——部署图用来表示系统中的节点的拓扑结构和通信路径与节点上运行的构件等节点是存在于运行时的代表计算资源的物理设备,一般拥有处理能力和内存,如处理器或设备面向对象设计——部署图面向对象设计——部署图(1)部署图示例Web网站部署图面向对象设计——部署图(1)Web网站部署图面向对象设计——类图将分析阶段识别的类和类之间的关系组织在一起,形成类图类图示例某学生管理系统类图(部分)面向对象设计——类图某学生管理系统类图(部分)面向对象设计——活动图活动图与程序流程图类似,描述某个流程的工作过程主要用于描述业务过程和类中操作的算法流程等面向对象设计——活动图面向对象设计——活动图(1)活动图中的元素面向对象设计——活动图(1)面向对象设计——活动图(2)活动图示例某购物网站购物活动图面向对象设计——活动图(2)某购物网站购物活动图OOA与OOD环境OOA过程中与具体工程环境有关的不太多,与最终系统实现环境关联不太密切OOD过程与具体工程环境相关的已经很多相关部分也正是OOD所包括的内容OOA与OODOOA与OOD(1)定义OOA过程是知道系统要做什么的过程USECASE定义了系统为使用者提供的服务通过OOA过程来定义系统要做什么才能达到提供服务的目的,也就是定义系统目标的过程OOD过程是知道系统怎么做的过程实现系统目标的过程,与具体的实现环境密切相关OOA与OOD(1)OOA与OOD(2)作用OOA把UseCase映射为系统目标,并把责任绑定到将来实际系统中的关键对象上去,为OOD的细化提供基础OOD结合系统体系结构等具体实现因素进一步把责任分解或绑定到系统的对象上,并按照环境配置规律生成所需要的代码框架OOA与OOD(2)OOA与OOD(3)协作从OOA到OOD平滑过渡,无缝连接,保留OOA、OOD两阶段的作用主要是提供不同的复用层次OOA阶段定义的对象和责任,在OOD阶段通过分解或细化得到进一步落实OOA通过描述性方法定义了系统对象的目标,OOD用形式化表示方法精确定义了系统对象及责任实现接口OOA与OOD(3)软件工程面向对象软件开发方法面向对象方法概述面向对象(OO,ObjectOriented)技术是软件工程领域中的重要技术,这种软件开发思想比较自然地模拟了人类认识客观世界的方式,成为当前计算机软件工程学中的主流方法“面向对象”(Object-Oriented)是针对“面向过程”一词提出的,是从本质上区别于传统的结构化方法的一种新方法,新思路应该特别强调的是,面向对象技术不仅仅是一种程序设计方法,更重要的是一种对真实世界的抽象思维方式面向对象方法概述面向对象方法概述——背景传统开发方法由一整套过程、方法和工具作为支撑,在一定时期内对解决软件危机起了很大作用,曾指导开发出很多成功的系统,但其缺点也日益显现传统软件开发方法不能完全消除软件危机,并且生产率的提高不能满足需要从50年代到80年代,美国的软件生产率翻了两翻。但社会对软件的需求每年以两位数字的百分比在增长。软件的开发已成为影响计算机应用的瓶颈面向对象方法概述——背景从50年代到80年代,美国的软件生产面向对象方法概述——背景(1)传统开发方法存在的问题软件维护系统是围绕着如何实现一定的行为来进行的,当系统行为易变,需要常常修改时,修改极为困难软件结构严重依赖于系统功能,基于功能分解的系统结构将很难进行修改和扩充用户功能需求的改变将导致软件结构的相应改变,给软件的开发及维护造成很大困难数据和对数据的处理操作是分离的,对数据的修改将影响某个功能的实现传统开发方法的软件维护比软件开发效率低几十倍。80年代,美国一年花费的软件维护费用高达300多亿美元。90年代,软件维护费用占系统研制、开发总费用的70%。面向对象方法概述——背景(1)传统开发方法的软件维护比软件开面向对象方法概述——背景(2)传统开发方法存在的问题自顶向下功能分解的分析方法极大地限制了软件的可重用性结构化分析、设计技术的本质是功能分析从代表目标系统整体功能的单个处理着手,自顶向下不断把复杂的处理分解为子处理,层层分解下去,直至仅剩下若干个容易实现的子处理为止传统方法通过建立标准函数库和子程序库实现软件的可重用性,然而标准函数库等只是对建立在数学模型基础上的应用问题有可重用的功效,而对其它实际应用问题则不能很好地进行软件重用面向对象方法概述——背景(2)传统方法通过建立标准函数库和子面向对象方法概述——背景(3)传统开发方法存在的问题以输入-处理-输出为核心的分析和设计方法不符合人类的思维方式软件不能真正了解用户的需要,以致开发出的软件系统与用户预期的系统不一致,不能满足用户的需要功能与数据分离的软件设计结构与人类的现实世界环境很不一样,和人的自然思维也就很不一致,因此对现实世界的认识与编程之间存在着一道很深的理解上的鸿沟Standish94报告中指出:31%软件项目没有完全完成,53%的项目花费最先预算的200%之多,并且估计美国的公司和政府机构在1995年为了取消软件项目的生产而花费了810亿美元面向对象方法概述——背景(3)Standish94报告中指出面向对象方法概述——背景(4)传统开发方法存在的问题系统中模块之间控制作用的重要影响在系统中,实际控制发生的根源来自分散的各个模块之中时,由于在“好的模块结构”中的模块间的控制作用只能通过上下之间的调用关系来进行,造成信息传递路径过长,效率低,易受干扰,甚至出错面向对象方法概述——背景(4)面向对象方法概述——背景(5)为了解决传统开发方法的问题,在软件开发实践中人们提出了许多针对具体开发的方法快速原型法面向对象方法…….诞生了面向对象程序设计语言,并基于面向对象思想诞生了面向对象软件开发方法面向对象方法概述——背景(5)面向对象方法概述——发展历程面向对象的思想最初出现于挪威奥斯陆大学和挪威计算中心于60年代末共同研制推出的S1mula67语言中,该语言首先引入了类的概念和继承机制80年代,美国加利福尼亚Xerox研究中心推出的Smalltalk-76和Smalltalk-80语言,它具备了面向对象语言的继承和封装的主要特征,比较完善地实现了面向对象的程序设计,推动了面向对象技术的飞速发展面向对象方法概述——发展历程面向对象方法概述——发展历程(1)从80年代中期到90年代,面向对象语言十分热门,涌现出大批比较实用的面向对象编程语言如C++、ObjectPascal等随着面向对象编程语言走向实用,开始了对面向对象分析和面向对象设计的研究面向对象的分析和设计技术逐渐走向实用,最终形成了由分析、设计到编程、测试与维护一整套的软件工程体系组成的面向对象软件开发方法面向对象方法概述——发展历程(1)面向对象方法概述——发展历程(2)在面向对象软件开发方法发展中,出现了很多方法,典型的以发明者命名的方法有:Booch法、Rambaugh法、Jacobson法、Coad和Yourdon法、Wirfs-Broch法等1995年,GradyBooch、IvarJacobson和JamesRumbaugh一起合作,将各自的方法组合成一种统一的方法,称为“统一建模语言”,即(UnifiedModelingLanguage,UML)1997年提出UML1.0版本UML现已在整个行业使用面向对象方法概述——发展历程(2)OO技术的基本原理按照问题域的基本事物实现自然分割,按人们通常的思维方式建立问题域的模型,设计尽可能直接自然表现问题求解的软件系统。OO技术引入了对象(object)概念来表现事物;用消息(message)传递建立事物间的联系;用类(class)和继承(inheritance)作为适应人们一般思维方式的描述模型;用方法(method)表示作用在对象上的各种操作。OO技术的基本原理OO技术的基本原理(1)传统的程序设计方法,针对的是数学模型,出发点是“怎样做(How)?”用计算机求解一个实际问题应该怎样做?从实际问题到求解模型(数学模型)的抽象都是围绕怎样做?去进行的面向对象(OO)方法的出发点是“是什么(What)?”要求解的实际问题,到底是什么?用对象表现现实世界中的某个具体的事物OO技术的基本原理(1)OO技术的基本原理(2)面向对象(OO)方法的出发点是“(What)?”由物质组成现实世界物体多样化的表现形式构成问题域(Domain)人认识事物的规律:首先认识问题域是什么?当物体反映到头脑中后,变成意识形成抽象的概念,既逻辑世界由对象组成逻辑世界对象在具体的逻辑世界中担当一定的角色,并完成一定的功能(动作)对象有自己的属性和动作。对象表现现实世界中的某个具体的事物。OO技术的基本原理(2)OO技术的基本原理(3)基本思想客观世界是由对象组成的任何复杂的软件都是由简单的对象组合而成的面向对象的软件系统同样是由对象组成的具有相同数据和相同操作的对象可以归并为一个类类具有封装性,其数据和操作等对外界是不可见的,外界只能通过消息请求进行某些操作,提供所需要的服务所有对象都可以划分为不同的对象类每个对象类都有自己特定的数据和方法对象是对象类的一个实例OO技术的基本原理(3)OO技术的基本原理(4)基本思想对象类具有层次结构上层的类称为“父类”或“基类”,下层的类称为“子类”或“派生类”父类可以派生出子类,子类继承父类的全部特性(数据和操作),又可以有自己的新特性子类与父类形成类的层次结构对象之间通过消息机制传递相互联系OO技术的基本原理(4)OO技术的基本原理(5)思想的精髓是按照对象(事物、概念、实体)的观点考虑问题域和逻辑解决方案“面向对象”技术追求的是软件系统对现实世界的直接模拟尽量实现将现实世界中的事物直接映射到软件系统的解空间OO技术的基本原理(5)OO技术的基本原理(6)软件工程学家Codd和Yourdon认为
面向对象的程序设计技术是以对象为基础,以消息驱动对象实现操作的一种全新的程序设计方法如果一个软件系统使用这些概念来建立模型并予以实现,那么它采用的就是面向对象软件开发方法面向对象=对象+类+继承+通信OO技术的基本原理(6)面向对象=对象+类+继承+通信面向对象方法组成(1)与结构化软件开发方法类似,面向对象软件开发方法也由三部分组成面向对象分析方法(OOA)重点在于发现并描述问题域中的对象(或概念)例如:图书馆信息系统中的书(book)面向对象设计方法(OOD)重点在于定义能最终面向对象程序设计语言的实现的逻辑软件对象软件对象具有方法和属性例如:对象书(book)具有一个题目属性(title)和一个打印方法(print)面向对象程序设计方法(OOP)面向对象方法组成(1)面向对象方法组成(2)与结构化软件开发方法类似,面向对象软件开发方法也由三部分组成面向对象程序设计方法(OOP)实现所设计的构件例如采用c++、Java语言编写一个book类面向对象方法组成(2)面向对象方法组成(3)面向对象思想强调的是对象的表示领域概念用面向对象的程序设计语言表示分析过程中概念的表示booktitlePublic
class
book
{publicvoidprint();…..privateStringtitle;}面向对象方法组成(3)领域概念用面向对象的分析过程中book面向对象方法组成(4)面向对象程序设计方法(OOP)——被一些人称为“面向对象变成之父”的AlanKay,确定了以下关于OOP[Kay1993]的基本特征任何事物是一个对象通过互相联系的对象请求其他对象执行一定的行为来完成计算对象通过发送和接收消息进行通信消息是指对特定行为的请求,并且伴随着完成这项任务所需要的参数每个对象都有自己的存储空间,用来储存其他对象面向对象方法组成(4)面向对象方法组成(5)面向对象程序设计方法(OOP)——被一些人称为“面向对象变成之父”的AlanKay,确定了以下关于OOP[Kay1993]的基本特征每个对象都是一个类的实例,类用来代表一组相似的对象例如:整数、链表等类可以看作是存储仓库,用来保存与一个对象相关的行为同一个类的多个实例对象能够执行相同的行为类可以组织成一个单根树状结构,成为继成层次在该结构中,一个类实例的存储空间和行为自动地被其派生类使用面向对象方法组成(5)面向对象与面向功能的分析与设计软件项目是复杂的分而治之是处理复杂问题的主要策略将问题分解为易于管理和控制的单元结构化的分析与设计(前,流行)对问题的分解尺度主要依据功能和过程处理问题的结果是将一个复杂的过程分解为一系列具有层次关系的字过程面向对象的分析与设计(现,流行)以对象为尺度分解问题空间面向对象与面向功能的分析与设计面向对象与面向功能的分析与设计(1)以图书馆信息系统为例图书馆信息系统面向对象的分析与设计按对象或概念分解CatalogLibrarianBookLibrary结构化的分析与设计按功能或过程分解SystemRecordLoansAddResourcesReportFines面向对象与面向功能的分析与设
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 阳光健康演讲稿
- 《供配电技术》第7章 教案
- 就餐的礼仪(31篇)
- 芒种活动总结
- 股权分配的协议书(33篇)
- 2024年多晶氟化镁(MGF2)项目投资申请报告代可行性研究报告
- DB12-T 736-2023 大型活动特种设备安全保障性检验规范 电梯
- 2024年涂装机项目资金申请报告代可行性研究报告
- 2024年插拔力试验机项目资金筹措计划书代可行性研究报告
- 2024-2025学年重庆市涪陵五中高三上学期开学考生物试题及答案
- 真想变成大大的荷叶(详案)
- 原生家庭与个人成长(课堂PPT)
- 货代公司规章制度管理办法范本
- 医学英语教程(2)ppt课件
- 上交叉与下交叉综合征(课堂PPT)
- 物理图库(几乎包含所有初中物理图片)
- 铜仁市房地产市场调查分析报告专业课件
- 中南大学湘雅医院亚专科管理办法(试行)
- 矿山监理规划
- 常用气体分子直径
- 【模板】停送电检修作业票模板
评论
0/150
提交评论