寒假阅读笔记十三

架构之美——语言与架构(一)

      指缝很宽,时间太瘦,悄悄从指缝间溜走,不知不觉间《架构之美》即将读完,今天我阅读的是第十三章——软件架构:面向对象与面向函数,看到这个题目,让我想到了面向对象与面向过程,那么究竟什么是面向函数呢?两者又有什么区别呢?

     架构之美,“美”作为软件架构的口号,并不是由旁观者来判定的,其实早就存在一些明确的标准:“美”作为软件架构的口号,并不是由旁观者来判定的,其实早就存在一些明确的标准:可靠性、可扩展性、复用性。可靠性即为该架构能否帮助我们创建出正确、健壮的软件?可扩展性即为应对变化是否很容易?复用性即为该解决方案是否具有通用性?或者甚至可以将其作为一个组件直接插入到新的应用程序中,而无需做定制开发?

      函数式方法旨在直接依赖于数学函数的属性,而且拒绝采用假定,而且隐含着命令式方法,其计算操作除了生成结果(数学函数常见的功能)之外,还能够修改计算的状态,可能是修改全局状态,也可能只是修改状态的一部分(在更模块化的方法中),例如某个特定对象的内容。

     在《架构之美》的第十三章中有一小节的小标题是:组合子很好,但类型更好。为什么会有该结论呢?这是因为一种组合子描述了基于原有的机制构建新机制的特定方法。组合是以很严格的方式定义的:与一个名为take的组合子(如take 3 apple)关联的是一个数量元素和一个食物元素。而一个类定义了一个对象类型,他将列出所有可应用的特性(操作)。它提供了抽象数据类型意义上的抽象:它不仅定义了由什么内容构建,还定义了相应对象可应用的操作。我们可以从中领会数据抽象和面向对象设计的原则,采用这种方法意味着不仅知道对象是什么,还知道它有什么(它们公共的特性和相关的契约)。这同样提供了对各种类型继续进行分类的方法,或称之为继承,它一方面能控制模型的复杂度,同时还能充分发挥不同类型存在共性的优势。

      面向对象方法对于模块性目标的最本质贡献是继承。继承采用了“分类法”来组织类,大概可以表示为“is-a”关系,类之间的基本关系还有一种名为“客户”的关系,它表示某类将通过其API(包括操作、签名、契约)来使用该类。继承通常是不遵从信息隐藏原则的,它是一种恰好相反的“is-a”视图。继承和泛化对可扩展性的贡献,以及多态和动态绑定技术所带来的可扩展性

     代理将操作封装到对象中,代理(C#中的“委托”和它是等价的)的基本思想可以用函数式编程相关论文中类似的话表述:我们将操作(函数式编程中的函数,面向对象编程中的特性)视为“一等公民”。在面向对象上下文中,在运行时的一等公民应该是对象,它和静态结构中的类相对应。

     这一章的内容很好理解,一些概念是我们经常接触到的,比如继承,泛化,多态……最后还是把一句送给大家:所谓迷茫,就是你的才华暂时配不上你的梦想!

原文地址:https://www.cnblogs.com/niujunyan/p/6378918.html