分解和组合的抽象方法

抽象方法一般有两个分解decomposition和组合composition,这两种方法的方向正好相反,分解是将整体分解为部分,而组合是将部分组合成整体。

在软件架构设计和编码中,我们经常快速灵活使用这两种方法,比如将一个类分解为多个小类,将一个方法分解为多个方法,或者将几个类合成一个类一起调用,GoF设计模式中有不少模式是展示这两种方法的使用,比如桥模式或适配器模式是将几个类组合在一起调用。

分解和组合经常结合在一起使用,实际就是拆了装,装了拆,如同玩玩具一样,只不过每一次拆装都是有具体依据。

分解组合实际是一种虚拟重建方法,将现实世界中的模型使用抽象符号分解为一个个基本元素,然后再使用“关系”将它们组合在一起形成一个稳定的结构,形成结构后一个系统就具备了初步的形态。生命正在孕育之中。

软件架构的4+1视角模型简介一文对软件架构划分了五种视角,这五种视角针对不同的人群用户,一个好的落地的软件架构应该同时满足不同的利益要求者。4+1视图有:逻辑视图 开发视图 处理视图 物理视图,最后+1是场景。

逻辑视图是业务逻辑的分析,将功能性需求分解为类图,这里主要使用了面向对象的分解方法,也就是将需求分解为一个个对象类型,对象类型是最小的元素,通常我们使用UML的类图来表达,为什么要使用对象类型来表达分解后的元素呢?因为所谓对象是有边界的一种封装,人以群分,物以类聚,分门别类进行封装可以认为也是一种组合。

因此,类型是我们分解与组合的基本依据,类型理论是非常抽象和复杂,但是如果有丰富的实践经验,见识过各种不同类型的代码和抽象封装,就像见过各种不同类型的人以后,对人性的了解更加深刻一样。

处理视图是根据性能和扩展性要求进行分类的视图,低延迟和高吞吐量是处理架构的终极目标。开发视图是根据系统模块耦合进行分类的视图。物理视图是面向系统工程师的分类视图,落地为一个个实际物理存在的设备和网络。

场景视图是将这四种视图组合在一起使用,从而最终实现业务用例,模拟物理世界的业务需求实现。

以上主要是软件中的分解和组合使用,其实这两种方法适合更广泛的思维方式,分解思维能够让人不断研究细节,比如西医治病采取的是分解思维,肝脏有病就解剖肝脏,直至分解到细胞;而中医是采取组合方法,肝脏有病寻找与其有关系的肾脏进行补养,中医依据的五行水木金火土代表一种关系,肝脏代表木,而肾脏是水,水生木,也就是水能够滋养植物,所以,中医才采取补肾的方式治肝。

由此可见,类型与关系是分解与组合面对的主要元素,一个大的事物分解为不同类型的小事物,相同类型的事物可以合并成一组类型,分解时尽量切断各种关系,除非是高聚合的组成关系,也就是缺一不可的关系,这样才能孤立事物,研究事物;而组合是拉关系,通过关系将不同事物组装在一起。如果反映到数据库建模上,就是先建数据表,再找外键关系。

典型比如几何学是对直线 三角形等孤立图形进行研究,实际生活中是没有直线和三角形这个事物,就是有也是融入了复杂环境之中,分解思维能够让人有的放矢,集中人类的有限智慧从上帝手里抢夺一些自然的秘密。

举例:一张桌子。分解思维的人看到后,研究其长宽高以及材质和形状等个体特性,而注重关系的组合思维的人看到后,环顾四周,关注这张桌子的环境以及与其他事物有时间或空间的关系。

中国人这种注重关系的思维起因还可从老子道德经的“无以为用”中发现:三十幅共一毂,当其无,有车之用。埏埴以为器,当其无,有器之用。凿户牖以为室,当其无,有室之用。故有之以为利,无之以为用。
这段话意思是:三十根棍子做成的圆轱辘,只有忽视圆轱辘内部这种结构,从圆轱辘外部看到,才会发现它原来是可以做车的轮子这一用处。比如门窗,只有忽视其内部如何结构的构建,才会从外部想到用它在房间中。

所以,忽视个体内部结构,从外部关系组合才会发挥其用处,这是“无以为用”;而注重内部细节的“有”,这种分解方法无疑如同利器能有的放矢,因此这是“有以为利”,两者合并在一起就是“利用”。利用就是分解组合,中国古人的智慧还真是很厉害啊。


人的这种分解和组合思维能力也可通过机器学习算法进行模拟,再配合大数据进行训练,人工智能也就应运而生。

其实Hadoop的Map/reduce算法本身就是一个分解和组合的算法,通过Map进行分解到类型为Key的最小元素,而再通过Reduce基于类型和关系进行组合结果。

正是由于Map/reduce对大数据的分解组合能力,为机器学习人工智能的发展提供了基础可能。

机器学习流行算法一览列举了常见的机器学习算法。

Regression回归算法应该是一种组合方法,回归是关注变量之间关系的建模,利用模型预测误差测量进行反复提炼。聚类Clustering方法是按照类型组合。

人工神经网络干脆直接模拟人的神经网络,进行分类和回归,也就是分解和组合。




范畴理论总是鼓励我们从对象内部细节中转移开来(banq注:我之前帖子中的一张桌子理论,无才能用)在范畴理论中一个对象是一个抽象模糊的实体,你所有需要知道的只是它如何和其他对象交互(关系),它是怎么使用箭头和其他对象连接的,这就是为什么互联网引擎能够通过分析链入和链出的链接来排名网站一样。

看来中医的基础五行(金木水火土)也属于一种范畴方法学,因为五行让我们关注的是五个元素之间的关系,而不是元素自身的含义。






你可能感兴趣的:(软件架构)