第九章面向对象程序设计 基础 2004年3月 河北建筑工程学院
第九章 面向对象程序设计 基础 2004年3月 河北建筑工程学院
91面向对象程序设计概述 911面向对象是软件方法学的返朴归真 客观世界是由许多具体的事物、抽象的概念、规则等组成的, 我们将任何感兴趣或要加以研究的事、物、概念统称为对象 ( Object)。每个对象都有各自的内部状态和运动规律,不 同对象之间通过消息传送进行相互作用和联系就构成了各种 不同的系统。面向传统的结构化方法强调的是功能抽象和模 块化,每个模块都是一个过程。 结构化方法处理问题是以过程为中心。面向对象强调的是功 能抽象和数据抽象,用对象来描述事物和过程。而对象包含 数据和对数据的操作,是对数据和功能的抽象和统一。面向 对象方法处理问题的过程是对一系列相关对象的操纵,即发 送消息到目标对象中,由对象执行相应的操作
9.1 面向对象程序设计概述 9.1.1 面向对象是软件方法学的返朴归真 客观世界是由许多具体的事物、抽象的概念、规则等组成的, 我们将任何感兴趣或要加以研究的事、物、概念统称为对象 (Object)。每个对象都有各自的内部状态和运动规律,不 同对象之间通过消息传送进行相互作用和联系就构成了各种 不同的系统。面向传统的结构化方法强调的是功能抽象和模 块化,每个模块都是一个过程。 结构化方法处理问题是以过程为中心。面向对象强调的是功 能抽象和数据抽象,用对象来描述事物和过程。而对象包含 数据和对数据的操作,是对数据和功能的抽象和统一。面向 对象方法处理问题的过程是对一系列相关对象的操纵,即发 送消息到目标对象中,由对象执行相应的操作
从结构到类 程序=数据结构+算法 程序=(数据结构+算法) +(数据结构+算法) 程序=对象+对象
从结构到类 程序=数据结构+算法 程序=(数据结构+算法) + (数据结构+算法)…… 程序=对象+对象……
¥因此面向对象方法是以对象为中心的,这种以对象为中心 的方法更自然、更直接地反映现实世界的问题空间,具有独 特的抽象性、封装性、继承性和多态性,能更好地适应复杂 大系统不断发展与变化的要求。 米用对象的观点看待所要解决的问题,并将其抽象为系统 是极其自然与简单的,因为它符合人类的思维习惯,使得应 用系统更容易理解。同时,由于应用系统是由相互独立的对 象构成的,使得系统的修改可以局部化,因此系统更易于维 护 软件开发从本质上讲就是对软件所要处理的问题域进行 正确的认识,并把这种认识正确地描述出来
因此面向对象方法是以对象为中心的,这种以对象为中心 的方法更自然、更直接地反映现实世界的问题空间,具有独 特的抽象性、封装性、继承性和多态性,能更好地适应复杂 大系统不断发展与变化的要求。 采用对象的观点看待所要解决的问题,并将其抽象为系统 是极其自然与简单的,因为它符合人类的思维习惯,使得应 用系统更容易理解。同时,由于应用系统是由相互独立的对 象构成的,使得系统的修改可以局部化,因此系统更易于维 护。 软件开发从本质上讲就是对软件所要处理的问题域进行 正确的认识,并把这种认识正确地描述出来
既然如此,那就应该直接面对问题域中客观存在的事物来 进行软件开发,这就是面向对象。另一方面,人类在认识世 界的历史长河中形成的普遍有效的思维方法,在软件开发中 也应该是适用的。在软件开发中尽量采用人们在日常生活中 习惯的思维方式和表达方式,这就是面向对象方法所强调的 基本原则。软件开发从过分专业化的方法、规则和技巧中回 到了客观世界,回到了人们的日常思维,所以说面向对象方 法是软件方法学的返朴归真。 912面向对象程序设计语言的四大家族 1.LISP家族 LISP是50年代开发出来的一种语言,它以表处理为 特色,是一种人工智能语言,70年代以来,在LISP 基础上开发了很多LISP家族的面向对象语言
既然如此,那就应该直接面对问题域中客观存在的事物来 进行软件开发,这就是面向对象。另一方面,人类在认识世 界的历史长河中形成的普遍有效的思维方法,在软件开发中 也应该是适用的。在软件开发中尽量采用人们在日常生活中 习惯的思维方式和表达方式,这就是面向对象方法所强调的 基本原则。软件开发从过分专业化的方法、规则和技巧中回 到了客观世界,回到了人们的日常思维,所以说面向对象方 法是软件方法学的返朴归真。 9.1.2 面向对象程序设计语言的四大家族 1. LISP家族 LISP是50年代开发出来的一种语言,它以表处理为 特色,是一种人工智能语言,70年代以来,在LISP 基础上开发了很多LISP家族的面向对象语言
Simula Simula语言是60年代开发出来的,在 Simula中引入了几个面 向对象程序设计语言中最重要的概念和特性,即数据抽象、 类和继承性机制。 Simula67是它具有代表性的一个版本,70 年代发展起来的CLU,Ada, Modula-2等语言是在它的基础上 发展起来的 Smalltalk Smalltalk是第一个真正的面向对象程序设计语言,它体现了 纯粹的OOP设计思想,是最纯的OOP语言。它起源于Sim 语言。尽管 Smalltalk不断完善,但在那个时期,面向对象程 序设计语言并没有得到广泛的重视,程序设计的主流是结构 化程序设计。 C家族 在19世纪80年代,C语言成为一种极其流行、应用非常广泛 的语言。C++是在C语言的基础上进行扩充
Simula Simula语言是60年代开发出来的,在Simula中引入了几个面 向对象程序设计语言中最重要的概念和特性,即数据抽象、 类和继承性机制。Simula67是它具有代表性的一个版本,70 年代发展起来的CLU,Ada,Modula-2等语言是在它的基础上 发展起来的。 Smalltalk Smalltalk是第一个真正的面向对象程序设计语言,它体现了 纯粹的OOP设计思想,是最纯的OOP语言。它起源于Simula 语言。尽管Smalltalk不断完善,但在那个时期,面向对象程 序设计语言并没有得到广泛的重视,程序设计的主流是结构 化程序设计。 C家族 在19世纪80年代,C语言成为一种极其流行、应用非常广泛 的语言。C++是在C语言的基础上进行扩充
■并增加了类似 Smalltalk语言中相应的对象机制。它 将“类”看作是用户定义类型,使其扩充比较自然。 C+以其高效的执行效率赢得了广大程序设计员的青睐, 在C++中提供了对C语言的兼容性,因此,很多已有的C 程序稍加改造甚至不加改造就可以重用,许多有效的算 法也可以重新利用。它是一种混合型的面向对象程序设 计语言,由于它的出现,才使面向对象的程序设计语言 越来越得到重视和广泛的应用。 NJAⅥA语言是一种适用于分布式计算的新型面向对象 程序设计语言,可以看作是C++语言的派生,它从C++语 言中继承了大量的语言成分,抛弃了C+语言中冗余的、 容易引起问题的功能,增加了多线程、异常处理、网络 程序设计等方面的支持,掌握了C++语言,可以很快学 会JAVA语言
并增加了类似Smalltalk语言中相应的对象机制。它 将“类”看作是用户定义类型,使其扩充比较自然。 C++以其高效的执行效率赢得了广大程序设计员的青睐, 在C++中提供了对C语言的兼容性,因此,很多已有的C 程序稍加改造甚至不加改造就可以重用,许多有效的算 法也可以重新利用。它是一种混合型的面向对象程序设 计语言,由于它的出现,才使面向对象的程序设计语言 越来越得到重视和广泛的应用。 JAVA语言是一种适用于分布式计算的新型面向对象 程序设计语言,可以看作是C++语言的派生,它从C++语 言中继承了大量的语言成分,抛弃了C++语言中冗余的、 容易引起问题的功能,增加了多线程、异常处理、网络 程序设计等方面的支持,掌握了C++语言,可以很快学 会JAVA 语言
强调开发快速原型的能力 对象语言的分类 纯粹的面向对象语言 面向对象语言 混合型的面向对象语言 运行效率
面向对象语言 纯粹的面向对象语言 混合型的面向对象语言 强调开发快速原型的能力 运行效率 面 向 对 象 语 言 的 分 类
91.3面向对象程序分析OOA与设计OOD的基本步骤 1.标识对象和它们的属性 标识应用系统的对象和它们的属性是面向对象设计方法中 最艰难的工作。首先要搞清楚系统要解决的问题到底涉及到 哪些事物以及它们在系统中的作用。 客观存在物:包括有形对象和角色对象,体 现问题的结构特性。 事物的分类 行为:包括事件对象和交互对象。行为是对 象的一部分,行为依赖于对象。它体现问题 的行为特性。 概念:现实世界中事物和它们行为规律的抽 象,是识别对象时的一类认识和分析对象
9.1.3 面向对象程序分析OOA与设计OOD的基本步骤 1.标识对象和它们的属性 标识应用系统的对象和它们的属性是面向对象设计方法中 最艰难的工作。首先要搞清楚系统要解决的问题到底涉及到 哪些事物以及它们在系统中的作用。 事 物 的 分 类 客观存在物:包括有形对象和角色对象,体 现问题的结构特性。 行为:包括事件对象和交互对象。行为是对 象的一部分,行为依赖于对象。它体现问题 的行为特性。 概念:现实世界中事物和它们行为规律的抽 象,是识别对象时的一类认识和分析对象
标识对象可以从应用系统非形式化描述中的名词来导出。对 象标识出来后,还应注意对象之间的类似之处,以建立对象 类。 例 Windows多窗口 如 窗 口1 窗口2 窗 口n 抽象其共同属性: 大小、位置、标题 构 造一类
标识对象可以从应用系统非形式化描述中的名词来导出。对 象标识出来后,还应注意对象之间的类似之处,以建立对象 类。 例 如: Windows多窗口 窗口1 窗口2 …… 窗口 n 抽象其共同属性: 大小、位置、标题 构 造 类