《UNIX编程艺术》读书笔记三:模块性和文本化

一、模块性

1.模块化

模块化原则:用定义清晰的接口把若干简单模块组合起来。这样的话若程序有问题还可以对局部进行改进和优化,还不至于牵动全身。

模块划分有很多方法,比如使用设计模式、划分大程序为几个协作进程等等。

模块化代码首要特质就是封装。封装就要定义好API。一种判断API是否定义良好的方法是使用自然语言来描述接口,看是否能描述清楚。编程时可以先定义接口,写好注释文档,再写接口的实现。

2.紧凑性与正交性

紧凑性也是一个重要特质。判断软件是否紧凑的一个方法是:有经验的用户需要帮助手册吗?一般来说,如果一个软件的功能子集能满足专家用户80%的需要,那么这个软件就有宽松意义上的紧凑性。

正交性使得程序每一个都做都无副作用。每个动作只改变一个属性,每个属性只能被一个方法改变。正交性能够减少测试和开发时间,如果正交性程序出现问题,把有问题的部分替换掉也很容易。正交性程序也容易形成文档和复用。“重构”的原则性目标就是提高程序的正交性。

3.SPOT原则

Single Point of Truth原则,真理的单点性原则,即针对正交性提出的一个原则:“不要重复你自身”。数据结构也应该实现“无垃圾,无混淆”,“无垃圾”指的是不要让数据结构太通用,“无混淆”指的是在真实世界中绝对明确清晰的状态在模型中也应该同样的明确清晰。

4.禅

UNIX的核心概念一直都有清瘦如禅般的简洁性。要做到简洁性,尽量不去想一种语言或操作系统最多能做多少事,而是尽量去想这种语言或操作系统最少能做到的事。依附导致痛苦。

二、多层软件结构

1.自顶向下和自底向上

自顶向下代表着从抽象到具体--从规格说明或应用逻辑开始,向下具体到各个操作。其方式是抽象化事物。主事件循环的程序常常考虑采用自顶向下的设计方式,先组织循环,再插入具体事物。

自底向上代表着从具体到抽象--从确定要进行的具体操作开始,再向上封装进行。其方式是围绕某个行为模型组织代码。

实际过程中,程序员往往采用两者接合的方式。而两者的接合之处就是胶合层。

2.胶合层

胶合层应尽可能的薄。C语言就是薄胶合层的实例。

发表评论