C课件第七章面向对象程序设计概述.ppt

上传人:牧羊曲112 文档编号:6504395 上传时间:2023-11-07 格式:PPT 页数:29 大小:1.07MB
返回 下载 相关 举报
C课件第七章面向对象程序设计概述.ppt_第1页
第1页 / 共29页
C课件第七章面向对象程序设计概述.ppt_第2页
第2页 / 共29页
C课件第七章面向对象程序设计概述.ppt_第3页
第3页 / 共29页
C课件第七章面向对象程序设计概述.ppt_第4页
第4页 / 共29页
C课件第七章面向对象程序设计概述.ppt_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《C课件第七章面向对象程序设计概述.ppt》由会员分享,可在线阅读,更多相关《C课件第七章面向对象程序设计概述.ppt(29页珍藏版)》请在三一办公上搜索。

1、第七章 面向对象程序设计概述,要点:面向对象程序设计的基本思想;对象、类、消息、抽象性、封装性、继承性、多态性的基本概念。,本章内容,7.1 面向对象的思想7.2 面向对象程序设计的基本概念7.3 面向对象程序设计的语言,7.1 面向对象的思想,7.1.1 结构化程序设计回顾7.1.2 面向对象的思想7.1.3 结构化和面向对象的比较,结构化程序设计回顾(1),结构化程序设计是为了解决早期计算机程序的难于阅读、理解、调试、维护和扩充,以及开发周期长、不易控制程序的质量等问题而提出来的,它的产生和发展奠定了软件工程的基础。结构化程序设计的基本思想是:自顶向下,逐步求精。将整个程序结构划分成若干个

2、功能相对独立的模块,模块之间的联系尽可能简单;每个模块用顺序、选择、循环三种基本结构来实现;每个模块只有一个入口和一个出口。结构化程序设计有很多优点:各模块可以分别编程,使程序易于阅读、理解、调试和修改;方便新功能模块的扩充;功能独立的模块可以组成子程序库,有利于实现软件复用等。,结构化程序设计回顾(2),结构化程序设计方法以解决问题的过程作为出发点,其方法是面向过程的。它把程序定义为“数据结构+算法”,程序中数据与处理这些数据的算法(过程)是分离的。这样,对不同的数据结构作相同的处理,或对相同的数据结构作不同的处理,都要使用不同的模块,从而降低了程序的可维护性和可复用性。同时,由于这种分离,

3、导致了数据可能被多个模块使用和修改,难于保证数据的安全性和一致性。因此,对于小型程序和中等复杂程度的程序来说,它是一种较为有效的技术,但对于复杂的、大规模的软件的开发来说,它就不尽如人意了。通过上面的分析可以看出:结构化程序设计的核心思想是功能的分解,思想的特点是将数据结构与过程分离,着重点在过程。用这种方法开发的软件可维护性和可复用性差。,面向对象的思想(1),面向对象程序设计是在结构化程序设计的基础上发展起来的,它吸取了结构化程序设计中最为精华的部分,有人称它是“被结构化了的结构化程序设计”。在面向对象程序设计中,对象是构成软件系统的基本单元,并从相同类型的对象中抽象出一种新型的数据类型类

4、,对象只是类的实例。类的成员中不仅包含有描述类对象属性的数据,还包含对这些数据进行处理的程序代码(这些程序代码被称为对象的行为或操作)。将对象的属性和行为放在一起作为一个整体的方法称为封装,它将对象的大部分行为的实现隐蔽起来,仅通过一个可控的接口与外界交互。面向对象程序设计提供了类的继承性,可通过对一个被称为基类的类增添不同的特性来派生出多种被称为派生类的特殊类,从而使得类与类之间建立了层次结构关系,为软件复用提供了有效的途径。,面向对象的思想(2),面向对象程序设计支持多态性。多态性与继承性相结合,使不同结构的对象以各自不同的方式响应同一个消息。软件系统中,对象与对象之间存在着一定的联系,这

