2010-05-02 44 views
1

假設我正在嘗試執行國際象棋遊戲。如何正確命名域名空間內的類?

我會在國際象棋命名空間中創建我的國際象棋班。現在,我是否應該將所有國際象棋相關類加上國際象棋字,或者因爲它們已經在這個名字空間內,我應該用它們的名字來稱呼它們嗎?

實施例:

ChessGame vs Game 
ChessPiece vs Piece 

回答

4

添加使含的命名空間相匹配的前綴是浪費時間,並且不提供實際的好處。只要去Game,Piece

+0

這就是我的想法。但是如果我有不同遊戲的其他命名空間,並且我有一個GUI,我可以同時進行幾個遊戲或什麼?我會得到名字衝突。或者這是一個過於人爲的例子? – 2010-05-02 07:09:04

+0

在這種情況下,除非你像使用命名空間國際象棋一樣做了一些愚蠢的事情,否則你將會有國際象棋::遊戲和國際象棋::棋子等。 – cHao 2010-05-02 07:10:53

+1

@devoured:命名空間的全部是避免名稱衝突。您可以通過明確地確定名稱範圍來解決歧義,例如「Chess.Game」和「Chess.Piece」。 – 2010-05-02 07:41:12

1

在java中,域名空間是paquetage。

「一個班級的名字」是:一個班級的名字+一個標識符。

簡而言之,類的標識符是類的名稱,但它是人類的慣例。類的名稱始終是paqueage +標識符。

對於anonyme類,java提供了一個標識符。

做:

a.b.c.Foo foo = new a.b.c.Foo(); 

相當於

import a.b.c.Foo; 

... 

Foo foo = new Foo(); 

如何命名paquage /域空間?用你的域名:-),somtimes用「ing」作爲後綴(java.util.logging)。

您也可以使用嵌套類(內部靜態類)模擬一些域名空間。

+0

什麼是paquetage(或paquage)? – 2010-05-02 07:42:01

+0

英文術語是Package,對不起:-) Paquetage是用其他語言包裝的,我猜想paquage是我的發明。 請參閱http://java.sun.com/docs/books/tutorial/java/index.html章節「程序包」中的「學習Java語言」。 – Istao 2010-05-02 08:18:20

1

假設你有一種沒有任何命名空間或包的語言(在某些Java語言中,包同時是程序模塊和命名空間......)。爲避免名稱衝突,您可以使用前綴。但是你必須小心地正確命名所有的程序元素,並在每次引入新的東西時寫出一些字符。所以解決方法是將名稱空間引入到語言中,構造會自動爲每個元素添加一個名稱前綴,您可以在一個位置指定它(避免拼寫錯誤)。現在只要命名空間名稱不能上課,就很安全。命名空間允許在一個地方指定前綴,因此您可以輕鬆使用更長的名稱,從而避免衝突而不必每次輸入更多。查找示例如何命名一些庫的包 - 它們使用名稱空間URI(例如country_abbreviation.compay_name.product_name.program_module)。然而,使用包名稱編寫整個標識符名稱往往很乏味,所以很多語言發明了允許使用來自名稱空間的名稱的構造,就像在ri命名空間中正確使用它們(例如,使用,導入等)一樣。但是這讓我們回到原來的狀況。解決方案是避免對程序元素使用隱式命名空間,這可能會改變,就像你的情況一樣。所以你想要的解決方案是爲不同的遊戲使用命名空間,所以你可以在GUI組件中指定你的意思是指完整的遊戲元素,通過提供包名稱的全名。