程序设计的模式语言(卷1)

程序设计的模式语言(卷1)
作 者: 科普林 施密特
出版社: 清华大学出版社
丛编项: 软件模式系列
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: 程序设计语言学
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  JamesO.Coplien是AT&T贝尔实验室软件生产研究部门的成员。他的研究方向主要集中在多范例开发方法和软件开发过程的组织人类学。DouglasC.Schmidt是WashingtonUniversity(位于St.Louis,Missouri)计算机科学系的教员。他的研究方向主要是为高速网络开发面向对象进行通信系统的实践技术。

内容简介

PLoP(Pattern Languages of Program Design)创立的宗旨是创造新文件。这暗示着PLoP的创始人对现有的文化有些不满,事实的确如此。这些创始人(面向对象编程社区的几位知名人物)已经意识到:他们的才华已受到文件偏见的限制。这种偏见源于科学出版物的传统,一言以蔽之就是喜新厌旧,总是追逐最新最近的发明或发现,而忽视传统的东西,而不论这些所谓的发明或发现是否有用。PLoP的创始人对传统的兴趣也许源自他们对软件重用的研究,或者来自他们的观察:尽管采用了最新的技术,但是由于缺少常用的解决方案,项目最终还是失败了。最重要的是:所有的创始人一致认为他们应该集中精力从事解决方案的推广。PLoP大会就是在这种背景下召开的。本书是“模式形式”系列书籍的第一部,这是我们心目中最佳的解决方案共享方式。我们要求作者提交“模式形式”方面的论文,但不要求实际地阐述形式的含义。Christopher Alexander创造了“模式语言”这一术语并且在他的著作The Timeless Way of Building中很好地阐述了该形式。很多作者对这项工作都很熟悉,而更多的人则是通过OOPSLA研讨会和Internet讨论组了解到它的。即便如此,我们还是感到各位作者希望畅言如何将Alexander的形式应用到计算机编程领域。有一点我们始终坚持:每篇论文描述一个解决方案,可以用来解决一个问题。读者在阅读本书时会发现,各位作者的解决方案所覆盖的问题范围相当广。这也意味着并非每一章都能引起读者同等的兴趣。我们希望随着PLoP社区的发展和成熟,PLoP自身能随着兴趣方向而分化。未来的书籍不会要求它们有如此广泛的读者。在此我们希望读者能够细读每一章,即使您并不打算立即应用所读到的内容,也可以启发表达模式的新灵感,并且的确会提出一个角度来理解开发软件如此困难的原因。虽然涉及的主题丰富多样,PLoP的作者和参与者之间却达成了一些令人惊叹的共识。例如,多数人都已发现:解决方案(模式的本质)可以轻松超越其表达形式的准确特性。模式最终必定停留在人的头脑中,所以各种书写风格(从标准模板的标签化分节到更具风格的运行段落)对模式成功的贡献都不如一些更基本的元素。这些元素包括:设立问题及其上下文,分析施加于解决方案的影响力,以及(最重要的)提供具体的解决方案。包含这些元素的模式都成功了。PLoP'94的核心特色就是作者研讨会,作者听取对...

图书目录

第1部分 框架和组件

第1章 功能点选 4

第2章 一套基于工具和材料比喻的工具构造和集成模式语言 6

背景和动机 6

总体方法 7

中心思想和设计比喻 7

设计比喻和设计模式之间的区别 8

工具和材料比喻 9

工具构造和集成设计模式 12

图形符号 12

设计模式线路图 12

工具构造设计模式 14

单个工具设计模式的应用 22

工具集成 23

扩展范例 23

工具集成设计模式 24

展望:系统边界 27

实际运转的工具和材料 28

工具和材料比喻 30

展望 30

致谢 30

参考文献 31

第3章 灵活的命令解释器:一个可扩展、语言无关解释器系统模式 33

第4章 旧服务器,新客户端:一套客户/服务器框架模式语言 39

介绍 39

关于具体化(REIFICATION)的注解 40

例外(Exception) 40

单人游戏(SOLITAIRE) 41

记录对象(OBJECTS FROM RECORDS) 41