5、种联系通过消息的传递来实现。在面向对象程序设计中,消息表现为一个对象对另一个对象的行为的调用。通过上面的分析可以看出:面向对象程序设计的核心思想是数据的分解,着重点放在被操作的数据上而不是实现操作的过程上。它把数据及其操作作为一个整体对待,数据本身不能被外部过程直接存取。思想的特点是程序一般由类的定义和类的使用两部分组成,主程序中定义各个对象并规定它们之间传递消息的规律,程序中的一切操作都通过向对象发送消息来实现,对象接收到消息后,调用有关对象的行为来完成相应的操作。用这种方法开发的软件可维护性和可复用性高。,结构化 面向对象,结构化和面向对象的比较(1),1、解决了早期计算机程序难于阅读、理

6、解、调试、维护和扩充、开发周期长、不易控制程序的质量等问题。,1、解决了结构化方法中数据与算法分离带来的可维护性、可复用性、数据的安全性和一致性差等问题。,2、结构化的核心思想是功能的分解,将数据结构与过程分离,设计重点放在过程,2、面向对象的核心思想是数据的分解,设计重点是数据而不是过程。数据及其操作作为一个整体,数据不能被外部过程直接存取,3、程序由模块构成,每个模块用顺序、选择、循环三种基本结构来实现;模块单入口单出口,程序的功能是通过过程对数据的直接操作而实现的,3、程序由类的定义和类的使用两部分组成,主程序中定义各个对象并规定它们之间传递消息的规律,程序中的一切操作都通过向对象发送消

7、息来实现,,结构化和面向对象的比较(2),面向过程的方法 即程序=数据+操作(对数据和操作不进行分类),面向对象的方法 即程序=对象+对象而对象=数据+操作(对数据和操作进行分类),程序可以看成是一系列对数据进行操作的过程。目前有两种组织数据和操作的方法:,7.2 面向对象的基本概念,7.2.1 对象和类 7.2.2 消息 7.2.3 抽象性 7.2.4 封装性 7.2.5 继承性7.2.6 多态性,对象和类现实世界中(1),现实世界中的对象是现实世界中的实体,每个对象都有一个用于与其他对象相区别的名字。具有某些特征,称它为属性或状态。有一组操作,每一个操作决定对象的一种行为即对象能干什么。对

8、象的状态只能被自身的行为所改变。对象之间以消息传递的方式相互通信。,座位数,刹车,车轮数,颜色,发动机缸数,加速,类和对象是抽象和具体的关系。具有共同属性和行为的事物的抽象叫做类,同类中的事物可以具有不同的属性值。例如,右图中的车具有共同的属性,因此同属轿车类。同类的具有不同属性值的事物叫做该类的一个对象。例如,右图中每一部轿车,由于其属性值各不相同,故是轿车类的对象。,对象和类现实世界中(2),现实世界中的类是对一组具有共同属性和行为的对象的抽象。,对象和类面向对象设计中(1),面向对象程序设计中的对象是由描述其属性的数据和定义在数据上的一组操作组成的实体,是数据单元和过程单元的集合体。,如

9、学生李东是一个对象,他由描述他的特征的数据和他能提供的一组操作来表征:对象名:李东 属性:年龄:20,性别:男,身高:173厘米,体重:71公斤,特长:篮球运动,专业:计算机科学和技术 操作:回答有关自己的提问,计算机软件开发、维护、组网 这里的属性说明了李东这个对象的特征,操作说明了李东能做什么。,李东,对象和类面向对象设计中(2),面向对象程序设计中的类是一组有相同属性结构和操作行为对象的抽象。类由类名区分,如人、树等。,如学生是对学生对象抽象所形成的类,它由学生共同的属性和操作来表征:类名:学生 属性:年龄,性别,身高,体重,特长,专业等.操作:回答有关针对个人的提问,从事本专业的简单工

