面向对想程序设计.ppt_第1页
面向对想程序设计.ppt_第2页
面向对想程序设计.ppt_第3页
面向对想程序设计.ppt_第4页
面向对想程序设计.ppt_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

,第二部分 C+语言和 面向对象程序设计,程序设计方法,过程式 PASCAL、C 对象式(面向对象) JAVA、C+ 函数式 Lisp 逻辑式 Prolog,函数式,在函数式模式中,程序被看成是一个数学函数。函数是把一组输入映射到一组输出的黑盒子。 函数式语言主要实现下面功能: 函数式语言定义一系列可供任何程序员调用的原始(原子)函数 函数式语言允许程序员通过若干原始函数的组件创建新的函数,逻辑式,依据逻辑推理的原则响应查询。把程序组织成一组事实和一组推理规则,它基于的是谓词演算。 程序员需要学习有关主题领域的知识(知道该领域内的所有已知的论据)或是向该领域的专家获取论据。程序员还应该精通如何逻辑上严谨地定义准则。这样程序才能推导出新的论据。 主要常用于人工智能领域的程序开发,过程式,以功能为中心,基于功能分解的程序设计范型。 主要思想:自顶向下,逐步求精 一个计算机程序可以看成是由一系列任务组成的,如读、计算和打印。任何一项任务如果过于复杂就将其分解成一系列较小的子任务,直至每一项任务都很小,很容易解决。 在程序实现中,许多函数用于完成这些任务。问题的焦点集中于函数,它们对特定的数据进行操作。,过程式,计算每门课的平均成绩,过程式,过程式,过程式,例: 从键盘输入一个学生的信息(包括姓名、年龄、性别、学号等)和一个老师的信息(包括姓名、年龄、性别、是否授课等),然后将信息输出到屏幕。,过程式,分析: 根据需求(题目要求),我们可以把问题划分为两个功能模块,一个是输入模块,一个是输出模块。 我们用C语言来写,参看下面的代码:,过程式,int main() / 主函数开始 / 声明用于存储学生信息的变量 char strStudentName20; / 学生姓名 int nStudentAge; / 学生年龄 char cStudentSex; / 学生性别 int nStudentNumber; / 学生学号 / 声明用于存储老师信息的变量 char strTeacherName20; / 老师姓名 int nTeacherAge; / 老师年龄 char cTeacherSex; / 老师性别 int nIsTeaching; / 是否授课 / 输入模块 GetStudentInfo(); / 输入学生信息 GetTeacherInfo(); / 输入老师信息 / 输出模块 PrintStudentInfo(); / 输出学生信息 PrintTeacherInfo(); / 输出老师信息 ,描述学生的数据,描述老师的数据,函数,函数,上面的例子中,我们可以进一步将属于学生和老师的变量放入结构中。这样可以在一定程度上完成对数据的封装。但在过程式程序设计中,数据与对其进行操作的函数仍是分离的。,过程式,/ 声明学生结构Student struct Student char strStudentName20; / 学生姓名 int nStudentAge; / 学生年龄 char cStudentSex; / 学生性别 int nStudentNumber; / 学生学号 ; / 声明老师结构Teacher struct Teacher char strTeacherName20; / 老师姓名 int nTeacherAge; / 老师年龄 char cTeacherSex; / 老师性别 int nIsTeaching; / 是否教书 ;,过程式,struct Window int height; int weight; long int color; window; void MoveWindow(Window w); void MinimizeWindow(Window w); main() MoveWindow(window); ,1、数据与操作相分离 2、程序由函数(操作)构成 3、程序的重心在函数(操作)上,问题,函数用于完成一定的功能,它们都是针对特定的数据进行操作的。那么我们能不能以特定的数据为中心,将数据与对其进行操作的函数封装起来呢?,对象式(面向对象),面向对象程序设计出现在80年代中后期 面向对象程序设计不再是从功能入手,而是从对象(人、地方、事情等)入手,对象式(面向对象),面向对象程序设计模拟自然界认识和处理事物的方法,将数据和对数据的操作方法放在一起,形成一个相对独立的整体对象(object)面向对象的程序设计就是由这些对象构造程序,同类对象还可抽象出共性,形成类(class )。一个类中的数据通常只能通过本类提供的方法进行处理,这些方法成为该类与外部的接口。对象之间通过消息(message)进行通讯。,窗口,属性,方法,int height; int weight; long int color;,void Move (); void Minimize();,对象式(面向对象),class Window private: int height; int weight; long int color; public: void Move (); void Minimize (); ; main() Window window; window.Move();,1、数据与操作结合 2、程序由对象构成 3、程序的重心在对象上,对象式(面向对象),基本概念 对象(object) 类(class) 消息 (message),基 本 概 念,行为,属性,调节旋钮,对 象,基 本 概 念,对象 从语言实现层面来看,对象封装了代码和数据 从概念层面讲,对象是某种拥有责任的抽象 对象内包含数据,让它知道自己的状态 对象内包含代码,让它可以适当地运行(做设计者希望它做的事) 从规格层面讲,对象是一系列可以被其他对象使用的公共接口,基 本 概 念,类是一个抽象的概念,用来描述某一类对象所共有的、本质的属性和行为。,类,基 本 概 念,类是一个抽象的概念,用来描述某一类对象所共有的、本质的属性和行为。,类 对象,描述这类对象共有的、本质的属性和行为,类的一个具体实现,称为实例,手表 一块手表,手表共有的属性(表针、旋钮、内部结构) 和行为(调节旋钮),具体到一只圆形的或方形的手表,类,class Window private: int height; int weight; long int color; public: void Move (); void Minimize (); ;,main() Window window; window.Move();,基 本 概 念,我们把对象之间产生相互作用所传递的信息称做消息。,消 息,启 动,发送消息,接收并响应消息,消 息,基 本 概 念,我们把对象之间产生相互作用所传递的信息称做消息。,转 向,对象式(面向对象),面向对象程序设计特点 封装性隐藏内部实现 继承与派生性复用现有代码 多态性改写对象行为,“面向对象”程序设计的特点,封装性,对象是一个封装体,在其中封装了该对象的属性和操作。通过限制对属性和操作的访问权限,可以将属性“隐藏”在对象内部,对外提供一定的接口,在对象之外只能通过接口对对象进行操作。,“面向对象”程序设计的特点,“面向对象”程序设计的特点,封装性,把对象的全部属性和全部行为结合在一起,形成一个不可分割的独立单位。,信息隐藏,尽可能屏蔽对象的内部细节,对外部世界形成一个边界或屏障,只保留有限的公有对外接口,使之与外部世界发生联系。,“面向对象”程序设计的特点,封装性,C+通过建立数据类型类来支持封装和数据隐藏。封装性增加了对象的独立性,从而保证了数据的可靠性。一个定义完好的类可以作为独立模块使用。,封装性隐藏内部实现,“面向对象”程序设计的特点,继承与派生,以汽车为例看客观世界描述事物的方式:,“面向对象”程序设计的特点,继承与派生,当定义了一个类后,又需定义一个新类,这个新类与原来的类相比,只是增加或修改了部分属性和操作,这时可以用原来的类派生出新类,新类中只需描述自己所特有的属性和操作。,面向对象程序设计提供了类似的机制:,新类称为子类或派生类,原来的类称为基类。派生可以一直进行下去,形成一个派生树。,“面向对象”程序设计的特点,继承与派生,继承性大大简化了对问题的描述,大大提高了程序的可重用性,从而提高了程序设计、修改、扩充的效率。,继承与派生性复用现有代码,“面向对象”程序设计的特点,语文、数学、英语、政治、物理、化学、生物,多态性,多态性指,同一个消息被不同对象接收时,产生不同结果,即实现同一接口,不同方法。,高中生,计 算 平均成绩,“面向对象”程序设计的特点,多态性,多态性指,同一个消息被不同对象接收时,产生不同结果,即实现同一接口,不同方法。,计 算 平均成绩,大学生,高数、英语、计算机、线性代数,“面向对象”程序设计的特点,多态性,多态性指,同一个消息被不同对象接收时,产生不同结果,即实现同一接口,不同方法。,多态性改写对象行为,C+语言的产生,C+是从C语言发展演变而来的。 引入了类的机制,最初的C+被称为“带类的C“。 1983年正式取名为C+。,Bjarne Stroustrup,C+语言的产生,为了使C+具有更好的可移植性,美国国家标准局(American National Standards Institute, ANSI)于1990年设立了ANSI X3J16委员会专门负责制定C+标准。 不久,国际标准化组织ISO也成立了自己的委员会,负责制定C+标准。 同年,ANSI和ISO将两个委员会合并,共同合作进行C+标准化工作,委员会称ANSI/ISO。,C+语言的产生,1998年,经过委员会的不懈努力,C+的国际标准(ISO/IEC)获得了ISO、IEC(International Commission,国际电工技术委员会)和ANSI的批准,这是第一个国际C+标准,称为标准C+或ANSI/ISO C+。 2003年,委员会制定并发布了C+标准第2版。,C+语言,C+不是一个纯面向对象的程序设计语言,C+语言,打着面向对象的幌子干着面向过程的勾当! C+ 编译器对 C 程序的兼容性造成了最底层的“过程勾当”。 实际上用 C+ 编程的人,大部分不自己创建类,而是使用类库,这样就造成了他们把类库作为一种高级的函数库来理解,并没有真正理解面向对象的思想。 C+ 给了我们第二条道路去走过程编程,C+语言和面向对象程序设计,程序设计基础 结构化程序设计 面向对象程序设计 程序健壮性设计,控制台(console)应用程序,DOS-like程序。 以main函数为入口点。 Console窗口将成为其标准输入和输出装置。 仍然可以调用部分的、不牵扯到图形使用者接口(GUI)的Win32 API(尤其是KERNEL.DLL模块所提供的那一部分),所以它可以使用Windows提供的各种高级功能,它可以产生进程,产生线程。甚至还可以在其中使用部分的MFC类(同样是与GUI没有关联的),例如处理数组、链表等数据结构的collection classes(CArray,CList)、与文件有关的CFile、CStdioFile。,第一个C+程序 HelloWorld,该程序在控制台输出一个字符串,#include int main() cout“Hello World“endl; return 0; ,第二个C+程序 还是HelloWorld,该程序在控制台输出一个字符串,#include using namespace std; int main() cout“Hello World“endl; return 0; ,分析我们的Hello World,#include 预处理命令“#” using namespace std; 引用std名字空间,C+头文件,C+标准库的程序实体是在名空间std中定义的,在C+程序,如果包含的是相应的C+的头文件,则应通过名空间std来使用这些功能。,C+头文件,C+标准库包含了C语言和针对C+提供的新功能,其头文件定义如下: C标准库提供的头文件,在C+标准库中也提供了相应的头文件,文件名的约定是:把C标准库头文件名的.h去掉,然后在文件名前加一个字母c。比如stdio.h 变为 cstdio C+提供的新功能的,去掉.h后缀,并放入std名字空间,比如 iostream.h 变为 iostream。,C+头文件,现在很多的C+实现为了保证与C语言的兼容性,往往同时提供了两套头文件。但注意:在VC+6.0的C+标准中,从C标准包含进来的功能并没有在名空间std中定义。,分析,void main() 程序入口点 cout“Hello World“endl; cout:标准输出流对象,作用相当于printf :插入符,将后面的内容插入到cout中,即输出到屏幕上。 endl:end of lin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论