面向对象程序设计概论_第1页
面向对象程序设计概论_第2页
面向对象程序设计概论_第3页
面向对象程序设计概论_第4页
面向对象程序设计概论_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、面向对象程序设计概论 1.1 程序设计技术的发展程序设计技术的发展 1.1.1 1.1.1 程序设计方法的提出背景程序设计方法的提出背景 回首计算机的发展历程,发现计算机软件的发展速度始终滞后回首计算机的发展历程,发现计算机软件的发展速度始终滞后于计算机硬件的发展,它已经成为制约计算机产业整体发展的于计算机硬件的发展,它已经成为制约计算机产业整体发展的瓶颈。究其原因可能有很多方面,但下面两点不容忽视瓶颈。究其原因可能有很多方面,但下面两点不容忽视: :l软件产业的个体化软件产业的个体化l受限于程序设计语言受限于程序设计语言1. 1.2 程序设计技术的发展程序设计技术的发展 1 1 面向机器的语

2、言面向机器的语言机器语言机器语言是硬件逻辑设计所实现的机器指令的集合,也就是硬件逻辑设计所实现的机器指令的集合,也就是由硬件所能实现的语义序列集合。其表现形式为能被机器直接是由硬件所能实现的语义序列集合。其表现形式为能被机器直接接收的二进制代码序列。接收的二进制代码序列。汇编语言汇编语言是机器语言的直接符号映射。它用人类能够理解的助是机器语言的直接符号映射。它用人类能够理解的助记符号来表示机器指令、寄存器、存储器地址等物理概念,以提高程序记符号来表示机器指令、寄存器、存储器地址等物理概念,以提高程序的可读性。的可读性。早期的计算机应用以问题求解为主要目标,算法的设计和实现是程早期的计算机应用以

3、问题求解为主要目标,算法的设计和实现是程序设计活动的焦点。注重追求算法的效率,并不特别注意算法与数序设计活动的焦点。注重追求算法的效率,并不特别注意算法与数据结构的依赖关系,算法和数据处于相对独立的状态。据结构的依赖关系,算法和数据处于相对独立的状态。2 2 面向问题的语言面向问题的语言FORTRANFORTRAN语言,引入了程序设计语言中程序控制结构、符号命名机制语言,引入了程序设计语言中程序控制结构、符号命名机制等一些最重要的基本概念。例如:命名子程序、变量作为存储单元的等一些最重要的基本概念。例如:命名子程序、变量作为存储单元的抽象以及数组的概念等。抽象以及数组的概念等。随着编译技术的突

4、破随着编译技术的突破, ,产生的高级语言用接近人类习惯的自然语产生的高级语言用接近人类习惯的自然语言或数学语言表达问题、编制程序。言或数学语言表达问题、编制程序。模块化程序设计模块化程序设计FORTRANFORTRAN语言引入了独立编译的模块和可重用子程序库的语言引入了独立编译的模块和可重用子程序库的概念,该技术后来被称为模块化程序设计。概念,该技术后来被称为模块化程序设计。模块化的思想是将应用程序划分若干个规模适度的模块,每模块化的思想是将应用程序划分若干个规模适度的模块,每个模块独立命名、独立编译,最后通过连接程序形成可使用个模块独立命名、独立编译,最后通过连接程序形成可使用的应用程序。的

5、应用程序。 3 3 面向数据结构的程序设计面向数据结构的程序设计研究证明,仅用顺序,分支,循环三种基本控制结构就能研究证明,仅用顺序,分支,循环三种基本控制结构就能构造出任何单入口、单出口的程序块。构造出任何单入口、单出口的程序块。此研究结果与模块化的概念相结合,形成了采用自顶向此研究结果与模块化的概念相结合,形成了采用自顶向下、逐步求精的设计步骤和单入口单出口基本控制结构下、逐步求精的设计步骤和单入口单出口基本控制结构的结构化程序设计方法。的结构化程序设计方法。PascalPascal语言和语言和C C语言都是结构化程序设计语言。同时也是语言都是结构化程序设计语言。同时也是过程化程序设计语言

6、。过程化程序设计语言。 PascalPascal语言用过程来组织程序。语言用过程来组织程序。C C语言用函数来组织程序。语言用函数来组织程序。过程过程(Procedure)(Procedure)和函数和函数(Function)(Function)是子程序的两种具是子程序的两种具体形式。区别是过程没有返回值。函数有且只有一体形式。区别是过程没有返回值。函数有且只有一个返回值。个返回值。结构化程序设计的研究中有一个重要的结论,表示为公式结构化程序设计的研究中有一个重要的结论,表示为公式:程序:程序= =算法算法+ +数据结构,强调算法对数据结构的依赖数据结构,强调算法对数据结构的依赖性,体现了一种

