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{
添加回答
舉報