objective-c中的開閉原則和黎克特制代換原則:
開閉原則是物件導向設計中「可復用設計」的基石,是物件導向設計中最重要的原則之一,其它很多的設計原則都是實現開閉原則的一種手段。開閉原則的核心是:對擴充套件開放,對修改關閉。白話意思就是我們改變乙個軟體時(比如擴充套件其他功能),應該通過擴充套件的方式來達到軟體的改變,而不應該修改原有的**來實現變化。
黎克特制代換原則是物件導向設計的基本原則之一。黎克特制代換原則中說,任何基類可以出現的地方,子類一定可以實現。lsp是繼承復用的基石,只有當衍生類可以替換掉基類,軟體單位的功能不受到影響時,基類才能真正被復用,而衍生類也能夠在基類的基礎上增加新的行為。
附上多型呼叫的例子:
#import
@inte***ce animal : nsobject
-(void)eat;
@end
#import 「animal.h」
@implementation animal
- (void)eat
@end
#import "animal.h"
@inte***ce cat : animal
@end
#import 「cat.h」
@implementation cat
- (void)eat
@end
#import 「animal.h」
@inte***ce dog : animal
@end
#import 「dog.h」
@implementation dog
- (void)eat
@end
//不知為何框架標頭檔案無法匯入。
#import 「animal.h」
@inte***ce student : nsobject
@property (retain,nonatomic)nsstring *name;
@property (assign,nonatomic)nsinteger age;
- (void)feed:(animal *)animal;//餵養動物的方法;
@end
#import 「student.h」
@implementation student
- (void)setname:(nsstring *)name
-(void)setage:(nsinteger)ageelse _age = 22;
nslog(@」his age is %ld;」,_age);
} - (void)feed:(animal *)animal
@end
//不知為何框架標頭檔案無法匯入。
#import 「student.h」
//#import 「animal.h」
#import 「dog.h」
#import 「cat.h」
int main(int argc, const char * argv)
return 0;
} 執行結果:
2015-07-29 10:04:45.996 黎克特制替換原則[637:20308] his age is 18;
2015-07-29 10:04:45.997 黎克特制替換原則[637:20308] his name is fadykeane;
2015-07-29 10:04:45.998 黎克特制替換原則[637:20308] 學生喂動物了!
2015-07-29 10:04:45.998 黎克特制替換原則[637:20308] 動物吃東西了!
2015-07-29 10:04:45.998 黎克特制替換原則[637:20308] 狗吃肉!
2015-07-29 10:04:45.998 黎克特制替換原則[637:20308] 學生喂動物了!
2015-07-29 10:04:45.998 黎克特制替換原則[637:20308] 動物吃東西了!
2015-07-29 10:04:45.998 黎克特制替換原則[637:20308] 貓吃魚!
開閉原則與黎克特制替換原則
1.開閉原則 是物件導向設計的基本原則之一,是 可復用設計 的基礎,它的主要原則是 對擴充套件開放,對修改關閉 意思就是我們改變乙個軟體時。應該通過擴充套件方式來改變軟體,而不是修改原有的 2.黎克特制替換原則 黎克特制替換原則是說,任何基類可以出現的地方,子類一定可以出現 只有當衍生類可以替換基類...
第一節 開閉原則和黎克特制替換原則
一.開閉原則 1.定義 對擴充套件開放,對修改關閉。當應用的需求改變時,在不修改軟體實體的源 前提下,可以擴充套件模組的功能,使其滿足新的需求。2.作用 1 對軟體測試的影響 軟體遵守開閉原則的話,軟體測試時只需要對擴充套件的 進行測試就可以了,因為原有的測試 仍然能夠正常執行。2 可以提高 的可復...
模式 開閉原則與哲學
開閉原則 對修改關閉,對擴充套件開放。在設計模式中的解釋是這樣的 在軟體設計開發中,不要對原有的 進行修改,通過對原有 進行擴充套件來實現相應功能。初學模式,這段話讀著絕對拗口,甚至是矛盾重重。不修改,怎麼去擴充套件呢?其實,在盡量不修改 的情況下進行擴充套件是可行的的,注意,這裡是 盡量 官方的解...