SoftwareEngineering2009BeyondTechnology软件开发过程与质量保证第八章面向对象基础SoftwareEngineering2009第八章面向对象8.1软件工程方法论8.2面向对象的基本概念8.3为何使用UML掌握面向对象的基本概念重点和难点SoftwareEngineering2009软件工程主要方法论结构化分析和设计方法论也叫数据流建模方法论把现实世界描绘为数据在信息系统中的流动,在数据流动过程中数据发生转化。通过自顶向下的程序设计将复杂的程序分解为程序模块的层次图。存在问题面向过程方法大多基于瀑布模型面向过程方法是将用户需求对应到软件功能上,而采用面向过程的处理方式来应对用户提出的功能上的变更造成了系统结构的不稳定。过程分析和数据分析之间的边界问题始终没解决SoftwareEngineering2009面向对象方法论认为客观世界是由各种对象组成,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成的。把所有的对象划分成各种对象类(简称类class),每个对象类都定义了一组数据和一组方法。按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统。对象彼此之间仅能通过传递消息互相联系。SoftwareEngineering2009传统方法系统是过程的集合过程与数据实体交互过程接受输入并产生输出面向对象方法系统是交互对象的集合对象与其它对象交互对象发送消息与响应消息传统方法论与面向对象方法论的比较SoftwareEngineering2009例子设计一个程序,对不同类型的图形求其面积,并绘制出对应的图形SoftwareEngineering2009传统方法论主控函数输入功能类型计算面积绘制图形圆面积控制模块矩形面积控制模块输入图形类型绘制圆形控制模块绘制矩形控制模块输入圆半径计算圆面积输入矩形长宽计算矩形面积绘制圆形绘制矩形SoftwareEngineering2009面向对象方法论通用图形计算面积绘制图形圆圆心半径矩形长宽计算面积绘制图形计算面积绘制图形SoftwareEngineering2009面向对象方法不再把程序看成工作在数据上的一系列过程或函数的集合,而是把程序看作是相互协作而又彼此独立的对象的集合。每个对象可以看作是一个微型程序,有自己的数据、操作、功能和目的。面向对象分析和设计解决的两个经典问题•传统的分析和设计方法将处理问题的数据模型和处理模型分离,而面向对象的方法将数据模型和处理模型二者合一。•从系统分析能够平滑地过渡到系统设计。–UML将分析和设计模型统一,使用的符号统一,设计模型是分析模型的完善和扩充。SoftwareEngineering2009面向对象方法论的主要优点适应不断发生的变化•当前软件项目面临的一个突出问题是如何应对变化越来越快的客户需求,从技术角度上用OOA/D的方法解决是比较有效的手段:功能:最易变数据:较易变对象:较稳定稳定性增加类属性方法SoftwareEngineering2009支持复用技术与人类的习惯的思维方法一致稳定性好可重用性好较容易开发大型软件产品可维护性比较好•面向对象的软件稳定性比较好•面向对象的软件比较容易修改•面向对象的软件比较容易理解•易于测试和调试SoftwareEngineering2009第八章面向对象8.1软件工程方法论8.2面向对象的基本概念8.3为何使用UMLSoftwareEngineering2009对象类消息封装继承多态面向对象基本概念回顾SoftwareEngineering2009什么是对象?对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组方法组成。SoftwareEngineering2009对象的特点对象具有标识你能够对它命名,以区别于其他对象对象具有状态通常有一些数据与它相联系对象具有行为使你能够对对象做某些事,它也能为其他对象做某些事SoftwareEngineering2009对象定义•可以将问题域中任何事物都视为对象,对象是所有数据及可对这些数据施加的操作结合在一起所构成的独立单位的总称,是具有一定知识和处理能力的独立个体。它可以是具体的物理实体,如一个文件;也可是是人为抽象概念的,如多任务操作系统中的调度策略。对象包含两个基本要素:•属性:用于描述对象的静态特征,是反映类或对象当前状态本质的数据项。•方法:用于描述对象的动态特征,反映对象的一种行为,是对对象属性的操作、服务。SoftwareEngineering2009对象的形象化表示对象属性方法3方法1操作1方法2操作2操作3界面SoftwareEngineering2009什么是类?类是具有相同属性和方法的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和方法两个主要部分。在图形上,把一个类画成一个矩形。SoftwareEngineering2009类定义•具有相同属性和行为的一组对象的集合类与对象的关系•类是对象的抽象•对象是类的实例SoftwareEngineering2009类的描述方法+方法1()+方法2()-属性1-属性2类名SoftwareEngineering2009类的属性和操作属性(attribute)是已被命名的类的特性,它描述了该特性的实例可以取值的范围。操作(operation)是一个服务的实现,该服务可以由类的任何对象请求以影响其行为SoftwareEngineering2009类的特点同类对象具有相同的属性和方法,是指它们的定义形式相同,而不是说每个对象的属性值都相同。类是静态的;类的存在、语义和关系在程序执行前就已经定义好了。对象是动态的;对象在程序执行时可以被创建和删除。SoftwareEngineering2009对象和类对象可以是一个人、地址、物品、事件、概念、屏幕显示或者报表。类泛化或表示一组相似的对象,是创建对象的有效模板。一个类表示一组相似的对象。对象是类的实例。属性是类知道的事情。方法是类完成的事情。SoftwareEngineering2009对象和类对象可以是一个人、地址、物品、事件、概念、屏幕显示或者报表。类泛化或表示一组相似的对象,是创建对象的有效模板。一个类表示一组相似的对象。对象是类的实例。属性是类知道的事情。方法是类完成的事情。SoftwareEngineering2009消息定义•消息是用来请求对象执行某一处理或回答某一要求的信息,是对象之间建立的一种通信机制,它统一了数据流和控制流。通常一个消息由三部分组成:•对象名:接收消息的对象•消息名:要求接收对象完成的操作•参数:执行操作时的参数或操作返回的结果SoftwareEngineering2009例如MyCircle.Show(Green):•MyCircle是接收消息的对象的名字,Show是消息名,Green是消息的参数。MyCircle.ChangeColor(Green);SoftwareEngineering2009消息的表示形式student.read(inbooks,outreport)消息接收者参数类型输入参数操作消息SoftwareEngineering2009面向对象的基本原理SoftwareEngineering2009什么是抽象?类或操作等项目的基本属性一个项目的抽象依赖于你定义抽象的上下文抽象是在项目周围绘制一个清晰框架的手段SoftwareEngineering2009抽象的例子SoftwareEngineering2009什么是封装?把相关概念组合进一个项目中,如类或组件。封装描述了如何在系统中划分功能的问题。封装是把框体涂黑的做法。SoftwareEngineering2009EncapsulationIllustratedProfessorClarkneedstobeabletoteachfourclassesinthenextsemester.SoftwareEngineering2009什么是模块化?把复杂的事务分解成可以处理的部分帮助人们更好地理解复杂系统SoftwareEngineering2009模块化的例子Forexample,breakcomplexsystemsintosmallermodules.SoftwareEngineering2009什么是继承?表示两个类之间是“isa”、“islike”或“iskindof”的关系。特殊类的对象拥有其一般类的全部属性与方法,称作特殊类对一般类的继承。SoftwareEngineering2009继承的分类?继承可分为单继承和多继承单继承:子类只从一个父类继承多继承:子类从多于一个的父类继承SoftwareEngineering2009什么是多态?从字面上理解,多态就是有多种形态的意思。在面向对象技术中,多态指的是使一个实体在不同的上下文条件下具有不同意义或用法的能力。多态是保证系统有较好的适应性的一个重要手段,也是用OO技术所表现出来的一个重要特征。SoftwareEngineering2009多态的例子SoftwareEngineering2009什么是类?类是具有相同属性和方法的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和方法两个主要部分。在图形上,把一个类画成一个矩形。SoftwareEngineering2009类的属性和操作属性(attribute)是已被命名的类的特性,它描述了该特性的实例可以取值的范围。操作(operation)是一个服务的实现,该服务可以由类的任何对象请求以影响其行为SoftwareEngineering2009类的特点同类对象具有相同的属性和方法,是指它们的定义形式相同,而不是说每个对象的属性值都相同。类是静态的;类的存在、语义和关系在程序执行前就已经定义好了。对象是动态的;对象在程序执行时可以被创建和删除。SoftwareEngineering2009对象和类对象可以是一个人、地址、物品、事件、概念、屏幕显示或者报表。类泛化或表示一组相似的对象,是创建对象的有效模板。一个类表示一组相似的对象。对象是类的实例。属性是类知道的事情。方法是类完成的事情。SoftwareEngineering2009建模元素:包包是用来组织UML模型的基本分组事物。它也有变体,如框架、模型和子系统等(它们是包的不同种类)。用包把建模元素安排成可作为一个组来处理的较大的组块:一些元素在包外是可见的.另一些元素要隐藏到包内.SoftwareEngineering2009建模元素:消息消息就是向对象发出的服务请求,它包含下述信息:提供服务的对象标识、服务(方法)标识、输入信息和回答信息。在图性上,把一个消息画成一条有向直线,通常在表示消息的线段上总有操作名。SoftwareEngineering2009第八章面向对象8.1软件工程方法论8.2面向对象的基本概念8.3为何使用UMLSoftwareEngineering2009何为UML统一建模语言(UML)是描述、构造和文档化系统制品的可视化语言SoftwareEngineering2009应用方式UML作为草图非正式的、不完整的图,借助可视化语言的功能,用于探讨问题或解决方案空间的复杂部分。UML作为蓝图相对详细的设计图•逆向工程•前向工程(代码生成)SoftwareEngineering2009UML只是一种工具UML并不是面向对象分析和设计的全部,它只是一种手段,一种工具。我们需要通过自己对对象的理解和面向对象分析设计技术的掌握来进行系统的分析和设计,然后通过UML的形式来进行表述。SoftwareEngineering2009UML的三种透视图概念透视图用图来描述现实世界或关注领域中的事物设计透视图用图来描述软件的抽象物或具有规格说明和接口的构件,但是并不约束特定实现实现透视图用图来描述特定技术中的软件实现SoftwareEngineering2