我想在java代碼中表示以下場景:
教授在辦公室作業,可以帶薪休假,在校外開展一些學術活動。教授有一個職稱,并就讀于一個系。教授可以是正教授、副教授或助理教授。助理教授的課程數量最少。正教授、副教授和助理教授都可以休無薪假。助理教授的無薪假期不應超過三個月。
我使用繼承來表示類:
class Professor {
String title;
Department department;
}
class AssociateProfessor extends Professor {
}
class AssistantProfessor extends Professor {
}
class FullProfessor extends Professor{
}
另一種方法是對教授型別使用列舉,例如:
enum professor {full, associate}`
我不確定哪一種是最好的方法。
在給定的場景中也有一些要求:
- 教授可以帶薪休假
- 助理教授的課程數量最少
- 一些教授可以休無薪假
- 助理教授的無薪假期不應超過三個月
我不知道如何在課堂上代表他們。但我在這里嘗試過:
class Professor {
String title;
Department department;
int paidLeaves;
}
class AssistantProfessor extends Professor {
int numOfCourses;
int unpaidLeaves;
AssistantProfessor(int _numOfCourses,...) {
if(_numOfCourses <10)
throw new Exception("Need a minimum number of courses");
if(unpaidLeaves >90)
throw new Exception("...");
}
}
在上面,我不確定是否應將帶薪或不帶薪假期視為單獨的類或介面或列舉,以及是否有更好的方式來表示 line not last more than three months。任何想法都會很棒
uj5u.com熱心網友回復:
您的敘述解釋了不同型別的教授具有不同的行為和屬性:
- 候選1:一個
?interface? Professor和三個類FullProfessor,AssociateProfessor和AssistantProfessor各實作(實作)的介面。
優勢:班級設計的完全靈活性。
不便:必須多次重新實作常見行為(無DRI)。當她/他改變類別時,教授沒有連續性。 - 候選2:A類
Professor與列舉Category,可能需要的值Full,Associate和Assistant。
優點:類設計簡單。
不便:操作必須實作很多條件陳述句才能實作特定于類別的行為。如果某些類別的教授需要額外的屬性,您將擁有它們。更糟糕的是:添加新的教授類別非常困難,因為您需要更改原始課程(沒有OCP)。 - 候選3:A類
Professor專業三個班FullProfessor,AssociateProfessor和AssistantProfessor。
優點:公共行為只定義一次;每個特化都可以重新定義一些行為并豐富基類。添加新的教授班級也很容易。
不便:如果教授的類別發生變化,很難改變他/她的類別(雖然這在UML中沒有被禁止,但大多數語言都不允許)。 - 候選 4:一個類
Professor參考一個當前的State,并將狀態相關的行為轉發給狀態。的三個專業State:StateFullProfessor,StateAssociateProfessor,和StateAssistantProfessor。順便說一下,狀態設計模式更喜歡組合而不是繼承。優點:教授可以在不失去其身份連續性的情況下改變類別。此外,教授不變的行為和屬性與在他/她的職業生涯中發生變化的行為和屬性之間存在關注點分離。
不便:稍微復雜一些。 - Candidate5:一個類
Professor指的是一個集合Role(或合同?)。的三個專業Role:RoleFullProfessor,RoleAssociateProfessor,和RoleAssistantProfessor。對于每一個行為,教授都會將行為轉移到它的所有角色。
優點:可以應付A場的FullProfessor,B場的AssistantProfessor。
不便:如果不需要,可能會矯枉過正。
當然還有其他候選設計(我至少看到了另外兩個)。現在由您來選擇最適合您的需求。
在這些場景中的任何一種情況下,您都可以用圖表中的約束記錄一些額外的約束,例如“不超過三個月”。之間的約束用自然語言表達{}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/337515.html
上一篇:兩個類之間的UML關系是什么,它們具有另一個的資料庫ID,但沒有相互參考?
下一篇:指向類方法的函式指標作為引數
