這些不是物件導向設計

2021-04-02 02:15:15 字數 1264 閱讀 8969

這些不是物件導向設計

現在幾乎到處都是在講物件導向設計和泛型程式設計這方面的內容。我個人覺得自己對物件導向設計還是有一點了解的。但是,總覺得很多設計貌似物件導向設計,其實本質上並不是這樣的。

下面我就舉兩個例子來說明一下:

第乙個:

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...