10、作 这里的属性说明了学生共有的特征,但没有具体的属性值,操作说明了学生能做什么。,他们都是学生,李东是其中之一,对象和类面向对象设计中(3),类是创建对象的样板,它没有具体的属性值和具体的操作,以它为样板创建的对象才有具体的值和操作。一个对象是类的实例,有了类才能创建对象。,类名:学生属性:年龄,性别,身高,体重,特长,专业操作:回答提问,从事本专业的简单工作当把类的各属性赋予实际李东相关的值,同时给这个具体化了的类命名李东后,就用学生这个类创建了一个对象李东。,年龄20,性别 男,身高173厘米,体重71公斤,特长篮球运动,专业计算机科学和技术,现在就不能代表在座的所有学生了,故取名李东,对

11、象和类面向对象设计中(4),特别要指出的是,在面向对象程序设计中,类只出现在源程序代码中,不会出现在正在内存运行的程序中,换句话说,类只是在编译时存在,为对象的创建提供样板。对象作为类的实例出现在内存运行的程序中,占有内存空间,对象是运行时存在的实体。所以类实际上是一个新的数据类型,要使用它时,要在源程序中说明,而说明部分的代码是不在内存中运行的。在内存中运行的是类的对象,对象在内存中分配空间并完成计算任务,对象通过类来定义。所以,必须严格区分说明和定义两个概念。在C+中,把描述类的属性的数据称为数据成员,把描述行为的操作称为成员函数。,对象和类对象的状态,对象能够独立存在于现实世界中的原因,

12、是每个对象都有各自的特征,这些特征就是对象的状态。对象的状态用属性的值来表征,是所有静态属性和这些属性的动态值的总和。面向对象程序设计中对象的状态可以是初等的数据类型,如整型、实型、字符型等,也可以是用户自定义的数据类型,如结构性、枚举型等,还可以是对象,如人的状态除姓名等外,可能有家庭成员,而家庭成员是一个对象。,对象和类类的确定和划分,确定和划分类的重要性:面向对象技术是将系统分解成若干对象,对象之间的相互作用构成了整个系统。设计类而不是对象可以避免重复编码,类只需编码一次,就可以创建所有的对象。确定和划分类的一般原则:寻求系统中各事物的共性,将具有共性的那些事物划分成一个类。同一系统,达

13、到的目标不同,确定和划分的类也不相同。确定一个事物是否是一个类的步骤是:先判断该事物是否有一个以上的实例对象,有则可能是一个类。再判断该事物的对象是否有绝对的不同点,没有就可确定它是一个类。设计类时应有明确的标准,设计的类应该是容易理解和使用的。,一个学校系统,目标是教学管理,划分的类可能是教师、学生、教材、课程、教室等。目标是后勤管理,划分的类了能是宿舍、食堂、后勤工作人员、教室等。,不能指望一次性正确地确定和划分类,需要不断地对实际问题进行分析和整理,反复修改才能得出正确的结果。,消息(1),一个对象向另一个对象发出的请求称为消息,它是一个对象要求另一个对象执行某个操作的规格说明,通过消息

14、传递才能完成对象之间的相互请求和协作。通常把发送消息的对象称为消息的发送者或请求者,而把接收消息的对象称为消息的接受者或目标对象。接受者只有在接收到消息时,才能被激活,之后才能根据消息的要求调用某个方法完成相应的操作。所以,消息传递的实质是方法的调用。对象间传递的消息一般由三部分组成:接收对象名、调用的操作名和一个或多个参数。一个对象所能接受的消息及其所带的参数,就构成了该对象的外部接口。,学生请求教师辅导,学生向教师发出消息,教师接收到这个请求或消息后,才决定做什么辅导并执行辅导。,消息(2),消息的性质同一对象可以对不同形式的多个消息作出不同的响应。相同形式的消息可以传递给不同的对象,作出

