0

编程语言:java。类图问题。

给定一个名为 Bridge 的类,以下表示是否正确?

我关心的是如何处理声明,例如: private Semaphore semaphore;

这是属性/方法声明:

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
    ---------------------

此外,鉴于 main 函数中的变量应该是本地的,我认为它们应该被视为私有的是否正确?例如:

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

这是UML实现:

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

符号:-(私人),+(公共)

任何帮助将不胜感激。

谢谢

4

1 回答 1

0

UML 通常意味着实现/语言不可知 - 在阅读 UML 图时,您不应该知道或关心它是用什么语言实现的。此外,类图旨在表示(或建模)类型/类/概念域问题及其关系。因此,您不必担心方法中的局部变量,因为这既是实现细节,又与与其他类或概念的关系无关。

您似乎正在尝试使用 UML 对 Java 程序进行建模(或反向工程),并且您希望将程序中的每个变量都包含在类图中。这不是您应该采取的方法。

SemaPhore,lock并且waitingCondition都是实现细节,不传达关于Bridge' 行为或Bridge' 与其他类的关系的任何有用信息。nNorthCars并且nSouthCars是私有的 - 在您的模型中将它们公开为公共属性是否有意义?您模型中的其他类/概念是否需要了解这些?如果对这些问题不满意,那么您也可以从类图中删除这些问题。如果您要在活动图中对 Bridge 的某些方法进行建模,您可能希望保留它们。Bridge 可能希望在 UML 中看起来像这样:

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

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

如果 Bridge 与其他事物(可能是汽车的集合)有关系,那么您可以对其进行建模,因为这种关系对于模型中的其他概念是外部可见的。

Main看起来像你的程序入口点,同样,可能没有必要这样建模。如果Main聚合所有其他(或大多数其他)类/概念,则继续并对其进行建模,否则它将成为实现细节。

最后,UML 的真正目的是为您的概念建模,然后在代码中实现这些概念。看来您正在做相反的事情。逆向工程和往返在一定程度上是可以的,但要小心,否则你最终会在 UML 中进行黑客攻击并从中生成代码。UML 的想法是在您剪切代码之前对您的域进行建模并验证该模型。

希望这可以帮助...

于 2012-06-28T17:57:35.803 回答