7、以数据结构为中心的观念。性,体现了一种以数据结构为中心的观念。4 4 面向对象的程序设计面向对象的程序设计面向对象的程序设计方法继承了结构化、过程化、模块化等方法的所有积极成分,创造性地引入了“对象”这一构建程序的基本构件。对象是由数据结构和对数据结构的操作或运算封对象是由数据结构和对数据结构的操作或运算封装而成的一个整体。装而成的一个整体。封装使得算法和数据结构的关系由算法对数据结构单方面由算法对数据结构单方面的依赖变成了相互依存的依赖变成了相互依存的关系。在面向对象的软件系统中,一个个不同类型的对象相互作用,自底向上构建起整个程序系统。它以 “对象对象= = 数据结构数据结构+ +算法,算

8、法, 程序程序= =对象对象+ +对象对象+对象对象”取代了“程序程序= =数据结构数据结构+ +算法算法”的传统程序设计模式。因而引起了一场程序设计观念的革命。面向对象方法采用数据抽象与隐藏、层次结构体系,动面向对象方法采用数据抽象与隐藏、层次结构体系,动态绑定等概念和措施,提供一种模拟人类认知方式的软态绑定等概念和措施,提供一种模拟人类认知方式的软件系统建模方法,带来了系统的安全性、可扩充性、代件系统建模方法,带来了系统的安全性、可扩充性、代码重用、易维护等期待的特性。码重用、易维护等期待的特性。 面向对象程序设计方法是指用面向对象的方法指导面向对象程序设计方法是指用面向对象的方法指导程序

9、设计的整个过程。面向对象是指以对象为中心程序设计的整个过程。面向对象是指以对象为中心,分析、设计及构造应用程序的机制。,分析、设计及构造应用程序的机制。 1.1.3 OOPL1.1.3 OOPL的来源与发展的来源与发展OOPLOOPL(Object Oriented Programming LanguageObject Oriented Programming Language 面向面向对象程序设计语言)对象程序设计语言)2020世纪世纪6060年代年代, , 由挪威计算中心由挪威计算中心Ole DahlOle Dahl和和Krysten NygaardKrysten Nygaard主持开主持

10、开发的发的Simula67Simula67 被公认为是面向对象语言的先驱。被公认为是面向对象语言的先驱。2020世纪世纪7070年代,由美国国防部资助开发的年代,由美国国防部资助开发的AdaAda语言,以它对抽象数据语言,以它对抽象数据类型的支持,而在面向对象语言发展中占有重要地位。类型的支持,而在面向对象语言发展中占有重要地位。Simula 67 Simula 67 和和AdaAda被看作是被看作是OOPLOOPL的两个直接的的两个直接的“祖先祖先”,一个引入,一个引入“模拟模拟”,一个引入,一个引入“抽象抽象”。2020世纪世纪7070年代到年代到8080年代年代, , 美国美国Xerox

11、Xerox公司,公司,Palo AltoPalo Alto研究中心(研究中心(PARCPARC)的)的Alan Kay, Adale GoldbergAlan Kay, Adale Goldberg和和Dan IngansDan Ingans等人主持开发的等人主持开发的SmalltalkSmalltalk语言正式使用了语言正式使用了“面向对象面向对象”这个术语。它的问世标志这个术语。它的问世标志着面向对象程序设计方法的正式形成。着面向对象程序设计方法的正式形成。19811981年推出的年推出的Smalltalk-80Smalltalk-80是是SmalltalkSmalltalk语言最完善的版

12、本。它是第语言最完善的版本。它是第一个能够实际应用的纯的面向对象语言。在一个能够实际应用的纯的面向对象语言。在SmalltalkSmalltalk-8080中类和对中类和对象不仅仅是语言成分,而且是交互式程序设计环境的组成部分。象不仅仅是语言成分,而且是交互式程序设计环境的组成部分。8080年代中期,年代中期,Simula67Simula67、Smalltalk-80Smalltalk-80等语言的影响仅仅局限在等语言的影响仅仅局限在学术界。面向对象语言对计算平台的特殊要求使这些语言难于被学术界。面向对象语言对计算平台的特殊要求使这些语言难于被软件开发商和程序员接受。软件开发商和程序员接受。贝

