【问题标题】:Creating UML for the Java code [closed]为 Java 代码创建 UML [关闭]
【发布时间】:2025-12-21 22:35:07
【问题描述】:

我必须为下面编写的两个 Java 程序/代码创建 UML 图。 我的疑问是:

  • 接口的子类也是接口吗?
  • 实现可运行接口的类也是接口吗?
  • 不能将方法/函数称为类的操作吗?
  • 全局变量是类的唯一属性,还是函数中的局部变量也可以这样调用?
  • 在第二个程序中,作者正在向线程构造函数发送一个对象。对吗?

旁白:有人可以为这两个程序绘制 UML 吗?我很难理解线程、接口和相关关键字,如扩展、实现。

JAVA 代码 #1

public class RunThreads
  {
    public static void main(String[] args)
      {
        SomeThread p1=new new SomeThread(1);
        p1.start();
        SomeThread p2=new new SomeThread(2);
        p2.start();
        SomeThread p3=new new SomeThread(3);
        p3.start();
      }
  } // end class RunThreads

public class SomeThread extends Thread {
  {
    int myID;
    SomeThread(int id) {
      this.myID=id;
    }
    public void run() {
      int i;
      for(i = 1; i < 11; i++)
        System.out.println("Thread" + myID + ": " + i);
    }
  } // end class SomeThread

JAVA 代码 #2

public class RunThreads2
  {
    public static void main(String[] args)
      {
        Thread p1 = new Thread(new SomeThread2(1));
        p1.start();
        Thread p2 = new Thread(new SomeThread2(2));
        p2.start();
        Thread p1 = new Thread(new SomeThread2(3));
        p3.start();
      }
  } // end class RunThread2

class SomeThread2 implements Runnable {
  int myID;
  SomeThread2(int id) {
    this.myID = id;
  }
  public void run() {
    int i;
    for(i=1; i<11; i++)
      System.out.println("Thread " + myID + ": " + i);
    }
  } // end class SomeThread2

【问题讨论】:

  • 有人能画出这两个程序的 UML 吗? -
  • 我们从什么时候开始在 SO 上布置家庭作业?
  • 如果这听起来像是一项家庭作业,请原谅我,但我试图解决我书中的所有问题,这就是其中之一。再次抱歉,我是 Java(接口)和 UML 的初学者。它们让我有点困惑,所以我期待一个可以帮助我以更好的方式学习的解释的答案。

标签: java interface uml extends interface-implementation


【解决方案1】:

接口的子类也是接口吗?

没有接口的子类这样的东西。你可以extend一个接口和另一个接口,或者你可以implement一个接口和一个类。

实现可运行接口的类也是接口吗?

不-这是一门课。接口是用interface 定义的,而不是class

方法/函数不能称为类的操作吗?

当然——方法/功能/操作——对我来说听起来像是合理的同义词。在内部,Java 将它们称为方法(参见 reflection related javadoc

全局变量是类的唯一属性还是局部变量 函数内也可以这样调用?

我假设您将类属性称为类实例拥有的对象/基元 - 在您的第一个示例中,这将是 SomeThread 类中的 myID。方法中的局部变量只能在该方法中访问(例如,同一类中 run 方法中的 i),而不是类属性。

在第二个程序中,作者正在向线程发送一个对象 构造函数。对吗?

是的; new SomeThread2(3) 返回一个SomeThread 的实例,它也是一个对象。

有人可以为这两个程序绘制 UML 吗?

不太可能。这听起来太像家庭作业了。

【讨论】:

  • 非常感谢您的回答。虽然您发布此内容已经有一段时间了,但从您的回复中学习真的很高兴。
【解决方案2】:

您可以使用 IBM 理性玫瑰软件为您的程序获取 UML 图(它不是免费版)

或者如果你开发了编码,那么你应该知道逻辑,你可以使用Edraw来绘制UML图。

线程只能以两种方式使用

通过实现 Runnable 接口或扩展 Thread 类。

简单:如果你使用关键字 extends 那么你使用一个类

如果你使用关键字实现,那么你使用接口。

【讨论】:

  • "如果你使用关键字 extends 那么你使用一个类" - 除非你是 extending an interface
  • 接口可以扩展另一个接口,而不是一个类可以扩展它。而且他的代码没有任何抽象类。
  • 我不确定抽象类与此有什么关系。我在你的一般性陈述中指出了错误。使用关键字 extends 并不总是意味着您正在使用一个类 - interface Runnable2 extends Runnable - 有效,并且没有处理任何类。