今天我们开始学习第五部分的内容:语言与架构。该部分的内容分为两章:第十三章比较了面向对象和函数式架构风格的适用性;第十四章探讨了现代和经典面向对象软件语言的组件背后的架构选择。
第十三章给我们描述的是软件架构:面向对象与面向函数。面向对象是我们所熟知的内容,在面向对象的编程中,我们应该注意一下几点。复用操作,使用继承的原则之一是将公共特性放在可应用的最高等级类上,这样在子孙类中就无需重复它们,抽象数据类型的原则在这里仍然适用:由于在面向对象设计中,定义类型的关键在于分析其可应用的操作,在一个设计良好的集成结构中,最顶层的类中将收集在大量变体中可应用的特性。面向对象风格的架构对可扩展性的支持如何呢?系统最常见的扩展形式就是添加新的类型,折中情况是面向对象技术充分发挥自己作用的地方。而对于可扩展性的支持,还有另外一部分源于这样的假设:系统中最重要的变化是由于添加一个新的类型,它和原有类型共享了部分操作,并添加了而一些新的操作。通过对这一章的学习,让我对函数式解决方案的模块性有了一定的了解,当然我觉得对我帮助最大的就是在面向对象技术方面的知识,对我以后的学习有很大的帮助。
第十四章中该书带我们重读经典,也让我学习到很多的知识。现如今我们流行的就是面向对象的计算机语言,但是在我们的了解中,并不是所有东西都是对象,举个例子来说,我们不能为一个整数类型提供子类,运算以一般的方式在纯数字上执行,而不是调用对象的方法。但是书中就给我们介绍了一种不一样的思维,在Smalltalk中所有东西都是面向对象的。Smalltalk不局限于一种句法元素,Smalltalk程序由6种构建块组成:1.关键字、或伪变量;2.常量;3.变量声明;4.赋值;5.语句块;6.消息。在这里我们没有看到任何表示控制流的元素,没有条件判断或循环,因为它们不需要,它们是用过消息、对象和语句块来实现的。在对象上做所有事情都是通过发送消息来完成这使我们需要把握的概念不是很多,它也让我们限制了语言中语法结构的数量,让编程语言最小化。然后比较有趣的是我从砖块和灰浆建筑架构中所了解的东西。作为程序员,我们必须创造能工作的系统,而不只是看起来漂亮的东西,而这两者又不一定不可兼得。如果我们想编写代码,为了学习或为了开心,我们就需要从美丽的架构中获取灵感,蛋我们也许不能直接利用它来工作。我们的工作必须以美丽的架构为榜样,但必须是实际可行的。编程像建筑一样,是一种实践。我们最好避免教条主义,而是将注意力放在能工作的东西上。
最后用书中的一句话来结尾:“建筑时混乱的冒险,因为只有美丽的架构是不够的。不仅要美丽,而且要游泳,这是建筑和编程等活动的法则”。