13、尔实验室的贝尔实验室的Bjarne Stroustrup Bjarne Stroustrup 及其研究小组在当时最受欢迎的及其研究小组在当时最受欢迎的C C语言基础上开发的语言基础上开发的C+C+语言,引入了对面向对象概念的支持。语言,引入了对面向对象概念的支持。C+C+语言以其与语言以其与C C语言兼容、高运行效率等优良特性,使面向对象程序语言兼容、高运行效率等优良特性,使面向对象程序设计技术受到软件工业界的广泛关注,使之进入一个全面发展的时期。设计技术受到软件工业界的广泛关注,使之进入一个全面发展的时期。尽管尽管C+C+只能算作一种混合式面向对象语言。但是正是由于大量只能算作一种混合式面向

14、对象语言。但是正是由于大量C C程程序员通过序员通过C+C+的帮助才迅速掌握了面向对象的概念和方法,全面促进的帮助才迅速掌握了面向对象的概念和方法,全面促进了面向对象技术的应用,从而使了面向对象技术的应用,从而使C+C+成为最有影响的面向对象语言,甚成为最有影响的面向对象语言,甚至许多人把至许多人把C+C+当作面向对象的代名词。当作面向对象的代名词。面向对象技术的流行进一步促进了面向对象语言的繁荣。面向对象技术的流行进一步促进了面向对象语言的繁荣。9090年代涌现出了一大批实用的年代涌现出了一大批实用的面向对象语言,如面向对象语言,如Object PascalObject Pascal、Eif

15、felEiffel、JavaJava等等等等。JavaJava语言是由语言是由Sun MicrosystemSun Microsystem公司推出的一种纯面向对象语言。公司推出的一种纯面向对象语言。JavaJava从从C+C+语言中继承了大量的语言成分,抛弃了语言中继承了大量的语言成分,抛弃了C+C+语言中冗余的和容易引起问题的功能语言中冗余的和容易引起问题的功能,它将面向对象、平台无关性、稳定性、安全性等集于一身,提供了一个良好的,它将面向对象、平台无关性、稳定性、安全性等集于一身,提供了一个良好的程序设计环境,因而成为适合于分布式计算的程序设计语言。程序设计环境,因而成为适合于分布式计算的

16、程序设计语言。JavaJava语言于语言于9090年代中期的迅速流行与它定位于当时迅速发展的年代中期的迅速流行与它定位于当时迅速发展的InternetInternet的的WWWWWW应用开发有关。展示了面向对象技术与分布式计算结合的重大前景。应用开发有关。展示了面向对象技术与分布式计算结合的重大前景。后面向对象时代的计算机语言程序设计语言: C+, Java脚本语言: Java Script , VBScript标记语言: SGML, HTML, XML样式语言: CSS, XSL建模语言: UML1. 2 1. 2 程序设计方法程序设计方法结构化程序设计方法结构化程序设计方法(从系统的功能入

17、手(从系统的功能入手 ,可重,可重用性、稳定性不高)用性、稳定性不高)面向对象程序设计方法面向对象程序设计方法(数据为中心而不是以服(数据为中心而不是以服务(功能)为中心来描述系统务(功能)为中心来描述系统 ,可重用性高,稳定性强),可重用性高,稳定性强)指导程序设计工作的思想方法指导程序设计工作的思想方法, ,包括程序包括程序设计原理和所遵循的原则设计原理和所遵循的原则, ,帮助设计者从不同的角度描述问帮助设计者从不同的角度描述问题域。题域。1.2.1 结构化程序设计方法结构化程序设计方法n自顶向下、逐步求精的开发方法自顶向下、逐步求精的开发方法n 模块化的组织方式模块化的组织方式n 结构化

18、的语句结构结构化的语句结构自顶向下、逐步求精 将编写程序看成是一个逐步演化的过程。将编写程序看成是一个逐步演化的过程。自顶向下是指将分析问题的过程划分成自顶向下是指将分析问题的过程划分成若干个层次,每一个新的层次都是上一若干个层次,每一个新的层次都是上一个层次的细化,即步步深入,逐层细分。个层次的细化,即步步深入,逐层细分。 模块化 将整个系统分解成若干个模块,每个模块实现特定将整个系统分解成若干个模块,每个模块实现特定的功能,最终的系统将由这些模块组装而成。模块的功能,最终的系统将由这些模块组装而成。模块之间通过接口传递信息,力求模块具有良好的独立之间通过接口传递信息,力求模块具有良好的独立

