《软件工程导论class13面向对象方法学引论.ppt》由会员分享,可在线阅读,更多相关《软件工程导论class13面向对象方法学引论.ppt(41页珍藏版)》请在金锄头文库上搜索。
1、软件工程导论第13课第 9 章 面向对象方法学引论发展概述面向对象并非是一个新的概念,实际上它已有30多年的历史。寻其根源可追溯到60年代的挪威,当时挪威计算中心的Kristen Nygaard和Ole-Johan Dahl开发了一种称作Simula67的语言。Simula67首次引入了类、协同程序和子类的概念,这很象今天的面向对象语言。70年代中期,Xerox Palo Alto研究中心的研究人员设计了Smalltalk语言,该语言的每个元素都被当作一个对象来实现,其程序设计环境及相关的各个方面都是面向对象的。但是,面向对象的推广很慢。例如:Samlltalk的成果直到1981年8月因Byt
2、e杂志的介绍才为外界所知,许多软件开发人员了解Samlltalk时,都把它看作是一个窗口系统,而不是程序设计技术的一次革命。80年代,C成为很受欢迎的程序设计语言,它不仅可用在微机上,还可用在多种结构的系统和环境中。80年代早期,AT&T贝尔实验室的Bjarne Stroustrup把C语言扩展为支持面向对象程序设计的C+。在C+中,程序员可以在其熟悉的语言环境下学习掌握面向对象的程序设计技术,而不必去探究一种新的语言和环境。n自90年代以来,软件与硬件之间的差距至少有两代处理器之多,并且这种差距还在增大。当软件系统变得更加复杂时,常规软件工具、技术和概念已不足以应付,从而使软件开发者陷入了困
3、境。但面向对象的方法能够控制软件的复杂性,从而促进了面向对象的发展,掀起了一股“面向对象”热。9.1.1 面向对象方法学的要点nOOM的出发点和基本原则:n尽可能模拟人类习惯的思维方式模拟人类习惯的思维方式,使描述问题的问题空间问题空间与实现解法的解空间解空间在结构上尽可能一致一致。n面向对象方法是一种以数据和信息数据和信息为主线,把数据和处理相结合的方法:n面向对象方法把对象作为由数据及可以施加把对象作为由数据及可以施加在这些数据上的操作所构成的统一体在这些数据上的操作所构成的统一体9.1.1 面向对象方法学的要点n解空间与问题空间的“语义断层”n对象n解空间对象和问题空间对象n解空间对象的
4、呆板n问题空间对象具有静态属性又具有又具有动态行为OOM的4个要素n(1)对象对象(object):世界由对象组成。n(2)类类(class) :具有相同属性和操作的对象可划分为类; 单个对象可视为某一类的实例(instance)n(3)继承继承(inheritance):类可分层下层子类与上层父类有相同特征,称为继承n(4)消息消息(message):对象间只能通过发送消息进行联系, 外界不能处理对象的内部数据,只能通过消息n基于对象(objectsbased)方法n 使用对象-消息n基于类(class-based)方法n 使用类-对象-消息n面向对象(objects-based)方法n 使
5、用类-对象-消息-继承9.1.2 面向对象方法学的优点n与人类习惯的思维方式一致n稳定性好n可重用性好n可维护性好n注意注意:OOM并不是减少了开发时间,而是通过提高可重用性、可维护性,进行扩充和修改的容易程度等,从长远角度改进了软件的质量。1 与人类习惯的思维方式一致n传统方法传统方法:面向过程设计,以计算为核心,数据与操作分离,不易理解。n OOM:以object 为核心,n基本原理基本原理:使用现实世界的概念抽象地思考问题从而自然地解决问题,强调对现实概念的模拟而不强调算法。n面向对象方法学的基本原则基本原则,是按照人们习惯的思维方式建立问题域的模型,开发出尽可 能直观、自然地表现求解方
6、法的软件系统。nClass:由特殊到一般的归纳(induction)nInheritance:由一般到特殊的演绎(deduction)2 稳定性好n传统方法:结构依赖于功能,不稳定。n OOM:以object模拟实体,以对象间的联系刻画实体间的联系。需求变化不会引起结构的整体变化,只需做一些局部修改。因为实体相对稳定,故系统也相应稳定。3 可重用性好n传统方法:通过建立标准函数库来重用软构件。但标 准函数缺少必要的“柔性”,难以适应不同场合的不同需要。nOOM:封装性,信息隐蔽,独立性n灵活性:一个class所有的instances 都可重用它的代码;由派生出的新的class 可重用其父类的代
7、码,并且可以修改、扩充而不影响其父类的使用。4 较易开发大型软件产品n构成软件系统的每个对象就象一个微型程序,有自己的数据、操作、功能、用途。把一个大型软件产品分解成一系列本质上相互独立的小产品处理,降低了技术难度。n便于管理5 可维护性好n传统方法:可维护性是最令人头痛的问题。 nOOM:从以下几方面改善了可维护性n(1)稳定性好稳定性好:需求的变化不牵动全局,只需局部修改;n(2)容易修改容易修改:Class 独立性强:只要修改不涉及class的对外接口,则内部修改完全不影响外部调用;n继承(Inheritance)和多态性(polymorphism)使其易被修改和扩充;n(3)容易理解、
8、容易测试、调试5 可维护性好n(3)容易理解容易理解n符合人的思维习惯,软件系统结构与问题空符合人的思维习惯,软件系统结构与问题空间的结构基本一致,便于理解间的结构基本一致,便于理解n派生类只要理解新生部分,理解量少派生类只要理解新生部分,理解量少n(4)容易测试、调试容易测试、调试n调试只对新派生类进行,类独立性强,只对调试只对新派生类进行,类独立性强,只对类内部进行调试,比较容易。类内部进行调试,比较容易。9.2 面向对象的概念n9.2.1 对象对象n在应用领域中在应用领域中有意义的、与所要解决的问题有意义的、与所要解决的问题有关系的有关系的任何事物任何事物都可以作为对象,都可以作为对象,
9、对象既对象既可以是具体的物理实体的抽象,也可以是人可以是具体的物理实体的抽象,也可以是人为的为的 概念,或者是任何有明确边界和意义的概念,或者是任何有明确边界和意义的东西。东西。n例如,一名职工、一家公司、一个窗口、一座图书馆、一本图书、贷款、借款等等,都可以作为一个对象。9.2.1 对象n由于客观世界中的实体通常都具有静态的属性,又具有动态的行为n面向对象方法学中面向对象方法学中的对象是的对象是由描述该对象属由描述该对象属性数据以及可以对这些数据施加的所有操作性数据以及可以对这些数据施加的所有操作封装在一起的统一体。封装在一起的统一体。n从形式化角度看:从形式化角度看:n 对象对象:=n其中
10、:其中:ID是对象的标识或名字,是对象的标识或名字,MS是对象中的是对象中的数据集合,数据集合,DS是对象中的数据结构,是对象中的数据结构,MI是对象是对象受理的消息名集合。受理的消息名集合。1 对象的形象表示 对象很像录音机2 对象的定义从不同的角度给对象不同的定义从不同的角度给对象不同的定义定义定义1:对象是具有相同状态的一组操作的集合。:对象是具有相同状态的一组操作的集合。定义定义2:对象是对问题域中某个东西的抽象,这:对象是对问题域中某个东西的抽象,这种抽象反映了系统保存有关这个东西的信息或种抽象反映了系统保存有关这个东西的信息或与它交互的与它交互的 能力能力 定义定义3:对象:对象:
11、=,依次表示名字,依次表示名字操作集合数据结构操作集合数据结构 对外接口对外接口3对象特点以数据为中心以数据为中心,不设与数据无关的操作;Object主动处理而不被动地等待被处理,外部主动处理而不被动地等待被处理,外部只能通过只能通过message请求操作;请求操作; 具有封装性具有封装性:外部操作时,无须知道该object 内部的数据结构及算法;内部的数据结构及算法; 具有并行性具有并行性:不同object各自独立地处理自各自独立地处理自身数据,彼此间仅通过传递身数据,彼此间仅通过传递message完成通信;完成通信; 模块独立性好模块独立性好:内聚强、耦合松9.2.2其他概念其他概念n1
12、1 类类:是对具有相同数据和相同操作的一组相似对象的定义。 例 人、圆n是对象的抽象,是一种对象模型n2 2 实例实例:是由某个特定的类所描述的一个具体对象。n类是建立对象时使用的模板,用这个模板建立的一个具体对象,就是类的实例。n对象既可以是一个具体的对象,也可以泛指一般对象既可以是一个具体的对象,也可以泛指一般的对象;而实例只能是一个具体的对象的对象;而实例只能是一个具体的对象。n3消息消息:是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。由3部分组成:接受消息的对象、消息选择符部分组成:接受消息的对象、消息选择符(名名)、零个和多个变元。、零个和多个变元。n4方法方法:是
13、对象所能执行的操作;即类中所定义的服务。方法描述了对象执行操作的算法,响应消息的方法。n5 属性属性:是类中所定义的数据,是对客观实体所具有的性质的抽象n6封装封装:是把某个事务包起来,使外界不知道该事物的具体内容。n封装的条件:n(1)有一个清晰的边界有一个清晰的边界n(2)有确定的接口。接口就是对象可以接受有确定的接口。接口就是对象可以接受的消息。的消息。n(3)受保护的内部实现受保护的内部实现继承继继承继7 继承继承是子类自动地共享基类中定义的数据和方法的机制,其特性是:一个类的上层可以有父类,下层可以有子类。继承具有传递性,如果类C继承类继承类B,类,类B继承类继承类A,则类,则类C继
14、承类继承类A。 当类等级为树形结构时,类的继承是单继承;当允许一个类有多个父亲时,类的继承是多重继承。继承性的优点n共享程序代码和数据结构,大大减少程序中的冗余信息,提高软件的可重用性。n便于软件修改维护。当需要扩充原有的功能时,派生类的方法可以调用其基类的方法,并在此基础上增加必要的程序代码;当需要完全改变原有的算法时,可以在派生类中实现一个与基类方法同名而算法不同的方法;当需要增加新的功能时,可以在派生类中实现一个新的方法。n“站在巨人的肩头上”。用户在开发新系统时不必从零开始,可以继承原有相似功能或者从类库中选取需要的类,再派生新类。8 多态性多态性是指多态性是指子类对象可以像父类对象子
15、类对象可以像父类对象那样使用,那样使用,同样的消息既可以发送给父类对象也可以发送同样的消息既可以发送给父类对象也可以发送给子类对象给子类对象。在C+语言中,多态性是通过虚函数来实现的。语言中,多态性是通过虚函数来实现的。虚函数机制使得程序员能在一个类等级中使用虚函数机制使得程序员能在一个类等级中使用相同函数的相同函数的 多个不同版本,称为多个不同版本,称为动态联遍动态联遍,也,也叫滞后联编。叫滞后联编。多态性机制不仅增加了面向对象软件的灵活性,进一 步减少了信息冗余,而且显著提高了软件可重用性和 可扩充性。9 重载函数重载是指在同一作用域内的若干个参数特征不同 的函数可以使用相同的函数名字运算
16、符重载是指同一个运算符可以施加与不同类型的 操作数上面,当参数类型不同或被操作数的类型不同 时,实现函数的算法或运算符的语义是不相同的在C+语言中函数重载是通过静态联编(也叫先前语言中函数重载是通过静态联编(也叫先前联编)实现的,也就是在编译时根据函数变元的联编)实现的,也就是在编译时根据函数变元的个数和个数和 类型,决定到底使用函数的哪个实现代码;类型,决定到底使用函数的哪个实现代码;对于重载对于重载 的运算符,同样是在编译时根据被操作的运算符,同样是在编译时根据被操作数的类型,决数的类型,决 定使用该运算符的哪种语义定使用该运算符的哪种语义9.3 面向对象建模n为了更好地理解问题,采用建立
17、模型的方法n模型是为了理解事物而对事物作的一种抽象,是对事物的一种无歧义的书面描述。n模型是一种把知识规范地表示出来的把知识规范地表示出来的工具工具,n用面向对象的方法建立模型9.3 面向对象建模n用面向对象方法开发软件,通常要建立3种种形式的模型:形式的模型:n描述系统描述系统数据数据结构的结构的对象模型对象模型n描述系统控制控制结构的动态模型动态模型n描述系统功能功能的功能模型功能模型n一个典型的软件系统使用数据结构数据结构(对象模型),执行操作执行操作(动态模型),并完成数据值的变化变化(功能模型)9.4 对象模型n关于建模语言n模型通常由一组图示符号图示符号和组成这些符号的规则规则组成
18、, 定义和描述问题域的术语和概念n为建立模型,需要用适当的语言语言来表达模型n建模语言由记号记号(即模型中使用的符号)和使用这些记号的规则规则(语法、语义)组成9.4.1 类图的基本符号类图的基本符号n类图描述类、类与类之间的静态关系静态关系,是一种静态模型,是创建其他UML图的基础图的基础n 一个系统由多张类图来描述,一个类也可以出现在几张类图中1 定义类定义类nUML中类的图形符号为长方形,用两条横中类的图形符号为长方形,用两条横线把长方形分成上、中、下线把长方形分成上、中、下3个区域(下面个区域(下面两个区域可以省略)两个区域可以省略)n为类命名时应该遵守以下几条准则准则:n(1)使用标
19、准术语n(2)使用具有确切含义的名词n(3)必要时用名词短语作为名字2 定义属性定义属性nUML描述属性的语法如下:描述属性的语法如下:n可见性可见性 属性名:类型名属性名:类型名= =初值初值 性质串性质串 n属性的可见性(即可访问性)通常有下述3种:种:n公有的(public) (+)n私有的(private) (-)n保护的(protected)()(#)n类型名表示该属性的数据类型,它可以是基本数据类型,也可以是用户自定义的类型n用花括号括起来的性质串明列出该属性所有可能的取值n例:-管理员:管理员:String“未定未定”3 定义服务定义服务nUML描述操作的语法格式如下:描述操作的
20、语法格式如下:n可见性可见性 操作名操作名(参数表参数表):返回值类型:返回值类型性质串性质串n操作可见性的定义方法与属性相同。n参数表是用逗号分隔的形式参数的序列。描述一个参数的语法如下:n参数名:类型名默认值n当操作的调用者未提供实在参数时,该参数就使用默认值。9.4.2 表示关系的符号表示关系的符号n类与类之间通常有关联、泛化(继承)、依关联、泛化(继承)、依赖赖和和细化细化等4种关系种关系n1 关联关联n关联表示两个类的对象之间存在某种语义上的联关联表示两个类的对象之间存在某种语义上的联系系9.4.2 表示关系的符号表示关系的符号n普通关联:普通关联:n最常见的关联关系,只要在类与类之间存最常见的关联关系,只要在类与类之间存在连接关系就可以用普通关联表示。在连接关系就可以用普通关联表示。n例如,作家使用计算机,我们就认为在作家和计算机之间存在某种语义连接,因此在类图中应该在作家类和计算机类之间建立关 联关系黑三角表示关联方向黑三角表示关联方向(2)关联的角色关联的角色在任何关联中都会涉及到参与此关联的对象所扮演的角色, 在某些情况下显式标显式标明角色明角色名有助于别人理解类图例:一个人与另一个人结婚,必然一个人扮演丈夫的角色, 另一个人扮演妻子的角色。如果没有显式标出角色名,则意 味着用类名作为角色名。