面向对象方法学导论.ppt
《面向对象方法学导论.ppt》由会员分享,可在线阅读,更多相关《面向对象方法学导论.ppt(64页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第2章 面向对象方法学引论本章概要 传统的软件工程方法学曾经给软件产业带来巨大进步,部分地缓解了软件危机,使用这种方法学开发的许多中、小规模软件项目都获得了成功。但是,人们也注意到当把这种方法学应用于大型软件产品的开发时,似乎很少取得成功。在20世纪60年代后期出现的面向对象编程语言Simula-67中首次引入了类和对象的概念,自20世纪80年代中期起,人们开始注重面向对象分析和设计的研究,逐步形成了面向对象方法学。到了20世纪90年代,面向对象方法学已经成为人们在开发软件时首选的范型。面向对象技术已成为当前最好的软件开发技术。2.1 面向对象方法学概述 2.1.1 面向对象方法学导论 面向过
2、程程序设计:根据计算机的要求,围绕算法进行程序设计。开发软件的方法与过程不同于人类认识世界解决问题时习惯采用的方法与过程,因此使得描述问题的问题空间与实现解法的解空间在结构上明显不同。人类习惯的解决问题的方法 让我们观察一个日常生活中常见的事例:一位厨师的头发长了需要理发,他会走进理发馆,告诉理发师要理什么发式。也就是说,为了解决头发过长的问题,厨师只需向理发师提出要求,告诉他“做什么”(即,理什么发式),并不需要告诉理发师“怎样做”,理发师自己知道第一步做什么,第二步做什么。类似地,理发师肚子饿了,只需走进餐馆点好自己要吃的饭菜,厨师自己知道该怎样做,并不需要顾客告诉他做菜的具体步骤,事实上
3、,顾客无需知道做菜的具体步骤。面向对象程序设计方法模拟人类习惯的解题方法,用对象分解取代功能分解,也就是把程序分解成许多对象,不同对象之间通过发消息向对方提出服务要求,接受消息的对象主动完成指定功能,程序中的所有对象分工协作,共同完成整个程序的功能。面向对象程序设计方法模拟人类习惯2.1.2 面向对象方法概述 面向对象方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称求解域)在结构上尽可能一致。面向对象方法具有下述4个要点:认为客观世界是由各种对象组成的,
4、任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。把所有对象都划分成各种对象类(简称为类,Class),每个对象类都定义了一组数据和一组方法。按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。对象彼此之间仅能通过传递消息互相联系。2.1.3 面向对象方法的主要优点 与人类习惯的思维方法比较一致 面向对象方法学的基本原则是按照人们习惯的思维方式建成立问题域的模型,开发出尽可能直观、自然地表现求解方法的软件系统。面向对象的软件系统中广泛使用的对象,是对客观世界中实体的抽象。稳定性好 面向对象方法基于构造问题领域的对象模型,以
5、对象为中心构造软件系统。它的基本作法是用对象模拟问题领域中的实体,以对象间的联系刻画实体间的联系。因此,以对象为中心构造的软件系统也是比较稳定的。可重用性好 面向对象的软件技术在利用可重用的软件成分构造新的软件系统时,有很大的灵活性。其中,有两种方法可以重复使用一个对象类:一种方法是创建该类的实例,从而直接使用它;另一种方法是从它派生出一个满足当前需要的新类。较易开发大型软件产品 可维护性好 面向对象还有如下突出优点:面向对象软件稳定性比较好;面向对象的软件比较容易修改;面向对象的软件比较容易理解;易于测试和调试。2.1.4 喷泉模型 喷泉模型体现了面向对象方法所固有的迭代和无间隙的特征。迭代
6、是软件开发过程中普遍存在的一种内在属性。即,软件开发活动需多次重复,每次重复都从分析开始,依次进行设计、实现,逐渐细化,演化出最终系统。图2.1喷泉模型2.2 面向对象的概念 2.2.1 对象 在应用领域中有意义的,与所要解决 的问题有关系的任何事物都可以作为对象(Object),它既可以是具体的物理实体的抽象,也可以是人为的概念,或者是任何有明确边界和意义的东西。例如,一名职工、一家公司、一个窗口、一座图书馆、一本图书、贷款、借款等等,都可以作为一个对象。总之,对象是对问题域中某个实体的抽象,设立某个对象就反映了软件系统具有保存有关它的信息并且与它进行交互的能力。面向对象方法学中的对象:是由
7、描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。对象可以作的操作表示它的动态行为,通常称为服务或方法。对象的形象表示(举例)一个对象很像一台录音机。当在软件中使用一个对象的时候,只能通过对象与外界的界面来操作它。对象与外界的界面也就是该对象向公众开放的操作,例如,C+语言中对象的公有的(Public)成员函数。一个对象好象是一个黑盒子,表示它内部状态的数据和实现各个操作的代码及局部数据,都被封装在这个黑盒子内部,在外面是看不见的,更不能从外面去访问或修改这些数据或代码。对象的形象表示:图2.2 对象的形象表示对象的定义 人们从不同角度给出对象的不同定义:1、定义1:
8、对象是具有相同状态的一组操作的集合。2、定义2:对象是对属性值和操作的封装。3、定义3:对象=ID,MS,DS,MI 其中,ID是对象的标识或名字,MS是对象中的操作集合,DS是对象的数据结构,MI是对象受理的消息名集合(即对外接口),注意:这个定义是一个形式化的定义。总之,对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体,这个封装体有可以唯一地标识它的名字,而且向外界提供一组服务(即公有的操作)。对象中的数据表示对象的状态,一个对象的状态只能由该对象本身的操作来改变。对象的特点 以数据为中心,操作是为数据服务的。对象是主动的,为了完成某个操作,不能从外部直接加工它的私有数据,而是
9、必须通过它的公有接口向对象发消息,请求它执行它的某个操作,处理它的私有数据。(举例:厨师与理发匠)。实现了数据封装。对象好像是一只黑盒子,它的私的数据完全被封装在盒子内部,对外是隐藏的、不可见的,对私有数据的访问或处理只能通过公有的操作进行。抽象数据类型的概念,无须知道数据的具体结构以及实现操作的算法。本质上具有并行性。不同对象各自独立地处理自身的数据,彼此通过发消息传递信息完成通信。因此,对于不同的对象来说,本质上具有并行工作的属性。模块独立性好。对象是面向对象的软件的基本模块。2.2.2 其他概念 类(class)“类”就是对具有相同数据和相同操作的一组相似对象的定义,也就是说,类是对具有
10、相同属性和行为的一个或多个对象的描述。例如:张三、李四、王五等,虽说每个人职业、性格、爱好、特长等等各有不同。但是,他们的基本特征是相似的,都是黄皮肤、黑头发、黑眼睛,于是人们把他们统称为“中国人”。实例(instance)“实例”是由某个特定的类所描述的一个具体的对象。“对象”这个术语,既可以指一个具体的对象,也可以泛指一般的对象,而“实例”这个术语,必然是指一个具体的对象。C+中,要定义一个对象或实例,必须先建立一个这类对象的类。消息(message):要求某个对象执行其中某个操作的规格的说明,一个消息由下述三部分组成:接收消息的对象;消息选择符(也称为消息名);零个或多个变元。例如:My
11、Circle.Show(GREEN);其中:MyCircle是Circle类的对象,也是 Circle类的一个实例。Show是消息选择符(即消息名);GREEN是消息的变元。方法(method)方法,就是对象所能执行的操作,也就是类中所定义的服务。在C+语言中把方法称为成员函数。通常,一个函数对应一个操作,实现一个功能。例如:为了MYCircle这个对象能够显示一个圆,在Circle类中必须定义成员函数Show(int color)。属性(attribute)属性,就是类中所定义的数据,它是对客观世界实体所具有的性质的抽象。例如:Circle类中定义代表圆心坐标、半径、颜色等属性。在C+语言中
12、把属性称为数据成员。封装性(encapsulation)从字面上理解,所谓封装就是把某个事物包起来,使外界不知道该事物的具体内容把数据和实现操作的代码集中起来放在对象内部。使用一个对象的时候,只需知道它向外界提供的接口形式而无须知道它的数据结构细节和实现操作的算法。实现封装的条件:有一个清楚的边界。有确定的接口(这些接口就是对象可以接受的消息,用户只能通过向对象发送消息来使用它)。受保护的内部实现。继承(inheritance)继承是指能够直接获得已有的性质和特征,而不必重复定义它们。子类自动地共享基类中定义的数据和方法的机制。(举例:父与子)继承具有传递性,如果类C继承类B,类B继承类A,则
13、类C继承类A。一个类除了具有该类所描述的性质外,还具有类等级中该类上层全部基类描述的一切性质。继承机制的原理图2.4 实现继承机制的原理 多态性(polymorphism)多态性是指子类对象可以像父类对象那样使用。同样的消息既可以发送给父类对象也可以发送给子类对象。在类等级的不同层次中,相同的消息,被不同的类(属同一簇)的对象接收,产生了不同的行为。在C+语言中,多态性是通过虚函数来实现的。虚函数机制使得程序员能在一个类等级中使用相同函数的多个不同版本,在运行时刻才根据接收消息的对象所属于的类,决定到底执行哪个特定的版本,这称为动态联编,也叫滞后联编。重载(overloading)(有两种重载
14、)函数重载是指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字;运算符重载是指同一个运算符可以施加于不同类型的操作数上面。在C+语言中函数重载是通过静态联编实现的,也就是在编译时根据函数变元的个数和类型,决定到底使用函数的哪个实现代码;对于重载的运算符,同样是在编译时根据被操作数的类型,决定使用该算符的哪种语义。如:cout“2”;表示向屏幕输出字符串2 x2;表示将x中的二进制左移2位熟悉并使用类熟悉并使用类 C+C+标准库提供了标准库提供了标准库提供了标准库提供了stringstring类,类,类,类,string string类的属性是一类的属性是一类的属性是一类的属性是一
15、个字符串个字符串个字符串个字符串strstr,同名函数,同名函数,同名函数,同名函数stringstring是用来初始化符串,是用来初始化符串,是用来初始化符串,是用来初始化符串,另外另外另外另外3 3个成员函数用来对个成员函数用来对个成员函数用来对个成员函数用来对属性属性属性属性strstr进行操作。进行操作。进行操作。进行操作。当定义了一个对象后,这当定义了一个对象后,这当定义了一个对象后,这当定义了一个对象后,这 个个个个对象可以通过这些成员函对象可以通过这些成员函对象可以通过这些成员函对象可以通过这些成员函数展现自身的特性。数展现自身的特性。数展现自身的特性。数展现自身的特性。stri
16、ngstringstrstrstring()string()find()find()size()size()substr()substr()使用使用stringstring类的例子类的例子#include#include#include#include using namespace std;using namespace std;void main()void main()string str1(We are here!);string str1(We are here!);string str2;string str2;coutstr10str111,str1endl;coutstr10s
17、tr111,str1endl;coutplease input a word:;coutstr2;/cinstr2;/输入输入输入输入 一个单词给对象一个单词给对象一个单词给对象一个单词给对象str2str2coutlength of str2 isstr2.size()endl;coutlength of str2 isstr2.size()endl;string newstr=str2.substr(3,1);/string newstr=str2.substr(3,1);/从从从从 str2 str2的第的第的第的第3 3位开始截取位开始截取位开始截取位开始截取1 1个字符个字符个字符个
18、字符coutnewstr=newstrendl;coutnewstr=newstrendl;int i=str1.find(“are”,0);/int i=str1.find(“are”,0);/从字符串从字符串从字符串从字符串str1str1的位置的位置的位置的位置0 0开始检索开始检索开始检索开始检索arearecouti=iendl;couti=iendl;注意:注意:注意:注意:C+C+规定符串的计数是从零开始的规定符串的计数是从零开始的规定符串的计数是从零开始的规定符串的计数是从零开始的2.3 面向对象建模 所谓模型,由一组图示符号和组织这些符号的规则组成,利用它们来定义和描述问题域
19、中的术语和概念。模型是一种思考工具,利用这种工具可以把知识规范地表示出来。为了开发复杂的软件系统,系统分析员应该抽象出目标系统的特性,使用精确的表示方法构造系统的模型,并在设计过程中逐渐把和实现有关的细节加进模型中,直至最终用程序实现模型。用面向对象方法开发软件,通常需要建立三种形式的模型,它们分别是:描述系统数据结构的对象模型(基本、核心)描述系统控制结构的动态模型 描述系统功能的功能模型 一个典型的软件系统组合了上述三方面内容:它使用数据结构(对象模型),执行操作(动态模型),并且完成数据值的变化(功能模型)。2.4 对象模型 对象模型是上述三种模型中最重要、最基本、最核心的模型,是表示静
20、态的、结构化的系统的“数据”性质。它是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。面向对象方法强调围绕对象而不是围绕功能来构造系统。对象模型为建立动态模型和功能模型,提供了实质性的框架。2.4.1 类图的基本符号 定义类 UML中类的图形符号为长方形,用两条横线把长方形分成上、中、下3个区域(下面两个区域可省略),3个区域分别放类的名字、属性和服务。2.4.1 2.4.1 类图的基本符号类图的基本符号类命名时应遵守以下几条准则:类命名时应遵守以下几条准则:类命名时应遵守以下几条准则:类命名时应遵守以下几条准则:使用标准术语。使用标准术语。使用标准术语。使用标准术语
21、。使用具有确切含义的名词。使用具有确切含义的名词。使用具有确切含义的名词。使用具有确切含义的名词。必要时用名词短语作名字。必要时用名词短语作名字。必要时用名词短语作名字。必要时用名词短语作名字。总之,名字应该是富于描述性的、简洁的而且无二义总之,名字应该是富于描述性的、简洁的而且无二义总之,名字应该是富于描述性的、简洁的而且无二义总之,名字应该是富于描述性的、简洁的而且无二义性的。性的。性的。性的。2.4.1 2.4.1 类图的基本符号类图的基本符号定义属性定义属性定义属性定义属性UMLUMLUMLUML描述属性的语法格式如下:描述属性的语法格式如下:描述属性的语法格式如下:描述属性的语法格式
22、如下:可见性可见性可见性可见性 属性名属性名属性名属性名:类型名类型名类型名类型名=初值初值初值初值 性质串性质串性质串性质串 属性的可见性(即可访问性)通常有下述属性的可见性(即可访问性)通常有下述属性的可见性(即可访问性)通常有下述属性的可见性(即可访问性)通常有下述3 3 3 3种:种:种:种:公有的(公有的(公有的(公有的(publicpublicpublicpublic)用加号)用加号)用加号)用加号(+)(+)(+)(+)表示表示表示表示私有的(私有的(私有的(私有的(privateprivateprivateprivate)用减号)用减号)用减号)用减号()表示表示表示表示和保护
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 方法 导论
限制150内