类图java应用程序

时间:2012-06-28 15:13:10

标签: uml

编程语言: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()
---------------------

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

任何帮助都将受到高度赞赏。

由于

1 个答案:

答案 0 :(得分:0)

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

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

SemaPhorelockwaitingCondition都是实施细节,并未传达有关Bridge行为或Bridge与之关系的任何有用信息其他课程。 nNorthCarsnSouthCars是私有的 - 在您的模型中将这些作为公共属性公开是否有意义?您的模型中的其他类/概念需要了解这些吗?如果没有这些问题,那么你也可以从类图中删除它们。如果要在活动图中为某些Bridge方法建模,可能需要保留它们。 Bridge可能希望在UML中看起来像这样:

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

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

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

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

最后,UML实际上是为了对您在代码中实现的概念进行建模。看起来你正在做相反的事情。反向工程和往返在某种程度上是可以的,但要小心,否则你最终会破解UML并从中生成代码。 UML的想法是在剪切代码之前对域进行建模并验证此模型。

希望这会有所帮助......