契約模式Design by Contract

契約模式Design by Contract

背景

Design by Contract是Bertrand Meyer總結(jié)的一項設(shè)計技巧萝玷,也是Meyer發(fā)明的Eiffel語言的主要特點叶圃。不過,這條原則的作用范圍并不局限于Eiffel掘托,而是所有的程序設(shè)計語言。

那么什么是Contract呢悉患?

我們在聲明一個函數(shù)/方法的時候肩钠,對函數(shù)的輸入和輸出所具備的性質(zhì)是有所期望和規(guī)定的。有時候這種性質(zhì)會被我們明確的寫出來兽间,有時候會被我們忽略掉历葛。這些期望和規(guī)定就是Contract。

核心

核心是斷言(assertion)嘀略。所謂“斷言”恤溶,是指永遠為真的布爾型語句,如果不為真帜羊,則程序必然存在錯誤咒程。通常情況下,檢查斷言的時機讼育,應(yīng)該局限于調(diào)試(debug)階段帐姻,而不是代碼的實際執(zhí)行階段。實際上奶段,完成的程序永遠不應(yīng)期望斷言會被檢查饥瓷。

Design by Contract使用了三類斷言:post-conditions,pre-condition,以及invariants。違反這些操作會導致程序拋出異常

post-conditions痹籍,是指操作執(zhí)行完之后的情況呢铆,發(fā)生在每個操作的最后

pre-condition,是指在執(zhí)行操作之前蹲缠,期望具備的環(huán)境刺洒,發(fā)生在每個操作(方法,或者函數(shù))的最開始吼砂。

invariants逆航,是指使關(guān)于類(class)的斷言,實際上是前置條件和后置條件的交集渔肩。

歪理

從核心來看因俐,這意味著,不變量可以應(yīng)用于特定類暴露的所有公開操作的前提條件與后繼條件。在方法的執(zhí)行過程中抹剩,不變量可能為假撑帖,但是,在其他任何對象能夠與被調(diào)用方進行交互的時刻澳眷,不變量斷言必須恢復為真胡嘿。

在繼承關(guān)系中,斷言扮演著獨特的角色钳踊。繼承的風險之一在于衷敌,開發(fā)人員為子類重新定義的行為,可能會違背父類的行為拓瞪。斷言減少了這種風險缴罗。對某個類來說,其不變量和后繼條件必須能夠應(yīng)用于所有的子類祭埂。子類可以加強這兩類斷言面氓,增加更多的限制,而不能削弱它們蛆橡。而前提條件則只能削弱舌界,而不能增強。

可能有些隱晦難懂可以看這里

參考文章

1.http://www.zhihu.com/question/19864652

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末泰演,一起剝皮案震驚了整個濱河市呻拌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌粥血,老刑警劉巖柏锄,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異复亏,居然都是意外死亡趾娃,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門缔御,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抬闷,“玉大人,你說我怎么就攤上這事耕突◇猿桑” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵眷茁,是天一觀的道長炕泳。 經(jīng)常有香客問我,道長上祈,這世上最難降的妖魔是什么培遵? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任浙芙,我火速辦了婚禮,結(jié)果婚禮上籽腕,老公的妹妹穿的比我還像新娘嗡呼。我一直安慰自己,他們只是感情好皇耗,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布南窗。 她就那樣靜靜地躺著,像睡著了一般郎楼。 火紅的嫁衣襯著肌膚如雪万伤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天箭启,我揣著相機與錄音壕翩,去河邊找鬼蛉迹。 笑死傅寡,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的北救。 我是一名探鬼主播荐操,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼珍策!你這毒婦竟也來了托启?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤攘宙,失蹤者是張志新(化名)和其女友劉穎屯耸,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹭劈,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡疗绣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了铺韧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片多矮。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖哈打,靈堂內(nèi)的尸體忽然破棺而出塔逃,到底是詐尸還是另有隱情,我是刑警寧澤料仗,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布湾盗,位于F島的核電站,受9級特大地震影響立轧,放射性物質(zhì)發(fā)生泄漏格粪。R本人自食惡果不足惜丙挽,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望匀借。 院中可真熱鬧颜阐,春花似錦、人聲如沸吓肋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽是鬼。三九已至肤舞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間均蜜,已是汗流浹背李剖。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留囤耳,地道東北人篙顺。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像充择,于是被迫代替她去往敵國和親德玫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理椎麦,服務(wù)發(fā)現(xiàn)宰僧,斷路器,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • 第一部分 打好基礎(chǔ) Laying the Foundation 第一章 歡迎進入軟件構(gòu)建的世界 Welcome t...
    白樺葉閱讀 4,631評論 0 17
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法观挎,類相關(guān)的語法琴儿,內(nèi)部類的語法,繼承相關(guān)的語法嘁捷,異常的語法造成,線程的語...
    子非魚_t_閱讀 31,635評論 18 399
  • 隨著自媒體越來越盛行,公眾號文章越來越多普气,要想讓讀者在眾多公眾號中一眼鎖定你的推文谜疤,首先要立一個醒目而又不作的標題...
    小葡葡萄兒閱讀 27,197評論 0 8
  • 其實早有烘焙愿望仔沿,無奈讀書時諸多不便坐桩。直到去年雙十一入了烤箱和新手烘焙包,14日興沖沖用從麥德龍買的半成品做...
    南窗有木閱讀 952評論 1 4