題記:
面向對象是一種思想,而不是一門語言
我們上哪去找對象,都面向對象去了
本專欄文章列表
一、何為面向對象
二、C語言也能實現面向對象
三、C++中的不優雅特性
四、解決封裝,避免接口
五、合理使用模板,避免代碼冗余
六、C++也能反射
七、單例模式解決靜態成員對象和全局對象的構造順序難題
八、更為高級的預處理器PHP
現在學軟件開發,都講面向對象的編程模型,其實也很簡單。用一句話來總結,面向對象就是將方法和方法的屬性整合在一起,讓每個方法引用的屬性值盡可能在對象內部,對外保持簡潔的接口。
實現面向對象的設計,目標不是寫類,而是設計結構,對每一個對象設計良好的接口和封裝模式,將優雅的接口提供給使用者,最大程度的降低代碼耦合。
面向對象的設計,可以用一本書來講解,但我們這裡將演示面向對象的基本思想和如何實現
恩,那好,我們現在構建一個對象
class window {
public:
window(int x, int y, int width, int height) {
this.x = x; this.y = y;
this.width = width;
this.height = height;
}
void Show();
private:
int x, y, width, height;
// 也許你還可以添加更多屬性,例如透明度、子元素列表、菜單、狀態欄等待
};
這是一個基本的窗口對象,也許它並不能給你直觀的印象,但我希望能通過其說明一些問題。
對象有公開方法,有私有屬性,我們在構造這個對象的時候,將一些參數傳入,那麼我們發現,這個過程簡化了我們對於某些方法的使用。
例如在C函數中,如何你希望繪制一些內容,那麼你可能需要做的是寫這樣一個函數:
int Draw(struct window*, int, int, int, int);
將全部的參數傳入進去,但如果使用次數多後,我們發現參數大多一樣,那麼不如把他們都打包進入window結構體中,於是函數變成了這樣:
int Draw(struct window*);
這樣我們只需要改變結構體中的值就可以了,這個思想,就是面向對象的基礎,而C++正是讓這要傳入的結構體自動傳入,進而演變為了this指針。
幾乎軟件的設計原則都是高內聚,低耦合。
C++的設計也是一樣,類的公共方法應該盡可能清晰明確,簡單好用,而不必要外部了解的信息,和細節過程,都放入到私有成員中,避免被誤用。
避免過度繼承和重載,雖然繼承和重載很大程度上能夠降低兩個模塊間的耦合,但其實現復雜,結構混亂,容易使得代碼不夠清晰。同樣,也要避免設計模式的濫用。
C++的開發應該本著面向對象的思想,利用類的封裝特性,將模塊內部的部分高效的組織在一起,而接口,可以采用多態調用的方式,保證靈活性。