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