发表于2024-12-22
世界著名计算机教材精选:软件架构与模式 pdf epub mobi txt 电子书 下载
《世界著名计算机教材精选:软件架构与模式》可供计算机专业学生、工科学者、系统开发人员和大型系统的系统架构设计人员阅读。本书的目标是让读者掌握系统架构和模式的基本原理与实际应用。
第1章 面向对象设计的原理 1
1.1 程序的可读性、正确性和
可扩展性 2
1.1.1 可读性 2
1.1.2 正确性 2
1.1.3 可扩展性 3
1.2 封装、抽象和信息隐藏 3
1.3 关注点分离和单一职责
原则 4
1.4 接口隔离原则 6
1.5 松耦合 6
1.6 里氏代换原则 7
1.7 契约式设计 9
1.7.1 断言 9
1.7.2 覆写要遵守契约 11
1.8 开闭原则 13
1.9 依赖倒置原则和控制反转 18
1.9.1 依赖倒置原则 18
1.9.2 控制反转 19
1.10 对象生成过程中减少
?依赖性 21
?1.10.1 依赖查找 22
?1.10.2 依赖注入 26
1.11 总结 28
1.12 练习 29
第2章 软件架构 30
2.1 软件架构概念 31
2.2 软件架构的质量 32
2.3 参考架构、架构模式和设计
模式 33
2.4 软件架构概念的任务和前景 34
2.4.1 系统中的分析任务 34
2.4.2 系统中的结构设计
任务 35
2.4.3 观察软件架构的
角度 37
2.4.4 软件架构的原型 37
2.5 软件架构师对一个项目的
意义 37
2.5.1 软件架构师的技术
能力 38
2.5.2 软件架构师的沟通
能力 38
2.5.3 构造软件架构过程中
的决定 39
2.6 总结 40
2.7 练习 41
第3章 软件设计的模式 42
3.1 模式的使用 43
3.2 模式的属性和它的设计 44
3.3 架构模式、设计模式和惯用
法的界限 44
3.4 描述设计模式和架构模式的
模板 46
3.5 总结 47
3.6 练习 47
第4章 面向对象设计模式 48
4.1 设计模式的分类 48
4.2 设计模式的概述 49
4.2.1 结构模式 49
4.2.2 行为模式 50
4.2.3 创建型模式 51
4.2.4 设计模式指南 51
4.3 结构模式中的适配器模式 51
4.3.1 名称/其他可用的
名称 51
4.3.2 问题 51
4.3.3 解决方法 52
4.3.4 评价 57
4.3.5 使用范围 58
4.3.6 类似的模式 58
4.4 结构模式中的桥梁模式 58
4.4.1 名称/其他可用的
名称 58
4.4.2 问题 58
4.4.3 解决方法 59
4.4.4 评价 66
4.4.5 使用范围 67
4.4.6 类似的模式 67
4.5 结构模式中的装饰模式 67
4.5.1 名称/其他可用的
名称 67
4.5.2 问题 67
4.5.3 解决方法 68
4.5.4 评价 76
4.5.5 使用范围 77
4.5.6 类似的模式 80
4.6 结构模式中的外观模式 81
4.6.1 名称/其他可用的
名称 81
4.6.2 问题 81
4.6.3 解决方法 81
4.6.4 评价 86
4.6.5 使用范围 86
4.6.6 类似的模式 86
4.7 结构模式中的组合模式 87
4.7.1 名称/其他可用的
名称 87
4.7.2 问题 87
4.7.3 解决方法 87
4.7.4 评价 95
4.7.5 使用范围 95
4.7.6 类似的模型 97
4.8 结构模式中的代理模式 97
4.8.1 名称/其他可用的
名称 97
4.8.2 问题 98
4.8.3 解决方法 98
4.8.4 评价 102
4.8.5 使用范围 102
4.8.6 类似的模式 103
4.9 行为模式中的模板方法
模式 104
4.9.1 名称/其他可用的
名称 104
4.9.2 问题 104
4.9.3 解决方法 104
4.9.4 使用范围 108
4.9.5 评价 109
4.9.6 类似的模式 109
4.10 行为模式中的命令模式 109
4.10.1 名称/其他可用的
?名称 109
4.10.2 问题 109
4.10.3 解决方法 110
4.10.4 评价 115
4.10.5 使用范围 116
4.10.6 类似的模式 116
4.11 行为模式中的观察者模式 117
4.11.1 名称/其他可用的
?名称 117
4.11.2 问题 117
4.11.3 解决方法 117
4.11.4 评价 124
4.11.5 使用范围 124
4.11.6 类似的模式 125
4.12 行为模式中的策略模式 125
4.12.1 名称/其他可用的
??名称 125
4.12.2 问题 125
4.12.3 解决方法 125
4.12.4 使用范围 129
4.12.5 评价 129
4.12.6 类似的模式 130
4.13 行为模式中的中间者
?模式 130
4.13.1 名称/其他可用的
??名称 130
4.13.2 问题 131
4.13.3 解决方法 131
4.13.4 评价 138
4.13.5 使用范围 138
4.13.6 类似的模式 138
4.14 行为模式中的状态模式 139
4.14.1 名称/其他可用的
??名称 139
4.14.2 问题 139
4.14.3 解决方法 139
4.14.4 使用范围 146
4.14.5 评价 146
4.14.6 类似的模式 146
4.15 行为模式中的角色模式 147
4.15.1 名称/其他可用的
??名称 147
4.15.2 问题 147
4.15.3 解决方法 148
4.15.4 评价 155
4.15.5 使用范围 155
4.15.6 类似的模式 156
4.16 行为模式中的拜访者模式 156
4.16.1 名称/其他可用的
??名称 156
4.16.2 问题 156
4.16.3 解决方法 156
4.16.4 评价 169
4.16.5 使用范围 170
4.16.6 类似的模式 171
4.17 行为模式中的迭代器模式 171
4.17.1 名称/其他可用的
??名称 171
4.17.2 问题 171
4.17.3 解决方法 171
4.17.4 评价 178
4.17.5 使用范围 178
4.17.6 类似的模式 180
4.18 创建型模式中的工厂
??方法 180
4.18.1 名称/其他可用的
??名称 180
4.18.2 问题 180
4.18.3 解决方法 181
4.18.4 评价 185
4.18.5 使用范围 185
4.18.6 类似的模式 186
4.19 创建型模式中的抽象工厂
??模式 186
4.19.1 名称/其他可用的
??名称 186
4.19.2 问题 186
4.19.3 解决方法 186
4.19.4 评价 195
4.19.5 使用范围 195
4.19.6 类似的模式 196
4.20 创建型模式中的单例模式 196
4.20.1 名称/其他可用的
??名称 196
4.20.2 问题 196
4.20.3 解决方法 196
4.20.4 评价 204
4.20.5 使用范围 204
4.20.6 类似的模式 204
4.21 创建型模式中的对象池
??模式 204
4.21.1 名称/其他可用的
??名称 204
4.21.2 问题 205
4.21.3 解决方法 205
4.21.4 评价 210
4.21.5 使用范围 211
4.21.6 类似的模式 211
4.22 总结 211
4.23 练习 213
第5章 架构模式 216
5.1 分层架构模式 217
5.1.1 名称/其他可用的
名称 217
5.1.2 问题 217
5.1.3 解决方法 217
5.1.4 评价 219
5.1.5 使用范围 220
5.1.6 类似的模式 226
5.2 管道和过滤器架构模式 226
5.2.1 名称/其他可用的
名称 226
5.2.2 问题 226
5.2.3 解决方法 227
5.2.4 评价 232
5.2.5 使用范围 232
5.2.6 类似的模式 234
5.3 插件架构模式 235
5.4 中介模式 245
5.5 面向服务的架构模式 267
5.6 模型-视图-控制器架构模式 291
5.7 总结 307
5.8 练习 308
参考文献 310
第3章 软件设计的模式
软件开发过程中的每一步都有对应的模式:用于系统分析的模式、系统设计模式、编程模式和测试模式。对于特殊的任务也有模式,比如对设计图形界面或者与数据库的数据交换。
本书专注于软件设计中的模式。这里要注意它们的区别:
* 架构模式(architectural patterns)。
* 设计模式(design patterns)。
确定架构模式和设计模式的界限参见3.3节。
用于设计的模式是已经经过证实的可用于解决一些特定问题的参考答案。在设计系统时要考虑使用模式,因为它们都是已经在多个系统中被证明过的。
设计阶段的模式起源于架构师Christopher Alexander1。他在20世纪70年代整理总结了一套城市建设的模式。Christopher Alexander认识到,建筑或者整条街道虽然可能包括相同的元素,但是完全可以按照不同的模式建造。换句话说,他通过元素和它们之间典型的关系可以辨别模式。
“……除了元素之外,每个建筑都是由元素之间的关系组成的一定模式定义的……” [Ale77]
在城市建筑学中,模式是一个具有开创性意义的理念。但是它在建筑学中的流行和认可的程度远远不如在软件开发领域。
模式对系统设计起到了重要的贡献,它促使软件开发在走向成熟的工程技术的道路上迈出了重要的一步。模式基本上是不依靠任何平台,不被限制于一种固定的编程语言。被命名的模式扩展了专业技术语言,受过训练的开发人员可以在一个更高的抽象层次中理解一个问题和答案。
模式经常要和抽象结合,它是一个抽象类或者接口的符号。真实的类是派生类,模式并不知道派生类,它们是由使用模式的用户定义的。它们或者在编译时出现在以具体类为基础的模式中,或者是在运行时在面向对象模式中替代模式中的抽象 部分。
为了使模式可以供其他开发者使用,必须做好文档工作。模式不是发明出来的,而是在实际应用中因为可以解决典型的问题而被发现出来的方法,它们可以在很多实际应用中使用。
3.1节研究在软件设计中模式的使用。3.2节描述在软件设计中模式的属性和它的设计。3.3节确定架构模式、设计模式和惯用法相互的界限。在3.4节中介绍模板,本书中利用这个模板介绍如何给模式做文档。
3.1 模式的使用
软件设计中模式的主要目标是通过再次使用已经获得的经验提高架构的灵 活性。
大部分系统设计中包含很多模式,仅仅通过这个特征还不能判断这是一个好的设计。
这里Christopher Alexander使用了适当的语言:“建筑可能是通过松散排列的模式建造的。这样的建筑只能体现出模式的聚集,并不具有内部的一致性,它没有真正的核心。还有一种模式结合的方式就是在同一空间的多模式叠加。这样的建筑具有内部的一致性,它把很多的含义包含在一个小的空间里。通过这种内部的凝聚力使它具有核心力。”一个好的设计的形成,需要多个模式相互间完美地组合,形成叠加效应。
只有在真正有意义的时候才可以使用模式。在使用模式之前,一定要仔细考虑要使用的模式是否适合解决这个问题,使用之后会产生什么样的结果。
从开发者的角度认为模式具有一定的安全性。这种安全性是建立在事实的基础上的,是前人经过应用已经得到证实的结果。然而这容易形成误导,认为在任何情况下使用模式都是正确的选择。单纯使用模式并不能保证对于设计中出现的具体问题是有意义的。
在以对象为基础的模式中委托原则经常起到重要的作用。委托一个用于接收信息的对象,消息可以继续传递给
* 接收信息的对象所聚集的部分对象;
* 或者是在运行时实现一个抽象(接口或抽象类)的对象(这个抽象是由接收信息的对象实现的)。
使用任何形式的委托或者抽象,其代价都是降低系统的性能。额外增加的层次总是和降低系统的性能相联系的。
如果要求系统具有扩展性,那么模式的使用具有优势。但是如果首先是对系统性能的要求,系统的可修改性没有重要作用时,使用模式就要仔细考虑。
尽管使用模式可以提高架构的可扩展性,但是同时也增加了架构的复杂度。
为了保证可扩展性,可能会生成新的类和操作,或者是新的类和类之间的关系。这种复杂度会降低系统的性能,在这种情况下,复杂度所带来的优点并不能抵消性能降低的不足。
如果系统需要灵活性是推测的,即目前还不清楚系统将来是否需要,那么就应该“只保持必要的灵活性,越少越好”。
本书关于模式的介绍,其核心是解释如何解决问题。然而,这个问题的实质是什么时候适合使用模式。这个问题往往被忽视了。也许没有已知的模式可以达到预期的目标。
寻找解决具体设计问题的方法是艰难的,人们必须仔细研究待解决的问题,比较有关模式的性能。
3.2 模式的属性和它的设计
模式的目标就是提高架构的属性。例如属性包括下面两点:
* 可理解性;
* 可扩展性。
可理解性可以通过简易性达到,即通过为每个模式提供简易的结构化的全面文档。可扩展性可以通过以下两点实现:
* 静态继承。
* 使用聚合接口2或者是抽象类。
面向对象模式满足以下设计原则:
* 松耦合性系统(详见1.5节),组件的松耦合性。
* 抽象(详见1.2节),通过泛化、接口或者抽象类。
* 信息隐藏(详见1.2节),通过隐藏程序实现的部分。
* 明确的职责(详见1.3节),通过角色安排。
* 依赖倒置原则,高层的类不依赖于低层的类。
这里需要强调的是有时候需要为非面向对象系统制定模式。这样的模式不需要继承和多态[Bus98,24页]。模式不一定都是面向对象的。本书中所介绍的设计模式都是以面向对象为基础的。
人们想到面向对象时,总会认为是通过泛化达到尽可能高的抽象,换句话说,就是找到它的基类,通过细分得到不同的变化。
因此一些模式就设计成以抽象类为基类,还有一些模式使用接口。人们更偏爱于使用接口,有两个原因:
(1)在一些编程语言中,例如Java,接口允许多重继承,抽象基类则不允许。
(2)抽象基类可以包含抽象操作,也可以包含已经完成的操作。接口则只能包含抽象操作,这样更让人一目了然。
接口优于抽象类,但这并不总是成立的。如果人们在每个实现类中都必须实现一个聚集或者默认实现,这种情况就应该使用抽象类。
3.3 架构模式、设计模式和惯用法的界限。
……
译 者 序
随着中德两国交往的不断加深,各行各业都在不断地拓展多方位的合作。但是中德两国在软件行业的合作却并不多见,来自德国的计算机类翻译著作也非常少。
德国企业出于严谨的风格和安全性的考虑,基本很少有软件外包,对于应用软件的开发和使用一般也都局限在德国本土范围内(除了一些大型公司,如SAP),所以我们对德国计算机行业的发展了解得并不多。
本书的作者Goll教授不仅有多年的计算机软件 世界著名计算机教材精选:软件架构与模式 电子书 下载 mobi epub pdf txt
印刷不错,内容很棒,跟预期的一样,买正版书认准京东。
评分一些经典的思想和案例
评分很好的书,对于软件架构设计很有帮助
评分不错不错,不错不错,不错不错,不错不错
评分必须满分的技术架构
评分对于想提高编程水平,很有参考价值
评分好,计算机科学与技术的大作,推荐!
评分好,计算机科学与技术的大作,推荐!
评分一直在京东买书。不错的,建议购买。
世界著名计算机教材精选:软件架构与模式 pdf epub mobi txt 电子书 下载