LSP里氏替換原則----正方形不是長方形和鴕鳥不是鳥的測試程式
//面向物件設計原則:LSP里氏替換原則 //正方形不是長方形的測試程式 #include <iostream> using namespace std; //長方形類Rectangle class Rectangle { private: int width; int height; public: int getWidth(){ return width; } virtual void setWidth(int w){ width=w; } int getHeight(){ return height; } virtual void setHeight(int h){ height=h; } }; //正方形類Square class Square :public Rectangle {public: void setWidth(int w) {Rectangle::setHeight(w); Rectangle::setWidth(w); } void setHeight(int h) {Rectangle::setHeight(h); Rectangle::setWidth(h); } }; //測試類 TestRectangle class TestRectangle { public: void resize(Rectangle &objRect) {while(objRect.getWidth() <= objRect.getHeight() ) {objRect.setWidth( objRect.getWidth() + 1 );} cout<<"resize over!"<<endl; cout<<"height="<<objRect.getHeight()<<" width="<<objRect.getWidth()<<endl;; } }; //主函式 int main() { Rectangle r; //父類物件 r.setWidth(5); r.setHeight(15); Square s; //子類物件 s.setWidth(5); s.setHeight(15); TestRectangle t; t.resize(r); //ok t.resize(s); //用子類物件代替父類物件時,出現無限迴圈 return 0; }
(2)
//面向物件設計原則:LSP里氏替換原則 //鴕鳥不是鳥的測試程式 #include <iostream> using namespace std; //鳥類Bird class Bird { private: double velocity; public: virtual void fly() { cout<<"I can fly!"; } virtual void setVelocity(double v) { velocity = v; } virtual double getVelocity() { return velocity; } }; //鴕鳥類Ostrich class Ostrich :public Bird { public: void fly() { cout<<"i can\'t fly!"; } void setVelocity(double v) { Bird::setVelocity(0); } double getVelocity() { return Bird::getVelocity(); } }; //測試類TestBird: class TestBird {public: void calcFlyTime(Bird &bird) {try {double riverWidth = 3000; if(bird.getVelocity()==0) throw 0; cout<<"Velocity="<<bird.getVelocity()<<endl; cout<<"Fly time="<<riverWidth/bird.getVelocity()<<endl; } catch(int) { cout<<"An error occured!"<<endl; } } }; //主函式 int main() { Bird b; //父類物件 b.setVelocity(100); Ostrich o; o.setVelocity(0); TestBird t; t.calcFlyTime(b); //ok t.calcFlyTime(o); //用子類物件代替父類物件時,出現異常 return 0; }
相關推薦
LSP里氏替換原則----正方形不是長方形和鴕鳥不是鳥的測試程式
//面向物件設計原則:LSP里氏替換原則 //正方形不是長方形的測試程式 #include <iostream> using namespace std; //長方形類Rectangle class Rectangle { private: int wi
面向物件設計原則--里氏替換原則(LSP)和依賴倒置原則(DIP)
面向物件設計原則–里氏替換原則(LSP)和依賴倒置原則(DIP) tags:設計模式 LSP–inheritance should ensure that any property prove
第2章 面向物件的設計原則(SOLID):2_里氏替換原則(LSP)
2. 里氏替換原則(Liskov Substitution Principle,LSP) 2.1 定義 (1)所有使用基類的地方必須能透明地使用子類替換,而程式的行為沒有任何變化(不會產生執行結果錯誤或異常)。只有這樣,父類才能被真正複用,而且子類也能夠在父類的基礎上增加新的行為。也只有這樣
OO設計原則 -- Liskov Substitution Principle: 里氏替換原則(LSP)
概要 Functions that use pointers or references to base classesmust be able to use objects of derived classes without knowing it. 所有引
設計模式學習之設計模式原則(一):單一職責原則和里氏替換原則
學習設計模式,以《設計模式之禪》為藍本進行總結與學習,今天先記錄設計模式六大原則的兩個原則:單一職責原則(SRP)和里氏替換原則(LSP)。 單一職責原則 Single Responsibilit
"圍觀"設計模式(2)--里氏替換原則(LSP,Liskov Substitution Principle)
在面向物件的程式設計中,里氏替換原則(Liskov Substitution principle)是對子型別的特別定義。它由芭芭拉·利斯科夫(Barbara Liskov)在1987年在一次會議上名為“資料的抽象與層次”的演說中首先提出。里氏替換原則的內容可以描述為: “派生
[面向物件六大原則] 里氏替換原則(LSP)
里氏替換原則 - Liskov Substitution Principle定義一:如果對每一個型別為S的物件O1,都有型別為T的物件O2,使得以T定義的所有程式P在所有的物件O1都替換成O2時,程式P的行為沒有發生變化,那麼型別S是型別T的子型別。定義二:所有引用基類的地方
設計模式之禪(里氏替換原則)2018-10-19
介面與抽象類的區別: 介面卡模式:使用不同介面的類所提供的服務為客戶端提供它所期望的介面。 實現: 有一個 MediaPlayer 介面和一個實現了 MediaPlayer 介面的實體類 AudioPlayer。預設情況下,AudioPl
面向物件原則之里氏替換原則
轉載請註明出處:http://blog.csdn.net/feibendexiaoma/article/details/74391028 一.簡稱 英文全稱是Liskov Substitution Principle, 縮寫是LSP 二.定義 如果對每一個型別為S的物件O1,都
面向物件的五大設計原則之里氏替換原則
里氏替換原則(liskov substitution principle,簡稱LSP)的核心只有一句話,subtypes must be substitutable for their base types(子類必須能夠替換成它們的基類),關於它的定義和主要的思想如下: 由於面向物件程式設計
設計原則---里氏替換原則
本文參考自設計模式之禪(第二版)第二章 1.1 愛恨糾葛的父子關係 在面向物件的語言中,繼承是必不可少的、非常優秀的語言機制,它有如下優點: 程式碼共享,減少建立類的工作量,每個子類都擁有父類的方法和屬性; 提高程式碼的重用性; 子類可以形似父
如何理解里氏替換原則?
Liskov替換原則核心就是子類能完全替換它的基類。 看上去這個應該與生俱來的能力。面向物件的核心多型,不就是靠這一條實現的。或許從沒有遇到的過子類改寫基類的情況。程式世界可能出現這種情況,而且在不經意之間出現這種情況。比如“鳥”是基類,這個基類有一個“飛翔”的行為。當“
面向物件原則之一 里氏替換原則
原文: 面向物件原則之一 里氏替換原則 前言 面向物件有人分為五大原則,分別為單一職責原則、開放封閉原則、依賴倒置原則、介面隔離原則、里氏替換原則。 也有人分為六大原則,分別為單一職責原則、開放封閉原則、依賴倒置原則、介面隔離原則、里氏替換原則、迪米特法則。 現在我們來介紹里氏替換原則
C#七大設計原則之里氏替換原則
里氏替換原則 定義:子型別必須能夠替換掉它們的父型別。 也就說子類可以賦給父類,父類物件可以強制轉化為子類物件。 在面向物件的思想中,派生類擁有基類的所有公開的所有特徵。 當派生類賦值給基類時
關於里氏替換原則與多型概念糾正
public abstract class Quadrangle{ protected abstract void getWidth(); protected abstract void getHeight(); } public class Rectangle exten
面向物件六大原則----里氏替換原則,依賴倒置原則
單一職責原則 英文名稱是Single Responsibility Principle,簡稱SRP 開閉原則英文全稱是Open Close Principle,簡稱OCP 里氏替換原則 英文全稱是Liskov Substitution Principle,簡稱LSP 依賴倒置原則 英文全稱是Depe
設計模式六大原則:里氏替換原則(五)
里氏代換原則是由麻省理工學院(MIT)電腦科學實驗室的Liskov女士,在1987年的OOPSLA大會上發表的一篇文章《Data Abstraction and Hierarchy》裡面提出來的,主要闡述了有關繼承的一些原則,也就是什麼時候應該使用繼承,什麼
(轉)設計模式六大原則(2):里氏替換原則
肯定有不少人跟我剛看到這項原則的時候一樣,對這個原則的名字充滿疑惑。其實原因就是這項原則最早是在1988年,由麻省理工學院的一位姓裡的女士(Barbara Liskov)提出來的。 定義1:如果對每一個型別為 T1的物件 o1,都有型別為 T2 的物件o2,使
里氏替換原則的優點,理解,以及使用
什麼是里氏替換原則呢?它有兩種定義: ● 第一種定義,也是最正宗的定義:If for each object o1 of type S there is an object o2 of type T such that for all programs P defined i
設計模式原則——里氏替換原則
里氏替換原則(Liskov Substitution Principle) 定義1:如果對每一個型別為 T1 的物件 o1,都有型別為 T2 的物件 o2,使得以 T1 定義的所有程式 P 在所有的物件 o1 都代換成 o2 時,程式 P 的行為沒有發生變化,那麼型別 T2