面向模式的软件体系结构 卷2:用于并发和网络化对象的模式[按需印刷]
基本信息
- 原书名: Pattern-Oriented Software Architecture,Volume 2:Patterns for Concurrent and Networked Objects.
- 原出版社: John Wiley & sons,Inc.
- 作者: Douglas Schmidt,Michaes Stal,Hans Rohnert,Frank Buschmann [作译者介绍]
- 译者: 张志祥 任雄伟 肖斌
- 丛书名: 软件工程技术丛书
- 出版社:机械工业出版社
- ISBN:7111116860
- 上架时间:2003-9-19
- 出版日期:2003 年8月
- 开本:16开
- 页码:402
- 版次:1-1
- 所属分类:
计算机 > 计算机组织与体系结构 > 综合
内容简介回到顶部↑
对于软件开发人员来说,设计运行并发和网络化环境中的应用程序和中间件是很大的挑战。本书中 所列出的模式构成了处理有关并发和网络化问题的模式语言的基础。
书中提出了17种相互关联的模式,它们包含用于构建并发和网络化系统的核心组件:服 务访问和配置、事件处理、同步和并发。在多种程序设计语言(如c++、java和c)中,这些 模式有大量的例子和已知应用。
本书可用于解决特定的软件开发问题,读者也可以从头至尾地阅读,学习构建并发和网络化应用以及中间件的最佳方法。
欢迎访问本书网页: [a href="http://www.cs.wustl.edu/%7eschmidt/posa"]http://www.cs.wustl.edu/~schmidt/posa[/a] 本书讲述用于创建并发和网络化系统的模式,共涉及17种模式与惯用法。这些模式构成了用于解决有关分布式、并发和网络化问题的模式语言的基础。本书的模式是创建并发和网络化系统的核心元素,包括服务访问、事件处理、并发控制、连接管理和初始化、事务、安全性等。 本书强调实际的解决方案,读者可以使用本书的方法解决特定的软件开发问题,获得对构造分布式及并发应用和中间件最佳实践的基本理解。书中含有用多种语言(c、c++和java)编写的大量例子和已知使用,适于专业软件开发人员及计算机专业高校师生使用。
书中提出了17种相互关联的模式,它们包含用于构建并发和网络化系统的核心组件:服 务访问和配置、事件处理、同步和并发。在多种程序设计语言(如c++、java和c)中,这些 模式有大量的例子和已知应用。
本书可用于解决特定的软件开发问题,读者也可以从头至尾地阅读,学习构建并发和网络化应用以及中间件的最佳方法。
欢迎访问本书网页: [a href="http://www.cs.wustl.edu/%7eschmidt/posa"]http://www.cs.wustl.edu/~schmidt/posa[/a] 本书讲述用于创建并发和网络化系统的模式,共涉及17种模式与惯用法。这些模式构成了用于解决有关分布式、并发和网络化问题的模式语言的基础。本书的模式是创建并发和网络化系统的核心元素,包括服务访问、事件处理、并发控制、连接管理和初始化、事务、安全性等。 本书强调实际的解决方案,读者可以使用本书的方法解决特定的软件开发问题,获得对构造分布式及并发应用和中间件最佳实践的基本理解。书中含有用多种语言(c、c++和java)编写的大量例子和已知使用,适于专业软件开发人员及计算机专业高校师生使用。
作译者回到顶部↑
本书提供作译者介绍
关于作者:
本书由负责《面向模式的软件体系结构卷1:模式系统》的三位获奖作者和加利福尼亚大学欧文分校(UCI)的Douglas Schmidt共同撰写。
张志祥 男,1967年10月生,湖北省天门市人。现任海军工程大学副教授。
1988年和1991年在海军工程大学计算机系分别获工学学士、工学硕士学位。1991年3月至今在海军工程大学计算机系任教。2000年9月起在华中科技大学计算机学院攻读博士学位。主要研究方向:语义Web、程序设计方法。
先后参与多项军内科研项目的研制,.. << 查看详细
本书由负责《面向模式的软件体系结构卷1:模式系统》的三位获奖作者和加利福尼亚大学欧文分校(UCI)的Douglas Schmidt共同撰写。
张志祥 男,1967年10月生,湖北省天门市人。现任海军工程大学副教授。
1988年和1991年在海军工程大学计算机系分别获工学学士、工学硕士学位。1991年3月至今在海军工程大学计算机系任教。2000年9月起在华中科技大学计算机学院攻读博士学位。主要研究方向:语义Web、程序设计方法。
先后参与多项军内科研项目的研制,.. << 查看详细
目录回到顶部↑
译者序
译者简介
前言
内容简介
作者简介
读者指南
第1章 并发和网络化对象 1
1.1 动机 1
1.2 并发和网络化软件的难题 3
1.2.1 难题1:服务访问和配置 5
1.2.2 难题2:事件处理 8
1.2.3 难题3:并发 10
1.2.4 难题4:同步 12
1.2.5 网络化软件的其他难题 13
1.3 案例分析:设计一个并发的web
服务器 14
1.3.1 jaws框架概述 15
1.3.2 在jaws中应用模式解决jaws中
常见的设计难题 16
1.3.3 封装低层操作系统api 17
译者简介
前言
内容简介
作者简介
读者指南
第1章 并发和网络化对象 1
1.1 动机 1
1.2 并发和网络化软件的难题 3
1.2.1 难题1:服务访问和配置 5
1.2.2 难题2:事件处理 8
1.2.3 难题3:并发 10
1.2.4 难题4:同步 12
1.2.5 网络化软件的其他难题 13
1.3 案例分析:设计一个并发的web
服务器 14
1.3.1 jaws框架概述 15
1.3.2 在jaws中应用模式解决jaws中
常见的设计难题 16
1.3.3 封装低层操作系统api 17
译者序回到顶部↑
模式系统包括很多通用的模式,而本书集中深入地讨论用于并发和网络化的通用的、与应用领域无关的模式。这些模式是对《面向模式的软件体系结构 卷1:模式系统》一书中介绍的通用模式在两个软件开发日益重要的领域上的补充。
除了关注用于并发和网络化的与领域无关的通用模式之外,本书对已有的关于并发网络程序设计和面向对象设计的资料做了如下扩充:(1) 关于并发的网络程序设计的资料通常关注操作系统API的语法和语义。相反,本书介绍了如何在设计和实现高质量的并发和网络化的系统时有效地使用这些API。(2) 本书讨论了并发和网络应用程序的开发过程。(3) 本书中的模式并不仅仅构成一个模式分类或系统,它们相互补充,形成了用于并发和网络化软件的模式语言。本书描述了如何使用这些模式语言来构建成熟的并发和网络化软件系统和应用程序、Web服务和分布式对象计算中间件,以及底层的操作系统网络协议和机制。
本书中介绍的很多模式还可用于并发和网络化的语境之外。
本书对软件开发的初学者和专家都有帮助。它可以帮助初学者不需要积累多年的经验,就可在适当规模的项目上像专家一样工作,它可以帮助专家在大型复杂的软件设计上利用已定义属性,也可以促使他们学习其他专家的经验。
本书力图做到既是教材又是参考手册,帮助软件开发人员以一种新的方式思考软件体系结构,并提供一些技术来解决特定的不断再现的设计问题。把本书用做软件工程课程的指南,可以给学生提供大型软件设计的完整的新观点。把本书用做参考手册,可以方便查找全面的技术并随时可以使用。本书包含了涉及模式实际应用的许多指导原则和强制限制。
本书第1章、第2章由任雄伟翻译,第5~8章由肖斌翻译,其余章节由张志祥翻译。全书由贲可荣审校。孙宁、王淑雪、朱继梅等参与了本书的部分工作,在此表示感谢。
由于各种原因,译稿难免存在错误和疏漏,欢迎读者批评指正。
本书可作为计算机专业高年级本科生、计算机专业研究生的软件工程教材或参考书,亦可作为软件开发人员的参考手册。
译 者
2003年3月
除了关注用于并发和网络化的与领域无关的通用模式之外,本书对已有的关于并发网络程序设计和面向对象设计的资料做了如下扩充:(1) 关于并发的网络程序设计的资料通常关注操作系统API的语法和语义。相反,本书介绍了如何在设计和实现高质量的并发和网络化的系统时有效地使用这些API。(2) 本书讨论了并发和网络应用程序的开发过程。(3) 本书中的模式并不仅仅构成一个模式分类或系统,它们相互补充,形成了用于并发和网络化软件的模式语言。本书描述了如何使用这些模式语言来构建成熟的并发和网络化软件系统和应用程序、Web服务和分布式对象计算中间件,以及底层的操作系统网络协议和机制。
本书中介绍的很多模式还可用于并发和网络化的语境之外。
本书对软件开发的初学者和专家都有帮助。它可以帮助初学者不需要积累多年的经验,就可在适当规模的项目上像专家一样工作,它可以帮助专家在大型复杂的软件设计上利用已定义属性,也可以促使他们学习其他专家的经验。
本书力图做到既是教材又是参考手册,帮助软件开发人员以一种新的方式思考软件体系结构,并提供一些技术来解决特定的不断再现的设计问题。把本书用做软件工程课程的指南,可以给学生提供大型软件设计的完整的新观点。把本书用做参考手册,可以方便查找全面的技术并随时可以使用。本书包含了涉及模式实际应用的许多指导原则和强制限制。
本书第1章、第2章由任雄伟翻译,第5~8章由肖斌翻译,其余章节由张志祥翻译。全书由贲可荣审校。孙宁、王淑雪、朱继梅等参与了本书的部分工作,在此表示感谢。
由于各种原因,译稿难免存在错误和疏漏,欢迎读者批评指正。
本书可作为计算机专业高年级本科生、计算机专业研究生的软件工程教材或参考书,亦可作为软件开发人员的参考手册。
译 者
2003年3月
前言回到顶部↑
中间件是一组服务、协议和支撑工具,提供了构建现代分布式系统和应用程序的“管道”,而这些系统和应用是支持Web服务、分布式对象、协作应用程序、电子商务系统以及其他重要平台的基础设施。以前,很少听到中间件这个词,从事中间件开发的人更少。但是在过去的十年间,这个名词、有关它的研究和实践以及它的影响无处不在。但是,到目前为止,还没有一本书介绍如何构建网络化和并发的面向对象(OO)中间件,所以中间件设计还仍然像魔法一样神秘。本书阐明中间件的构建,希望能像专家一样,对于一般的设计问题、强制条件、成功的解决方案以及结论,为你提供合理的和带有经验指导的说明。
和大多数概念一样,确定中间件的范畴是很困难的。通常,中间件由构建系统和应用程序所需要的软件组成,但它并不是操作系统内核的固有部分。不过,中间件不太容易一眼就识别出来,它可能出现在库和框架、操作系统及其附件、Java虚拟机以及其他运行时系统中,也可能出现在大粒度软件组件中和像Web服务这样的部分终端产品中。
本书不是一本笼统介绍中间件,或者描述哪类应用程序和分布式系统体系结构可用中间件构造的教科书。相反,本书提出了一种模式语言,这种语言记录了构建大多数中间件具有的面向对象通信支持所用到的设计步骤。本书介绍的很多模式对于不是直接基于中间件的各层的系统和应用程序也是有用的。
本书强调实际的解决方案,而不是形式化理论。这里介绍的很多模式背后的基本思想对有经验的系统开发人员来说是熟知的—例如分配、多路分解、回调和配置,有时候是更一般的面向对象模式的变体—例如代理、适配器和外观。本书的主要贡献是基于这些思想的彻底的工程化解决方案。中间件开发人员必须解决范围很广的强制条件,包括吞吐量、响应能力、依赖性、互操作性、可移植性、可扩展性以及对遗留软件的适应等等。这些强制条件的多样性和重要性说明了中间件模式的复杂性,这一点和在较小规模的面向对象应用程序和并发程序设计中看到的不一样。
这些强制条件的多样性,以及多年的工程实践,通常产生了很多设计考虑和工程化的权衡方案,它们将思想和思想在中间件框架中的表示分开。本书所使用的模式描述格式将解决方案表示成一组具体的设计步骤,从而简化这一分开的过程。很多步骤依次调用了其他的模式。将这些综合在一起,就形成一种模式语言,开发人员在设计服务和应用程序时可以从模式转到模式。
正如作者所提到的,本书所讨论的一些思想和技术是对W. Richard Stevens那些关于网络编程的开拓性著作(如[Ste98])所阐述思想的补充。二者主要差别在于,本书更加关注更高层次的设计问题。例如,在讨论UNIX select()调用的输入和输出时,本书解释如何基于select()和其他操作系统调用,构建可组合的和灵活的框架,如反应器。
本书的一个隐含的主题是,如何应用由当前流行的平台所提供的处理I/O、线程、同步和事件多路分解的功能作为基础,构建更高层框架和组件。强调在UNIX和微软操作系统中使用C/C++不会减弱这一主题。而在如下情况下,Java程序员会发现一些小小的不连贯:一是Java已经直接实现了一些本书中讨论的模式(如定界加锁),或者Java已经提供了按照某些模式的特殊实现而构造的框架(如对可配置组件的JavaBeans框架支持),以及一些Java不能访问底层系统机制(如同步事件多路分解)。
但是,熟悉Java、Smalltalk以及其他面向对象程序设计语言的读者将会受惠于模式所表达的中心思想,能更好地理解如何以及为什么有一些模式已经在语言功能和库中直接得到了支持,并可能基于其他模式建立有用的组件。例如,Java一直不提供对异步I/O有用的系统结构的访问,直到有了java.nio。不过在引用了本书中对主动器模式的一段描述后,我整理了一个Java版本,它用简单的spin-loop线程在多个通道上检测I/O的可用性,来模拟多路分解步骤。这样做效率不高,但对于它的使用语境已经足够了。
近几年来,本书中介绍的一些模式,如反应器模式,已经从设计发明的描述进化为设计模式的描述。每个正在实现可移植的面向对象中间件的人,都已经写了或者使用了至少一个包装器外观。本书对以往其他几种模式的讨论还涉及其设计的一些新作用。起初不能肯定是否应该将这些描述看成是模式,模式应该是被时间证明的、独立(重新)发现的解决方案。不过,随着时间的推移,本书作者和面向对象中间件业界越来越坚信本书中介绍的模式确实抓住了关键强制条件和设计问题的本质,并已经看到所介绍的解决方案在很多不同的使用语境中被反复用到。
我建议你分享这一现象。通过阅读—特别是使用—本书中的内容,你将会明白为什么像反应器和主动器这样的模式名称在面向对象中间件开发人员之间很普及,就像装饰器和观察者在面向对象GUI开发者中很普遍一样。
Doug Lea
纽约州立大学Oswego分校
和大多数概念一样,确定中间件的范畴是很困难的。通常,中间件由构建系统和应用程序所需要的软件组成,但它并不是操作系统内核的固有部分。不过,中间件不太容易一眼就识别出来,它可能出现在库和框架、操作系统及其附件、Java虚拟机以及其他运行时系统中,也可能出现在大粒度软件组件中和像Web服务这样的部分终端产品中。
本书不是一本笼统介绍中间件,或者描述哪类应用程序和分布式系统体系结构可用中间件构造的教科书。相反,本书提出了一种模式语言,这种语言记录了构建大多数中间件具有的面向对象通信支持所用到的设计步骤。本书介绍的很多模式对于不是直接基于中间件的各层的系统和应用程序也是有用的。
本书强调实际的解决方案,而不是形式化理论。这里介绍的很多模式背后的基本思想对有经验的系统开发人员来说是熟知的—例如分配、多路分解、回调和配置,有时候是更一般的面向对象模式的变体—例如代理、适配器和外观。本书的主要贡献是基于这些思想的彻底的工程化解决方案。中间件开发人员必须解决范围很广的强制条件,包括吞吐量、响应能力、依赖性、互操作性、可移植性、可扩展性以及对遗留软件的适应等等。这些强制条件的多样性和重要性说明了中间件模式的复杂性,这一点和在较小规模的面向对象应用程序和并发程序设计中看到的不一样。
这些强制条件的多样性,以及多年的工程实践,通常产生了很多设计考虑和工程化的权衡方案,它们将思想和思想在中间件框架中的表示分开。本书所使用的模式描述格式将解决方案表示成一组具体的设计步骤,从而简化这一分开的过程。很多步骤依次调用了其他的模式。将这些综合在一起,就形成一种模式语言,开发人员在设计服务和应用程序时可以从模式转到模式。
正如作者所提到的,本书所讨论的一些思想和技术是对W. Richard Stevens那些关于网络编程的开拓性著作(如[Ste98])所阐述思想的补充。二者主要差别在于,本书更加关注更高层次的设计问题。例如,在讨论UNIX select()调用的输入和输出时,本书解释如何基于select()和其他操作系统调用,构建可组合的和灵活的框架,如反应器。
本书的一个隐含的主题是,如何应用由当前流行的平台所提供的处理I/O、线程、同步和事件多路分解的功能作为基础,构建更高层框架和组件。强调在UNIX和微软操作系统中使用C/C++不会减弱这一主题。而在如下情况下,Java程序员会发现一些小小的不连贯:一是Java已经直接实现了一些本书中讨论的模式(如定界加锁),或者Java已经提供了按照某些模式的特殊实现而构造的框架(如对可配置组件的JavaBeans框架支持),以及一些Java不能访问底层系统机制(如同步事件多路分解)。
但是,熟悉Java、Smalltalk以及其他面向对象程序设计语言的读者将会受惠于模式所表达的中心思想,能更好地理解如何以及为什么有一些模式已经在语言功能和库中直接得到了支持,并可能基于其他模式建立有用的组件。例如,Java一直不提供对异步I/O有用的系统结构的访问,直到有了java.nio。不过在引用了本书中对主动器模式的一段描述后,我整理了一个Java版本,它用简单的spin-loop线程在多个通道上检测I/O的可用性,来模拟多路分解步骤。这样做效率不高,但对于它的使用语境已经足够了。
近几年来,本书中介绍的一些模式,如反应器模式,已经从设计发明的描述进化为设计模式的描述。每个正在实现可移植的面向对象中间件的人,都已经写了或者使用了至少一个包装器外观。本书对以往其他几种模式的讨论还涉及其设计的一些新作用。起初不能肯定是否应该将这些描述看成是模式,模式应该是被时间证明的、独立(重新)发现的解决方案。不过,随着时间的推移,本书作者和面向对象中间件业界越来越坚信本书中介绍的模式确实抓住了关键强制条件和设计问题的本质,并已经看到所介绍的解决方案在很多不同的使用语境中被反复用到。
我建议你分享这一现象。通过阅读—特别是使用—本书中的内容,你将会明白为什么像反应器和主动器这样的模式名称在面向对象中间件开发人员之间很普及,就像装饰器和观察者在面向对象GUI开发者中很普遍一样。
Doug Lea
纽约州立大学Oswego分校


点击看大图






加载中...
