面向对象程序设计--图形应用实例
作者 : (美)Michael J.Laszlo
译者 : 杨秀梅 何玉洁 牟永敏 周冬梅 等
丛书名 : 计算机科学丛书
出版日期 : 2002-07-01
ISBN : 7-111-10143-X
定价 : 35.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 344
开本 : 16开
原书名 : Object-Oriented Programming Featuring Graphical Applications in Java
原出版社:
属性分类: 教材
包含CD :
绝版 : 已绝版
图书简介

面向对象程序设计(OOP)的思想和方法在现代软件设计中越来越重要。本书使读者站在软件工程的高度,理解和掌握面向对象程序设计技术并能应用它解决实际问题。书中以大量的Java程序(大多数是二维计算机图形程序)为实例阐明了面向对象程序设计中的重要概念和设计方法。开篇先阐述了OOP中的对象模型、过程抽象和数据抽象,接着介绍了继承和组合,最后讨论了设计模式和应用程序框架。本书还使用了统一建模语言UML来描述一些设计概念,使读者站在更高的分析与设计层次来认识和理解所需解决的问题。本书还附有大量的练习,针对每节的内容提出问题,让读者进一步巩固所学的理论和方法。
  本书可作为计算机专业本科生的教学参考,对涉及OOP的广大软件开发设计者而言也是不错的指导。

图书前言

