第2章面向对象方法学导论教材课程

上传人:yulij****0329 文档编号:139001091 上传时间:2020-07-19 格式:PPT 页数:64 大小:1.01MB
返回 下载 相关 举报
第2章面向对象方法学导论教材课程_第1页
第1页 / 共64页
第2章面向对象方法学导论教材课程_第2页
第2页 / 共64页
第2章面向对象方法学导论教材课程_第3页
第3页 / 共64页
第2章面向对象方法学导论教材课程_第4页
第4页 / 共64页
第2章面向对象方法学导论教材课程_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《第2章面向对象方法学导论教材课程》由会员分享,可在线阅读,更多相关《第2章面向对象方法学导论教材课程(64页珍藏版)》请在金锄头文库上搜索。

1、第2章 面向对象方法学引论,本章概要,传统的软件工程方法学曾经给软件产业带来巨大进步,部分地缓解了软件危机,使用这种方法学开发的许多中、小规模软件项目都获得了成功。但是,人们也注意到当把这种方法学应用于大型软件产品的开发时,似乎很少取得成功。 在20世纪60年代后期出现的面向对象编程语言Simula-67中首次引入了类和对象的概念,自20世纪80年代中期起,人们开始注重面向对象分析和设计的研究,逐步形成了面向对象方法学。到了20世纪90年代,面向对象方法学已经成为人们在开发软件时首选的范型。面向对象技术已成为当前最好的软件开发技术。,2.1 面向对象方法学概述,2.1.1 面向对象方法学导论

2、面向过程程序设计: 根据计算机的要求,围绕算法进行程序设计。 开发软件的方法与过程不同于人类认识世界解决问题时习惯采用的方法与过程,因此使得描述问题的问题空间与实现解法的解空间在结构上明显不同。,人类习惯的解决问题的方法,让我们观察一个日常生活中常见的事例: 一位厨师的头发长了需要理发,他会走进理发馆,告诉理发师要理什么发式。也就是说,为了解决头发过长的问题,厨师只需向理发师提出要求,告诉他“做什么”(即,理什么发式),并不需要告诉理发师“怎样做”,理发师自己知道第一步做什么,第二步做什么。类似地,理发师肚子饿了,只需走进餐馆点好自己要吃的饭菜,厨师自己知道该怎样做,并不需要顾客告诉他做菜的具

3、体步骤,事实上,顾客无需知道做菜的具体步骤。,2.1.2 面向对象方法概述,面向对象方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称求解域)在结构上尽可能一致。,面向对象方法具有下述4个要点:, 认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。 把所有对象都划分成各种对象类(简称为类,Class),每个对象类都定义了一组数据和一组方法。 按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类

4、组成一个层次结构的系统(也称为类等级)。 对象彼此之间仅能通过传递消息互相联系。,2.1.3 面向对象方法的主要优点, 与人类习惯的思维方法比较一致 面向对象方法学的基本原则是按照人们习惯的思维方式建成立问题域的模型,开发出尽可能直观、自然地表现求解方法的软件系统。面向对象的软件系统中广泛使用的对象,是对客观世界中实体的抽象。 稳定性好 面向对象方法基于构造问题领域的对象模型,以对象为中心构造软件系统。它的基本作法是用对象模拟问题领域中的实体,以对象间的联系刻画实体间的联系。因此,以对象为中心构造的软件系统也是比较稳定的。, 可重用性好 面向对象的软件技术在利用可重用的软件成分构造新的软件系统

5、时,有很大的灵活性。其中,有两种方法可以重复使用一个对象类:一种方法是创建该类的实例,从而直接使用它;另一种方法是从它派生出一个满足当前需要的新类。 较易开发大型软件产品 可维护性好 面向对象还有如下突出优点: 面向对象软件稳定性比较好; 面向对象的软件比较容易修改; 面向对象的软件比较容易理解; 易于测试和调试。,2.1.4 喷泉模型,喷泉模型体现了面向对象方法所固有的迭代和无间隙的特征。 迭代是软件开发过程中普遍存在的一种内在属性。即,软件开发活动需多次重复,每次重复都从分析开始,依次进行设计、实现,逐渐细化,演化出最终系统。,图2.1喷泉模型,2.2 面向对象的概念,2.2.1 对象 在

