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