15、的响应可以是不同的。消息的发送者可以不考虑具体的接受者,接受者可以响应,也可以不响应。消息分为公有消息和私有消息两类公有消息是由其他对象发送来的消息私有消息是自己向自己发送的消息。公有消息和私有消息的区分与消息传递要调用的方法有关,如果被调用的方法在对象类中使用public说明的,则为公有消息,如果使用private说明的,则为私有消息,私有消息只能发送调用属于自己的方法。类提供了完整地解决特定问题的能力,它描述了数据结构(对象属性)、算法(方法)和外部接口(消息)。对象通过外部接口接受它能识别的消息,按照自己的方式来解释这个消息并调用某个方法来完成对数据的处理,从而解决特定问题。,抽象性,面

16、向对象程序设计中的抽象是对一类对象进行分析和认识,经过概括,抽出一类对象的公共性质,并加以描述的过程。对一个事物的抽象一般包括两个方面:数据抽象和行为抽象。数据抽象是对对象的属性和状态的描述,使对象之间互区别的特征量的描述。行为抽象是对数据需要进行的处理的描述,它描述了一类对象的共同行为特征,使一类对象具有共同的功能,因此,又称行为抽象为代码抽象。类的数据成员的实质就是解决问题所需要的数据,它是数据抽象的结果;而成员函数的实质是完成对类中的这些数据进行加工处理的代码,它是类的行为,用行为抽象来描述。因此,抽象性是面向对象的核心。,设计绘制圆的程序:通过分析可知,圆是这个问题中唯一的事物。对于具

17、体的圆,有大有小,位置也不同,但用圆心的横、纵坐标和圆的半径就可以描述一个确定的圆,这就是对圆这个事物的数据抽象。由于抽象后没有具体的数据,它不能是一个具体的圆,只能代表一类事物圆类。要能画出圆,该程序还应有设置圆心位置、半径大小、绘制圆形的功能,这就是对圆这个事物的行为抽象。,封装性,封装就是把相关的数据和代码结合成一个有机的整体,形成数据和操作代码的封装体,对外只提供一个可以控制的接口,将内部的实现细节对外隐蔽,达到对数据访问权的合理控制。封装使程序中各部分之间的相互联系达到最小,提高了程序的安全性,简化了程序代码的编写工作,是面向对象程序设计的重要原则。面向对象程序设计的封装是通过对象来

18、实现的。对象中的不仅包含了数据成员,也包含了对这些数据进行处理的操作代码。成员可以根据需要定义为公有的或私有的,私有成员在对象中被隐蔽起来,对外拒绝访问;公有成员提供了对象与外界的接口,外界只能通过这个接口与对象发生联系。对象有效地实现了封装的两个目标:对数据和行为的结合及信息隐蔽。抽象和封装是互补的。一个好的抽象有利于封装,封装的实体则帮助维护抽象的完整性。抽象先于封装。,继承性概念(1),继承表达的是类之间的关系,使一类对象可以继承另一类对象的属性(数据)和行为(操作),从而,提供了通过现有的类创建新类的方法,也提高了软件复用的程度。继承关系的特征类间具有共享特征,包括数据和代码的共享。类

19、间具有差别或新增部分,包括非共享的数据和代码。类间具有层次关系。基类、派生类和类的层次 两个类A和B,若类B继承自类A,则称类B是由类A派生出来的,类B的对象就具有了类A的一切特征,包括数据和操作,此时称类A为基类(也称父类或超类),称类B为派生类(或子类)。,继承性概念(2),若类B由类A派生而来,而类C又由类B派生而来,则这三个类就形成了层次结构关系。此时,称类A是类B的直接基类,是类C的间接基类。类C不但继承了直接基类的所有特征,还继承了他的所有间接基类的特征。类的继承特性,给创建派生类提供了一种方法:创建派生类时,不必重新描述与基类相同的所有特征,只需让他继承基类的特征,然后描述与基类

20、不同的那些特征。也就是说,派生类的特征由继承来的和新添加的两部分组成,继承允许派生类使用基类的数据和操作,还可以拥有自己的数据和操作。继承机制提高了软件复用的程度,避免了公用代码的重复开发,减少了代码和数据的冗余,增强了类之间的一致性,减少了模块间的接口和界面,不仅使软件的质量得到了保证,也大大减轻了开发人员的工作量。,继承性继承的分类,继承有按继承源和按继承内容两种分类方法。从继承源上分单继承:每个派生类只有一个直接基类。如Windows操作系统中窗口之间的继承关系就是单继承。多继承:每个派生类有不止一个直接基类。如小孩的玩具车这个类,就同时继承了玩具类和车类的特征。从继承内容上分取代继承:

