版友久石让的粉丝同志问询类模块与标准模块的区别所在。我不知道这两个东西严格的定义是什么,似乎定义本身对于理解这个问题来说也没什么意义。于是乎便觉得通俗一些的解释更有意思。
假设久石让的粉丝同志家的窗户经过风吹雨打若干年,有了些小毛病。这一日早晨久石让的粉丝同志发现窗户上的窗纱需要进行更换,于是久石让的粉丝同志就随手在家里找了一把螺丝刀(又名起子、改锥)干起活来。由于年久失修,久石让的粉丝同志干的很费劲,等做完这些活才发现上班的时间已经过去了很久。
久石让的粉丝同志赶忙下得楼去,骑上自行车,撒丫子般飞奔而去,但听得耳边风声呼呼作响,两边树木行人皆向后倒去。说时迟,那时快,一个不留神,久石让的粉丝同志的自行车被路面的一块砖头颠起,一个三百六十度向后全旋,咣当一声跌落在地。这一跤摔得那个惨不忍睹,无以言表。久石让的粉丝擦干身上的血迹,掸尽浑身的尘土,扛起自行车昂首阔步向前走去。
久石让的粉丝在诸多行人奇异的目光下走过两条街道,在一僻静处找到一个修自行车的摊子。修车的师傅一看生意来了,赶忙打开工具箱,将扳手、起子、打气筒等多个工具散落到地上,翻转自行车放好,拉开架势便修理起来。后事如何暂且不表。
诸君读到此处,或已云山雾罩,此故事与模块何干?岂不知这段表述,便是指出了类模块与标准模块的异同所在。
简言之,久石让的粉丝家里的螺丝刀就是标准模块中的事物,而修车师傅的工具箱就是类模块的所在。
久石让的粉丝家里的螺丝刀没有特定的用途,所以久石让的粉丝家里的螺丝刀可以用它下窗纱,也可以用它拧下高压锅的把手上的螺丝。而修车师傅的工具箱中的螺丝刀,其功能是特定的,它将与其他工具和修车用的物品(比如补胎用的橡皮和胶水等)一起用来修理自行车。但修车师傅家的窗纱坏了的话,它也会用其工具箱中的螺丝刀去处理窗纱,而不会另外在去买把螺丝刀。只是这把螺丝刀主要的功能在于修理自行车,以此维持修车师傅的生计。
标准模块中可以散放很多的工具,比如:扳手、剪刀、钳子、螺丝刀,你想用它们中的哪一件就直接取来用即可。类模块中集中存放工具这个对象,在这个对象中包含了扳手、剪刀、钳子、螺丝刀,当你想用某件工具的时候,你先要得到这个类(把它看成存放这些工具的工具箱),然后从中取出你需要用的那件工具来使用。
类模块是一种封装的对象。可以将一个抽象的事务集中来管理,这个事务中有属性、字段、事件、方法(过程)、函数、常量等等。由此不难看出类模块是用于解决事务的,也就是说它不是单独解决一个算法,也不是单独提供一个变量或者常量。实际上我们的每个窗体的模块都是一个类模块,所以你可以在窗体中解决这个窗体中需要解决的所有问题。
标准模块只是一个存放代码的文件,这个文件中你可以写很多公共的子程序、函数、或设置公共的变量或常量。这些子程序、函数、变量或常量你可以在当前程序的任何地方(其他标准模块、窗体类模块、自定义类模块等)使用。而这些存放于标准模块中的子程序、函数、或设置公共的变量或常量在逻辑上不一定有什么内在的联系。
类模块与标准模块的最大区别就在于:类模块用于存放解决一个复杂的问题的完整代码,标准模块用于存放解决若干个或无关联的局部问题的代码。由于什么是“一个复杂的问题”并没有一个确切的标准,所以类模块与标准模块在功能上是存在交集的。
放在修自行车师傅工具箱中的螺丝刀,与放在修电视机师傅工具箱中的螺丝刀,都可以用来拧下窗户上的某个螺丝。但是这两个工具箱的所有工具组合起来的功能却是相互不能替代的。同时,你可以把修理摩托车和修理自行车分别做两个不同的工具箱,也可以用一个工具箱放入修理这两种车辆的工具。这个处理只凭你的爱好,或许也受到市场规律的左右。如果你仅仅为了拧下窗户上的某个螺丝,那你去买个修自行车的成套工具的工具箱,就只能说明你的脑子有毛病。
谈到此处,我们似乎把久石让的粉丝同志的自行车修好没有忽略掉了。没关系,我们在回去看看。久石让的粉丝已经不在修车摊了,修车师傅好像在眯着眼懒洋洋的打盹。阳光透过树叶间的缝隙,洒落下来,斑驳而跃动的投射到他的身上。生活原来很简单,我们讨论着令人生厌的模块问题干吗?真是扯谈!
|