2 回答
TA贡献1921条经验 获得超9个赞
没有将 UML 转换为 Java 的标准化方法,但我可以根据 UML 和 Java 语义告诉您什么是正确的,什么是不正确的。
类C1和C2之间的关联可以通过类C1中的属性、或者通过类C2中的属性或者通过两个类中的属性来实现。如果关联没有箭头,则所有三个选项都是可能的,并且未定义这三个选项中哪一个是最好的。如果关联是从 C1 指向 C2 的箭头,则第一个选项是最佳选项,第二个选项不正确,第三个选项是允许的。我检查了您的 Java 代码,它符合这些规则。
0..1
如果类 C1 有一个属性 P 实现类 C1 和类 C2 之间的关联,并且该关联在 C2 一侧具有多重性,则 P 应该具有类型 C2,并且 C1 应该具有不初始化 P 的构造函数。您的 Java 代码是不正确的,因为您不应该初始化 Person.School。
如果重数是*
或0..*
,那么 P 应该是 C2 的某种集合。类 C1 应该有一个构造函数,该构造函数要么不初始化 P,要么可以用空集合初始化 P。Java 代码中的情况就是后者。
TA贡献1797条经验 获得超4个赞
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();
这部分似乎是正确的,但学校除外,该学校应该为空,因为该人目前可能没有在学习。
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{
添加回答
举报