21、徒弟继承了师傅的所有技术,在需要师傅的地方由徒弟代替。包含继承:如讲桌继承了桌子的所有特征,但讲桌仍然是一张桌子。受限继承:如鸵鸟继承了鸟的一些特征,但不能继承鸟会飞的特征。特化继承:如猎犬具有一般犬的特征,但它比一般的犬具有更多的狩猎特征。,继承性继承与封装的关系,继承机制并不影响对象的封装性。封装的单位是对象,是将属于某个类的一个对象封装起来,使其操作和数据成为一个整体。如果该对象所在的类是派生类,这个派生类只要把从基类那里继承来的数据和操作与自己的数据和操作一并封装起来就行了,对象依然是一个封装好的整体,仍然只能通过消息传递与别的对象交互,不能直接调用。可见,在引入继承机制以后,无论对象

22、是基类的实例还是派生的实例,都是一个被封装的实体,继承并不影响封装性。继承和封装都提供了共享代码的手段,增加了代码的复用性。继承的代码共享是静态的,当派生类对象被激活以后,自动共享其基类中的代码,从而实现基类对象与派生类对象共享一段代码。而封装的代码共享是动态的,当在一个类中说明了一段代码,属于该类的多个实例在程序运行时共享这段代码。,多态性,多态性是面向对象程序设计的重要特性之一,是指不同的对象受到相同的消息时产生不同的操作行为,或者说同一个消息可以根据发送消息的对象的不同而采用多种不同的操作行为。例如,当用鼠标单击不同的对象时,各对象就会根据自己的理解作出不同的动作,产生不同的结果,这就是

23、多态性。简单地说,多态性就是一个接口,多种方式。C+语言支持两种多态性,即编译时多态和运行时多态。编译时的多态性是用函数的重载来实现的,运行时的多态性是用虚函数来实现的。这些内容将在相关章节中介绍。,7.3 面向对象程序设计的语言,面向对象程序设计语言的特征支持对象的概念;要求对象属于类;提供继承机制。,语言介绍,Simula67 Smalltalk Object-c EiffelC+Java,Simula67是20世纪60年代开发出来的,它提供了对象、类、继承等概念,提出了面向对象的术语,奠定了面向对象语言的基础。它的主要用途是进行建模仿真。,Smalltalk是20世纪70到80年代期间开

24、发出来的,是当今最有影响的面向对象语言之一。它包括了Simula的面向对象的所有特征,而且数据封装比Simula更严格。它经历了Smalltalk-72、Smalltalk-76和Smalltalk-80等几个版本,现在一般使用Smalltalk-80。,Object-c是在1983年以后开发的、对C进行扩充而形成的面向对象的语言,但它的语法更像Smalltalk。它的扩充主要是新引入的构造和运算符,用他们来完成类定义和消息传递。,Eiffel除了封装和继承以外,还提供了诸如参数化多态性、对方法实施前置条件和后置断言等面向对象的特征,使它在商业上具有很大的潜力。从理论上说,Eiffel是最好的面向对象的程序设计语言。,C+在C的基础上扩充了对面向对象的支持,既支持面向过程的设计方法,又支持面向对象的设计方法,还有丰富的开发环境,因而得到了广泛的应用。,Java语言是Sun公司1995年推出的适用于分布网络环境的面向对象语言,它采用了与C+语法基本一致的形式,将C+中与面向对象无关的部分去掉,使其语义成为纯面向对象的语言。它使应用程序独立于异构网络上的多种平台,具有能编译或解释执行、连接简单、支持语言级的多线程等特点,也是一种目前广泛使用的面向对象的语言。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号