19、性。性。 语句结构化ABTAB顺序结构顺序结构分支结构分支结构YNATYNATYNwhile 循环结构循环结构do 循环结构循环结构结构化程序设计的特点程序设计数据结构算法程序设计数据结构算法程序内容过程过程调用程序内容过程过程调用结构化程序设计的基本过程软件开发的基本过程:软件开发的基本过程:需求分析需求分析系统分析系统分析系统设计系统设计系统实现系统实现系统测试系统测试系统维护系统维护当结构化思想贯穿于每个过程时,其基本过程:分当结构化思想贯穿于每个过程时,其基本过程:分解和组装解和组装MM1M2M3M4MnM31M32M33分解过程组装过程组装过程1.2.2 面向对象程序设计方法1 面向

20、对象程序设计的产生背景:面向对象程序设计的产生背景:结构化程序设计结构化程序设计面向对象程序设面向对象程序设计计1.审视问题域的视角审视问题域的视角操作操作客体客体2.抽象级别抽象级别过程抽象(低)过程抽象(低)数据抽象(高)数据抽象(高)3.封装体封装体功能模块功能模块类类/ /对象对象4.可重用性可重用性模块模块构件构件2 面向对象程序设计方法面向对象程序设计方法 对象对象 (objectobject)现实世界中的一个实现实世界中的一个实体体 可以把真实世界当作是由许多大小不同的可以把真实世界当作是由许多大小不同的对象所组成的。对象所组成的。对象可以是有生命的个体,比对象可以是有生命的个体

21、,比如一个人或一只鸟。如一个人或一只鸟。对象也可以是无生命的个对象也可以是无生命的个体,比如一辆汽车或一台体,比如一辆汽车或一台计算机计算机。 对象也可以是一件抽象的对象也可以是一件抽象的事物,如天气或鼠标所产事物,如天气或鼠标所产生的事件生的事件。 对象的特征对象的特征对象有两个特征:属性(状态)和行为。对象有两个特征:属性(状态)和行为。 例如:人有身高或体重等属性,并有行为例如:人有身高或体重等属性,并有行为如唱歌、打球、如唱歌、打球、学习、思考等。学习、思考等。 狗有颜色,大小等状态,也有行为,如吠叫或跳跃狗有颜色,大小等状态,也有行为,如吠叫或跳跃。而在程序设计中,软件对象的概念由真

22、实世界对象而来。软而在程序设计中,软件对象的概念由真实世界对象而来。软件对象将状态保存在变量(件对象将状态保存在变量(variables)或称数据字段()或称数据字段(data field)里。而行为则借助方法()里。而行为则借助方法(methods)为工具来实现)为工具来实现 。数据字段(状态)数据字段(状态)data field 1data field nmethod 1method n方法(行为)方法(行为)对象具有对象具有5 5个基本特性:个基本特性:n 自治性,指对象具有一定的独立操作能力;自治性,指对象具有一定的独立操作能力;n 封闭性,指对象具有信息隐蔽的能力;封闭性,指对象具有

23、信息隐蔽的能力;n 通信性,指对象具有与其他对象通信的能力;通信性,指对象具有与其他对象通信的能力;n 被动性,指对象的状态转换需由外界刺激引发;被动性,指对象的状态转换需由外界刺激引发;n 暂存性,指对象的动态创建与消亡。暂存性,指对象的动态创建与消亡。在真实世界里,有许多同在真实世界里,有许多同“种类种类”的对象。而这些同的对象。而这些同“种种类类”的对象可被归类为一个的对象可被归类为一个“类类”。例如可将世界上所有。例如可将世界上所有的动物归为动物类,所有的汽车归类为汽车类的动物归为动物类,所有的汽车归类为汽车类。 动物类汽车类类类是一组具有相同属性特征的对象的抽象描述是一组具有相同属性

24、特征的对象的抽象描述( (抽象的概抽象的概念念) )。类之间存在的三种关系:泛化、关联、聚合类之间存在的三种关系:泛化、关联、聚合汽车类(class)实例(instance)NEW你的车学生类:学生类:类对象的属性类对象的属性: 学号学号 专业专业 性别性别 身高身高 体重体重类对象的功能:类对象的功能: 回答学号回答学号 回答专业回答专业 回答性别回答性别 回答身高回答身高 回答体重回答体重 体重变化体重变化 修理电器修理电器 开车开车 自身所承受的操作自身所承受的操作施加于其他对象的操作施加于其他对象的操作学生对象:学生对象:属性:属性: 学号:学号:0410430129 专业:信息管理专