请求(REQUEST) 42

实物化(MATERIALIZATION) 42

终结化(FINALIZATION) 43

身份管理(IDENTITY MANAGEMENT) 43

巨滚(MEGA-SCROLLING) 44

搜索业务对象(SEARCHING BUSINESS OBJECTS) 44

依赖性(DEPENDENCY)(模型—视图、广播、观察者、MVC) 45

创建和更新业务对象(CREATING AND UPDATING BUSINESS OBJECTS) 45

工厂方法(Factory Method) 46

窗口保管(WINDOW-KEEPING) 46

察看(VIEWING) 47

一个客户/服务器框架(A CLIENT/SERVER FRAME- WORK) 47

结论 47

致谢 48

参考文献 48

第2部分 系统和分布式处理

第5章 一套生成式的分布处理模式语言 54

对模式和它们用途的一些思考 54

朝着一套分布式计算的模式语言前进 55

名称:定义数据结构(DEFINE THE DATA STRUCTURE) 55

名称:确定名词(IDENTITY THE NOUNS) 56

名称:抽取公用属性(FACTOR OUT COMMON ATTRIBUTE) 57

名称:规范化角色(NORMALIZE THE ROLES) 59

名称:确定问题领域关系(IDENTIFY PROBLEM DOMAIN

RELATIONSHIPS) 61

名称:引入虚拟属性(INTRODUCE VIRTUAL ATTRIBUTES) 62

名称:激活数据(ANIMATE THE DATA) 63

名称:时间线索分析(TIME THREAD ANALYSIS) 64

命名:决定参与者(DETERMINE THE ACTORS) 64

原始会议模式 65

参考文献 68

第6章 G++:一套计算机集成制造模式语言 69

摘要 69

介绍 69

应用领域 70

论文组织 70

模式语言 70

模式1 控制层次的层级(A HIERARCHY OF CONTROL LAYERS) 72

模式2 控制模块之间的可见性和通信(VISIBILITY AND

COMMUNICATION BETWEEN CONTROL MODULES) 74

模式3 按并发性给对象分类(CATEGORIZE OBJECT FOR

CONCURRENCY) 75

模式4 事件触发的动作(ACTIONS TRIGGERED BY EVENT) 77

模式5 服务“等待”(SERVICES "WAITING FOR") 77

模式6 客户端/服务器/服务模型:实现控制模块(THE

CLIENT/SERVER/ SERVICE MODEL:IMPLEMENTATING

MODULES OF CONTROL) 79

