當前位置:編程學習大全網 - 編程語言 - 急急急有那個高手能不能告訴我“什麽是對象的行為特征”,對象的行為特征包含什麽

急急急有那個高手能不能告訴我“什麽是對象的行為特征”,對象的行為特征包含什麽

我隨便從CSDN 上抄過來幾段給妳看看:

舉個例子,狗是壹個基類,斑點狗和拉布拉多狗都是繼承類。

狗類有壹個年齡屬性,斑點狗和拉布拉多狗也都繼承了年齡屬性。

狗類有壹個叫的方法,斑點狗和拉布拉多狗也都繼承了叫的這個方法。

不管是什麽狗,都有年齡,都會叫,就是狗的繼承類的***同的行為特征。

:“如果子類繼承了父類,那麽父類中有的的方法(行為),子類中也應該具有該方法(行為)”,比如“鴕鳥不是鳥這麽壹個例子”,如果我們以鳥為父類,在該父類中定義了壹個“飛”的方法; 然後 我們有定以了壹個鴕鳥類讓他繼承鳥類, 然而 鴕鳥不會飛,鴕鳥類不具備父類中的“飛”的方法, 如果我們強制讓鴕鳥類繼承鳥類, 當鴕鳥類(子類)替換鳥類(父類)時,代碼的不能正常運行, 違反了“裏氏替換原則” 是不是? 我這樣理解“裏氏替換原則在同壹個繼承體系中的對象應該有***同的行為特征”

基本上可以這樣理解。不過原則其實也不能硬套。例如“鴕鳥確實是鳥——只是它的翅膀退化了”。所以我們要看看我們到底是不是要暫時在我們的系統中不考慮鴕鳥,或者改變鳥的定義(例如在鳥的高層次測試中直接先去判斷某個分支/接口的特例)。

有壹個“很有名地”錯誤地使用這個原則的例子。它首先寫了壹個關於矩形的測試用例,“長20乘以寬10則面積等於200”。然後它讓壹個正方形繼承自矩形,並且舉例說正方形的長寬相等,因此面積要麽等於400要麽等於100,就是不會等於200,所以測試用例失敗了。於是它僵化地套用這個“原則”,得出了“正方形不能從矩形繼承”的結論!

實際上,這種推論是站不住腳的。因為它自始至終都沒有給我們展示正方形是如何用到矩形測試用例裏的例子,它只是胡亂地寫了“如果正方形的邊長10(或者20),斷言——面積應該等於200”這種想當然的錯誤的測試用例。可見測試用例入戶瞎寫,即使是大師也會犯下低級的錯誤,而且是在號稱“全美震撼大獎”的著作中出現低級錯。

這種測試用例是錯誤的。因為對對象的new實例化方法是不能繼承的,因此妳不可能寫出壹個new壹個矩形對象的代碼,它同時得到的又是壹個正方形。我們只能相反地說new壹個正方形對象的代碼,它同時得到的是壹個矩形,而已。

所謂“把子類對象帶入父類的測試用例中去檢驗”,是指類似這樣的測試用例:“假設已知壹個矩形,壹邊長為x,另壹邊長為y,則面積是x*y”。這樣壹個測試用例完全可以給矩形使用。但是假設測試用例中有new壹個父類對象的代碼,這個測試用例就不能再給子類使用了!

結果那個例子非常狡猾,它在這個測試用例中去強行地設置壹個矩形的兩個邊(分別為10和20,以此來模擬出與刻意new壹個父類對象完全壹樣的可能性。此時帶入矩形就會讓測試用例出錯。請問我們是不是要說“正方形不應該繼承自矩形”?

實際上這個時候改變妳的測試用例就好了。這說明壹點,原則它只是原則,我們應該在不改變基本原則的前提下,改變我們的測試方法。改變我們的測試方法,就等於改變我們的接口和行為設計。

其實最終起決定力量的,不是原則,而是測試驅動的方法。

我舉這個例子,跟妳所說的“鴕鳥”的例子非常類似。雖然妳沒有說,但是妳其實跟大師的例子是壹樣的,是想把我繞進去!

如果我們只是為了糾結於這個原則,其實可以找到很多“狡猾的”例子。然而此時我們更主要的原則是“自然”,是以普通人——不懂軟件編程的聰明人——能夠讀懂為原則,而不是單純以編程設計理論為原則。我們如果花較少的力氣對測試用例做少許修改,例如我們在矩形那裏設置壹個“是否兩邊可以不相等”的bool屬性,那麽就通過了。此時是否在濫用繼承呢?

還是離開理論,看看我們的對象類型圖是否直觀易讀。以這種“判斷”為指引。而不是理論。

  • 上一篇:孩子上課註意力不集中老走神怎麽辦
  • 下一篇:四川托普信息技術學院有哪些領導?
  • copyright 2024編程學習大全網