资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,机器语言,汇编语言,高级语言,面向过程,面向对象,CPU,指令系统,由0、1序列构成的指令码组成,如:,10000000,加,10010000,减,用助记符号描述的指令系统,如,ADD A,B,面向机器的语言,程序设计是数据被加工的过程,客观世界可以分类,对象是类的实例,对象是数据和方法的封装,对象间通过发送和接受消息发生联系,程序设计关键是定义类,并由类派生对象,1.1,面向对象方法的起源,人们就开始寻求一种更能反映,人类解决问题的自然方法,,这就是,“,面向对象,”,技术。,50,年代的程序都是用指令代码或汇编语言编写的。,60,年代高级语言的出现大大简化了程序设计,缩短了软件开发周期。,自,60,年代末到,70,年代初,出现了大型软件系统,如操作系统、数据库,这给程序设计带来了新的问题。可靠性差,错误多,且不易维护和修改,-,“,软件危机,”,。,1.1,面向对象方法的起源,1968,年北约组织提出,“,软件工程,”,的概念。,从强调,表达能力,为重点转向以,结构化和简明性,为重点,将程序从,语句序列,转向相互作用的,模块集合,。,1969,年,,E.W.Dijkstra,首先提出了,结构化程序设计,的概念,他强调从,程序结构和风格,上来研究程序设计。,用结构化程序设计的方法编写出来的程序不仅,结构良好,易写易读,而且易于证明其正确性,。,进入,80,年代,由于一系列高技术的研究,如,第五代计算机、计算机辅助制造,CAM,和知识工程,等领域的研究都迫切要求,大型的软件系统,作为支撑。,提出对,图像、声音、规则等非结构化信息,的管理。,具有,更强的独立自治性,,以便于大型软件的,管理、维护和重用,。,自,80,年代以来,出现了,面向对象程序设计,流派,研制出了多种面向对象程序设计语言(简称为,OOPL,:,Object Oriented Programming Language,),如,Ada,,,Smalltalk,,,C+,和当前使用在,Internet,上的平台无关语言,Java,等。,类本身具有很完整的,封装性,,可以使用它作为编程中的模块单元,满足模块独立自治的需求。再加上,继承性和多态性,,更有助于简化大型软件和大量重复定义的模块,增强了模块的,可重用性,提高了软件的可靠性,缩短了软件的开发周期,。,1.2,面向对象是软件方法学的返朴归真,研究的,事、物、概念,统称为,对象,Object,。,面向对象的方法正是以,对象,作为最基本元素的一种分析问题和解决问题的方法。,传统的结构化方法强调的是,功能抽象和模块化,,每个模块都是一个过程。结构化方法处理问题是以过程为中心的。,面向对象强调的是,功能抽象和数据抽象,,用,对象,来描述事物和过程。,对象包含,数据和对数据的操作,,是对数据和功能的抽象和统一。,以对象为中心的方法,更自然、更直接地反映现实世界的问题空间,,具有独特的,抽象性、封装性、继承性和多态性,,能更好地适应复杂大系统不断发展与变化的要求。,采用对象的观点看待所要解决的问题,并将其抽象为应用系统是极其自然与简单的。,软件开发从本质上讲就是对软件所要处理的问题域进行正确的认识,并把这种认识正确地描述出来。,直接面对,问题域中客观存在的事物来进行软件开发,,这就是,面向对象,。,在软件开发中尽量采用人们在日常生活中,习惯的思维方式和表达方式,,这就是面向对象方法所强调的,基本原则,。,软件开发从过分专业化的方法、规则和技巧中回到了客观世界,回到了人们的日常思维,所以说,面向对象方法是软件方法学的返朴归真。,1.3,结构化程序设计与面向对象程序设计,1.,结构化程序设计,程序,=,数据结构,+,算法,+,程序设计语言,+,语言环境,1.,结构化程序设计方法,自顶向下、逐步细化:,结构化程序设计的主要思想是功能分解并逐步求精。这种方法叫,“,自顶向下,逐步细化,”,。,模块化设计:,这个过程采用自顶向下方法来实现。结构化程序设计方法可以解决,人脑思维能力的局限性和所处理问题的复杂性,之间的矛盾。,结构化编码:,在设计好一个结构化的算法之后,还要善于进行结构化编码。即用高级语言语句正确地实现,顺序、选择、循环,三种基本结构。,2.,面向对象程序设计,程序设计的新思维,面向对象程序设计采用了,数据抽象和信息隐藏技术,。它将对象及对对象的操作抽象成一种新的数据类型,类,,并且考虑不同对象之间的联系和对象所在类的重要性。,面向对象程序设计有希望解决软件工程的两个主要的问题,软件复杂性控制和软件生产率的提高,,此外它还符合人类的思维习惯,能够自然地表现现实世界的实体和问题,它对软件开发过程具有重要的意义。,面向对象程序设计能支持的软件开发策略有:,(1),编写可重用代码;,(2),编写可维护的代码;,(3),共享代码;,(4),精减已有的代码。,1.,对象:,是,计算机内存中的一块区域,,通过将内存分块,每个模块(即对象)在功能上相互之间保持相对独立。当对象的一个成员函数被调用时,对象执行其内部的代码来响应这个调用,这使对象呈现出一定的行为。行为及其结果就是该对象的功能。,2.,面向对象:,是一种,认识世界的方法也是一种程序设计方法,。面向对象的观点认为,客观世界是,由各种各样的实体,也就是对象组成的,。每种对象都有,自己的内部状态和运动规律,,不同对象间的,相互联系和相互作用,就构成了,各种不同的系统,,并进而构成,整个客观世界,。按照这样的思想设计程序,就是面向对象的程序设计。,“,面向对象,”,不仅仅作为一种技术、更作为一种方法贯穿于软件设计的各个阶段。,3.,面向对象程序设计:,是在面向过程的程序设计基础上的质的飞跃。面向对象方法的产生,是计算机科学发展的要求。面向对象的技术在系统程序设计、数据库及多媒体应用等领域都得到广泛应用。,2.,面向对象程序设计,OOP,程序,=,对象,+,对象,+,+,对象,对象,=,算法,+,数据结构,+,程序设计语言,+,语言环境,1.4,面向对象的基本概念 和面向对象系统的特性,1.4.1,面向对象的基本概念,1.,对象,(object),(1),具有唯一标识名,可以区别于其他对象。,(2),具有一个状态,由与其相关联的属性值集合所表征。,(3),有一组操作方法即服务,每个操作决定对象的一种行为。,(4),一个对象的成员仍可以是一个对象。,(5),模块独立性,。,(6),动态连接性,(7),易维护性,从逻辑上看,一个对象是独立存在的模块。模块内部状态不因外界的干扰而改变,也不会涉及到其他模块;模块间的依赖性极小或几乎没有;各模块可独立地被系统所组合选用,也可被程序员重用,不必担心破坏其他模块。,客观世界中的对象之间是有联系的,在面向对象程序设计中,通过消息机制,把对象之间动态连接在一起,使整个机体运转起来,便称为对象的连接性。有一组操作(服务),每一个操作决定对象的一种功能或行为。,2.,类,(class),在面向对象系统中,并不是将各个具体的对象都进行描述,而是忽略其非本质的特性,找出其共性,将对象划分成不同的类,这一过程为抽象过程。,类是,对象的抽象及描述,,是,具有共同属性和操作的多个对象的相似特性的统一描述体,。在类的描述中,每个类要有一个名字标识,用以表示一组对象的共同特征。类中的每个,对象,都是该类的,实例,。,类提供了完整的解决特定问题的能力,因为类描述了数据结构(对象属性)、算法(服务、方法)和外部接口(消息协议),是一种,用户自定义的数据类型,。,3.,消息,(message),消息是面向对象系统中,实现对象间的通信和请求任务的操作,,是,要求某个对象执行其中某个功能操作的规格说明,。,发送消息的对象称为,发送者,,接受消息的对象称为,接收者,。,消息具有,三个性质,:,(1),同一对象可接收不同形式的,多个消息,产生不同的响应,;,(2),相同形式的消息可以送给,不同对象,,,所做出的响应可以是截然不同的,;,(3),消息的发送可以不考虑具体的接收者,对象可以响应消息,也可以对消息不予理会,,对消息的响应并不是必须的,。,对象之间传送的消息一般由三部分组成:接受对象名、调用操作名和必要的参数。,在面向对象程序设计中,消息分为两类:公有消息和私有消息。假设有一批消息发向同一个对象,其中一部分消息是由其他对象直接向它发送的,称为公有(,public,)消息;另一部分消息是它向自己发送的,称为私有(,private,)消息。,4.,方法,(,m,ethod,),方法就是对象所能执行的操作。,方法包括界面和方法体两部分,。,方法的界面就是消息的模式,它给出了方法的调用协议;方法体则是实现某种操作的一系列计算步骤,也就是一段程序。消息和方法的关系是:对象根据接收到的消息,调用相应的方法;反过来,有了方法,对象才能响应相应的消息。所以消息模式与方法界面应该是一致的。同时,只要方法界面保持不变,方法体的改动不会影响方法的调用。在,C+,语言中方法是通过函数来实现的,称为,成员函数。,1.4.2,面向对象系统的特性,(,1,)抽象性,抽象是一种从一般的观点看待事物的方法,它要求程序员集中于事物的,本质特征,,而不是具体细节或具体实现。类的概念来自人们认识自然、认识社会的过程。在这一过程中,人们主要使用,两种方法,:从特殊到一般的,归纳法,和从一般到特殊的,演绎法,。在归纳的过程中,我们从一个个具体的事物中把共同的特征抽取出来,形成一个一般的概念,这就是,“,归类,”,;在演绎的过程中,我们又把同类的事物,根据不同的特征分成不同的小类,这就是,“,分类,”,。对于一个具体的类,它有许多具体的个体,我们称这些个体叫做,“,对象,”,。,所谓数据封装就是指,一组数据和与这组数据有关的操作集合组装在一起,形成一个能动的实体,也就是对象,。数据封装就是给数据提供了与外界联系的标准接口,无论是谁,只有通过这些接口,使用规范的方式,才能访问这些数据。数据封装是软件工程发展的必然产物,使得程序员在设计程序时可以专注于自己的对象,同时也切断了不同模块之间数据的非法使用,减少了出错的可能性。,(2),封装性,从已有的对象类型出发建立一种新的对象类型,使它继承原对象的特点和功能,这种思想是面向对象设计方法的主要贡献。继承是对许多问题中分层特性的一种自然描述,因而也是类的具体化和被重新利用的一种手段,它所表达的就是一种对象类之间的相交关系。它使得某类对象可以继承另外一类对象的特征和能力。继承所具有的作用有两个方面:一方面可以减少代码冗余;另一方面可以通过协调性来减少相互之间的接口和界面。,从继承源上划分,继承可分为单继承(单一继承)和多继承(多重继承)。,从继承内容上,继承可分为取代继承、包含继承、受限继承、特化继承。,(,3,)继承性,(1),取代继承,:例如一个徒弟从其师傅那里学到师傅的所有技术,则在任何需要师傅的地方都可以由徒弟来代替。,(2),包含继承,:例如交通工具是一类对象,汽车是一种特殊的交通工具。汽车具有了交通工具的所有特征,任何一辆汽车都是一种交通工具,这便是包含继承,即交通工具包含了汽车的所有特征。,(3),受限继承,:例如鸵鸟是一种特殊的鸟,它不能继承鸟会飞的特征。,(4),特化继承,:例如教师是一类特殊的人,他们比一般人具有更多的特有信息,这就是特化继承。,4,多态性,(,polymorphism),不同的对象接收到相同的消息时产生多种完全不同的行为的现象称为,多态性,。,C+,语言支持两种多态性即,编译时的多态性和运行时的多态性,。编译时的多态性通过,重载函数,实现,而运行时的多态性通过,虚函数,实现。使用多态性可以大大提高了我们解决复杂问题的能力。,1.5,面向对象程序设计语言的四大家族,(1)LISP,家族,LISP,是,50,年代开发出来的一种语言,它以表处理为特色,是一种人工智能语言,,70,年代以来,在,LISP,基础上开发了很多,LISP,家族的面向对象语言。,(2),Simula,Simula,语言是,60,年代开发出来的,在,Simula,中引入了几个面向对象程序设计语言中最重要的概念和特性,即数据抽象、类和继承性机制。,(3)Smalltalk,Smalltalk,是第一个真正的面向对象程序设计语言,它体现了纯粹的,OOP,设计思想,是最纯的,OOP,语言。它起源于,Simula,语言。尽管,Smalltalk,不断完善,但在那个时期,面向对象程序设计语言并没有得到广泛的重视,程序设计的主流是结构化程序设计。,(4)C,家族,在,19,世纪,80,年代,,C,语言成为一种极其流行、应用非常广泛的语言。,C+,是在,C,语言的基础上进行扩充,并增加了类似,Smalltalk,语言中相应的对象机制。它将,“,类,”,看作是用户定义类型,使其扩充比较自然。,C+,以其高效的执行效率赢得了广大程序设计员的青睐是一种混合型的面向对象程序设计语言,由于它的出现,才使面向对象的程序设计语言越来越得到重视和广泛的应用。,面向对象语言可以分为两大类,纯粹的面向对象语言和混合型的面向对象语言。在纯粹的面向对象语言中,几乎所有的语言成分都是,“,对象,”,,这类语言强调开发快速原型的能力;而混合型的面向对象语言,是在传统的过程化语言中加入了各种面向对象的语言机制,它所强调的是运行效率。真正的面向对象程序设计语言提供了特定的语法成分来保证和支持面向对象程序设计,并且提供了继承性、多态性和动态链接机制,使得类和类库成为可重用的模块。,1.6,面向对象的系统开发方法,面向对象的开发方法可分为四个阶段:,(1),系统调查和需求分析。,即对应用系统将要实现的功能以及用户对系统开发的需求进行调查研究。这是所有开发方法都必须进行的。,(2),分析问题的性质和求解问题。,在繁杂的问题域中抽象地识别出对象及其行为、结构、属性、方法等。这一阶段称为面向对象分析,简称为,OOA,。,(3),整理问题。,即对分析的结果作进一步的抽象、归类、整理,最终以规范的形式描述对象和类。这一步称为面向对象设计,简称为,OOD,。,(4),程序实现。,即用面向对象的程序设计语言将上一步整理的对象和类的描述映射为应用程序软件。这一步一般称为面向对象程序设计,简称为,OOP,。,1.7,面向对象程序设计举例,分析:,通过上述程序可以得知,在面向对象程序设计中,程序是由不同的对象构成的;类是一种用户自定义的数据类型,通过类定义的变量称为对象;类和对象构成面向对象程序设计的不同模块;通过不同的对象发送消息即可完成相应的操作。,【例1.1】,使用面向对象程序设计方法,编写一对堆栈进行处理的程序,包括压栈和弹栈操作。,实验一:熟悉实验环境,实验目的,1.,了解和使用,Visual C+6.0,的集成开发环境。,2.,熟悉,Visual C+6.0,环境的基本命令和功能键,熟悉常用的菜单命令。,3.,学习使用,Visual C+6.0,环境的帮助。,4,学会完整的,C+,程序开发过程(编辑、编译、链接、调试、运行、查看结果)。,创建三个简单的应用程序:,1.,输出,100,以内的所有素数。,2.,输入,5,个字符串,按英文字典排序,由小到大顺序输出。,3.,求,1,20,的阶乘之和。,实验内容,你的程序设计能力与你投入到计算机上的时间成正比。,要想学好程序设计,就得多读程序,多编程序,多调试程序。,
展开阅读全文