6、应用领域中有意义的,与所要解决 的问题有关系的任何事物都可以作为对象(Object),它既可以是具体的物理实体的抽象,也可以是人为的概念,或者是任何有明确边界和意义的东西。例如,一名职工、一家公司、一个窗口、一座图书馆、一本图书、贷款、借款等等,都可以作为一个对象 。 总之,对象是对问题域中某个实体的抽象,设立某个对象就反映了软件系统具有保存有关它的信息并且与它进行交互的能力。,面向对象方法学中的对象: 是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。 对象可以作的操作表示它的动态行为,通常称为服务或方法。,对象的形象表示(举例),一个对象很像一台录音机。当在软

7、件中使用一个对象的时候,只能通过对象与外界的界面来操作它。对象与外界的界面也就是该对象向公众开放的操作,例如,C+ 语言中对象的公有的(Public)成员函数。一个对象好象是一个黑盒子,表示它内部状态的数据和实现各个操作的代码及局部数据,都被封装在这个黑盒子内部,在外面是看不见的,更不能从外面去访问或修改这些数据或代码。,对象的形象表示:,图2.2 对象的形象表示,对象的定义,人们从不同角度给出对象的不同定义: 1、定义1:对象是具有相同状态的一组操作的集合。 2、定义2:对象是对属性值和操作的封装。 3、定义3:对象 =ID,MS,DS,MI 其中,ID是对象的标识或名字,MS是对象中的操作

8、集合,DS是对象的数据结构,MI是对象受理的消息名集合(即对外接口),注意:这个定义是一个形式化的定义。,总之,对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体,这个封装体有可以唯一地标识它的名字,而且向外界提供一组服务(即公有的操作)。对象中的数据表示对象的状态,一个对象的状态只能由该对象本身的操作来改变。,对象的特点, 以数据为中心,操作是为数据服务的。 对象是主动的,为了完成某个操作,不能从外部直接加工它的私有数据,而是必须通过它的公有接口向对象发消息,请求它执行它的某个操作,处理它的私有数据。(举例:厨师与理发匠)。 实现了数据封装。对象好像是一只黑盒子,它的私的数据完全被

9、封装在盒子内部,对外是隐藏的、不可见的,对私有数据的访问或处理只能通过公有的操作进行。抽象数据类型的概念,无须知道数据的具体结构以及实现操作的算法。, 本质上具有并行性。不同对象各自独立地处理自身的数据,彼此通过发消息传递信息完成通信。因此,对于不同的对象来说,本质上具有并行工作的属性。 模块独立性好。对象是面向对象的软件的基本模块。,2.2.2 其他概念, 类(class) “类”就是对具有相同数据和相同操作的一组相似对象的定义,也就是说,类是对具有相同属性和行为的一个或多个对象的描述。 例如:张三、李四、王五等,虽说每个人职业、性格、爱好、特长等等各有不同。但是,他们的基本特征是相似的,都

10、是黄皮肤、黑头发、黑眼睛,于是人们把他们统称为“中国人”。, 实例(instance) “实例”是由某个特定的类所描述的一个具体的对象。 “对象”这个术语,既可以指一个具体的对象,也可以泛指一般的对象,而“实例”这个术语,必然是指一个具体的对象。 C+中,要定义一个对象或实例,必须先建立一个这类对象的类。, 消息(message): 要求某个对象执行其中某个操作的规格的说明,一个消息由下述三部分组成: 接收消息的对象; 消息选择符(也称为消息名); 零个或多个变元。 例如 : MyCircle.Show(GREEN) ; 其中: MyCircle是Circle类的对象,也是 Circle类的一

