图书前言

随着计算机软件变得越来越复杂,良好的设计越来越成为成功开发中的最关键因素。面向对象方法和技术提供了丰富的结构和机制,使设计者和开发者可以采用多种途径分解软件系统的复杂性,得到更好模块化的,易理解、易扩展和易维护的软件系统结构。如何把这方面的理论、方法和技术传播给本领域的入门新手,为未来软件和计算机领域的更大发展培养生力军,是计算机教育工作者和技术专家面临的一项重要挑战。廖湖声老师基于自己多年从事计算机科学技术教育,教授相关课程,以及使用面向对象技术(和C++语言)开发软件系统的经验,撰写出本书,给我们提供了一个良好的范例。

在本书中,作者基于教育界、学术界和工业界对面向对象软件开发领域的经验总结,以及自己对相关领域中思想、方法和技术的深入理解,通过原理讨论、问题分析和实例程序开发过程的展示,给读者提供了大量有用信息。书中讨论采用了作者精心梳理的结构和组织方式,涵盖了非常宽泛的论题,从基本面向对象概念和基础知识开始,直到对设计模式等许多高级问题的深入讨论等,内容非常丰富。

在本书的各章里,作者都精心选择了一些重要概念和问题,首先对它们做了仔细的解释和分析,讨论了它们在思考和处理在软件结构设计中的重要作用、相关的情况和设计决策等。然后通过一个或几个有着或多或少实际意义的例子,阐释处理这些问题的基本方法和技术,为读者提供了良好的设计范例。在书中,作者还讨论了许多有助于在实际中分析和处理问题的线索,例如提出将对象分为实体型、管理型、加工型、事务型4类,为人们在设计所需的类时提供了有意义的思考方向。

当然,面向对象方法和技术,以及面向对象的编程技术,已经发展为一个内涵非常丰富的领域。任何一本书籍都已经不可能涵盖这个领域中的所有精华。但无论如何,本书为学过基本面向对象程序设计(和C++语言)基础课程、希望进一步向软件工作者发展的人们提供了一块坚实的垫脚石,也是计算机教育中程序开发方面后续课程的一本优秀教材,是国内教育工作者在这方面的一个有益尝试。在审阅本书的过程中,我自己也得到了很多启发和新的认识,感受到了本书的魅力。我非常乐于看到,也期待着本书受到计算机领域大学生、专业教师和实际工作者的重视和欢迎。

裘宗燕2016年2月于北京

前言

在计算机科学与技术、软件工程等计算机类的专业教学中,面向对象技术作为主流的软件开发技术,已经成为必修的教学内容。高等院校中相当多专业的低年级教学计划中都设置了“C++程序设计”、“Java程序设计”等面向对象程序设计课程,介绍程序设计语言和基本的程序设计方法,“数据结构”等核心课程的教学也普遍采用面向对象程序设计语言作为算法实现的工具。与此同时,在高年级的教学计划中也设置了“软件工程导论”、“软件设计与体系结构”等设计类课程,讲述面向对象的软件分析与设计方法。不仅如此,更多的专业选修课也普遍采用面向对象程序设计语言作为工具,介绍专用的软件开发方法,以及基于面向对象程序的软件工具。另外,在相关专业的研究生培养阶段,为了提高学生的软件开发能力,以“面向对象方法与技术”、“软件体系结构”、“软件开发方法”为代表的各种设计与实践课程也将面向对象方法与技术作为核心内容。

高校低年级的各种程序设计课程教学,侧重于算法与程序设计语言的学习,教科书中提供的程序设计案例普遍用于算法或语言功能的教学。然而,面向对象方法更多地用于程序结构的设计,现有的程序设计案例普遍规模偏小、结构简单,难以适应面向对象程序设计方法的教学需求。另外,高年级的各种软件工程课程的教学内容包含了面向对象的软件分析与设计等核心内容,其中软件构造和软件体系结构等内容的理解和掌握更需要面向对象程序设计经验的积累。

