Liskov替代原理簡介

2021-10-05 08:51:14 字數 1295 閱讀 8542

liskov替代原理是solid原理中的l。它是由barbara liskov建立的,宣告:

子型別必須能夠替代基本型別。

除了該原理的明顯實現(確保子型別具有與基本型別相同的行為)之外,隱式實現還確保子型別具有與基本型別相同的語義行為。

語義定義為:

關於語言或邏輯意義的。

因此,我們定義了類名的含義。 通常,正方形和矩形是通過其數學定義來定義的。 從數學上講,正方形是四個邊長相等的形狀。 對於矩形,我們將使用完美矩形的定義,即頂部和底部的長度相等,而左側和右側的長度相等的形狀。

根據這個定義,我們可以得出結論,正方形的寬度和高度必須相同,而矩形的寬度和高度可以相等,寬度也可以等於高度。

讓我們為這些形狀建立類,在其中定義寬度和高度。

我們可以看到,在給定情況下,square物件可以輕鬆替換rectangle物件。 所有square物件都具有與rectangle相同的行為。

但是,當我們測試#area()時,我們可以看到語義上的差異。

由於矩形的高度可以不同於寬度,因此#area()的結果符合我們的語義定義。

如果我們將rectangle替換為square則測試將通過,但是square物件不再具有我們期望的方式。

因為正方形的寬度和高度不能相同,所以square物件破壞了我們的語義定義。 這違反了李斯科夫替代原則。

確保rectanglesquare通過測試並滿足lsp的最簡單方法是刪除第4行。

您可能在想,為什麼不在rectangle中實現乙個可以在square覆蓋的#setwidth()函式呢? 這將導致square僅共享rectangle的介面而不是其行為,從而使抽象成為不必要。 通過刪除第4行,我們可以滿足lsp的要求,並且可以通過將widthheight私有來進一步擴充套件。

在實現繼承時,請務必在實現之外堅持類的含義。 這有助於使班級在專案的巨集偉計畫中變得更加容易理解。

通過合同設計可以幫助確保類遵守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...