簡介
面向對象程式設計中,對象是一個邏輯實體,它含有數據及處理該數據的代碼,是程式的基本單元在一個對象中,有些代碼和數據可能是私有於該對象的,且不得由該對象外的任意成份存取 。上帝對象是程式中一個對象擁有很多功能或方法,即程式的整體功能都被編程到一個單一的"了解全部"的對象當中,這個對象維護了整個程式的大部分信息並且提供了運算元據的大部分方法。所以這個對象持有過多的數據以及負責過多的方法,它在程式中的角色就如同上帝一般。不同於編寫直接在彼此之間進行互動的對象,其他程式中的對象都依賴於這個上帝對象獲得信息以及互動。由於上帝對象被過多的其他代碼所引用,相比一個進行了均勻切分的程式而言維護變得更加的困難。
在過程化程式語言中沒有使用子程式或者過多的使用了全局變數進行信息存儲都是在面向對象編程編程中的上帝對象的一個類似物。創造一個上帝對象通常都被認為是一個不好的編程實現,這種技術偶爾會在緊耦合的編程環境中(如微處理器)被使用,在這些環境中微小的性能提升以及控制集中相比於維護以及編程的優雅而言是更加重要的。與上帝對象相反的是餛飩式代碼,是指程式中是由許多小的、鬆散連線的部分所構成。
反面模式
在軟體工程中,一個反面模式(anti-pattern或antipattern)指的是在實踐中明顯出現但又低效或是有待最佳化的設計模式,是用來解決問題的帶有共同性的不良方法。它們已經經過研究並分類,以防止日後重蹈覆轍,並能在研發尚未投產的系統時辨認出來。
Andrew Koenig在1995年造了anti-pattern這個詞,靈感來自於GoF的《設計模式》一書。而這本書則在軟體領域引入了“設計模式”(design pattern)的概念。三年後antipattern因《AntiPatterns》這本書而獲得普及,而它的使用也從軟體設計領域擴展到了日常的社會互動中。按《AntiPatterns》作者的說法,可以用至少兩個關鍵因素來把反面模式和不良習慣、錯誤的實踐或糟糕的想法區分開來:
•行動、過程和結構中的一些重複出現的乍一看是有益的,但最終得不償失的模式
•在實踐中證明且可重複的清晰記錄的重構方案
很多反面模式只相當於是錯誤、咆哮、不可解的問題、或是可能可以避免的糟糕的實踐,它們的名字通常都是一些用反話構成的詞語。有些時候陷阱(pitfalls)或黑色模式(dark patterns)這些不正式的說法會被用來指代各類反覆出現的糟糕的解決方法。因此,一些有爭議的候選的反面模式不會被正式承認。這個概念很容易推廣到工程學以及工程以外需要人們付出努力去爭取的領域。儘管在工程學以外很少用到這個術語,但其概念是通用的。
解決方法
模組化是指解決一個複雜問題時自頂向下逐層把系統劃分成若干模組的過程,有多種屬性,分別反映其內部特性。模組具有以下幾種基本屬性:接口、功能、邏輯、狀態,功能、狀態與接口反映模組的外部特性,邏輯反映它的內部特性。在系統的結構中,模組是可組合、分解和更換的單元。模組化是一種處理複雜系統分解成為更好的可管理模組的方式。它可以通過在不同組件設定不同的功能,把一個問題分解成多個小的獨立、互相作用的組件,來處理複雜、大型的軟體。
繼承(Inheritance)是指,在某種情況下,一個類會有“子類”。子類比原本的類(稱為父類)要更加具體化。繼承可以讓有相同結構的類共享部分代碼和數據結構。可以通過自頂向下和自底向上的方法設計基類和派生類。自頂向下設計時,先設計一個理想的最小的基類,加入各種細節得到各種派生類。自底向上設計時,從獨立定義的一些類中提取出它們的公共部分構成基類。