本书主要目的是用Java语言来探究面向对象程序设计(OOP)的基本思想。对象模型把知识和行为封装在对象中,是面向对象程序设计的基础。由于对象模型对处理程序复杂性很有效而且有越来越多的程序设计语言提供对它的支持,如Smalltalk、C++、Java等,因而近年来,这种程序设计模型占据越来越重要的地位。
  面向对象的程序设计方法最早出现在Simula和Smalltalk等语言中,并且已经延续了几十年,但是一个新手往往是在学习Java时开始接触对象模型这种思想。Java语言为表达面向对象程序设计思想提供了清晰的表示法,因此在本书中将会用Java语言把丰富但抽象的面向对象程序设计思想和具体示例结合起来,而且大家可以以Java为工具编写、编译、运行书中的Java程序。此外,本书的大部分示例和练习都是和二维(2D)计算机图形相关的,有的还能产生有趣和令人惊讶的图形效果。这里之所以要使用2D图形示例,一是为了吸引读者,二是为了把新的设计思想和实际应用相结合。随着内容的深入,新的东西将不断被补充到2D图形示例的面向对象图形的类和接口中。
  本书适合于已具有Java基础知识的读者,如果你还没有相关知识,请先阅读相关Java语言方面的书籍。尽管本书的目的不是讲授Java语言,但几乎所有的Java基本特性都在使用前进行解释。本书还依赖于两个附加的资源:一是Java 2中的Java 2D应用程序接口(Java 2D API),用于产生二维图形;二是用于表示系统设计的统一建模语言(UML)的一个小子集,其中主要是用类图来表示系统的静态结构,用顺序图来表示对象间交互。Java 2D API和UML的特征将在需要的时候进行介绍,你不需要事先熟悉。
  内容组织
  第1章介绍对象模型的基本概念:对象和类,消息传递和方法,以及软件重用的四个基本机制—组合、继承、设计模式、应用程序框架。在其他重要的程序设计模型方面,要介绍对象模型。
  第2章讨论了过程抽象,而过程被看作具体实现被隐藏的操作。本章中还讨论了Java 的异常处理机制和基于过程抽象的两个标准程序设计技术:过程分解(即过程是由其他操作定义的)和递归(即过程是由过程实现的操作自身定义的)。之所以在本书的开头就讨论过程的概念,是因为过程在对象模型中起着很重要的作用。
  第3章讨论了数据抽象。数据抽象是将数据值的具体内部结构隐藏,而把它看作一组相关操作和一个使用这些操作的协议。在对象模型中,数据值被视为对象。本章中还讨论了封装(相关软件元件组合在一起的技术)和信息隐藏。最后介绍了Java中的2D计算机图形,并用Java语言开发了一个计算机图形应用程序模板。
  第4章讨论了软件重用的主要机制—组合。应用组合方法,可以将一个新类定义为由其他类组合成的类,这些类称为新类的组件。组合类的每个实例都包含了自己的组件。本章最后给出了一个交互的计算机图形应用程序的模板,读者可以利用它编写用户实时交互程序。
  第5章讨论了继承,继承是指新类可以获得已有类(称为父类)的属性和行为,这样称新类是已有类的子类。在本章中讨论了三种基本的继承方法:扩展继承(子类是在继承父类的属性或行为的基础上增加新的属性或行为);特征继承(子类重新定义了一个或多个它所继承的行为);说明继承(子类实现了父类定义但没有实现的行为)。在本章中还介绍了如何使用继承来创建相关联的一组数据类型,同时介绍了多态性。
  第6章讨论了设计模式。设计模式是描述了解决设计过程中反复出现的问题的有效方法,主要包括解决问题的一组软件元件和如何组合这些软件元件。在众多的设计模式中,本章只讨论三种:迭代器模式、模板方法模式、组合模式。迭代器模式提供访问一个聚集的各个元素的方法,而又隐藏其内部结构。模板方法模式定义一个由具体步骤和抽象步骤组成的算法,使得它的子类通过实现抽象步骤就可以使算法“新生”。组合模式用于将对象组合成基本组件和组合体的层次结构,使客户对基本组件和组合体能进行统一处理。本章应用这三种设计模式设计了多个图形应用程序,如有限点集三角形剖分,建立构造区域几何图形(Constructive Area Geometry, CAG)树(由布尔集合运算并、交和差把2D图形组合成的二叉树),以及构造情景图(scene graphic)(由基本组件和复合图形构成的层次图)。(尽管这样简单描述会使你觉得这些图形程序例子深奥而复杂,但配合上图形,你会发现它们很容易理解。)最后还介绍了其他的设计模式以及设计模式分类的标准方案。
  第7章主要讲述了应用程序框架。应用程序框架主要是为了简化在某个特定领域的应用程序的设计。程序员只要依据应用程序框架的协定扩展和实现应用程序框架中提供的类和接口就可以很容易地开发出自己的应用程序。在Java中,应用程序框架是由AWT(Abstract Window Toolkit)、Swing和Java的事件模型组成的,这三部分组合起来构成创建图形用户接口(GUI)应用程序的框架。本章最后一部分是开发基于GUI的绘制和编辑各种图形的程序。
  如何使用本书
  练习是本书的重要部分,并且是紧随着讲解的内容出现的。有些练习要求大家实现刚刚介绍过的类,有些要求大家使用新介绍的概念和类来设计程序。总之本书中的大部分资料是不断累积的,后面章节中可能用到前面定义的类,很多类和接口被不断加入到面向图形的程序包中。有时,为了理解使用新的概念,会在后面部分修改前面定义过的类。
  补充资料
  本书中的练习包括从简单的、很容易回答的问题到独立的程序设计,以及非常复杂的程序设计项目。特别重要的练习或是介绍书中后面需用材料的练习都标明为重点,对这些练习,如果你不想解决它们,至少应该了解其中一部分重要内容。
  本书中所有的Java程序(按章排列)和图形包都可以到http://www.aw.com/cssupport地址下载,该站点中还可以找到有关如何下载和安装这些文件的帮助资料。书中所有的图形的PowerPoint幻灯片文档也在该站点中。书中练习的答案面向教师提供,需要的教师可以和Addison Wesley Longman的销售代表处联系。
  致谢
  Nova东南大学计算机信息和科学研究生院(SCIS)为这本书的写作提供了机会和良好的环境。特别要感谢SCSI的院长Edward Lieblein和我的同事,尤其是MaxineCohen、Sumitra Mukherjee和Junping Sun,他们给了我很大鼓励和支持。
  很荣幸有机会在SCSI从事与本书内容相关的教学工作,如面向对象程序设计、程序设计语言理论和计算机图形学。本书大部分材料都是在教学工作中积累起来的。我还要感谢那些提出问题和见解的学生,虽然至今我叫不出他们许多人的名字。最后要感谢数学与计算机科学研究所(Institute for Mathematics and Computer Science,IMACS)的同事和学生。
  我很感激下列的审阅者,他们花费大量的时间和精力撰写审阅意见,我们最后的手稿采用了其中的许多建议,他们是D. Robert Adams (大峡谷科罗拉多州立大学), Manuel E. Bermudez (佛罗里达大学), James R. Connolly (奇科加利福尼亚州立大学), Frank Coyle (南查珀尔希尔北卡罗来纳大学), John R. Glover (休斯顿大学), Chung Lee (加利福尼亚州立大学波蒙纳分校), Ronald McCarty (宾夕法尼亚伊利市贝伦德学院), Jong-Min Park (圣迭戈加利福尼亚州立大学), Shih-Ho Wang (戴维斯加利福尼亚大学) 和Marvin V. Zelkowtiz (马里兰大学)。
  我还要感谢Addison Wesley的本书编辑Maite Suarez-Rivas女士的真诚支持。同时对Jarrod Gibbons (市场协调员), Gina Hagen (设计经理), Katherine Harutunian (项目编辑), Michael Hirsch (营销经理), Marilyn Lloyd (项目经理) 和Patty Mahtani (助理管理编辑) 表示深深的感谢。
  最后,我要感谢我的家人:我的妻子Elisa和我们的孩子Arianna Hannah和David Joshua, 还有我的父母Maurice 和Phyllis。他们的爱、鼓励和耐心是我完成这本书的动力。

