2012-06-28 61 views
0

編程語言:java。類圖的問題。類圖java應用程序

給定一個名爲Bridge的類是以下表示是否正確?

我的擔心是關於如何處理聲明,如: 私有信號燈信號量;

這是屬性/方法聲明:

public class Bridge { 
    private Semaphore semaphore; 
    private Lock lock: 
    private Condition waitingCond; 
    private int nNorthCars; ....... 
    public void getIn(int direction) throws InterruptedException{ 
    ..... 
The same goes for getOut().... 
} 

UML表示:

--------------------- 
    Bridge 
    --------------------- 
    - semaphore: Semaphore 
    - lock: Lock 
    - waitingCond: Condition 
    - nNorthCars: int 
    - nSouthCars: int 
    --------------------- 
    + getIn(): void 
    + getOut(): void 
    --------------------- 

此外,鑑於主函數中的變量應該是局部的,我是對的認爲他們應該被視爲私人? 例如:

public static void main(String[] args) { 
........... 
int nThreads = Integer.parseInt(args[0]); 
long time = 0; 
...} 

這裏的UML實現:

--------------------- 
Main 
--------------------- 
- nThreads: int 
- time: long 
--------------------- 
+ main() 
--------------------- 

符號: - (私有),+(公共)

任何幫助將得到高度讚賞。

感謝

回答

0

UML一般,就是要實現/語言無關 - 讀UML圖時,你不應該知道或關心什麼語言它實現此外,類圖是代表(或模型)域問題的類型/類/概念及其關係。因此,你不應該擔心方法中的局部變量,因爲這既是一個實現細節,也不涉及與其他類或概念的關係。

您似乎在嘗試使用UML來建模(或反向工程)Java程序,並且希望將程序中的每個變量作爲類圖的一部分包含在程序中。這不是你應該採取的方法。

SemaPhorelockwaitingCondition都實現細節,不傳達Bridge的行爲或Bridge的與其他類關係的任何有用的信息。 nNorthCarsnSouthCars是私人的 - 在您的模型中是否有意義將這些公開屬性公開?模型中的其他類/概念是否需要了解這些?如果不是這些問題,那麼你也可以從類圖中刪除它們。如果你打算在活動圖中建立一些橋的方法,你可能想保留它們。大橋可能要像這樣在UML:

--------------------- 
    Bridge 
    --------------------- 

    --------------------- 
    + getIn(): void 
    + getOut(): void 
    --------------------- 

如果橋有別的東西(可能是汽車的集合),那麼你可以模擬的關係,因爲這是關係到其他概念外部可見的模型。

Main看起來像你的程序入口點,再次,它可能沒有必要像這樣建模。如果Main聚合了所有其他(或大多數其他)類/概念,則繼續進行建模,否則它將成爲實現細節。

最後,UML實際上是爲了模擬你在代碼中實現的概念。看來你正在做與此相反的事情。逆向工程和往返程序在一定程度上是可以的,但要小心,否則最終會在UML中進行黑客攻擊並從中生成代碼。 UML的想法是在切割代碼之前對您的域進行建模並驗證此模型。

希望這有助於...