這些不是物件導向設計
現在幾乎到處都是在講物件導向設計和泛型程式設計這方面的內容。我個人覺得自己對物件導向設計還是有一點了解的。但是,總覺得很多設計貌似物件導向設計,其實本質上並不是這樣的。
下面我就舉兩個例子來說明一下:
第乙個:
class example
void change(example&, int);
private:
int data_; };
void example::change(example& other, int dest)
int main()
大家可以看到,這個絕對是符合
c++中物件導向方面的語法的,但是這個完全不是物件導向的設計。為什麼呢?
我們可以看到,
change
成員函式做了什麼,如果用物件的思想,而不是類來想問題的話,就可以看出,這個成員函式直接改變了另外乙個物件的內部狀態,雖然這個另外乙個物件也是這個類的物件。當然,我們可以說這是這個類設計者個人的問題,我也同意這種說法。但是實踐中我們確實能保證不犯這種錯誤嗎?
看下面這個例子就可以看出我們實踐中到處都是這種錯誤!
第二個:
class inner
void change(int);
private:
int mem_; };
class outer
private:
inner inn_; };
int main()
可以看到,這個也是絕對是符合
c++中物件導向方面的語法的,但是這個也完全不是物件導向的設計。為什麼呢?
我們可以看到,
outer
類的get
成員函式做了什麼,這個成員函式直接返回了這個物件的內部狀態,結果就是允許外部直接改變
outer
類的物件
o的成員
inn_
的內部狀態,也就是說間接的改變了物件
o的狀態,因為其成員
inn_
是它的一部分。現在,這個問題就不如前面乙個明顯了吧?並且很多有名的庫中這種表達方法到處都是。當然了,拋開物件導向不談,這確實也很有實際使用價值,但是我這裡要說的是這不是物件導向的思想,背離了初衷。當然,我們也不需要完全用物件導向的思想來做,而是什麼方便用什麼。但是不要掛物件導向的帽子做其他事。
這裡舉這兩個例子,其實是想說物件導向是很簡單很純粹的思想,但是被人故意弄雜亂了。如果內容有什麼錯誤,希望能得到斧正,謝謝!by:
kangtian0
物件導向設計
物件導向設計 object oriented design,ood 方法是oo方法中乙個中間過渡環節。其主要作用是對ooa分析的結果作進一步的規範化整理,以便能夠被oop直接接受。物件導向設計 ood 是一種軟體設計方法,是一種工程化規範。這是毫無疑問的。按照bjarne stroustrup的說法...
物件導向設計
1 物件導向的三要素 1.1 封裝 encapsulation a 封裝 合理的隱藏資料的隱藏 隱藏在方法背後 實現的隱藏 隱藏在介面背後 變化的隱藏 隱藏在抽象背後 b 封裝能夠提高物件的復用性 減低物件的耦合度c 良好的封裝 物件的高內聚 1.2 繼承 inheritance a 基於差異式程式...
物件導向設計
物件導向的設計把握乙個重要原則 誰擁有資料,誰就對外提供操作這些資料的方法。人在黑板上畫圓 person,blackboard,circle draw 列車司機在剎車 人關門 兩塊石頭磨成一把石刀,石刀可以砍樹,砍成木材,木材可以做椅子。stone石頭 stoneknife石刀 stoneknife...