複製鏈接
請複製以下鏈接發送給好友

上帝對象

鎖定
面向對象編程領域,一個上帝對象(God object)是一個瞭解過多或者負責過多的對象。上帝對象是反面模式的一個例子。結構化編程背後的基本概念是一個大型的問題應該被分解成為多個較小的問題中並且針對每個較小的問題提出解決方案。當每個小問題都得到解決後,大問題本體就得到了解決。因此對象應該知道的一切就是它本身。類似的,對象應該解決的問題是它所屬的問題。基於上帝對象編寫的代碼並不遵從上述的方式。在程序設計中,避免出現上帝對象的方法有模塊化和繼承。
中文名
上帝對象
外文名
God object)
領    域
面向對象編程
定    義
瞭解過多或者負責過多的對象
有關術語
對象
影    響
程序維護困難

上帝對象簡介

面向對象程序設計中,對象是一個邏輯實體,它含有數據及處理該數據的代碼,是程序的基本單元在一個對象中,有些代碼和數據可能是私有於該對象的,且不得由該對象外的任意成份存取 [1]  。上帝對象是程序中一個對象擁有很多功能或方法,即程序的整體功能都被編程到一個單一的"瞭解全部"的對象當中,這個對象維護了整個程序的大部分信息並且提供了操作數據的大部分方法。所以這個對象持有過多的數據以及負責過多的方法,它在程序中的角色就如同上帝一般。不同於編寫直接在彼此之間進行交互的對象,其他程序中的對象都依賴於這個上帝對象獲得信息以及交互。由於上帝對象被過多的其他代碼所引用,相比一個進行了均勻切分的程序而言維護變得更加的困難。
在過程化編程語言中沒有使用子程序或者過多的使用了全局變量進行信息存儲都是在面向對象編程編程中的上帝對象的一個類似物。創造一個上帝對象通常都被認為是一個不好的編程實現,這種技術偶爾會在緊耦合的編程環境中(如微處理器)被使用,在這些環境中微小的性能提升以及控制集中相比於維護以及編程的優雅而言是更加重要的。與上帝對象相反的是餛飩式代碼,是指程序中是由許多小的、鬆散連接的部分所構成。

上帝對象反面模式

在軟件工程中,一個反面模式(anti-pattern或antipattern)指的是在實踐中明顯出現但又低效或是有待優化的設計模式,是用來解決問題的帶有共同性的不良方法。它們已經經過研究並分類,以防止日後重蹈覆轍,並能在研發尚未投產的系統時辨認出來。
Andrew Koenig在1995年造了anti-pattern這個詞,靈感來自於GoF的《設計模式》一書。而這本書則在軟件領域引入了“設計模式”(design pattern)的概念。三年後antipattern因《AntiPatterns》這本書而獲得普及,而它的使用也從軟件設計領域擴展到了日常的社會互動中。按《AntiPatterns》作者的説法,可以用至少兩個關鍵因素來把反面模式和不良習慣、錯誤的實踐或糟糕的想法區分開來:
  • 行動、過程和結構中的一些重複出現的乍一看是有益的,但最終得不償失的模式
  • 在實踐中證明且可重複的清晰記錄的重構方案
很多反面模式只相當於是錯誤、咆哮、不可解的問題、或是可能可以避免的糟糕的實踐,它們的名字通常都是一些用反話構成的詞語。有些時候陷阱(pitfalls)或黑色模式(dark patterns)這些不正式的説法會被用來指代各類反覆出現的糟糕的解決方法。因此,一些有爭議的候選的反面模式不會被正式承認。這個概念很容易推廣到工程學以及工程以外需要人們付出努力去爭取的領域。儘管在工程學以外很少用到這個術語,但其概念是通用的。

上帝對象解決方法

模塊化是指解決一個複雜問題時自頂向下逐層把系統劃分成若干模塊的過程,有多種屬性,分別反映其內部特性。模塊具有以下幾種基本屬性:接口、功能、邏輯、狀態,功能、狀態與接口反映模塊的外部特性,邏輯反映它的內部特性。在系統的結構中,模塊是可組合、分解和更換的單元。模塊化是一種處理複雜系統分解成為更好的可管理模塊的方式。它可以通過在不同組件設定不同的功能,把一個問題分解成多個小的獨立、互相作用的組件,來處理複雜、大型的軟件。
繼承(Inheritance)是指,在某種情況下,一個類會有“子類”。子類比原本的類(稱為父類)要更加具體化。繼承可以讓有相同結構的類共享部分代碼和數據結構。可以通過自頂向下和自底向上的方法設計基類和派生類。自頂向下設計時,先設計一個理想的最小的基類,加入各種細節得到各種派生類。自底向上設計時,從獨立定義的一些類中提取出它們的公共部分構成基類。
參考資料
  • 1.    ]張殿文,盧振武.面向對象分析、設計與編程[J].光學精密工程,2000(06):568-571.