1

UML 图

您好,我正在尝试将此 UML 图直接转换为 java 代码,下面是我的代码,它似乎无论如何都无法编译。我不太确定如何放置可选的多重性,例如 0..* 和 0..1。感谢您的帮助。

public class Person{
    private String name;
    private Person mom;
    private Person dad;
    private ArrayList<Person> child;
    private ArrayList<Person> friend;
    private ArrayList<School> alumni;
    private School current = new School();

    public Person(String name, Person mom, Person dad, ArrayList<Person> child, ArrayList<Person> friend, ArrayList<School> alumi, School current){
        name = this.name;
        mom = this.mom;
        dad = this.dad;
        child = this.child;
        friend = this.friend;
        alumni = this.alumni;
        current = this.current;
    }
}

public class School{
    private String name;
    private ArrayList<Person> student;

    public School(String name, ArrayList<Person> student){
        name = this.name;
        student = this.student;
    }
}
4

2 回答 2

0

没有将 UML 转换为 Java 的标准化方法,但我可以根据 UML 和 Java 语义告诉你什么是正确的,什么是不正确的。

类 C1 和 C2 之间的关联可以由类 C1 中的属性实现,或由类 C2 中的属性或由两个类中的属性实现。如果关联没有箭头,则所有三个选项都是可能的,并且没有定义这三个选项中哪个是最好的。如果关联是从 C1 指向 C2 的箭头,则第一个选项最好,第二个选项不正确,允许第三个选项。我检查了您的 Java 代码,它符合这些规则。

如果类 C1 具有实现类 C1 和类 C2 之间的关联的属性 P,并且该关联0..1在 C2 的一侧具有多重性,则 P 应该具有类型 C2 并且 C1 应该具有不初始化 P 的构造函数。您的 Java 代码不正确,因为您不应该初始化 Person.School。

如果多重性是*0..*,那么 P 应该是 C2 的某种集合。类 C1 应该有一个不初始化 P 或可以用空集合初始化 P 的构造函数。后者是您的 Java 代码中的情况。

于 2019-09-18T09:55:51.317 回答
0
public class Person{
    private String name;
    private Person mom;
    private Person dad;
    private ArrayList<Person> child;
    private ArrayList<Person> friend;
    private ArrayList<School> alumni;
    private School current = new School();

这部分似乎是正确的,除了 School 应该为空,因为该人目前可能不在学习。

private School current;

关键字this(请参阅使用 this 关键字)指的是 Java 中的当前对象,因此构造函数应写为

public Person(String name, Person mom, Person dad, ArrayList<Person> child, ArrayList<Person> friend, ArrayList<School> alumi, School current){
    this.name = name;
    this.mom = mom;
    ...
}

与学校课程相同的问题:

public class School{
    private String name;
    private ArrayList<Person> student;

    public School(String name, ArrayList<Person> student){
        this.name = name;
        this.student = student;
    }
}

如果您在同一个文件中定义两个类,则必须从 School 的类定义中删除 public ,然后

class School{

或移至名为School.java的文件,请参阅oracle.com/javase/tutorial/java/javaOO/nested.html

于 2019-09-18T10:19:22.700 回答