编程语言: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 :(得分: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的想法是在剪切代码之前对域进行建模并验证此模型。
希望这会有所帮助......