第一章 面向对象技术概论
面向对象技术的概念和方法,本质上是一种合理的思维方法,是不依赖于程序设计语言的应用软件开发的基本核心技术。因此要掌握面向对象编程,首先应该学习面向对象技术的基本要点。越是深入理解面向对象技术的理论和方法,就越能让您在自己在应用领域中最大限度地发挥思维能力和创造能力,就能掌握各种面向对象软件设计的各种语言。
本章目的:
.了解客观世界的认识抽象与计算机实现的一致性原则
.理解面向对象技术的基本概念
.子解面向对象方法的特点和优点
.初步了解面向对象分析模型用视图
.了解面向对象设计(OOD)的工作要点
.对C++的背景和支持面向对象方法的内容有所了解
1.1 引论
大家知道,软件是计算机的灵魂。而不带软件的数字电子计算机系统,习惯上称为硬件裸机。软件是相对于机器硬件而言的,是事先编制好的具有特定功能和用途的程序系统及其说明文档的统称。
当软件工程的发展正面临着从传统的结构化范型到面向对象范型的转移,这需要有新的语言、新的系统和新的方法学的支持,面向对象技术就是这种新范型的核心技术。
1.1.1 软件概念的发展计算机科学发展的每一步几乎都在软件设计和程序语言中得到体现。第一个高级程序设计语言是在20世纪50年代中期研制的 FORTRAN 。在60年代至少研制了200 多个高级语言,其中包括APL,SIMULA67等。70年代主要集中于发展命令性语言,最著名的有PASCAL、ADA语言。80年代是突出发展作用性语言的时代,如LISP、PROLOG、FFP(函数式程序设计系统)等,推出了典型的面向对象程序设计语言SMALLTALK80。现在有影响的语言已超过上百种,这些易于为人们理解、掌握与使用的各种程序设计语言,其表示法、约定与规则的集合以及众多的软件,形成的计算机文化,已超越了计算机的范围,渗透到人们生活和工作的方方面面。
软件是一个发展的概念,随着软件开发规模的扩大和开发方式的变化,程序设计开始被人们作为一门科学来对待,它研究程序设计和实现的各种性质、规律。经过多年的研究,在计算机科学中发展了许多程序设计方法和技术。例如,自顶向下和自底向上的程序设计方法、程序推导设计方法、程序变换设计方法、函数式程序设计技术(FFP,使用面向问题的说明性语言)、面向对象的程序设计技术、程序验证技术、约束程序设计技术、并发程序设计技术等。程序设计方法和技术在各个时期的发展不仅直接导致了一大批风格各异的高级语言的诞生,而且对计算机理论、硬件、软件以及计算机应用技术等多方面具有深刻的影响。
1.1.2 软件开发原理的变革软件工程技术的发展,其目的是提高计算机性能和应用范围,其关键是提高软件质量和生产效率。从汇编语言到高级语言,标志着软件工程技术和软件生产效率的一次质的飞跃,其根本技术因素是编译理论和实现方法的不断完善,实现了从高级源代码到机器代码的自动转换。随着应用需求的扩大和变化,软件生产的方式和效率仍远远跟不上社会发展的需要。
从软件开发原理上看,影响较大的变革有3个:
(1)20世纪60年代开发的规范化设计,代表性的是瀑布方法:使软件程序设计由个人的经验、技巧等,逐渐被系统方法所代替,使建立软件系统的过程遵从一系列规范阶段,包括需求分析、高层设计、详细设计等。即将软件设计工作推进到软件工程时代。
(2)20世纪70年代末开始的结构化系统分析和程序设计,推广模块化设计方法。Tom.DeMarcod的《结构化分析与系统规格说明》教材提出的基于模型的软件工程概念,认为复杂软件系统的创建,首先必须建立系统的书面工作模型。另一个有影响的软件理论是Niklans Wirth提出的“算法+数据结构=程序设计”。软件被划分成若干可单独命名和编址的部分,它们被称为模块,模块化使软件能够有效地管理和维护,能够有效地分解和处理复杂问题。接下来人们便开始讨论模块应当如何建立。
(3)在20世纪80年代,在软件开发中各种概念和方法积累的基础上,对于如何超越程序复杂性障碍,如何在计算机系统中自然地表示客观世界,人们拿起了思维科学中面向对象技术作为武器,采用基于客观世界的对象模型的软件开发方法,按问题论域(problem domain)设计程序模块,是以对象代表问题解,使人们对复杂系统的认识过程与系统的程序设计实现过程,尽可能地一致。经验表明对任何软件系统而言,其中最稳定的成分是对应的问题论域。与功能相比,一个问题论域中的对象一般总能保持相对稳定性,因而以面向对象构造的软件系统主体结构也具有较好的稳定性和可重用性。因此采用“对象+消息”的程序设计模式,具有满足软件工程发展需要的更多优势。
面向对象设计方法追求的是现实问题空间与软件系统解空间的近似和直接模拟。现实世界空间中的基本问题是物质和意识,映射到面向对象系统解空间就是具体事物(对象)和抽象类概念(类)。面向对象技术的封装、继承、多态性等不仅支持软件利用,而且使软件维护可靠有效,可实现软件系统的柔性制造。
1.1.3 面向对象语言的三个里程碑创始的面向对象语言,现在公认的是20世纪60年代的Simula67语言。虽然它是一种通用的仿真建模语言,但所使用的对象概念和方法,给人们启示了软件设计新思维。它的对象代表一个仿真中的一个实体,在仿真过程中,对象之间可以某种方式进行通信,它使用类(class)的概念,用它作为单元(unit)描述相似的一组对象的结构和行为,并支持类的层次组织和继承,允许共享结构和行为。故有人把类看做数据抽象之父。类是面向对象程序设计技术和语言的一个主要特征与设施。
面向对象语言发展的主要里程碑是Smalltalk语言,它完整地体现并进一步丰富了面向对象的概念。它在1980年由Xerox公司推出并使之走向实用,其缺点是人们需要重头学习一门全新的语言。在80年代中期,面向对象语言已形成几大类别:一类是纯面向对象的语言;一类是混合型的对象语言;一类是与人式智能语言结合形成的,如java等。
应当指出的是,面向对象语言对程序设计的主要影响并不在于它的语法特征,而在于它所提供的自然问题求解的机制和结构。面向对象编程(OOP)将计算过程看做是分类过程加状态变换过程,即将系统逐步划分为相互联系的多个对象并建立这些对象的联系,以引发状态转换,实现系统计算任务。因此,要理解面向对象语言,应首先理解面向对象技术的基本原理和基本概念,然后再学习此类语言。