天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

繼承與混合,略談系統(tǒng)的構建方式

  這兩天在讀kissy的源代碼,從一開始我就對它的mix()函數(shù)充滿了敵意。因為無論從哪個角度來看,那都是一個極其低效的實現(xiàn)。不過深入了解這個框架之后,我對kissy中的新的系統(tǒng)構建的模型產(chǎn)生了興趣,而這種系統(tǒng)構建的方式,也正是由mix()所帶來的。

  一、對象系統(tǒng)

  我們先了解一下對象系統(tǒng)。在《JavaScript語言精髓與編程實踐》中談到過,面向?qū)ο笙到y(tǒng)有三種對象的繼承方式,即原型、類和元類。這三種方式都可以構建大型對象系統(tǒng)。在后續(xù)討論之前,我們在名詞概念上做一些強調(diào),所謂“對象系統(tǒng)”,是指由“一組對象構成的系統(tǒng)”,這些對象之間存在或不存在某種聯(lián)系,但通過一些規(guī)則組織起來。所謂“面向?qū)ο笙到y(tǒng)”,是指以上述“對象系統(tǒng)”對基礎延伸演化的系統(tǒng),新系統(tǒng)滿足前對象系統(tǒng)的組織規(guī)則。

  所謂對象系統(tǒng)的三個要素,即繼承、封裝與多態(tài),即是上述組織規(guī)則的要件。孟巖同學從C/C++出發(fā),從另一個側面談論對象系統(tǒng),所持的觀點我相當認可,這包括所述的“對象范式的基本觀念中不包括繼承、封裝與多態(tài)”——這一觀點有其確切的背景與思考方法,值得一談。

  (http://blog.csdn.NET/myan/archive/2010/10/09/5928531.ASPx)

  我們在這里要討論的是“對象系統(tǒng)”,即,對象是如何組織起來的問題。在這個問題上,組織規(guī)則之一,就是“繼承”。JavaScript中基本的繼承模型是原型繼承,其特點是“新對象實例的特性,復制自一個原型對象實例”。Qomo以及其它的一些項目,通過語言擴展的方式,在JavaScript上添加了類繼承的模型,其特點是“對象構建自類,類是其父類的一個派生”,這里的“派生”與“特性復制”有潛在的關系,即:子類的特性也復制自父類。正是因為“派生”其實是特性復制的一種形式,所以事實上Qomo中的類繼承,是通過原型繼承來實現(xiàn)的,因為原型繼承本質(zhì)上也就是“特性復制”。

  無論是原型繼承、類繼承還是這里沒有進一步討論的元類繼承,繼承的最終目的是構建一個“對象系統(tǒng)”,而不是“系統(tǒng)”。這一個小小的措辭上的區(qū)別,有著本質(zhì)上的、深刻的意義,這也是我提及到孟巖的上一篇文章的原因。通常,由“繼承”入手理解的“對象系統(tǒng)”其實是靜態(tài)的,以至于我們面向?qū)ο笙到y(tǒng)開發(fā)的最后一步,仍然需要框架來驅(qū)動之。例如TApp.Run(),或者類似于new App(),等等。繼承所帶來的,主要仍然是指對象系統(tǒng)的組織性,而非其運行過程中的動態(tài)特性。于是我們通過更多類或其它對象系統(tǒng),來將一個系統(tǒng)的動態(tài)特性靜態(tài)化,例如將對象之間的交互關系抽取出來,變成控制類。我們做這些事情的目的,僅僅是因為我們約定了對象系統(tǒng)的組織規(guī)則,要面向這個對象系統(tǒng)開發(fā),也必然滿足(或契合)這一組織規(guī)則。組織規(guī)則限定了我們構建系統(tǒng)的方式——繼承、封裝與多態(tài),這在一定程度上說是“對象系統(tǒng)構建”的一個方案,并非“系統(tǒng)構建”的方案。而孟巖在上文中討論的,也正是“系統(tǒng)構建”的問題。所以孟巖提出兩點:

  1、程序是由對象組成的;
  2、對象之間互相發(fā)送消息,協(xié)作完成任務。

  其第一條,是對象系統(tǒng)的基本特性,是謂系統(tǒng)成員;第二條,是對象系統(tǒng)如何演進為系統(tǒng)的特性,是謂系統(tǒng)通訊。一個系統(tǒng)的約束,既包括其成員(以及成員的組織規(guī)則),也包括成員間的通訊。

  二、用mix()來構建系統(tǒng)

  舍棄“繼承”這種方式不談,系統(tǒng)構建還有其它的什么方法嗎?

  kissy提供了另外一種可能性,即mix(),混合。在kissy系統(tǒng)的核心部分,為一個系統(tǒng)提出了三個概念:

  1、原子(meta),一個系統(tǒng)具有至少一個原子,原子是具有mix()能力的一個對象;

  2、宿主(host),一個系統(tǒng)有一個依賴的宿主,表明系統(tǒng)的外部環(huán)境,系統(tǒng)只是其宿主環(huán)境中的部分內(nèi)容,可以由特定的名稱來區(qū)別于其它;

  3、種子(seed),一個系統(tǒng)誕生自一個種子,種子描述系統(tǒng)上述的meta和host兩個方面的特性。

  kissy約定,一個系統(tǒng)誕生自一個種子,該種子通過不停地mix()而成長,變成一個復雜的系統(tǒng)。由種子培育成為系統(tǒng)的整個環(huán)境,只需要能夠理解mix與host,即可以基于seed來構建任意復雜的系統(tǒng)。

  上述的邏輯在kissy.js中,描述得相當簡單:

(function(host, S) {  

var meta = {
mix:
function(r, s, ov, wl) {
...
}
},

// If KISSY is already defined, the existing KISSY object will not
// be overwritten so that defined namespaces are preserved.
seed = (host && host[S]) || {},

// The host of runtime environment. specify by user's seed or <this>,
// compatibled for '<this> is null' in unknown engine.
host = seed.__HOST || (seed.__HOST = host || {});

// shortcut and meta for seed.
S = host[S] = meta.mix(seed, meta, false);

return S;

})(
this, 'KISSY');

it知識庫繼承與混合,略談系統(tǒng)的構建方式,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 老湿司午夜爽爽影院榴莲视频 | 西施打开双腿下面好紧 | 精品国产三级a | 91在线青春娱乐精品分类 | 757一本到午夜宫 | 古装性艳史电影在线看 | 嫩草影院在线观看精品 | 性饥渴姓交HDSEX | 男人电影天堂手机 | 99久久国产综合精品网成人影院 | 夜蒲团之5阳性之教 | 18和谐综合色区 | 色尼玛亚洲综合 | 韩国三级久久精品 | 国产爱豆果冻传媒在线观看 | 红杏俱乐部| 暖暖视频免费观看社区 | yellow在线观看免费观看大全 | 国内九一激情白浆发布 | 99久久久国产精品免费调教 | 国产成人精品综合在线 | 亚洲高清毛片一区二区 | 亚洲国产精品嫩草影院久久 | 在线观看视频中文字幕 | 贵妃高h荡肉呻吟np杨玉环 | 草民电影网午夜伦理电影网 | 99久久99久久精品免费看子 | 无码一区国产欧美在线资源 | 妹妹成人网| 无人视频在线观看免费播放影院 | 第一福利在线永久视频 | 啊灬啊别停灬用力啊在线观看视频 | u15女少天堂写真 | 99精品视频在线观看免费 | 国产啪视频在线播放观看 | np高h肉文 | 夫妻主vk | 99re这里只有精品国产 | 国产午夜精品理论片久久影视 | 欧美v1deossexo高清 | 啊灬啊别停灬用力啊在线观看视频 |