模式7 “多类型服务”控制模块的实现(IMPLEMENTATION OF

"MULTIPLE KINDS OF SERVICES" CONTROL MODULES 80

模式8 控制模块的接口(THE INTERFACE TO CONTROL MODULES) 81

模式9 原型和现实(PROPERTY AND REALITY) 83

模式10 控制模块分布(DISTRIBUTION OF CONTROL MODULES) 84

和“设计模式编目”比较 87

结论 88

致谢 88

参考文献 88

第7章 分层体系结构的创建模式 91

摘要 91

背景 91

模式 91

阶梯模式 91

桥接模式 94

对称重用模式 95

提升引用以增强可重用性 97

参考文献 97

第8章 半对象+协议模式(HOPP) 98

第9章 主从模式 101

摘要 101

介绍 101

模式 103

理由 103

适用性 103

分类 103

描述 103

动态行为 104

方法 104

实现 105

示例 105

讨论 106

参考文献 107

第3部分 业务对象

第10章 信息完整性的CHECKS模式语言 110

整值 110

异常值 111

无意义行为 112

回显 113

可见含义 114

延迟验证 115

快速预测 116

假定发布 116

预测确认 117

诊断式查询 117

第11章 账户号码模式 119

模式 119

参考文献 122

致谢 122

第12章 星型结构:一种查询优化方案模式语言 123

查询优化过的数据库 124

整个业务实体 126

关键业务活动和影响 127

事务处理历史 128

人员、地点和事物 130

时间 132

维上卷 133

第4部分 过程与组织

第13章 产生式开发过程模式语言 137

介绍 137

语言内容 138

语言的驱动因素 139

组织内无名的质 140

语言原理 140

备注 141

致谢 141

模式语言 142

模式1:确定组织的规模 142

模式2:自选团队 144

模式3:独奏爱好者 144

模式4:确定进度 145

模式5:形式服从功能 146

模式6:角色的专业知识 146

模式7:逐步深入 147

模式8:见习生 147

模式9:组织服从位置 148

模式10:组织服从市场 149

模式11:开发人员控制过程 149

模式12:老板 150

模式13:体系结构设计师控制产品 151

模式14:反向法则 152

模式15:体系结构设计师也进行实现 152

模式16:检查体系结构 153

模式17:代码所有权 153

模式18:根据测试设计划分应用设计 154

模式19:进行品质保证 155

模式20:客户交往 155

模式21:分组验证 157

模式22:场景定义问题 157

模式23:雇佣分析员 158

模式24:防火墙 159

模式25:看门人 159

模式26:形成循环圈 160

模式27:转移职责 161

模式28:水牛山 161

模式29:内部工作流 163

模式30:每个角色需要3~7个助手 165

模式31:命名的稳定基础 166

模式32:分治 167

模式33:分解各个阶段 167

模式34:轮轴、钢圈和辐条 168

模式35:美学模式 169

模式36:耦合减少延迟 169

模式37:原型 169

模式38:不要打盹 172

模式39:配对开发 172

模式40:中止阻塞 172

模式41:不要打断一个中断 173

模式42:成功补偿 173

参考文献 175

第14章 生命周期以及支持演变和复用的重构模式 178

介绍 178

背景对象演化 180

模式:原型化均衡(First-Pass)设计 180

上下文 180

问题 180

解决方案 181

相关模式 181

模式:扩展初始原型 182

上下文 182

问题 182

解决方案 182

相关模式 183

模式:合并程序以支持演化和重用 183

上下文 183

问题 183

解决方案 184

相关模式 185

模式:从继承层次结构中演化聚合 186

上下文 186

问题 186

解决方案 187

相关模式 188

模式:创建抽象超类 188

上下文 188

问题 188

解决方案 189

相关模式 190

讨论 190

致谢 191

参考文献 191

第15章 RAPPeL:一种用于面向对象开发的“需求分析过程”模式语言 194

摘要 194

RAPPeL的基本原理 194

警告 195

模式语言模式1:构建正确的东西 197

模式5:客户期望的管理与满足 198

模式9:客户和谐 198

模式14:赞助人意图 199

模式17:定义需求 200

模式20:问题域分析 201

模式22:信息需求 202

模式24:域对象的寻找和定义 203

模式25:域对象的分类、关联与分组 204

模式26:域对象的细化 205

模式27:对象老化 206

模式28:对象造型 207

模式30:行为性需求 208

模式32:展望 210

模式34:需求规范 210

模式36:业务规则 213

解决方案 213

约束用例的规则 213

约束对象及其状态的规则 214

模式40:实用外部需求 215

模式50:用户界面需求 215

模式97:原型 216

模式99:需求验证 217

参考文献 218

第16章 毛虫的命运:一种用于分析-设计转换的模式语言 219

摘要 219

介绍 219

CF模式语言 220

模式1:并发执行线程 221

模式2:并发线程同步 221

模式3:协作工作包 222

模式4:工作包内容 223

模式5:工作包状态报告 224

模式6:工作包完工报告 225

模式7:工作包优先级 225

模式8:工作包安全性 226

模式9:程序形态 228

模式10:系统成员的角色 230

模式11:决策制定者的角色 230

模式12:工作人员的角色 231

模式13:接口的角色 231

模式14:信息化角色 232

模式15:小家族系统 233

模式16:通过对话完成的工作 234

模式17:关键区域保护 234

模式18:事件获取 235

模式19:事件路由 236

模式20:人机界面角色是一种特殊的接口角色 237

模式21:数据知其出处 238

CF的使用 238

CF的状态 239

相关事宜 239

参考文献 240

第5部分 设计模式及其编目

第17章 一种模式系统 244

摘要 244

介绍 244

一种模式系统 245

如何描述模式 246

模式的分类 247

粒度 247

功能 248

结构化原则 249

模式 250

体系架构级框架 250

设计模式 251

异构的体系架构 253

经验 255

未决事宜 255

相关研究工作 256

结论与展望 257

参考文献 258

第18章 设计模式之间的关系 260

摘要 260

介绍 260

设计模式目录的总结构 261

关系分类 261

需要解决的问题 261

关系类别 263

分类 263

使用分类 265

更改关系和设计模式 265

一个新设计模式:Objectifier 265

其他更改 266

设计模式层 267

层中的组织 267

基本设计模式和技术 267

解决典型软件问题的设计模式 269

针对特定应用域的设计模式 269

其他组织 269

相关著作 270

结论 270

参考文献 271

附录:对象化器模式描述 272

第19章 发现现有应用中的模式 276

介绍 276

模式 277

容器模式 277

高层设计模式 278

低层设计模式 280

小结 281

参考文献 281

附录 281

第20章 实现模式 302

介绍 302

抽象模式和具体模式 302

实现过程中模式被摒弃 303

多簇相互依赖的类 304

模式类 305

常用模式库 307

例证 311

概念问题 312

致谢 313

参考文献 313

附录A:模式作为一个类 313

附录B:类组合的C++实现 314

第6部分 体系结构与通信

第21章 流:“拉力驱动(Pull-Driven)”式处理的一种模式 321

模式名称:流 321

参考文献 327

第22章 管道和过滤器体系结构 329

摘要 329

介绍 329

模式 331

结论 336

参考文献 337

附录 337

第23章 基于模式的集成体系结构 340

摘要 340

介绍 340

集成模式的范例 342

结论 346

致谢 347

参考文献 347

相关书目 347

第24章 软件体系结构的模式 349

摘要 349

软件体系结构的设计模式 349

组件包装和交互的模式 352

亚历山大的模式 354

致谢 354

参考文献 355

第7部分 对象用法及对象风格

第25章 VisualWorks Smalltalk之ValueModel框架的理解及使用 359

介绍 360

什么是ValueModel 361

使用ValueModel泛化对象的性质 361

使用ValueModel共享值 363

如何使用ValueModel 364

使用onChangeSend: to:登记对值的兴趣 364

使用ValueModel链代替onChangeSend: to: 366

封装value/value:的发送者 368

确保共享同一个值的所有对象使用相同的ValueModel 369

维护一致的ValueModel值类型 370

ValueModel的类型 371

使用ValueHolder存放孤立对象 372

使用AspectAdapter存放对象的性质 372

使用BufferedValueHolder延迟新值的提交 373

使用RangeAdaptor分流数的区间 374

使用IndexedAdaptor存放集合中的某个索引 375

使用SlotAdaptor存放某个实例变量 376

使用PluggableAdaptor存放对象的某个部分 377

使用TypeConverter来回转换值的类型 378

使用ScrollValueHolder存放n维空间中的点 379

使用SelectionInList存放列表及列表选中项 379

参考文献 380

第26章 客户指定的Self 381

摘要 381

意图 381

动机 381

适用性 382

结构 382

动态 384

结果 384

实现 384

示例代码 386

使用 387

相关模式 388

参考文献 388

第27章 通过自封装实现的可复用性 389

简介 389

模式语言 389

结论 397

第8部分 事件和事件处理程序

第28章 分离组合和处理的模式 401

上下文 401

人造卫星数据处理 401

实例语法(C++) 404

致谢 406

参考文献 406

第29章 Reactor:并发事件信号分离与事件处理程序派发的对象行为性模式 407

意图 407

动机 407

适用性 410

结构 411

参与方 411

协作 411

结果 412

实现 413

示例代码 415

Client_Acceper类 415

Logging_IO类 417

日志服务器主函数 418

已知的用途 420

各相关模式 420

致谢 420

参考文献 421

第30章 事件模式 422

事件为中心的体系结构 422

事件对象类 423

事件的详细分类 424

面向对象状态机 425

请参阅 425

参考文献 426

附录 Request Screen Modification(请求屏幕修改) 427