liskov替代原理是solid原理中的l。它是由barbara liskov建立的,宣告:
子型別必須能夠替代基本型別。除了該原理的明顯實現(確保子型別具有與基本型別相同的行為)之外,隱式實現還確保子型別具有與基本型別相同的語義行為。
語義定義為:
關於語言或邏輯意義的。因此,我們定義了類名的含義。 通常,正方形和矩形是通過其數學定義來定義的。 從數學上講,正方形是四個邊長相等的形狀。 對於矩形,我們將使用完美矩形的定義,即頂部和底部的長度相等,而左側和右側的長度相等的形狀。
根據這個定義,我們可以得出結論,正方形的寬度和高度必須相同,而矩形的寬度和高度可以相等,寬度也可以等於高度。
讓我們為這些形狀建立類,在其中定義寬度和高度。
我們可以看到,在給定情況下,square
物件可以輕鬆替換rectangle
物件。 所有square
物件都具有與rectangle
相同的行為。
但是,當我們測試#area()
時,我們可以看到語義上的差異。
由於矩形的高度可以不同於寬度,因此#area()
的結果符合我們的語義定義。
如果我們將rectangle
替換為square
則測試將通過,但是square
物件不再具有我們期望的方式。
因為正方形的寬度和高度不能相同,所以square
物件破壞了我們的語義定義。 這違反了李斯科夫替代原則。
確保rectangle
和square
通過測試並滿足lsp的最簡單方法是刪除第4行。
您可能在想,為什麼不在rectangle
中實現乙個可以在square
覆蓋的#setwidth()
函式呢? 這將導致square
僅共享rectangle
的介面而不是其行為,從而使抽象成為不必要。 通過刪除第4行,我們可以滿足lsp的要求,並且可以通過將width
和height
私有來進一步擴充套件。
在實現繼承時,請務必在實現之外堅持類的含義。 這有助於使班級在專案的巨集偉計畫中變得更加容易理解。
通過合同設計可以幫助確保類遵守lsp的另一種技術。
from:
Oracle BAM原理簡介
oracle bam全稱為oracle busines activity monitoring,中文叫oracle 業務活動監視 bam有兩種功能 1.建立實時report 2.建立基於一定規則的alert bam最大的特點就是,它的功能都是實時的,任意的資料變化,他都能實時的反應到正在顯示的rep...
git原理簡介
git 究竟是怎樣的乙個系統呢?請注意,接下來的內容非常重要,若是理解了 git 的思想和基本工作原理,用起來就會知其所以然,游刃有餘。在開始學習 git 的時候,請不要嘗試把各種概念和其他版本控制系統 諸如 subversion 和 perforce 等 相比擬,否則容易混淆每個操作的實際意義。g...
KAFKA原理簡介
每條訊息在檔案中的位置成為offset 偏移量 offset為long型數字。過後無論是否被消費,都會被清楚。consumer儲存消費資訊的offset。kafka通過partition將日誌內容分散到多個server上,每個partition都會被 當前server儲存,kafka可以配置part...