《C语言与面向对象程序设计》由会员分享,可在线阅读,更多相关《C语言与面向对象程序设计(46页珍藏版)》请在金锄头文库上搜索。
1、C+语言语言与与面向对象程序设计面向对象程序设计贵州大学计算机科学系贵州大学计算机科学系1淘宝才智专线http:/ 1 18周周 星期三(单),五星期三(单),五 主讲教师:张永军主讲教师:张永军上机:上机:第第 3 18周周 星期四星期四 (晚晚) 指导教师:张永军指导教师:张永军课程(综合)设计课程(综合)设计根据课程安排)根据课程安排)2淘宝才智专线http:/ s了解面向对象方法的基本概念了解面向对象方法的基本概念s s了解面向对象程序设计方法的基本思想和特了解面向对象程序设计方法的基本思想和特点点s s能够利用面向对象技术,使用能够利用面向对象技术,使用 C+语言工具语言工具进行面向
2、对象编程进行面向对象编程3淘宝才智专线http:/ 面向对象程序设计概论面向对象程序设计概论 4淘宝才智专线http:/ 1 程序设计技术的发展程序设计技术的发展1.1.1 面向机器的语言面向机器的语言机机器器语语言言是是硬硬件件逻逻辑辑设设计计所所实实现现的的机机器器指指令令的的集集合合,也也就就是是由由硬硬件件所所能能实实现现的的语语义义序序列列集集合合。其其表表现现形形式式为为能能被被机机器直接接收的二进制代码序列。器直接接收的二进制代码序列。汇汇编编语语言言是是机机器器语语言言的的直直接接符符号号映映射射。它它用用人人类类能能够够理理解解的的助助记记符符号号来来表表示示机机器器指指令令
3、、寄寄存存器器、存存储储器器地地址址等等物物理理概念,以提高程序的可读性。概念,以提高程序的可读性。5淘宝才智专线http:/ 面向问题的语言面向问题的语言6淘宝才智专线http:/ FORTRAN语语言言还还引引入入了了独独立立编编译译的的模模块块和和可可重重用用子子程程序序库库的的概概念念,这这种种技技术术后后来来被被称称为为模模块化程序设计。块化程序设计。模模块块化化的的思思想想是是将将应应用用程程序序划划分分若若干干个个规规模模适适度度的的模模块块,每每个个模模块块独独立立命命名名、独独立立编编译译,最最后后通通过过连连接接程程序序形形成成可可招招待待的的应应用用程序。程序。 9淘宝才
4、智专线http:/ 模模块块化化程程序序设设计计倡倡导导的的这这些些概概念念被被证证明明是是程程序序组组织织和和管管理理有有效效的的基基本本手手段段,在在以以后后程程序序设设计计技技术术发发展展的的各各个个阶阶段段得以延续和发展得以延续和发展。10淘宝才智专线http:/ 面向数据结构的程序设计面向数据结构的程序设计研究证明,仅用研究证明,仅用顺序,分支,循环三种顺序,分支,循环三种基本控制结构基本控制结构即能构造出任何单入口、单出口即能构造出任何单入口、单出口的程序块。的程序块。这些研究结果与模块化的概念相结合,这些研究结果与模块化的概念相结合,形成了采用形成了采用自顶向下、逐步求精自顶向下
5、、逐步求精的设计步骤和的设计步骤和单入口单出口单入口单出口基本控制结构的基本控制结构的结构化程序设计结构化程序设计方法。方法。11淘宝才智专线http:/ Pascal语言用过程来组织程序。语言用过程来组织程序。C语言用函数来组织程序。语言用函数来组织程序。 过程过程(Procedure)和函数和函数(Function)是子程序是子程序(Subroutine)的两种具体形式。的两种具体形式。过程没有返回值。过程没有返回值。函数函数有且只有一个返回值。函数函数有且只有一个返回值。12淘宝才智专线http:/ 结构化程序设计的研究中有一个重要的结论,结构化程序设计的研究中有一个重要的结论,表示为公
6、式:表示为公式:程序程序=算法算法+数据结构数据结构,强调算法对数,强调算法对数据结构的依赖性,体现了一种数据结构为中心的观据结构的依赖性,体现了一种数据结构为中心的观念。念。大多数结构化语言都具有大多数结构化语言都具有定义新的数据类型定义新的数据类型的的功能,如功能,如C语言中枚举语言中枚举(enum) 、结构结构(struct)类型类型等。这有利于比较准确地描述待求解问题中的实体,等。这有利于比较准确地描述待求解问题中的实体,并保证数据的一致性。并保证数据的一致性。 数据库技术和数据库管理语言也体现了程序设数据库技术和数据库管理语言也体现了程序设计以数据结构为中心的鲜明特色。计以数据结构为
7、中心的鲜明特色。13淘宝才智专线http:/ 面向对象的程序设计面向对象的程序设计面向对象的程序设计方法继承了结构化、过程化、模块化等方法的所有积极成分,创造性地引入了“对象”这一构建程序的基本构件。对象对象是由是由数据结构数据结构和对和对数据结构的数据结构的操作或运算操作或运算封装封装而成的一个整体。而成的一个整体。封装使得算法和数据结构的关系由算法对数由算法对数据结构单方面的依赖变成了相互依存据结构单方面的依赖变成了相互依存的关系。15淘宝才智专线http:/ “对象对象= 数据结构数据结构+算法,算法, 程序程序=对象对象+对象对象+对象对象”取代了“程程序序=数数据据结结构构+算算法法
8、”的传统程序设计模式。因而引起了一场程序设计观念的革命。16淘宝才智专线http:/ 17淘宝才智专线http:/ Oriented Programming Language 面向对象程序设计语言)面向对象程序设计语言)20世纪世纪60年代年代, 由挪威计算中心由挪威计算中心Ole Dahl和和Krysten Nygaard.主持开发的主持开发的Simula 67 被公认为是面向对象语言被公认为是面向对象语言的先驱。的先驱。20世世纪纪70年年代代,由由美美国国国国防防部部资资助助开开发发的的Ada语语言言,以以它它对对抽抽象象数数据据类类型型的的支支持持,而而在在面面向向对对象象语语言言发发
9、展展中中占占有有重要地位。重要地位。Simula 67 和和Ada被被看作是看作是OOPL的两个的两个直直接的接的“祖先祖先”,一个引入,一个引入“模拟模拟”,一个引入,一个引入“抽象抽象”。18淘宝才智专线http:/ 20世世纪纪70年年代代到到80年年代代, 美美国国Xerox公公司司,Palo Alto研研究究中中心心(PARC)的的Alan Kay, Adale Goldberg和和Dan Ingans等等人人主主持持开开发发的的Smalltalk语语言言正正式式使使用用了了“面面向向对对象象”这这个个术术语语。它它的的问问世世标标志志着着面面向向对对象象程程序序设设计计方方法法的的
10、正正式式形成。形成。 1981年年推推出出的的Smalltalk-80是是Smalltalk语语言言最最完完善善的的版版本本。它它是是第第一一个个能能够够实实际际应应用用的的纯纯的的面面向向对对象象语语言言。在在Smalltalk_80中中类类和和对对象象不不仅仅仅仅是是语语言言成成分分,而而且且是是交交互互式式程序设计环境的组成部分。程序设计环境的组成部分。19淘宝才智专线http:/ 67、Smalltalk_80等语言的影响仅仅局限等语言的影响仅仅局限在学术界。面向对象语言对计算平台的特殊要求使这些语言难于被软件在学术界。面向对象语言对计算平台的特殊要求使这些语言难于被软件开发商和程序员
11、接受。开发商和程序员接受。贝尔实验室的贝尔实验室的Bjarne Stroustrup 及其研究小组在当时及其研究小组在当时最受欢迎的最受欢迎的C语言基础上开发的语言基础上开发的C+语言,引入了对面向语言,引入了对面向对象概念的支持。对象概念的支持。C+语言以其与语言以其与C语言兼容、高运行效率等优良特性,语言兼容、高运行效率等优良特性,使面向对象程序设计技术受到软件工业界的广泛关注,使之使面向对象程序设计技术受到软件工业界的广泛关注,使之进入一个全面发展的时期。尽管进入一个全面发展的时期。尽管C+只能算作一种混合式面只能算作一种混合式面向对象语言向对象语言。但是正是由于大量。但是正是由于大量C
12、程序员通过程序员通过C+的帮助才的帮助才迅速掌握了面向对象的概念和方法,全面促进了面向对象技迅速掌握了面向对象的概念和方法,全面促进了面向对象技术的应用,从而使术的应用,从而使C+成为最有影响的面向对象语言成为最有影响的面向对象语言,甚至,甚至许多人把许多人把C+当作当作面向对象的代名词面向对象的代名词。20淘宝才智专线http:/ Pascal、Eiffel、Java等等。等等。Java语语言言是是由由Sun Microsystem公公司司推推出出的的一一种种纯纯面面向向对对象象语语言言。Java从从C+语语言言中中继继承承了了大大量量的的语语言言成成分分,抛抛弃弃了了C+语语言言中中冗冗余
13、余的的和和容容易易引引起起问问题题的的功功能能,它它将将面面向向对对象象、平平台台无无关关性性、稳稳定定性性、安安全全性性等等集集于于一一身身,提提供供了了一一个个良良好好的的程程序序设设计计环环境境,因因而而成成为为适适合合于于分分布式计算的程序设计语言。布式计算的程序设计语言。 Java语语言言于于90年年代代中中期期的的迅迅速速流流行行与与它它定定位位于于当当时时迅迅速速发发展展的的Internet的的WWW应应用用开开发发有有关关。展展示示了了面面向向对对象象技技术术与与分分布布式式计计算算结结合的重大前景。合的重大前景。21淘宝才智专线http:/ C+, Java脚本语言脚本语言:
14、 Java Script , VBScript标记语言标记语言: SGML, HTML, XML样式语言样式语言: CSS, XSL建模语言建模语言: UML22淘宝才智专线http:/ 2 面向对象的基本概念面向对象的基本概念1.2.1 面向面向对象的目象的目标 建立一个既能在计算机系统中自然建立一个既能在计算机系统中自然地表示客观世界的问题、又能够超越程地表示客观世界的问题、又能够超越程序复杂性障碍的程序设计模型。序复杂性障碍的程序设计模型。 23淘宝才智专线http:/ 26淘宝才智专线http:/ 面向面向对象象语言中的言中的类和和对象象在面向在面向对象象语言中通常以下面描述的方式来定
15、言中通常以下面描述的方式来定义类:类定定义: 类名名1 私有数据:私有数据: 数据数据类型型1: 属性数据属性数据1; 数据数据类型型2: 属性数据属性数据2; 数据数据类型型3: 属性数据属性数据3; 公有方法:公有方法: 方法(行方法(行为)1; 方法(行方法(行为)2; ;类类是一个形形体体定义,它对一个数据特性和方法特性的封装体进行说明。类定义中包含两类成员:数据成员和方法成员。类的定义为该类的对象提供了创建的模式。28淘宝才智专线http:/ 3 类的基本特性类的基本特性1.3.1 封装性封装性 (Encapsulate)类的三大基本特性:封装性、继承性和多态性类是数据成员和方法成员
16、的封装体。封装不仅仅是将数据和方法这两种不同的语言成分捆绑在一起,它还具有数据隐藏的机制。数据隐藏是通过限制数据的访问权限实现的。数据隐藏是通过限制数据的访问权限实现的。一个类中的数据通常被声明为私有的。不允许从类一个类中的数据通常被声明为私有的。不允许从类的外部直接访问。的外部直接访问。封装和数据隐藏封装和数据隐藏不仅防止了数据从外部破坏的可能性,更保证了对象对于其边界以外的外部世界作为一个自足的、透明的实体存在。36淘宝才智专线http:/ 继承继承性性 (Inheritance)人类对于客观事物的认识过程是没有止境的。在分类问题上也是这样,随着认识水平的提高,原有的类需要划分成若干个子类
17、,子类又可以划分子类的子类,。这种划分最终形成一个树状层次体系结构。面向对象程序设计中通过类的继承性,能够很好地模拟这种分类方式。面面向向对对象象中中类类的的继继承承性性描描述述两两个个类类之之间间的的一一种种特特殊殊关关系系,即即上上面面所所说说的的“父父- -子子关关系系”。面面向向对对象象语语言言中中允允许许利利用用一一个个已已定定义义的的类类来来定定义义一一个个新新类类,通通过过这这种种利利用用,形形成成两两个个类类之之间间的的继继承承关关系系。这这个个已已定定义义的的类类称称为为基基类类,新新定定义义的的类类则则称称为为它它的的子子类类。子子类类除除了了包包含含基基类类的的所所有有成
18、成员员之外,又增加了自己特有的新成员。之外,又增加了自己特有的新成员。39淘宝才智专线http:/ 在由一个类划分出子类的过程中,子类必须具有其父类的所有特征,同时又具有父类中其它成员所没有的新特征。从成员集合来看,父类包含了子类的所有成员。从各自信息量从成员集合来看,父类包含了子类的所有成员。从各自信息量的多少来看,有的多少来看,有“子大于父子大于父”的特点,的特点,因为要描述一个子类,必须添加有别于父类中其它成员的新的信息。类间的这种类间的这种“父子父子关系关系”反映了类的一般性和特殊性,也称为反映了类的一般性和特殊性,也称为“一般一般- -特殊关系特殊关系”。40淘宝才智专线http:/
19、 1 继承自:继承自: 基类名基类名1 1 数据成员;数据成员; 方法成员;方法成员; 子类对象在内存中所占的存储空间一定大于其父类。继承机制使得子类对象创建时首先要拷贝父类对象的所有成员,既包括数据成员也包括方法成员,不管是公有的还是私有的。在为拷贝而来的成员分配内存储空间之后,再为子类的特有成员分配存储空间。一个子类对象的封装实体,在程序运行时与其父类对象是完全独立的。子类对象在创建时对父类对象的子类对象在创建时对父类对象的拷贝提供了一种高效的源代码级的软拷贝提供了一种高效的源代码级的软件重用方法。件重用方法。41淘宝才智专线http:/ 多态多态性性 (Polymorphism)多多态态性性是是面面向向对对象象技技术术真真正正的的优优势势所所在在。关关于于多多态态性有以下几种等价描述:性有以下几种等价描述:多态性:指程序对同一名字或符号在不同情况下做出不同解释的能力。多态性:为同一个函数和运算符定义多个不同的执行版本。不同对象可以调用相同名称的函数,并导致完全不同的行为(behavior)的现象称为多态性。43淘宝才智专线http:/