2010-05-24 46 views
13

當我把在大學我的第一個編程過程中,我們被教導全局變量是邪惡的&應該不惜一切代價避免(因爲你可以快速開發混亂和難以維護的代碼)。第二年,我們學習了面向對象編程,以及如何使用類創建模塊化代碼。我發現無論何時使用OOP,我都會使用我的類的私有變量作爲全局變量,,它們可以被類中的任何函數讀取和修改。這是不是很合適我坐,因爲它似乎引入了同樣的問題全局變量曾在語言,如C.如何編寫不依賴「全局」變量的類?

所以我想我的問題是,我該如何停止與「全局」變量作文課?假裝我用功能性語言寫作會更有意義嗎?通過這個我的意思是讓所有的函數參數&返回值,而不是直接修改類變量。如果我需要設置任何字段,那麼我可以只取出函數的輸出並分配它,而不是讓函數直接執行。這看起來好像可能會創建更多可維護的代碼,至少對於更大的類來說。常用的做法是什麼?

+0

「具有的所有功能需要的參數和返回值,而不是直接修改類變量。如果我需要設置任何領域,我可以把函數的輸出和分配給它,而不是直接具有功能做到這一點的。「 這就是我被教導如何有效地進行編碼,作爲可重用性,可讀性(假設你的函數名反映了這個函數的作用),良好的結構和易於修改的源碼 – Mike 2010-05-24 16:20:32

回答

11

我同意類成員變量在某些方面有時會覺得像全局變量。我發現重要的是保持小班,然後每個變量只能從有限的地方訪問。如果你只有幾個巨大的類,那麼成員變量和全局變量之間的差別有時會受到限制。

周圍太多的參數傳遞有時是一個問題還有,如果你不顧一切地避免所有成員變量,你可以很容易地使用了太多參數,使代碼難以理解,結束了。

16

我發現,每當我與OOP工作, 我用我的班私有變量作爲 全局變量,即他們可以 (並)讀取和班級內的任何 功能修改。

這是完全可以接受的。

的變量類內密閉,所以他們不是「全球」。

Encapsulation

+0

但是,如果你的類足夠大,什麼是這與C程序改變全局變量這種大規模C++程序之間的有效區別是什麼? – Joel 2010-05-24 15:17:30

+11

@Joel - 這就是問題所在,如果你的類很大,那麼應用程序的一般設計可能會有問題 – 2010-05-24 15:22:06

+0

@Joel :沒有太大的差別,它不是非常OO都不是= D – bloparod 2010-05-27 03:41:16

3

類變量不是全局變量,它們對於每個類的每個實例是本地的。這是面向對象的強大概念之一,並且是完全可以接受的(以及正確的做法[假設你的類每個都關心一個邏輯事物,請參閱:封裝])。

2

如果你的成員變量是在整個應用程序訪問,那麼我認爲你沒有正確地構建代碼的OOP。將代碼分解成更多更小的類,每個類都有明確定義的目的。這樣一來,每個私有成員變量現在只限於需要它的程序部分。