5 類別/對象: 用概念為主的編程法代替以功能為主的編程

這里必須要指出, '概念' 其實就是面向對象中的對象, 也就是物件導向中的物件. 中蟒有兩個互通的保留字 "概念" 和 "類別", 它們是一樣的.

為什么要另外用一個新名字? 我認為無論是面向對象還是物件導向的說法都會令初學者 摸不著頭腦. 好像我當初听了半天都不明白, 于是以為是很深奧的東西. 現在有机會重新弄一套程式語言了, 我研究了一下, 覺得 '概念' 的講法比較淺白. 當然這個名字會太籠統了, 因此保留了 '類別' 這個保留字, 如果你絲毫不覺得 '概念' 是個好主意的話, 當它不存在好了.

這是一個不算深, 但很煩的題目. 我還沒想好該怎樣表達. 因此暫時只好用一些例子, 希望你能掌握到其中的要點.

#定義一個概念
概念 印刷員:

   #定義這個概念的初始動作, '__初始__'是中蟒的特別函數.
   #而 '自己' 則是概念本身, 中蟒規定概念中的函數 (稱為方法) 
   #的第一個參數一定是概念本身. 至于叫什么名字可以隨便改, 
   #一般叫做 '自己'. ('我' 也不錯)
   定義 __初始__(自己, 名字):
	自己.名字 = 名字

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

   #定義另一個功能
   定義 檢查(自己, 稿件):
	寫 "稿件長度為:", 長度(稿件)

#開始操作

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

小王.印刷('這是一份廣告')
寫 '完成'
小李.檢查('論文一篇')

執行結果:

由王小明印
<html>;這是一份廣告</html>;
完成
稿件長度為: 8

可以看到所謂的概念, 其實像是一整套完整的, 自給自足的小程式. 它包括了自己的變數 (稱為屬性), 自己的函數 (稱為方法).

用概念的方法來為程式進行分工往往有很好的成效. 尤其是所寫的功能可以很容易的重用. 這是因為在分析的過程中, 互相牽連的部份己經盡量分開了.

在上面的方法定義中, 我們并沒有傳回任何值. 一個更好的做法是傳回概念本身:

...
   #定義另一個功能
   定義 檢查(自己, 稿件):
	寫 "稿件長度為:", 長度(稿件)
	傳回 自己
...

我們可以這樣調用: 小王.檢查(稿).印刷(稿)

或者我們傳回稿件:

...
   #定義另一個功能
   定義 檢查(自己, 稿件):
	寫 "稿件長度為:", 長度(稿件)
	傳回 稿件
...

這樣我們又可以用

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

一個是以工作人員的動作為主, 一個是以稿件的流程為主. 這樣寫傳回值, 實際操作時會帶來很大方便

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

#假設己定義好概念

小王 = 印刷員('王小明')
小張 = 外勤('張三')
段總 = 編輯('段正淳')
老朱 = 會計('朱子柳')

#實際操作

作者 = '老粗'
老朱.開稿費(小張,500).拿稿件(作者).交編輯(段總).正稿().付印(小王).印刷()

哈, 好玩嗎 ?