将 UML 图映射到 Java 代码转换
Mapping UML diagram to Java code conversion
您好,我正在尝试将此 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;
}
}
没有将 UML 转换为 Java 的标准化方法,但我可以根据 UML 和 Java 语义告诉您什么是正确的,什么是不正确的。
classes C1 和 C2 之间的关联可以通过 class C1 中的 属性 或 class C2 中的 属性 实现或按 classes 中的属性。如果关联没有箭头,则所有三个选项都是可能的,并且没有定义这三个选项中哪个是最好的。如果关联是从 C1 指向 C2 的箭头,那么第一个选项是最好的,第二个选项是错误的,第三个选项是允许的。我已经检查了您的 Java 代码,它符合这些规则。
如果 class C1 有一个 属性 P 实现 class C1 和 class C2 之间的关联,并且该关联的重数为 0..1
在 C2 的一侧,那么 P 应该有 C2 类型,C1 应该有一个不初始化 P 的构造函数。你的 Java 代码不正确,因为你不应该初始化 Person.School.
如果重数是*
或0..*
,那么P应该是C2的某种集合。 Class C1 应该有一个不初始化 P 或可以用空集合初始化 P 的构造函数。后者是您的 Java 代码中的情况。
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(参见Using the this Keyword)引用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;
...
}
与学校同样的问题class:
public class School{
private String name;
private ArrayList<Person> student;
public School(String name, ArrayList<Person> student){
this.name = name;
this.student = student;
}
}
如果您在同一个文件中定义两个 class,您必须从学校的 class 定义中删除 public,然后
class School{
或移动到名为 School.java 的文件,请参阅 oracle.com/javase/tutorial/java/javaOO/nested.html
您好,我正在尝试将此 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;
}
}
没有将 UML 转换为 Java 的标准化方法,但我可以根据 UML 和 Java 语义告诉您什么是正确的,什么是不正确的。
classes C1 和 C2 之间的关联可以通过 class C1 中的 属性 或 class C2 中的 属性 实现或按 classes 中的属性。如果关联没有箭头,则所有三个选项都是可能的,并且没有定义这三个选项中哪个是最好的。如果关联是从 C1 指向 C2 的箭头,那么第一个选项是最好的,第二个选项是错误的,第三个选项是允许的。我已经检查了您的 Java 代码,它符合这些规则。
如果 class C1 有一个 属性 P 实现 class C1 和 class C2 之间的关联,并且该关联的重数为 0..1
在 C2 的一侧,那么 P 应该有 C2 类型,C1 应该有一个不初始化 P 的构造函数。你的 Java 代码不正确,因为你不应该初始化 Person.School.
如果重数是*
或0..*
,那么P应该是C2的某种集合。 Class C1 应该有一个不初始化 P 或可以用空集合初始化 P 的构造函数。后者是您的 Java 代码中的情况。
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(参见Using the this Keyword)引用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;
...
}
与学校同样的问题class:
public class School{
private String name;
private ArrayList<Person> student;
public School(String name, ArrayList<Person> student){
this.name = name;
this.student = student;
}
}
如果您在同一个文件中定义两个 class,您必须从学校的 class 定义中删除 public,然后
class School{
或移动到名为 School.java 的文件,请参阅 oracle.com/javase/tutorial/java/javaOO/nested.html