面向对象课件课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.1 面向对象方法的起源
软件设计人员的负担越来越重,软件的实现越来越 庞大,为计算机领域自身的发展提出了新的要求。利 用传统的程序设计思想无法满足这一要求,人们就开 始寻求一种更能反映人类解决问题的自然方法,这就 是“面向对象”技术。 50年代的程序都是用指令代码或汇编语言编写的 60 年代高级语言的出现大大简化了程序设计,缩短了软 件开发周期自60年代末到70年代初,出现了大型软件 系统,如操作系统、数据库,这给程序设计带来了新 的问题。可靠性差,错误多,且不易维护和修改-“软 件危机”。
程序设计是数据被加工的过程 机 器 语 言 汇 编 语 言 高 级 语 言
面向过程
面向对象
CPU指令系统,由0、 1序列构成的指令码组成 客观世界可以分类,对象是类的实例 面向机器的语言 用助记符号描述的指令系统 如:10000000 加 对象是数据和方法的封装 程序设计关键是定义类,并由类派生对象 如 ADD A, B 10010000 减 对象间通过发送和接受消息发生联系
数据的定义与管理,采用过程调用机制也不够灵活,独
立性较差。
为了适应高技术发展的需要,消除结构化编程语 言的局限,自80年代以来,出现了面向对象程序 设计流派,研制出了多种面向对象程序设计语言 (简称为 OOPL : Object Oriented Programming Language ),如 Ada , Smalltalk , C++ 和当前使
用在Internet上的平台无关语言Java等。
由于OOPL的对象、类具有高度的抽象性,所以它能很 好地表达任何复杂的数据类型,也允许程序员灵活地定
义自己所需要的数据类型。类本身具有很完整的封装性,
可以使用它作为编程中的模块单元,满足模块独立自治
的需求。再加上继承性和多态性,更有助于简化大型软
件和大量重复定义的模块,增强了模块的可重用性,提
1.4.2 面向对象系统的特性
(1) 抽象性 面向对象鼓励程序员以抽象的观点看待程序,即 程序是由一组对象组成的。我们可以将一组对象的共 同特征进一步抽象出来,从而形成“类”的概念。抽 象是一种从一般的观点看待事物的方法,它要求程序 员集中于事物的本质特征,而不是具体细节或具体实 现。类的概念来自人们认识自然、认识社会的过程。 在这一过程中,人们主要使用两种方法:从特殊到一 般的归纳法和从一般到特殊的演绎法。在归纳的过程 中,我们从一个个具体的事物中把共同的特征抽取出 来,形成一个一般的概念,这就是“归类”;在演绎 的过程中,我们又把同类的事物,根据不同的特征分 成不同的小类,这就是“分类”。对于一个具体的类, 它有许多具体的个体,我们称这些个体叫做“对象”。
4. 方法(method)
在面向对象程序设计中,要求某一对象做某一操 作时,就向对象发送一个相应的消息,当对象接收到 发向它的消息时,就调用有关的方法,执行相应的操 作。方法就是对象所能执行的操作。方法包括界面和 方法体两部分。方法的界面就是消息的模式,它给出 了方法的调用协议;方法体则是实现某种操作的一系 列计算步骤,也就是一段程序。消息和方法的关系是: 对象根据接收到的消息,调用相应的方法;反过来, 有了方法,对象才能响应相应的消息。所以消息模式 与方法界面应该是一致的。同时,只要方法界面保持 不变,方法体的改动不会影响方法的调用。在C++语言 中方法是通过函数来实现的,称为成员函数。
1.对象:是计算机内存中的一块区域,通过将内存分块, 每个模块(即对象)在功能上相互之间保持相对独立。 当对象的一个成员函数被调用时,对象执行其内部的代 码来响应这个调用,这使对象呈现出一定的行为。行为 及其结果就是该对象的功能。 2.面向对象:是一种认识世界的方法也是一种程序设计方 法。面向对象的观点认为,客观世界是由各种各样的实 体,也就是对象组成的。每种对象都有自己的内部状态 和运动规律,不同对象间的相互联系和相互作用就构成 了各种不同的系统,并进而构成整个客观世界。按照这 样的思想设计程序,就是面向对象的程序设计。“面向 对象”不仅仅作为一种技术、更作为一种方法贯穿于软 件设计的各个阶段。 3.面向对象程序设计:是在面向过程的程序设计基础上的 质的飞跃。面向对象方法的产生,是计算机科学发展的 要求。面向对象的技术在系统程序设计、数据库及多媒 体应用等领域都得到广泛应用。
第 1章
1.1 1.2 1.3 1.4 1.5 1.6 1.7
绪
论
面向对象方法的起源 面向对象是软件方法学的返朴归真 结构化程序设计与面向对象程序设计 面向对象的基本概念和面向对象系统的特性 面向对象程序设计语言的四大家族 面向对象的系统开发方法 面向对象程序设计举例
1.1 面向对象方法的起源
2. 面向对象程序设计OOP
程序=对象+对象+…+对象 对象=算法+数据结构+程序设计语言+语言环境
1.4 面向对象的基本概念 和面向对象系统的特性
1.4.1 面向对象的基本概念 从逻辑上看,一个对象是独立存在的模 块。模块内部状态不因外界的干扰而改 1.对象(object) 变,也不会涉及到其他模块;模块间的 (1)具有唯一标识名,可以区别于其他对象。 依赖性极小或几乎没有;各模块可独立 (2)具有一个状态,由与其相关联的属性值集合所表征。 地被系统所组合选用,也可被程序员重 (3)有一组操作方法即服务,每个操作决定对象的一种行为。 用,不必担心破坏其他模块。
பைடு நூலகம்面向对象程序设计
参考书
面向对象的理论与C++实践
王燕 清华大学出版
中国铁道出版社
C++面向对象程序设计
谭浩强主编
课时安排 授课:34学时 上机:30学时
THE C++ PROGRAMMING LANGUAGE(Special Edition)
Bjarne Stroustrup 高等教育出版社
授课班级: 主讲教师:
高了软件的可靠性,缩短了软件的开发周期。
1.2 面向对象是软件方法学的返朴归真
客观世界是由许多具体的事物、抽象的概念、 规则等组成的,我们将任何感兴趣或要加以研 究的事、物、概念统称为对象Object。 每个对象都有各自的内部状态和运动规律, 不同对象之间通过消息传递进行相互作用和联 系就构成了各种不同的系统。面向对象的方法 正是以对象作为最基本元素的一种分析问题和 解决问题的方法。
传统的结构化方法强调的是功能抽象和模块化,每
个模块都是一个过程。结构化方法处理问题是以过程为 中心的。面向对象强调的是功能抽象和数据抽象,用对 是对数据和功能的抽象和统一。面向对象方法处理问题
象来描述事物和过程。而对象包含数据和对数据的操作,
的过程是对一系列相关对象的操纵,即发送消息到目标
对象中,由对象执行相应的操作。因此面向对象方法是 以对象为中心的,这种以对象为中心的方法更自然、更 直接地反映现实世界的问题空间,具有独特的抽象性、 封装性、继承性和多态性,能更好地适应复杂大系统不
2.面向对象程序设计—程序设计的新思维
面向对象程序设计将数据及对数据的操作放在一起, 作为一个相互依存、不可分割的整体来处理,它采用了 数据抽象和信息隐藏技术。它将对象及对对象的操作抽 象成一种新的数据类型类,并且考虑不同对象之间的联 系和对象所在类的重要性。 面向对象程序设计优于传统的结构化程序设计,其优 越性表现在,它有希望解决软件工程的两个主要的问 题——软件复杂性控制和软件生产率的提高,此外它还 符合人类的思维习惯,能够自然地表现现实世界的实体 和问题,它对软件开发过程具有重要的意义。 面向对象程序设计能支持的软件开发策略有: (1) 编写可重用代码;(2) 编写可维护的代码; (3) 共享代码; (4) 精减已有的代码。
3. 消息(message)
消息是面向对象系统中实现对象间的通信和请求 任务的操作,是要求某个对象执行其中某个功能操作 对象之间传送的消息一般由三部分组成: 的规格说明。发送消息的对象称为发送者,接受消息 接受对象名、调用操作名和必要的参数。 的对象称为接收者。对象间的联系,只能通过消息来 在面向对象程序设计中,消息分为两类: 进行。对象在接收到消息时才被激活。 公有消息和私有消息。假设有一批消息发向同 消息具有三个性质: 一个对象,其中一部分消息是由其他对象直接 (1) 同一对象可接收不同形式的多个消息,产生不 向它发送的,称为公有(public)消息;另一 同的响应; 部分消息是它向自己发送的,称为私有 (2) 相同形式的消息可以送给不同对象,所做出的 响应可以是截然不同的; (private)消息。 (3) 消息的发送可以不考虑具体的接收者,对象可 以响应消息,也可以对消息不予理会,对消息的响应 并不是必须的。
在面向对象系统中,并不是将各个具体的对象都 进行描述,而是忽略其非本质的特性,找出其共性, 将对象划分成不同的类,这一过程为抽象过程。类是 对象的抽象及描述,是具有共同属性和操作的多个对 象的相似特性的统一描述体。在类的描述中,每个类 要有一个名字标识,用以表示一组对象的共同特征。 类中的每个对象都是该类的实例。类提供了完整的解 决特定问题的能力,因为类描述了数据结构(对象属 性)、算法(服务、方法)和外部接口(消息协议), 是一种用户自定义的数据类型。
断发展与变化的要求。
采用对象的观点看待所要解决的问题,并将其抽象为 应用系统是极其自然与简单的,因为它符合人类的思维习 惯,使得应用系统更容易理解。同时,由于应用系统是由 相互独立的对象构成的,使得系统的修改可以局部化,因 此系统更易于维护。
软件开发从本质上讲就是对软件所要处理的问题域进 行正确的认识,并把这种认识正确地描述出来。既然如此, 那就应该直接面对问题域中客观存在的事物来进行软件开 发,这就是面向对象。另一方面,人类在认识世界的历史 长河中形成的普遍有效的思维方法,在软件开发中也应该 是适用的。在软件开发中尽量采用人们在日常生活中习惯 的思维方式和表达方式,这就是面向对象方法所强调的基 本原则。软件开发从过分专业化的方法、规则和技巧中回 到了客观世界,回到了人们的日常思维,所以说面向对象 方法是软件方法学的返朴归真。
1.3结构化程序设计与面向对象程序设计
1.结构化程序设计 程序=数据结构+算法+程序设计语言+语言环境
1. 结构化程序设计方法
自顶向下、逐步细化:结构化程序设计的主要思想是功能分 解并逐步求精。当一些任务复杂以至无法描述时,可以将它 拆分为一系列较小的功能部件,直到这些完备的子任务小到 易于理解的程度。这种方法叫“自顶向下,逐步细化”。 模块化设计:在程序设计中常采用模块化设计的方法,尤其 是当程序比较复杂时,更有必要。在拿到一个程序模块(实 际上是程序模块的任务书)以后,根据程序模块的功能将它 划分为若干个子模块,如果嫌这些子模块的规模大,还可以 划分为更小的模块。这个过程采用自顶向下方法来实现。结 构化程序设计方法可以解决人脑思维能力的局限性和所处理 问题的复杂性之间的矛盾。 结构化编码:在设计好一个结构化的算法之后,还要善于进 行结构化编码。即用高级语言语句正确地实现顺序、选择、
为了克服60年代出现的软件危机,1968年北约组织提 出“软件工程”的概念。对程序设计语言的认识从强调 表达能力为重点转向以结构化和简明性为重点,将程序 从 语 句 序 列 转 向 相 互 作 用 的 模 块 集 合 。 1969 年 , E.W.Dijkstra 首先提出了结构化程序设计的概念,他强 调从程序结构和风格上来研究程序设计。在软件工程的 迫切要求下,70年代结构化语言获得蓬勃发展并得到广 泛应用。使用结构化程序设计方法可显著地减少软件的 复杂性,提高软件的可靠性、可测试性和可维护性。经 过几年的探索和实践,结构化程序设计的应用确实取得 了成效,用结构化程序设计的方法编写出来的程序不仅 结构良好,易写易读,而且易于证明其正确性。
(4)一个对象的成员仍可以是一个对象。 (5)模块独立性。 客观世界中的对象之间是有联系的,在 (6)动态连接性 面向对象程序设计中,通过消息机制, (7)易维护性
把对象之间动态连接在一起,使整个机 体运转起来,便称为对象的连接性。有 一组操作(服务),每一个操作决定对 象的一种功能或行为。
2. 类(class)
进入 80 年代,由于一系列高技术的研究,如第五代 计算机、计算机辅助制造 CAM 和知识工程等领域的研究 都迫切要求大型的软件系统作为支撑。他们所用的数据
类型也超出了常规的结构化数据类型的范畴,提出对图
像、声音、规则等非结构化信息的管理。为了适应这些 应用领域的需要,迫切要求软件模块具有更强的独立自 治性,以便于大型软件的管理、维护和重用。由于结构 化语言的数据类型较为简单,所以不能胜任对非结构化