译者简介

杨秀梅 何玉洁 牟永敏 周冬梅 等:暂无简介

译者序

在现代软件开发中,理解面向对象程序设计(OOP)的思想和方法非常重要。虽然有很多程序设计语言都支持OOP,如Smalltalk、C++、Java等,但一个初学者往往是在学习Java时开始接触这种思想。Java语言对OOP思想进行了完整、清晰的表达描述,它是一种纯粹的面向对象语言。因此在本书中用Java语言把丰富但抽象的OOP思想和具体示例结合起来,用具体的示例来帮助大家更快、更直观地理解这种思想和方法。同时这些示例大都为二维图形程序,不仅能学到如何进行图形程序设计,而且在学习中会感到生动有趣。
  本书由浅入深,从基本的面向对象概念到软件重用方法逐步进行了介绍。第1章到第3章阐述了OOP中的对象模型、过程抽象和数据抽象等基本概念;第4章和第5章介绍简单的类重用方法—继承和组合;最后第6章和第7章讨论设计重用方法—设计模式和应用程序框架。
  尤其值得强调的是:本书使用了统一建模语言UML来描述其中的一些设计概念,这可以使我们站在更高的分析与设计层次来认识、理解解决问题的方法;同时,本书引入了设计模式,这将会使我们在工作中受益于前人的设计成果。
  本书中还附有大量的练习,它们都是在每节的基础上提出问题,让大家更进一步理解所学理论和方法。
  读者只需要有Java的基本知识就可以看懂本书,其他新的概念如UML、Java 2D等在使用前都会有详细介绍。
  本书主要译者为:杨秀梅、何玉洁、牟永敏、周冬梅。参加本书翻译和其他工作的还有马爱华、李少波、朱丹、王帅、贺莹、丁凌云、成然、杨永刚、柏亮、邓涛、朱红松、刘泽深、杨雄高、迟玉强、刘惠华、崔仲凯、李龚、刘文娜、付立武、彭兰茜、李燕华、刘彬、李跃等,在此向他们表示感谢。
  译  者
  2002年1月

图书目录

