<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 176, comments - 240, trackbacks - 0, articles - 7

    [導入]唯一性與自洽性

    Posted on 2006-04-23 16:39 canonical 閱讀(1693) 評論(0)  編輯  收藏 所屬分類: 設計理論
    http://xp.c2.com/OnceAndOnlyOnce.html
    http://c2.com/cgi/wiki?DontRepeatYourself

    ???? OAOO(Once And Only Once)是我們在軟件開發中需要關注的基本原則之一. 唯一性當然是一個值得追求的目標. 從正交分解的角度上說,系統可以由少數的正交基通過組合構造出來。尤其在分析階段,我們需要牢牢把握住系統內核的幾個變化維度。但是這并不意味著我們最終能夠做到每種可以想見的軟件元素都是唯一的,也不意味著保持唯一性永遠都是最好的。
    ???? 唯一性在軟件中最直接的體現就是代碼的重用(reuse), 除了實現起來節省了工作量之外,代碼重用的另一個作用在于維護了系統中概念的唯一性,或者更廣泛的說,它維護了系統中知識的唯一性。例如,如果我們經常用到圓周率Pi,我們可以選擇在各處都直接寫3.1415926, 也可以選擇定義一個系統常數PI, 在使用的時候引用這個常數,保持關于PI值的知識的唯一性。其實只要各處的PI值是相同的,甚至只要是在誤差范圍內相互匹配的(例如有些地方用3.14, 有些地方用3.1415926),程序就可以正確無誤的運行,這樣就達到了我們開發程序的目的,并不需要什么常數定義。只是為了保證這種知識的一致性,定義一個常數無疑是最簡單直接的一種方法。從理論上說,我們實際需要的只是知識在軟件中能夠得到一致的表達,或者更加抽象一些,我們所需要的只是知識的自洽性,而唯一性無疑是維持自洽性的一種廉價方法。特別是在一個不斷演化的系統中,保持形式上的唯一性可能是實現自洽性的唯一可行的方法。
    ???? 但是, 我們需要認識到知識的一致性與代碼的唯一性并不是等同的,例如同樣是釋放資源的函數, 在不同的應用情形下我們可能將其命名為close, 也可能是destroy, 或者是dispose, 如果我們使用一個接口IDisposable.dispose(), 則引入了一種形式上的唯一性要求. 在使用reflection的情況下, 我們可以放松要求, 不要求對象實現特定的接口, 只要提供指定的函數名(例如dispose)即可. 我們也可以更加寬容, 通過外部描述性數據指定函數的用途, 只要求概念上的一致性, 例如spring中通過destroy-method屬性指定對象資源釋放函數. 沒有語言級別的形式唯一性, 我們就無法依賴于編譯器來維護其隱含的知識的一致性, 此時我們所能使用的通用方法就只有測試(test)了. 實際上, 很多知識上的自洽性要求都無法在程序中直接得到表達, 而只能通過一個構造的測試網絡來進行驗證.

    ???? 正如排他鎖(exclusive lock)是實現transaction的一種強形式一樣, 唯一性也是自洽性的一種強形式。在保持了唯一性的情況下,當然不可能出現沖突的情況,也就自然的維持了系統的自洽性。但是,很多時候概念的多樣性也是我們不得不考慮的內容。在C語言中, memmove函數的功能包括memcpy的功能,到底要不要取消memcpy以避免無謂的錯誤可不是一件容易決定的事情. 在數學上,同一個定理可能存在著多種非平凡(non-trivial)的等價表述形式, 從表面上看,它們可以是完全不相關的,但是原理上是等價的. 而不同的表述往往適用于不同的應用情形. 同樣的,在軟件系統中,It is ok to have more than one representation of a piece of knowledge provided an effective mechanism for ensuring consistency between them is engaged. 在軟件設計中, 引入中間層是在控制內在統一性的同時獲得豐富的外在表現的一種重要方式. 在CORBA中idl編譯器將idl文件翻譯成不同程序語言的版本, 我們在程序中使用的是特定程序語言的版本而不是直接的idl接口文件, 這些版本之間的自洽性是通過idl編譯器來保證的. idl編譯器所做的只是一對一的翻譯工作, 它本身并沒有提供額外的知識, 而它所生成的各個程序語言版本所表達的知識也是相同的. 可以想見, 一種更加復雜的,甚至是具備一定推理能力的引擎(engine)可以基于元知識進行更加復雜的變換工作, 并可以融合其他外部的知識, 最終輸出一系列自洽的表現結構.例如, 我們可以根據一個描述文件生成所有CRUD(Create Read Update Delete)操作的程序代碼和界面代碼. 這些生成的文件中可能存在著重復的代碼,可能重復的表達了某個知識, 例如界面布局等, 但是它們之間通過引擎隱蔽的存在著穩固的聯系
    主站蜘蛛池模板: 日韩免费无码一区二区视频| 亚洲精品视频在线免费| 成人性生免费视频| 91丁香亚洲综合社区| 国产精品免费观看| 亚洲mv国产精品mv日本mv| 国产92成人精品视频免费| 亚洲成人免费电影| 搡女人免费视频大全| 亚洲av综合av一区二区三区| 精品久久免费视频| 国产精品亚洲二区在线| 免费99热在线观看| 国产精品免费观看视频| 亚洲Av无码专区国产乱码DVD | 久久精品国产亚洲AV麻豆网站 | 一级毛片免费在线观看网站| 国产亚洲美女精品久久久2020| 一个人看www免费高清字幕| 亚洲国产一区二区三区| 国产视频精品免费视频| 亚洲成a人片77777kkkk| 免费h片在线观看网址最新| 亚洲成a∧人片在线观看无码| 亚洲Av无码国产情品久久| 99久久免费国产特黄| 久久久婷婷五月亚洲97号色| 韩国免费一级成人毛片| 特级毛片免费观看视频| 亚洲国产精品久久久天堂 | 麻豆国产VA免费精品高清在线 | 亚洲国产天堂久久综合网站| 成人午夜免费福利| 男人j进女人p免费视频| 久久精品国产亚洲av影院| 日本免费的一级v一片| 九九99热免费最新版| 亚洲制服丝袜一区二区三区| 一本久到久久亚洲综合| 久久狠狠躁免费观看2020| 亚洲欧洲无码AV不卡在线|