25、业:信息管理 性别:男性别:男 身高:身高:175cm 体重体重: 65kg对象的功能:对象的功能: 回答学号回答学号 回答专业回答专业 回答性别回答性别 回答身高回答身高 回答体重回答体重 体重变化体重变化 修理电器修理电器 开车开车赋具体值赋具体值对对 象象类的实例类的实例cl class Studentint No; /学号学号String name; /姓名姓名Date birth; /出生年月日出生年月日float score; /学习成绩学习成绩 static float salary=80; /每月补贴每月补贴Student()Student(int No,String str,

26、Date date,score) this.No=No; name=new String(str); birth=new Date(date); this.score=score;int getNo()return No;void setScore(float num)score=num; String getName() return name; static void addSalary() salary+=50;0310430240张平张平1985年年8月月8日日98赋具体值赋具体值对对 象象Date date=new Date(1985,8,8);Student stu=new Stu

27、dent(0310430240,“张平张平”,date,98);类的实例类的实例面向对象程序设计具有的特征l 所有待处理的内容都表示成对象;所有待处理的内容都表示成对象;l 对象间依靠相互发送消息或响应消息实现通信;对象间依靠相互发送消息或响应消息实现通信;l 每个对象都有自己的惟一标识,以便区别属于同一个类的每个对象都有自己的惟一标识,以便区别属于同一个类的不同对象;不同对象;l 对象一定属于某个类,将这个对象称为所属类的一个实对象一定属于某个类,将这个对象称为所属类的一个实例;例;l 类是将具有共同属性的对象进行抽象的结果,它可以类是将具有共同属性的对象进行抽象的结果,它可以具有层次关系,

28、即一个类既可以通过继承其他类而来,具有层次关系,即一个类既可以通过继承其他类而来,也可以被其他类继承。也可以被其他类继承。为什么需要面向对象方法?1.3 面向对象设计方法的四个特性p 抽象性抽象性p 封装性封装性p 继承性继承性p 多态性多态性 1.1.抽象抽象抽象是指从许多事物中,舍弃个别的、非本质的属性,抽抽象是指从许多事物中,舍弃个别的、非本质的属性,抽取出共同的、本质的属性。取出共同的、本质的属性。抽象包括过程抽象和数据抽象。抽象包括过程抽象和数据抽象。 过程抽象是指功能抽象,即舍弃个别的功能,抽取共同过程抽象是指功能抽象,即舍弃个别的功能,抽取共同拥有的功能拥有的功能 数据抽象是一种

29、更高级别的抽象方法,它将现实世界中数据抽象是一种更高级别的抽象方法,它将现实世界中存在的客体作为抽象单元,其抽象内容既包括客体的属存在的客体作为抽象单元,其抽象内容既包括客体的属性特征,也包括行为特征,它是面向对象程序设计所采性特征,也包括行为特征,它是面向对象程序设计所采用的核心方法。用的核心方法。将对象的属性和行为分别用数据结构和方法描述,并将它们将对象的属性和行为分别用数据结构和方法描述,并将它们绑定在一起形成一个可供访问的基本逻辑单元。(通过访问绑定在一起形成一个可供访问的基本逻辑单元。(通过访问属性限制对对象属性的操作)属性限制对对象属性的操作)2.封装封装属性属性行为行为1行为行为

30、2行为行为3行为行为4行为行为5行为行为6行为行为8行为行为7指一个类的定义可以基于另外一个已经存在的类,即子类基指一个类的定义可以基于另外一个已经存在的类,即子类基于父类,从而实现父类代码的重用。于父类,从而实现父类代码的重用。3.继承继承 子子 类类继承部分继承部分个性部分个性部分父父 类类共性部分共性部分汽车类轿车巴士计程车4.多态性多态性不同的类对象收到同一个消息可以产生完全不同的响应效果,不同的类对象收到同一个消息可以产生完全不同的响应效果,这种现象叫做多态。这种现象叫做多态。哺乳动物 狗 猫鸭子 Sound()消息消息多态性依托多态性依托于继承性于继承性消息与消息传递消息与消息传递 消息是一个对象要求另一个对象实施某项操作的请求。消息是一个对象要求另一个对象实施某项操作的请求。 在一条消息中,需要包含消息的接收者和要求接收者在一条消息中,需

温馨提示

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

评论

0/150

提交评论