5 类别/对象: 用概念为主的编程法代替以功能为主的编程

这里必须要指出, '概念' 其实就是面向对象中的对象, 也就是物件导向中的物件. 中蟒有两个互通的保留字 "概念" 和 "类别", 它们是一样的.

为什么要另外用一个新名字? 我认为无论是面向对象还是物件导向的说法都会令初学者 摸不着头脑. 好像我当初听了半天都不明白, 于是以为是很深奥的东西. 现在有机会重新弄一套程式语言了, 我研究了一下, 觉得 '概念' 的讲法比较浅白. 当然这个名字会太笼统了, 因此保留了 '类别' 这个保留字, 如果你丝毫不觉得 '概念' 是个好主意的话, 当它不存在好了.

这是一个不算深, 但很烦的题目. 我还没想好该怎样表达. 因此暂时只好用一些例子, 希望你能掌握到其中的要点.

#定义一个概念
概念 印刷员:

   #定义这个概念的初始动作, '__初始__'是中蟒的特别函数.
   #而 '自己' 则是概念本身, 中蟒规定概念中的函数 (称为方法) 
   #的第一个参数一定是概念本身. 至于叫什么名字可以随便改, 
   #一般叫做 '自己'. ('我' 也不错)
   定义 __初始__(自己, 名字):
	自己.名字 = 名字

   #定义本概念的某个功能
   定义 印刷(自己, 稿件):
	写 "由" + 自己.名字 + "印"
	写 "<html>" + 稿件 + "</html>;"

   #定义另一个功能
   定义 检查(自己, 稿件):
	写 "稿件长度为:", 长度(稿件)

#开始操作

小王 = 印刷员('王小明')
小李 = 印刷员('李四')

小王.印刷('这是一份广告')
写 '完成'
小李.检查('论文一篇')

执行结果:

由王小明印
<html>;这是一份广告</html>;
完成
稿件长度为: 8

可以看到所谓的概念, 其实像是一整套完整的, 自给自足的小程式. 它包括了自己的变数 (称为属性), 自己的函数 (称为方法).

用概念的方法来为程式进行分工往往有很好的成效. 尤其是所写的功能可以很容易的重用. 这是因为在分析的过程中, 互相牵连的部份己经尽量分开了.

在上面的方法定义中, 我们并没有传回任何值. 一个更好的做法是传回概念本身:

...
   #定义另一个功能
   定义 检查(自己, 稿件):
	写 "稿件长度为:", 长度(稿件)
	传回 自己
...

我们可以这样调用: 小王.检查(稿).印刷(稿)

或者我们传回稿件:

...
   #定义另一个功能
   定义 检查(自己, 稿件):
	写 "稿件长度为:", 长度(稿件)
	传回 稿件
...

这样我们又可以用

小王.印刷(小王.检查(稿))

一个是以工作人员的动作为主, 一个是以稿件的流程为主. 这样写传回值, 实际操作时会带来很大方便

如果按上面的写法再写多几个概念出来, 写程式就可以更加接近日常的操作:

#假设己定义好概念

小王 = 印刷员('王小明')
小张 = 外勤('张三')
段总 = 编辑('段正淳')
老朱 = 会计('朱子柳')

#实际操作

作者 = '老粗'
老朱.开稿费(小张,500).拿稿件(作者).交编辑(段总).正稿().付印(小王).印刷()

哈, 好玩吗 ?