【Java精品源码栏目提醒】:网学会员为广大网友收集整理了,【精品】(宁波大学)面向对象程序设计教程(C++) - 其它资料,希望对大家有所帮助!
面向对象程序设计教程C Ver2.0 Author: LG 推荐参考文献1、The Complete C Traning Coursec大学教程 Second Edition Harvey M. Deitel amp Paul James Deitel2、Inside the C Object Model深度 c对象模型 Stanley B. Lippman3、Thinking in Cc编程思想 second edition Bruce Eckel4、Borland C Builder4 标准教程 北京宝兰-英博思信息技术有限公司5、The C Programing Language Third Edition Bjarne Stroustrup6、Introductory Combinatorics组合数学 Third Edition Richard A. Brualdi7、高质量 C编程 林锐 C语言编译器介绍及相关语言技术问题:什么是语言?什么是编译器?什么是编程环境?问题:什么是解析?什么是编译?1、Turbo c / Microsoft c /Borland c /Watcom c2、可视化的:Visual c / Borland C Builder 两者之间的比较 可视化的基础是面向对象编程的实现OOP C是面向对象编程方法结构化的编程方法SP 3、Delphi 简介:聪明的程序员用 Delphi真正的程序员用 C4、
Java 简介:纯面向对象语言 JDK、JBuilder、Visual J5、CCreativeConfident 1 面向对象程序设计教程C Ver2.0 Author: LG 预备知识问题:1、如何用学过的 C 语言来表示一个人/全体的人?或一台录音机/所有的录音机? 或者银行帐号/或 ATM 机? 提示:struct 结构2、数据和过程对应 4 模块化设计与传统设计的不同:数据与过程分离 如 Person.Play与 Record.Play 数据:对基本特性进行描述 过程:对数据进行操作处理3、什么是面向对象对应 5 “面向对象” 技术追求的是软件系统对现实世界的直接模拟, 尽量实现将现实世界中的事物直接映射到软件系统的解空间。
它希望用户用最小的气力,最大程度地利用软件系统来解决问题。
现实世界中的事物可分为两大部分,即物质和意识,物质表达的是具体的事物;意识描述的 ,是某一个抽象的概念。
例如“自行车”和“这辆白色的自行车”“这辆白色的自行车”是物质,它是具体的客观存在; “自行车”是意识,它是一个抽象的概念,是对客观存在的事物的一种概括。
这些现实世界中的事物可直接映射到面向对象系统的解空间,现实世界中的物质可对应于面向对象系统中的 , “对象” 现实世界中的意识可对应面向对象系统中的抽象概念——类。
自行车在面向对象系统中可用自行车类来表达,一辆白色的白行车在面向对象系统中是一个具体的对象,是自行车类的一个实例。
“物质自行车”在人的反应中转换为“意识自行车” ,被概括并抽象了。
4、什么是结构化程序设计Structure Programmin 结构化程序设计的设计思路是:自顶向下、逐步求精;其程序结构是按功能划分若干个基本模块,这些模块形成一个树状结构;各模块之间的关系尽可能简单,在功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成;其模块化实现的具体方法是使用于程序。
如:输入模块、打印模块 结构化程序设计由于采用了模块分解与功能抽象,自顶向下、分而治之、逐步求精的手段,从而有效地将一个较复杂的程序系统的设计任务分成许多易于控制和处理的子任务,这些子任务都是可独立编程的子程序模块。
这些子程序中的每一个都有一个清晰的界面,使用起来非常方便。
结构化程序设计方法虽然具有很多的优点,但它仍是一种面向数据/过程的设计方法,它把 2 面向对象程序设计教程C Ver2.0 Author: LG数据和过程分离为相互独立的实体,程序员在编程时必须时刻考虑所要处理的数据的格式。
对于不同的数据格式即使要做同样的处理或对相同的数据格式要做不同的处理都需编写不同的程序。
因此结构化程序的可重用性不好。
另一方面,当数据和过程相互独立时,总存在着用错误的数据调用正确的程序模块或用正确的数据调用了错误的程序模块的可能性。
因此,要使数据与程序始终保持相容,已经成为程序员的一个沉重负担。
上述这些问题,结构化程序设计方法本身是解决不了的,它需要借助于我们下面要讨论的面向对象程序设计。
5、什么是面向对象程序设计Object Oriented Programming——OOP 面向对象程序设计将数据及对数据的操作放在一起,作为一个相互依存、不可分割的整体来处理,它采用数据抽象和信息隐藏技术。
它将对象及对对象的操作抽象成一种新的数据类型——类,并且考虑不同对象之间的联系和对象类的重用性。
张三的 Money 决不能变成李四的银子。
结构化中,数据:张三的银子、李四的银子 过程共用:取银子、存银子 面向对象中,对象张三:数据——银子/方法自己的,继承下来的——取银子、存银子 对象李四:数据——银子/方法自己的,继承下来的——取银子、存银子 例如我们可以将各种各样的自行车抽象成一个自行车类,它所包含的数据内容有架子尺寸、车轮尺寸、颜色和原材料等,它所具有的操作有转弯、移动和修理等。
每一辆具体的自行车就是属于自行车类的一个对象,如图所示。
面向对象程序设计能支持的软件开发策略有: 编写可重用代码; 编写可维护的代码; 共享代码; 精化已有的代码。
(属性是相同的,共性;属性值是不同的,是特性) 3 面向对象程序设计教程C Ver2.0 Author: LG 有了高质量的可重用代码就能有效地降低软件的复杂度和提高开发效率。
面向对象方法,尤其是它的继承性,是一种代码重用的有效途径。
开发者在设计软件时可以利用一些已经被精心设计好并且经过测试的代码,这些可重用的代码被组织和存放在程序设计环境的类库中。
由于类库中的这些类的存在,使以后的程序设计过程变得简单,程序的复杂性不断降低、正确性不断加强,也越来越易于理解、修改和扩充。
综观所有的面向对象程序语言,我们可以把它们分为两大类:纯粹的面向对象语言和混合型的面向对象语言。
在纯粹的面向对象语言中,几乎所有的语言成分都是“对象”,这类语言强调开发快速原型的能力;而混合型的面向对象语言,是在原传统的过程化语言中加入各种面向对象的语言机构,它所强调的是运行效率。
6、程序设计方法学 结构化程序设计 结构化程序设计是软件设计的第一个大变革。
它是一种自上而下的设计。
它的思想是把一个大问题逐步分解成更小的子问题,直到子问题小到可以用一个函数或过程来解决。
模块化程序设计 模块化程序设计是一种自下而上的设计方法。
提倡从构造相互独立的小模块做起,然后把小模块组合成更大的模块,知道建立所需要的程序。
一般来说结构化和模块化是结合在一块的。
面向对象的程序设计 面向对象综合了功能抽象和数据抽象,采用数据抽象和信息隐蔽技术,将问题求解看作是一个分类演绎过程。
与结构化方法相比,面向对象更接近人们的认识事物和解决问题的过程和思维方法。
4 面向对象程序设计教程C Ver2.0 Author: LG 第一章 面向对象的基本概念1、什么是面向对象编程,怎样理解? 如果组装计算机,组装过一台,会第二台吗? 第一步:将客观事物进行抽象,并对同一类进行归纳 第二步:将抽象的结果分为:数据和行为 第三步:将数据和行为封装在这个类中 第四步:将这个类用某种计算机语言表示出来即编程 即对象是数据和行为的整合体。
问题:比较一下 C 的编程,数据变量和行为函数是否同属于某个个体?2、类与对象 类型与变量的关系。
如 int i; 什么是类? 在日常生活中,我们经常听到“类”这个术语,它是对一组客观对象的抽象,它将该组对象所具有的共同特征包括结构特征和行为特征集中起来,以说明该组对象的能力和性质。
例如“人类”这个词就抽象着所有人的共同之处。
“人以群分、物以类聚” 在计算机世界的系统构成上,类形成了一个具有特定功能的模块和一种代码共享的手段。
它为程序员提供了一种工具,使得他们可以方便地建立所需要的任何类型,并可以像一般类型那样方便地使用。
类是这一类的事物共同特性包括数据和行为的抽象。
是普遍性。
什么是对象? 例如:人与张三,那个是类?那个是对象?这个对象是不是这个类的对象? 对象是某类的一个实例特例,是特殊性。
通过上面的这些举例我们可以对“对象”下一个定义, 它具有如下特性: 有一个名字以区别于其他对象; 有一个状态用来描述它的某些特征; 即对象是现实世界中的一个实体,是该类的特例 有一组操作,每一个操作决定对象的一种功能或行为; 对象的操作可分为两类:一类是自身所承受的操作,一类是施加于其它对象的操作。
如:张三存取款与张三转帐 对象是其自身所具有的状态特征及可以对这些状态施加的操作结合在一起所构成的独立实体。
5 面向对象程序设计教程C Ver2.0 Author: LG 按钮控件,如何实现类与对象?用所学的 C 语言,要实现一个按钮,让别的同学也可以用?3、对象的交互——gt消息 如键盘消息,如 Caps Lock,对象接受消息 对象之间的消息发送与响应: Windows 系统监视消息并放入系统消息队列, 随后将系统队列的输入消息复制到相应的应用程序队列中 应用程序的消息循环便从消息队列中检索消息并将每一个消息发送到相应的窗口函数中 4、对象的属性和方法 什么是对象的属性?数据成员——王东例中的状态 什么是对象的方法?函数成员——王东例中的功能5、可视化编程:属性、方法与事件 基于事件的编程技术:例如按钮对象,当点击时产生下一个动作。
在“我的电脑”中,两次单击目录和双击目录产生不同的反应。
6、数据的抽象和封装 封装:将细节信息隐藏起来,用户通过接口实现对数据等的操作如,机器密码 抽象:对实例进行分析,抽去出共同性质 以通讯地址为例子,如何抽象和封装?有些信息对外公开public,有些不是private。
面向对象系统的封装性是一种信息隐藏技术,它使系统设计员能够清楚地标明他们所提供的服务界面, 用户和应用程序员则只看见对象提供的操作功能, 看不到其中的数据或操作代码细节。
从用户或应用程序员的角度看,对象提供了一组服务,而服务的具体实现即对象的内部却被屏蔽封装着。
如去 ATM 机上取款,知道怎么用,有个交互界面,但内部如何操作? 对象的这一封装机制的目的在于将对象的使用者与设计者分开,使用者不必知道对象行为实现的细节,只需用设计者提供的协议命令对象去做即可。
面向对象系统中的封装单位为对象,即主要指对对象的封装,该对象的特性是由它所属的类说明来描述。
除去对象的封装以外,类概念本身也具有一种封装意义,它将数据和与这个数据有关的操作集合封装在一起,建立了一个定义良好的接口,这反映了抽象数据类型的7、面向对象编程的基本特性 四个基本特性:抽象、封装、继承与多态 继承:什么是继承? 父类子类,基类派生类,超类 单继承、多继承 6 面向对象程序设计教程C Ver2.0 Author: LG 取代继承、 包含继承、 受限继承、 特化继承 加以改进 水果-苹果 鸵鸟-鸟 工程师-人 继承所表达的就是一种对象类之间的相交关系。
它使得某类对象可以继承另外一类对象的特征和能力。
若类间具有继承关系,则它们之间应具有下列几个特性: 类间具有共享特征包括数据和程序代码的共享; 类间具有细微的差别或新增部分包括非共享的程序代码和数据; 类间具有层次结构。
具体地讲, 若类 B 继承类 A 时,则属于 B 中的对象便具有类 A 的一切性质数据属性和功能操作。
我们称被继承类 A 为基类或父类,或超类;而称继承类 B 为 A 的派生类或子类。
因此,要构造一个新类 B,只需去继承一个与之有共同特征的基类 A,再描述与基类不同的少量特征即增加一些新的数据成员和成员函数。
于是,类 B 便由继承来的和新添加的两部分特征组成。
继承所具有的作用有两个方面:一方面可以减少代码冗余;另——方面可以通过协调性来减少相互之间的接口和界面。
.多态: 多态性是面向对象系统中的又一重要特性,它描述的是同一个消息可以根据发送消息对象的不同采用多种不同的行为方式。
Person.play play what footballtennischess 在面向对象系统中,重载的含义是指通过为函数和运算符创建附加定义而使它们的名字可以重载。
也就是说相同名字的函数或运算符在不同的场合可以表现出不同的行为。
下面是一个 C 十十语言中函数重载的例子: 》由参数个数或参数类型来识别 》多态性由重载编译时或虚函数运行时来实现 》重载包括函数重载和运算符重载 class A public: void Printint i ... void Printfloat f ... 7 面向对象程序设计教程C Ver2.0 Author: LG void Printconst char c ... 运算符重载如复数的运算 面向对象程序设计的最大优点是使软件具有可重用性8、MP3 播放器,怎样实现 8 面向对象程序设计教程C Ver2.0 Author: LG 第二章 C的新特性1、注释 行注释:// 段落注释: / /2、新的 cIO 流 ltiostream.hgt include ltiostream.hgt int i float f cingtgti coutltltf //注意:符号的朝向ltlt、gtgt //注意问题,在看完程序后回答:cincout 是否具有多态性? int mainint argc char argv int ii1 char c float f coutltltquotplease enter int ichar cflaot f:quotltltendl cingtgtigtgtcgtgtf coutltltiltltquot quotltltcltltquot quotltltfltltn coutltltquotplease enter int i1:quotgtgtendl cingtgti1 coutltltii1 cingtgti return 0 nt: coutltlthexltlti: //dec 十进制//oct 八进制 ends:插入体格空字符 注意:是否有问题,若有,应如何修改? cingtgtiltltendl cingtgt”Please input a integer:”gtgti3、变量声明和新的数据类型 在 c 语言中,局部变量必须置于可执行代码之前说明,如: 9 面向对象程序设计教程C Ver2.0 Author: LG int i i10 int j j11 是不允许的,在 c中为合法,同时,c允许在 for 循环中说明变量,如: for int k5kgt0k-- 好处:增加可读性/合理使用内存空间 在 c语言中,结构、联合、枚举都可以作为新的类型名来定义变量,如: enum boolFALSETRUE //实际上,在 cbuilder 或 VC 中,bool 是关键字, bool bool1 //在 c 中写成 enum bool done enum colorbluegreen color c1 c1blue coutltltc1ltltendl bool b1 b1false coutltltb1ltltendlltltendl AnsiString s1s2 //AnsiString: vcl.h,CBuilder 中的类 s1quothelloquot s2quotworldquot coutltlts1s2ltltendl string ss //string.h ssquot12123quot coutltltssltltendl4、函数原型和类型检查 函数包括两个部分,说明部分和函数体部分 1C中必须为每一个函数建立原型或将函数定义在调用语句之前,其作用相当于一个声明,例如: int fun1int //如果没有,出错 int mainint argc char argv int a afun15 coutltltaltltendl int i0 cingtgti 10 面向对象程序设计教程C Ver2.0 Author: LG return 0 int fun1int x return x 函数原型的好处: 1.增加可读性,可以先了解到程序有那些函数,它们提供那些功能,接口如何? 2.为函数调用和编译作准备 例子: void fun1 fun2 void fun2 fun1 如果不用函数原型,会发生什么情况? 2函数原型中的参数 .在 c函数原型的参数表中只需包含参数的类型参数名可带可不带 .c参数说明必须放在函数名后的括号内,不可将函数参数说明放在函数说明与函数体 之间,如: void printstrings char s coutltlts 在 C中应为 void printstringchar s .返回值,默认为 int无返回值为 void .参数列表中无参数,在 c中表示无参数,即 funcvoid而在 c 中,表示可能带多个参数。
5、内联函数 inline比较宏 1内联函数在普通函数声明前添加关键字quotinlinequot, 与普通函数调用不同是在编译时用函数代码直接替代表达式,不需要进行现场保护。
直接将代码插入。
而不是函数调用要将状态和地址,参数等压入堆栈/保护现场,能加快执行速度。
inline int plusint xint y return xy coutltltplus1011ltltendl 2宏定义的不安全性 define VALIDSQUAREX XX define INVALIDSQUAREX XX 11 面向对象程序设计教程C Ver2.0 Author: LG inline int inlinesquareint X return XX coutltltquotVALIDSQUARE:quotltltVALIDSQUARE23ltltendl coutltltquotINVALIDSQUARE:quotltltINVALIDSQUARE23ltltendl coutltltquotINLINESQUARE:quotltltinlinesquare23ltltendl6、指针和引用 1指针 :取内容 amp: 取地址 例一: include quotstdio.hquot main char ch int count_addrcountval count100 count_addrampcount valcount_addr printfquotdquotval chgetchar //结果:100 例二: include quotstdio.hquot main char ch int x int p1p2 x101 p1ampx p2p1 printfquotis the value dquotp2 chgetchar 2引用 .引用实际上是一种隐式指针 int a1 int ampba //必须被初始化,因此也称引用为某变量的别名 coutltltbltltendl 12 面向对象程序设计教程C Ver2.0 Author: LGb2coutltltaltltendl//结果 1,2一个例子:int squareByValueintvoid squareByPointint void squareByReferenceint amp int ma.
上一篇:
【精品】第2章 JSP开发环境
下一篇:
扛起年轻化大旗,哈弗F系玩转行业新风潮