一、阅读内容
第五部分
第十三章 软件架构:面向对象与面向函数
第十四章 重读经典
二、笔记总结
(1)面向对象与面向函数
函数式编程能够更好的实现模块化设计。在面向对象的编程方式出现之后,我们发现面向对象的程序设计,特别是支持高级例程对象或者代理的现代形式包含了函数式编程,在保留了函数式编程的同时也提供了高层的抽象,更好的支持了扩展和复用。下面具体分析一下这两种软件架构。首先是函数式的编程方法。显然,这样的编程方式的伸缩性不好,对于较大型的项目而言,必然需要将这个项目分在不同的模块中。那么现在的扩展性问题就变成了如何使这样的修改影响到的模块尽可能的少。在模块之外很难对模块的行为进行修改。但是函数式编程依然有着十分重要的优点。第一个是简洁的定义。这和常见的命令式编程语言中的例程声明相比,语法负担要小得多。第二个优点是定义对象的组合子表达式的优雅型。另外两个优点则更显基础性。首先是能让操作成为最能够被高效处理的部分,另一个是延迟计算,能够描述一个可能无限大的计算,当然该计算的任何具体执行过程都将是有限的。面向对象编程的好处就太多了,毕竟这时当前主流的编程思想,相关的介绍已经很多了。比如维护简单。模块化是面向对象编程中的一个特征。实体被表示为类和同一名字空间中具有相同功能的类,我们可以在名字空间中添加一个类而不会影响该名字空间的其他成员。再比如可扩充性。面向对象编程从本质上支持扩充性。如果有一个具有某种功能的类,就可以很快地扩充这个类,创建一个具有扩充的功能的类。更重要的是代码重用。由于功能是被封装在类中的,并且类是作为一个独立实体而存在的,提供一个类库就非常简单了。事实上,任何一个.NET Framework编程语言的程序员都可以使用.NET Framework类库,.NET Framework类库提供了很多的功能。更令人高兴的是,我们可以通过提供符合需求的类来扩充这些功能。
(2)关于本书的思考
通过对本书的阅读,我更加认识到了软件开发和建筑物的构造过程有着异曲同工之妙。软件架构重点关注的是软件的整体,如何用一种适合系统功能需求以及非功能需求的结构方式去构建系统中的各个组件以及它们的交互过程。从一开始,软件架构从一开始就关注了整个系统的功能需求和非功能需求,在全局层面上对系统软件进行规划。一个很明显例子,如建造一个新的城市,要考虑城市建造的要求,同时还要考虑到城市与周边和地形的关系,从而决定采用什么样的架构,决定建造一个什么样的城市,如园林式还是其它式的。值得一提的是:一个具体的系统,由于系统很大,还可以划分成很多个小的子系统,那么子系统同样也需要规划的,也即同样要进行架构设计。如上述例子中具体的一个房子,要看它的功能需求是什么,如果一个办公大楼,它的局部设计架构与一个私人住宅肯定是不同的。