2012-03-26 72 views
2

我來自ECMAScript背景(似乎是非常C/C++)。因此,我學習了涉及,對象和酷似多態性的經典C++風格繼承。使用組合而不是繼承

我最近喜歡Android和iOS開發。 Java似乎是基於C語言的,所以我很好地使用了我的大多數基於C語言的規則,但是iOS足夠不同,我對我的方法持懷疑態度 - 特別是在對象繼承等方面。

我問,因爲似乎有一些強烈的意見,對作文。從我迄今爲止所看到的構圖來看,我不是最大的粉絲,除非該項目提供了一個很好的理由來使用它。

你親Obj-C/iOS開發出那裏,你會推薦作曲而不是經典繼承嗎?或者它是一個情景的東西?

+1

這似乎是一個潛在的爭議性意見問題,而不是導致事實答案的問題。 – 2012-03-26 17:34:07

+1

構成是一種關係,繼承是一種關係。有一種關係似乎具有比它更好的模塊性關係。 – michex 2012-03-26 17:37:18

+5

'請' - 每個**第四個**字*你的*後*** ***不需要* *格式化* *不同*。 '反引號** **是**'代碼'。 – 2012-03-26 17:40:19

回答

5

Objective-C的對象模型與C/C++/Java完全不同。它是基於消息的,所以更多的重點放在響應消息的對象上,而不是像在C/C++/Java中那樣調用方法。

Cocoa庫的方法有利於平坦的對象繼承層次結構,並依賴於委託模式進行定製並保持這些對象層次結構平坦。爲什麼要這樣做?很多圖書館,尤其是圖書館,由於層次膨脹而出現複雜問題,以至於不清楚你會從哪個類繼承。例如,視頻遊戲中的大多數現代對象系統(作爲我的專業技術行業)使用組合範例,其中通過混合行爲來構建對象,因爲它在實踐中更靈活且更易於維護。

我不會說Cocoa庫使用組合模型,而是使用在模型 - 視圖 - 控制器區域中明確分區的類之間的交互,並使用委託進行自定義。將定製與核心功能分開保持複雜性並降低層次結構。

0

對我而言,這更多的是你正在使用什麼類的問題。如果您使用Apple的核心基礎或UI庫,我會建議您避免使用子類。許多這些類不是具體的類,而是類集羣。在這些類中,os可以在運行時決定實際使用哪個類。

一般來說,我更喜歡組合,除非我有一個非常有說服力的理由繼承。即使當我有一個令人信服的理由進行子類化時,我經常會選擇爲原始類創建一類方法。