第1章  对象模型 1
1.1  对象模型概念 2
1.1.1  对象 2
1.1.2  消息 3
1.1.3  对象接口 4
1.1.4  方法和过程 5
1.1.5  封装 6
1.1.6  类和对象实例化 7
1.1.7  类和接口 9
1.1.8  关联 9
1.1.9  组合 11
1.1.10  继承 12
1.1.11  设计模式与程序设计框架 14
1.2  对象模型和其他程序设计模型 15
第2章  过程抽象 19
2.1  抽象操作和过程 19
2.2  过程说明 22
2.3  异常 26
2.3.1  受检查异常和不受检查异常 27
2.3.2  抛出异常 28
2.3.3  捕捉异常 29
2.3.4  处理异常 29
2.3.5  使用异常 31
2.4  过程分解 32
2.5  递归 37
小结 43
第3章  数据抽象 44
3.1  抽象数据类型 44
3.2  说明和实现数据抽象 45
3.2.1  点 46
3.2.2  矩形 55
3.3  封装 60
3.3.1  封装和类定义 61
3.3.2  信息隐藏 62
3.4  Java图形基础 64
3.4.1  Java 2D API绘图模型 64
3.4.2  获取绘图环境 65
3.4.3  创建图形对象 67
3.4.4  设置绘图环境的属性 67
3.4.5  绘图 69
3.5  Java图形程序实例 70
3.5.1  画矩形 70
3.5.2  图形程序模板 72
小结 74
第4章  组合 75
4.1  组合和聚集 75
4.2  随机数生成器 76
4.2.1  Java的Random类 77
4.2.2  随机整数 79
4.2.3  固定范围内的随机整数 82
4.2.4  随机点 84
4.2.5  随机矩形 89
4.2.6  画多个矩形 92
4.3  多组件组合 95
4.3.1  Java的Vector类 96
4.3.2  折线 98
4.4  表达一致性约束 104
4.4.1  概述 104
4.4.2  椭圆 106
4.4.3  有理数 111
4.5  交互图形程序 117
4.5.1  随机点 117
4.5.2  交互图形程序模板 121
小结 123
第5章  继承 125
5.1  继承的使用 125
5.2  扩展继承 128
5.2.1  N步计数器 128
5.2.2  可变换点 130
5.2.3  直线 136
5.3  特化继承 139
5.3.1  多边形 140
5.3.2  标记计数器 145
5.4  说明继承 146
5.4.1  接口和抽象类 146
5.4.2  矩形几何图形 148
5.4.3  几何图形抽象 152
5.5  多态性 158
5.5.1  Java的多态性机制 158
5.5.2  Java的Comparable接口与排序 161
5.5.3  替代原则 164
5.6  Figure和Painter类 168
5.6.1  图形 168
5.6.2  填充和画图的绘图工具 170
5.6.3  组合绘图工具 172
5.6.4  多边形绘图工具 176
小结 179
第6章  设计模式 180
6.1  设计模式的重要性 180
6.2  迭代器设计模式 181
6.2.1  Java的Iterator接口 181
6.2.2  动态多边形 184
6.2.3  多边形迭代器 191
6.2.4  迭代器模式的结构和应用 207
6.3  模板方法设计模式 209
6.3.1  布尔几何图形 209
6.3.2  半月图 212
6.3.3  构造区域几何图形 216
6.3.4  模板方法模式的结构和应用 218
6.4  组合设计模式 219
6.4.1  组合图 219
6.4.2  建立坐标轴 223
6.4.3  可变换组合图 227
6.4.4  组合模式的结构和应用 237
6.5  设计模式分类 238
6.5.1  工厂方法模式 239
6.5.2  适配器模式 240
6.5.3  观察者模式 242
6.5.4  策略模式 243
小结 244
第7章  面向对象应用程序框架 245
7.1  用Java框架建立基于GUI的应用程序 245
7.1.1  框架的特点 245
7.1.2  Java的AWT和Swing 247
7.2  Java事件模型 248
7.2.1  概述 248
7.2.2  创建点集程序 251
7.2.3  编辑点集程序 256
7.2.4  编辑多边形程序 260
7.2.5  重设计编辑点集程序 262
7.3  组件 267
7.3.1  Component和Container类 268
7.3.2  JComponent类 269
7.3.3  JPanel类 269
7.3.4  JButton类 270
7.3.5  JLabel类 270
7.3.6  JComboBox类 270
7.3.7  JColorChooser类 271
7.4  布局管理器 272
7.4.1  流式布局 273
7.4.2  网格布局 274
7.4.3  边界布局 274
7.5  组件和事件监听器 275
7.5.1  处理颜色 275
7.5.2  记录颜色 277
7.6  点集三角形剖分程序:Triangulate 281
7.7 画图程序:DrawPad 288
7.7.1  DrawPad的组件和图形管理器 288
7.7.2  DrawPad的事件监听器 295
7.7.3  DrawPad的高亮度显示策略 303
小结 307
附录A  用户输入的读入和分析 309
附录B  图形程序框架 313
附录C  统一建模语言UML符号概述 316
附录D  banana包结构 319
参考文献 324

教学资源推荐
作者: 窦万峰
作者: (美)Jim Gray, Andreas Reute
作者: [美]理查德 F. 施密特(Richard F. Schmidt)著
参考读物推荐
作者: [美]卡尔 T. 乌利齐(Karl T. Ulrich) 史蒂文 D. 埃平格(Steven D. Eppinger) 著
作者: (美)Paul E.McMahon
作者: (美)John McGarry,David Card,Cheryl Jones等