11、个实例。 Show是消息选择符(即消息名); GREEN是消息的变元。,方法(method) 方法,就是对象所能执行的操作,也就是类中所定义的服务。 在C+ 语言中把方法称为成员函数。通常,一个函数对应一个操作,实现一个功能。 例如:为了MYCircle这个对象能够显示一个圆,在Circle类中必须定义成员函数Show(int color)。, 属性(attribute) 属性,就是类中所定义的数据,它是对客观世界实体所具有的性质的抽象。 例如:Circle类中定义代表圆心坐标、半径、颜色等属性。 在C+ 语言中把属性称为数据成员。, 封装性(encapsulation) 从字面上理解,所谓封

12、装就是把某个事物包起来,使外界不知道该事物的具体内容把数据和实现操作的代码集中起来放在对象内部。使用一个对象的时候,只需知道它向外界提供的接口形式而无须知道它的数据结构细节和实现操作的算法 。 实现封装的条件 : 有一个清楚的边界。 有确定的接口(这些接口就是对象可以接受的消息,用户只能通过向对象发送消息来使用它)。 受保护的内部实现。, 继承(inheritance) 继承是指能够直接获得已有的性质和特征,而不必重复定义它们。子类自动地共享基类中定义的数据和方法的机制。 (举例:父与子) 继承具有传递性,如果类C继承类B,类B继承类A,则类C继承类A。一个类除了具有该类所描述的性质外,还具有

13、类等级中该类上层全部基类描述的一切性质。,继承机制的原理,图2.4 实现继承机制的原理,多态性(polymorphism ) 多态性是指子类对象可以像父类对象那样使用。同样的消息既可以发送给父类对象也可以发送给子类对象。 在类等级的不同层次中,相同的消息,被不同的类(属同一簇)的对象接收,产生了不同的行为。 在C+ 语言中,多态性是通过虚函数来实现的。虚函数机制使得程序员能在一个类等级中使用相同函数的多个不同版本,在运行时刻才根据接收消息的对象所属于的类,决定到底执行哪个特定的版本,这称为动态联编,也叫滞后联编。,重载(overloading)(有两种重载) 函数重载是指在同一作用域内的若干个

14、参数特征不同的函数可以使用相同的函数名字; 运算符重载是指同一个运算符可以施加于不同类型的操作数上面。 在C+ 语言中函数重载是通过静态联编实现的,也就是在编译时根据函数变元的个数和类型 ,决定到底使用函数的哪个实现代码;对于重载的运算符,同样是在编译时根据被操作数的类型,决定使用该算符的哪种语义。 如: cout“2”; 表示向屏幕输出字符串2 x2; 表示将x中的二进制左移2位,熟悉并使用类,C+标准库提供了string类, string类的属性是一个字符串str,同名函数string是用来初始化符串,另外3个成员函数用来对属性str进行操作。 当定义了一个对象后,这 个对象可以通过这些成

15、员函数展现自身的特性。,使用string类的例子,#include #include using namespace std; void main( ) string str1(We are here!); string str2; coutstr2;/输入 一个单词给对象str2 coutlength of str2 isstr2.size()endl; string newstr=str2.substr(3,1);/从 str2的第3位开始截取1个字符 coutnewstr=newstrendl; int i=str1.find(“are”,0);/从字符串str1的位置0开始检索are

16、couti=iendl; ,注意:C+规定符串的计数是从零开始的,2.3 面向对象建模,所谓模型,由一组图示符号和组织这些符号的规则组成,利用它们来定义和描述问题域中的术语和概念。模型是一种思考工具,利用这种工具可以把知识规范地表示出来。 为了开发复杂的软件系统,系统分析员应该抽象出目标系统的特性,使用精确的表示方法构造系统的模型,并在设计过程中逐渐把和实现有关的细节加进模型中,直至最终用程序实现模型。,用面向对象方法开发软件,通常需要建立三种形式的模型,它们分别是: 描述系统数据结构的对象模型(基本、核心) 描述系统控制结构的动态模型 描述系统功能的功能模型 一个典型的软件系统组合了上述三方面内容:它使用数据结构(对象模型),执行操作(动态模型),并且完成数据值的变化(功能模

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号