软件工程面向对象基础.ppt
面向对象基础,9.1 面向对象程序设计语言的发展9.2 面向对象程序设计模式9.3 面向对象的概念9.4 面向对象的开发方法9.5 小结习题,9.1 面向对象程序设计语言的发展,9.1.1 Simula语言Simula 67是一种真正的多功能程序设计语言,仿真是其中的一个应用。,9.1.2 Smalltalk语言 Smalltalk是一种纯面向对象程序设计语言,它强调对象概念的归一性,引入了类、子类、方法、消息和实例等概念术语,应用了单继承性和动态联编,成为面向对象程序设计语言发展中一个引人注目的里程碑。,9.1.3 Eiffel语言Eiffel它是继Smalltalk 80之后又一个纯面向对象的程序设计语言。它的主要特点是全面的静态类型化、全面支持面向对象的概念、支持动态联编、支持多重继承和具有再命名机制可解决多重继承中的同名冲突问题。,9.1.4 C+语言 C+是一种混合型的面向对象的强类型语言,C+是C语言的超集,融合了Simula的面向对象的机制,借鉴了ALGOL 68中变量声明位置不受限制、操作符重载,形成一种比Smalltalk更接近于机器但又比C语言更接近问题的面向对象程序设计语言。,9.1.5 面向对象程序设计语言目前已有几十种面向对象语言出现,这些语言分为两大类:第一类是纯面向对象的程序设计语言,它们是Smalltalk-80,Eiffel,SELF,Java等;第二类是混合式面向对象程序设计语言,它们是C+,Simula,CLOS,CommonLoops,Objective-C,objective Pascal等。,9.2 面向对象程序设计模式,9.2.1 软件能力面临的问题(略)1.软件能力2.制约软件发展的主要因素3.传统软件工程的局限性4.软件形式化开发至今尚未真正实用5.必然的选择采用新的程序设计模式,9.2.2 程序设计基本模式 程序设计模式是人们在程序设计时所采用的基本方式模型,它是以一类程序设计语言为基础,体现了一类语言的主要特点,这些特点能用以支持应用领域所希望的设计风格。从第一个程序设计语言产生以来,有如下的基本程序设计模式。1.过程程序设计例如FORTURN语言。2.结构化程序设计这种模式的程序设计语言有Modula,Ada,C和PASCAL等。3.函数程序设计函数程序设计语言的代表是LISP等语言。4.逻辑程序设计逻辑程序设计模式的语言代表是PROLOG等语言 5.面向对象程序设计9.2.3 程序设计模式的转换(略),9.2.4 面向对象程序设计模式的机制 1.基本特征 面向对象的程序设计将计算看作是一个系统的开发过程,系统由对象组成,经历一连串的状态变化以完成计算任务。面向对象程序设计对体系结构和支撑软件系统没有突变要求,因而不存在难以应用现有资源的问题。2.基础构件面向对象程序的基础构件是对象和类。从程序设计角度来看,对象是一种不依赖于外界的模块,对应着存储器中的一块被划分的区域。它包含数据,在逻辑上也包含作用于这些数据的过程,这些过程称为方法。,杭 州,北 京,Message,Send by method,对象Object,Object,=数据Attribute,Attributes:location;employee;,+操作Method,Methods:send;sell;,注意:Object内部的attributes不允许外部用户直接改动,只有当它提供了相应的服务method时,用户才能通过发送message来提请它执行。,我想把邮局搬到我家门口,多加几个邮递员,24小时都开门,对不起,本邮局不提供此类服务,唉,那就先送束花吧 Post_office.Send(request,payment),软件工程的新途径,面向对象方法学(OOM)例:,3.基本机制面向对象程序设计的基本机制是继承性、消息和方法,还有在特定方面提供更为专门的、灵活的机制,如重置、多态等。,9.3 面向对象的概念,9.3.1 面向对象的基本思想,尽可能模拟人类习惯的思维方式,即问题域与求解域在结构上尽可能一致。与传统方法相反,OOM以数据或信息为主线,把数据和处理结合构成统一体 对象。这时程序不再是一系列工作在数据上的函数集合,而是相互协作又彼此独立的对象的集合。,程序=(对象、对象、对象、对象),计算机世界,现实世界,结构化开发方法,结构化分析,结构化设计,结构化编程,OOA,OOD,OOP,面向对象开发方法,OOM,什么是面向对象,Coad和Yourdon给出了一个定义:“面向对象=对象+类+继承+通信”。如果一个软件系统是使用这样 4 个概念设计和实现的,则我们认为这个软件系统是面向对象的。一个面向对象的程序的每一成份应是对象,计算是通过新的对象的建立和对象之间的通信来执行的。,9.3.2 面向对象的基本概念,对象(object),客观世界里的任何实体都可以被看作是对象。对象可以是具体的物,也可以指某些概念。(有形实体、作用、事件、性能说明)对象是面向对象开发模式的基本成份。每个对象可用它本身的一组属性和它可以执行的一组操作来定义。从编程的角度来看,对象=(算法+数据结构)或 对象=(操作+属性)即对象实现了数据和操作的结合,使数据和操作封装在对象的统一体内。属性:属性用来表示对象的状态操作又称为方法或服务,它描述了对象执行的功能,描述对象行为的过程,若通过消息传递,还可以为其它对象使用。,类(class),类是一组具有相同数据结构和相同操作的对象的集合。类的定义包括一组数据属性和在数据上的一组合法操作。类定义可以视为一个具有类似特性与共同行为的对象的模板,可用来产生对象。,在一个类中,每个对象都是类的实例(Instance),它们都可使用类中提供的函数。对象的状态则包含在它的实例变量,即实例的属性中。,例:人类是一个类,张三、李四都是人的实例(对象),一个类描述这些事务所应具有的属性,如人有身高、体重、文化程度、性别、年龄等。一个对象是类的一个实例,它具有确定的属性,如张三的身高180、体重70、大本、男、21 人类只有一个,人类的实例可以有多个。,【例1】基于Visual FoxPro的FORM类生成一个对象,然后访问该对象的一些属性和方法。Oform=CREATEOBJECT(Form)&生成一个空白表单Oform.show&显示表单Oform.caption=“演示”&修改表单的标题?“这是一个生成对象的演示程序”&在表单上输出字符串Oform.release&释放表单,对象,类,方法(操作),属性,李杰,李杰男广东软件1980.49#楼129室,看书实验上课运动,杨芳,服务,王辉男湖南计算机控制1979.19#楼320室,杨芳女北京系统结构1979.125#楼418室,姓名性别籍贯专业出生年月住址,学生,属性,王辉,属性,属性,属性,看书实验上课运动,服务,看书实验上课运动,服务,看书实验上课运动,服务,类,对象,消息(Message),消息是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个操作的规格说明。发送给一个对象的消息定义了一个方法名和一个参数表(可能是空的),并指定某一个对象。,消息通信是面向对象的方法中对象之间相互联系的方法。这和Fortran、C等传统编程语言中带参数子程序调用是相似的。,对象间只能通过发送消息进行联系,外界不能处理对象的内部数据,只能通过消息请求它进行处理(如果它提供相应消息的话)。,Message:=object_ID.method_ID(parameter(s),一个对象接收的消息则调用消息中指定的方法,并将形式参数与参数表中相应的值结合起来。例如:Post_office.Send(request,payment),9.3.3 面向对象的特征 1.对象唯一性每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。在对象建立时,由系统授予新对象唯一的对象标识符,它在历史版本管理中有巨大作用。,2.分类性分类性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。每个类是个体对象的可能无限集合,而每个对象是相关类的实例。,3.继承(Inheritance),继承是使用已存在的定义做为基础建立新定义的技术。是子类自动共享父类数据结构和方法的机制。新类的定义可以是既存类所声明的数据和新类所增加的声明的组合。新类可以不加修改复用既存类的定义。既存类是父类(基类),新类是子类(派生类)。可以是单重继承和多重继承。一个子类的成员一般包括:(1)从其父类继承的属性和方法。(2)由子类自己定义的属性和方法。,4.多态性,相同的操作或函数、过程可作用于多种不同类型对象上并获得不同结果。即不同的对象,收到同一消息可以产生不同的结果。,在打印领域,打印程序可以打印字符、数字、图形、图像,打印程序由于知道如何同时打印图文,因而是多态的。,几何图形的draw方法,可以根据图形不同而画出不同的图形,如MOVE操作,可以是窗口对象的移动操作,也可以是国际象棋棋子的移动操作。,9.3.4 面向对象的要素 面向对象有一些基本要素。虽然这些要素并不是仅为面向对象系统所独有,但这些要素很适合于用来支持面向对象的系统。1.抽象抽象是指强调实体的本质、内在的属性,而忽略一些无关紧要的属性。在系统开发中,抽象指的是在决定如何实现对象之前,对象的意义和行为。使用抽象可以尽可能避免过早考虑一些细节,大多数语言都提供数据抽象机制,而运用继承性和多态性强化了这种能力,分析阶段使用抽象仅仅涉及应用域的概念,在理解问题域之前不考虑设计与实现。合理应用抽象可以在分析、设计、程序结构、数据库结构及文档化等过程中使用统一的模型。,面向对象比其他方法技术有更高的抽象性。对象具有极强的抽象表达能力,对象可表示一切事物,可表达结构化的数据,也可表达非结构化的数据,如工程实体、图形、声音及规则等。而类实现了对象的数据和行为的抽象,是对象的共性的抽象。2.封装性(信息隐蔽)封装性是保证软件部件具有优良的模块性的基础。封装性是指所有软件部件内部都有明确的范围以及清楚的外部边界。每个软件部件都有友好的界面接口,软件部件的内部实现与外部可访问性分离。,面向对象的类是封装良好的模块,类定义将其说明(用户可见的外部接口)与实现(用户不可见的内部实现)显式地分开,其内部实现按其具体定义的作用域提供保护。对象是封装的最基本单位,在用面向对象的方法解决实际问题时,要创建类的实例,即建立对象,除了应具有的共性外,还应定义仅由该对象所私有的特性。因此,对象封装比类的封装更具体、更细致,是面向对象封装的最基本单位。封装防止了程序相互依赖性而带来的变动影响。面向对象的封装比传统语言的封装更为清晰、有力。,3.共享性面向对象技术在不同级别上促进了共享,有以下几种:(1)同一个类中对象的共享。同一个类中的对象有着相同数据结构,这是由数据成员的类型、定义顺序及继承关系等决定的;也有着相同的行为特征,这是由方法接口和实现决定的。从这个意义上讲,这些对象之间是结构、行为特征的共享关系。进一步,在某些实际应用中还会出现要求这些对象之间有状态(即数据成员值)的共享关系。例如,所有同心圆的类,各个具体圆的圆心坐标值是相同的,即共处于同一状态。,(2)在同一个应用中的共享。在同一应用的类层次结构中,存在继承关系的各相似子类中,存在着数据结构和行为的继承,使各相似子类共享共同的结构和行为。使用继承来实现代码的共享,这也是面向对象的主要优点之一。,(3)在不同应用中的共享。面向对象不仅允许在同一应用共享信息,而且为未来目标的可重用设计准备了条件。通过类库这种机制和结构来实现不同应用中的信息共享。4.强调对象结构而不是程序结构(略)面向对象技术强调明确对象是什么,而不强调对象是如何被使用的。对象的使用依赖于应用的细节,并且在开发中不断变化。当需求变化时,对象的性质比对象的使用方式更为稳定。因此,从长远来看,在对象结构上建立的软件系统将更为稳定。面向对象技术特别强调数据结构,而对程序结构的强调比传统的功能分解方法要少得多。从这种意义上讲,面向对象的开发与数据库设计中的信息建模技术相似,只不过面向对象开发增加了类依赖行为的概念。,9.4.1 面向对象方法的形成(略)9.4.2 面向对象的开发方法Booch方法Coad-Yourdon方法Rumbaugh 方法(简称OMT)(Object Modeling Technology)Jacobson 方法(简称OOSE),9.4 面向对象的开发方法,由Rumbaugh、Booch、Jacobson 提出的统一建模语言(Unify Modeing Language简称UML),9.5 小结,本章是面向对象开发方法的基础。介绍了面向对象程序设计语言的发展,程序设计模式的转换,以及向面向对象程序设计模式转换的必然性,同时介绍了面向对象程序设计的基本特征、基本构件和基本机制。本章介绍了面向对象的基本概念,如对象、类、属性、操作、关系、消息和方法等,同时还介绍了面向对象的特征和要素。,对象的最基本的特征是封装和继承。作为一种抽象数据类型,对象把实体的相关属性和操作封装在一起,允许人们用自然的方式去模拟外部实体的结构和行为。继承是类实现可重用性和可扩充性的关键特征。在继承关系下,类之间组成网状或树形的层次结构。尽管人们对面向对象作了广泛的研究,但在对象语义理论方面尚缺乏一个为人们所普遍接受的严格的数学模型。把面向对象的思想用于软件的分析和设计,从而产生了崭新的面向对象的开发方法。本章概括地介绍了各种典型的面向对象开发方法,如Coad方法、OMT方法及Booch方法等。其中Coad方法在第10章中详细介绍,OMT方法在第12章中详细介绍。,习题,1.说明对象、类、类结构及消息的基本概念。2.说明面向对象的特征和要素。3.说明面向对象程序设计的基本构件。4.说明面向对象开发方法的三个流派。5.说明面向对象程序设计模式成为主流模式的原因。,