C++ Follow Me(3): 类的产生(下):从职责中提取
黄国强 2006-12-21
在C中,软件可以认为是函数的集合。我们一般是从功能中来提取函数并将之模块化。与C不同的是,C++程序是由一系列类组成。所以按功能来获得类的出发点是不对的。那么,我们应该从什么角度才能得到我们所需的类了?答案正如标题所述,从职责中提取。
职责(responsibility)和功能(function)到底有什么区别呢?这两个词很容易混淆。我在这里做个比方:比如,作为一个老师对自己的学生,就应该履行做教师的职责。显然,这里没有人会说履行一个做教师的功能。
职责显然要涵盖功能,二者不在一个抽象层面上。简单的说,职责就是界定什么类应该对某件事情负责,而不是简单的完成某个功能。
对于数学概念来说,职责和概念往往是统一的。比如,正方形,长方形都可以直接提取为类。因为,数学概念是逻辑化的而且是精确的。与此相对应的自然概念却不能简单这样提取,因为二者不是统一的。比如,给桌子定义成一个类,你就会遇到问题。最明显的,桌子是什么形状,到底有几条腿或没有等等。所以简单的从自然概念中提取基本上行不通。这里同样要从职责的角度去提取。比如,食堂的饭桌负责给大家吃饭用的、电脑桌负责放电脑等等。这样产生类的时候就不会遇到前面所提到的问题。