“美”作为软件架构的口号,并不是由旁观者来判定的。其实早就存在一些明确的标准。
可靠性 该架构能否帮助我们创建出正确、健壮的软件。
可扩展性 应对变化是否很容易。
复用性 该解决方案是否具有同样性,或者甚至可以将其作为一个组件直接插入到新的应用程序中,而无需做定制开发。
这部分内容,作者从之前所概括的软件架构评价标准入手,对面向对象和面向函数两种方法进行比较。从反方向来论证它们之间的关系:面向对象的架构融合了函数式编程的思想,特别是吸纳了诸如Eiffel中的代理之类的新技术之后,在保留了其优点的同时克服了其缺点。要证明这些发现是否合格,作者提出了几点限制:
缺少的数据点、细节不足、具体关注以及实验者的偏见。
面向对象视图
组合子很好,单类型更好:到目前为止,我们处理的都是操作和组合子。操作我们将保留,而关键是抛弃组合子并将它们替换为类型。它将明显的提升抽象等级。
面向对象方法对于模块性目标的最本质贡献是继承。继承采用了“分类法”组织类,大概可以表示为“is-a”关系,类之间的基本关系还有一种名为“客户”的关系,它表示某类将通过其API来使用该类。
面向对象模块性的评价和改进
复用操作:使用继承的原则之一是将公共性放在可应用的最高等级上,这样子孙类中就无需重复它们;也就是说继承关系就是“as is”。
可扩展性:添加类型
可扩展性:添加操作
在第十四章,"重读经典"作者提到所有东西都是对象。今天流行的面向对象计算机语言并不是纯面向对象的。这章作者主要通过大量的实例让我们了解哪些经典的“架构”。