二叉排序树的实现_webservice原理_二叉排序树的删除图解(11)

电脑杂谈  发布时间:2017-03-17 05:12:08  来源:网络整理

Keep it (复杂性控制)

首先我们尝试先构建起复杂性的概念。什么是复杂性? 复杂,字面意思理解,就是一个东西极其庞大承载的东西太多而我们理解或者认知起来已经很困难的时候,我们就说这个东西很复杂。而《现代汉语词典》对于复杂的解释也符合我们的直觉:

<code>(事物的种类、头绪等)多而杂:颜色~ㄧ~的问题ㄧ~的人际关系
</code>

复杂性,就是在把复杂作为一种特性了而已。就是说一件事物具有了一种“多而杂”的特性。而现代的复杂性科学认为复杂性可分为:情景复杂性(事物固有属性)和认知复杂性,而且两者互为因果。 那么软件为什么会有复杂性呢?或者说程序设计为什么会带来复杂性呢?这和程序设计本身有关系。我们回顾一下前面我们对于程序设计的定义:程序设计就是利用计算机将知识物化,并利用知识的可复现性来对现实产生作用。 那么说,程序设计就是在为整个软件系统增加知识。在增加整个系统的信息总量。通过信息论我们知道,当一个系统中的信息越多的时候,其信息熵就越大。熵越大,我们理解难度就越大,势必会带来复杂性增加。于是,复杂性一个比较浅显的数学定义就是信息熵。

上述公式是香农信息熵的公式,现在也可以理解成软件复杂性的公式。我们容易发现,软件设计这个事情,本事就是在增加复杂性的。他在不断的往整个软件系统中,增加信息,信息越多,我们越难去理解这个软件。这个软件就越复杂,当这种复杂到了一定的量级的时候,就爆发了软件危机。于是我们需要扩充一下我们对于程序设计的定义:程序设计在完成思维工具物化的同时,还需要尽可能的控制信息熵的增长,来降低系统的复杂性。 但是,人们总是聪明的,有了问题,我们就去发明新的工具啊。于是我们就有了一系列复杂性控制的理论。这里我们不去探讨更普遍层面的复杂性,我们先只看一下,程序设计,这一个我们比较关心的实物的复杂性控制的问题(要想对复杂性有一个浅显的认识可以看一下《探索复杂性》和《信息简史》)。 在程序设计层面上,我们没有很好理论化的东西去控制复杂性。但是我们创造了一系列的方法来控制复杂性。我们把这一些列的方法叫做“最佳实践“。如果你去看一些软件工程或者面向对象设计的书的时候,这个词可能经常遇到。二叉排序树的实现而我们的最佳实践有哪些呢? 结构化程序设计、面向对象程序设计、软件工程、敏捷开发、UML、领域建模…….不一而足。 关于“最佳实现”的具体细节的东西,有很多写的非常好的书中都有描述我们这里就不再赘述了。我们着重关心一点,如何去评价一个设计或者软件的复杂性呢?因为你不知道,如何评价或者衡量自己设计的复杂性的话,势必也不知道如何改进。 而评价的方式比较靠谱的有两个:

高内聚低耦合

是否满足设计模式的六大基本原则

高内聚低耦合

这个是我们刚开始提出的问题之一。内聚和耦合是一对相对的概念。相辅相成。两者虽然有联系,但不是必然联系。高内聚的设计不一定低耦合,低耦合的东西也不一定高内聚。那么内聚性和耦合性是什么,如何去评价呢?

内聚性

在程序设计中,内聚性是指机能相关的程序组合成一模块的程度。应用在面向对象程序设计中,若服务特定类型的方法在许多方面都很类,则此类型即有高内聚性。在一个高内聚性的系统中,代码可读性及复用的可能性都会提高,程序虽然复杂,但可被管理。 以下的情形会降低程序的内聚性:

许多机能封装在一类型内,可以借由方法供外界使用,但机能彼此类之处不多。

在方法中进行许多不同的机能,使用的是相关性低或不相关的数据。

低内聚性的缺点如下:

增加理解模块的困难度。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-37952-11.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 久保田悠来
      久保田悠来

      你是厂家派来的逗比吗

    热点图片
    拼命载入中...