2 回答

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊
沒有將 UML 轉(zhuǎn)換為 Java 的標(biāo)準(zhǔn)化方法,但我可以根據(jù) UML 和 Java 語(yǔ)義告訴您什么是正確的,什么是不正確的。
類C1和C2之間的關(guān)聯(lián)可以通過類C1中的屬性、或者通過類C2中的屬性或者通過兩個(gè)類中的屬性來實(shí)現(xiàn)。如果關(guān)聯(lián)沒有箭頭,則所有三個(gè)選項(xiàng)都是可能的,并且未定義這三個(gè)選項(xiàng)中哪一個(gè)是最好的。如果關(guān)聯(lián)是從 C1 指向 C2 的箭頭,則第一個(gè)選項(xiàng)是最佳選項(xiàng),第二個(gè)選項(xiàng)不正確,第三個(gè)選項(xiàng)是允許的。我檢查了您的 Java 代碼,它符合這些規(guī)則。
0..1
如果類 C1 有一個(gè)屬性 P 實(shí)現(xiàn)類 C1 和類 C2 之間的關(guān)聯(lián),并且該關(guān)聯(lián)在 C2 一側(cè)具有多重性,則 P 應(yīng)該具有類型 C2,并且 C1 應(yīng)該具有不初始化 P 的構(gòu)造函數(shù)。您的 Java 代碼是不正確的,因?yàn)槟粦?yīng)該初始化 Person.School。
如果重?cái)?shù)是*
或0..*
,那么 P 應(yīng)該是 C2 的某種集合。類 C1 應(yīng)該有一個(gè)構(gòu)造函數(shù),該構(gòu)造函數(shù)要么不初始化 P,要么可以用空集合初始化 P。Java 代碼中的情況就是后者。

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個(gè)贊
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();
這部分似乎是正確的,但學(xué)校除外,該學(xué)校應(yīng)該為空,因?yàn)樵撊四壳翱赡軟]有在學(xué)習(xí)。
private School current;
關(guān)鍵字this(請(qǐng)參閱使用 this 關(guān)鍵字)引用 Java 中的當(dāng)前對(duì)象,因此構(gòu)造函數(shù)應(yīng)寫為
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;
? ? ...
}
學(xué)校班級(jí)也有同樣的問題:
public class School{
? ? private String name;
? ? private ArrayList<Person> student;
? ? public School(String name, ArrayList<Person> student){
? ? ? ? this.name = name;
? ? ? ? this.student = student;
? ? }
}
如果您在同一個(gè)文件中定義兩個(gè)類,則必須從 School 的類定義中刪除 public,這將變?yōu)?/p>
class School{
添加回答
舉報(bào)