针对上述现象,作者总结了多年从事相关课程的教学积累和软件开发经验,从程序设计方法的角度重新组织了教学内容,在本书中引入了比较丰富的程序设计案例,尝试在低年级的程序设计教学和高年级的软件工程教学之间建立桥梁。对于计算机科学与技术、软件工程、信息安全、物联网、网络工程、数字媒体等专业,本书可以作为“面向对象程序设计”课程的教材。书中在讲解各种程序设计方法的同时,在各种程序案例的分析和介绍中,逐步介绍了C++语言的主要语言功能。本书也可以作为“软件工程导论”、“软件设计与体系结构”、“Windows程序设计”等本科课程的教学参考书,为这些课程的学习提供应用软件开发的设计案例。这些应用案例的设计内容已经覆盖了UML语言的主要功能和多数设计模式。另外,针对计算机相关专业的研究生教育,本书可以作为“面向对象方法与技术”、“软件体系结构”、“软件开发方法”等课程的教材。本书提供比较丰富的实用型程序设计案例,通过完整的设计过程讲解来介绍面向对象程序技术的应用方法,使研究生同学在复习程序设计语言和软件工程方法的同时,巩固和提高实用型软件开发的能力。

全书按照面向对象方法的内容组织,共6章: 第1章介绍面向对象技术的由来、程序设计方法和程序设计语言的发展、面向对象的软件开发方法和发展趋势。

第2章介绍对象的基本概念与封装性,举例介绍了实体型、管理型、加工型和事务型4种对象的设计方法。

第3章讨论对象之间的一般与特殊关系、整体与部分关系和对象关联的设计,基于二维图元对象、驾驶证管理、行车路线监测和学院班级管理系统4个设计案例,介绍了复杂对象的设计方法和MFC等可复用类库。

第4章介绍多态性的基本概念,通过数据库查询接口、广义表和通用的冒泡排序程序三个设计案例介绍了如何运用多态性来实现软件接口、异质容器和通用算法。

第5章基于网上书店、机票预订系统和XML语法分析三个设计案例,介绍了面向对象的软件建模和软件构造方法,以及若干UML图的使用方法。

第6章介绍常用的各种设计模式,提供了图形编辑程序和程序设计语言处理框架两个软件设计案例,介绍了组合模式、访问者、解释器、命令模式、抽象工厂等多种设计模式的具体应用。

本书具有以下特点: 

(1) 突出面向对象设计方法的传授,而不是以程序设计语言为中心。全书按照程序设计方法的教学来组织,逐步介绍对象设计、对象关联、多态性、软件系统建模和设计模式等各种技术和方法,及其使用案例。

(2) 内容范围广,涵盖了面向对象程序设计方法、C++程序设计语言和常用的基本类库,也包含了初步的面向对象系统建模方法、UML语言和设计模式。

(3) 随着面向对象设计方法及其案例的讲解,由浅入深地介绍了C++语言的主要功能,不仅涵盖了基本的控制结构和数据结构,也包含了对象类、类模板等程序结构,而且介绍了微软基本类库MFC和标准模板库STL的核心内容。

(4) 提供大量设计案例,用于展示如何在应用系统设计中运用各种面向对象的设计方法。相当多的应用案例具有一定的规模,着重展示了多态性和设计模式的应用方法。

(5) 设计案例的讲解中侧重于设计思想、分析方法和设计方法,为多种应用程序的设计提供了从问题陈述、案例分析、解题思路、对象设计、算法设计、程序实现、测试案例到技术小结的完整叙述。

(6) 针对面向对象方法中对象确认等关键问题,提出了实体型、管理型、加工型和事务型4种对象的设计方法,有助于初学者掌握对象设计的方法。

本书在出版过程中,得到了北京大学裘宗燕教授的支持和帮助,还得到了清华大学出版社张玥编辑的大力支持,在此表示诚挚的感谢。

由于作者水平有限,书中难免有不妥和疏漏之处,恳请读者不吝赐教和批评指正。

编者