2012-10-23 64 views
1

我認爲這是相對簡單的,但我只是困惑,因爲我是新的類圖。類圖混淆(微不足道)

我即將創建一個關於管理麥當勞員工類型的程序(Java)。所以,考慮建模對象。

爲了簡單起見,McDonalds中只有兩種類型的員工,「監督員」和「員工成員」,兩者都按月收取工資。此外,他們都收到單獨的一種視情況而定(這當然可能在未來改變)

於是,我開始與屬性

name 
empId 
salary 

建模通過創建一個超類「僱員」的獎金(方法......等)

順便說一句,我做了「CrewMember」和「Superviser」是它的子類。

那麼我的困惑是什麼如果我用這種方式模擬我的對象,我的「CrewMember」和「Superviser」類的實例如何可能彼此不同?

請糾正我如何建模我的課程。爲了讓這些班級可以區分,我還想過在每個「CrewMember」和「Superviser」上增加一種獎勵,但我認爲這不會很靈活,如果將來獎勵和獎勵類型會改變的話。所以,我現在很困惑。

+0

我忘了提及,我看到(目前)兩個班級「監督員」和「工作人員」之間的唯一區別就是他們的薪水。 – jbchichoko

+0

他們不叫'監督員'嗎? – Jodrell

+1

@jbchichoko以工資作爲屬性,無論子類如何,它都可以不同。如果你想要所有主管擁有相同的薪水,你應該重構你的工作,以便在'Supervisor'中擁有一個靜態常量。 –

回答

3

主管和船員之間有什麼區別?

至少我認爲你需要建立一個監督員是一個或多個船員的老闆的這兩個等級之間的關聯。

如果主管有任何事情,但一個船員不做,那麼你應該在班主任模型。

如果主管和船員之間沒有區別,那麼你不需要這兩個班級。

0

Hellothère:)這個答案貼在我的iPhone上,但我會稍後更新它!當你像僱員一樣成爲超類時,你只需從一個簡單的箭頭就可以在班級圖中顯示出來,從超級班到兩個孩子班 - 我會在一瞬間找到一個鏈接,dó注意到兩班班並不重要似乎完全相同,但圖表完成後應該清楚!通常你創建你的類圖前的域模型顯示這些類型的遺產

+0

更新發生了什麼? :) – jbchichoko

0

的使用繼承的概念,廣義的和專業的情況下,應該有一些什麼樣的動機實體之間的差異來一概而論/專業的。這被稱爲鑑別器 - 它是一些不同的特徵(行爲或結構)。所以需要有一些功能只適用於監督員/船員,某些關聯或屬性。否則,在超類「員工」中爲「開始時間」建模「employeeType」就足夠了。請注意,在大多數開發環境中添加繼承代價很高。將會有額外的源代碼,額外的文檔,額外的表格,文件,以及當你試圖從你的模型到實現時不再提供的內容。如果這樣做沒有真正的好處,那麼使用繼承(特別是實現繼承)是不明智的。

+0

因此,鑑於我在我的類中有鑑別器(如您所說),如果我的類沒有繼承,如果它的代價很高,我該如何建模?謝謝。 – jbchichoko

+0

如上所述 - 添加employeeType屬性,如果您需要任何次要的特殊行爲,請使用switch語句。這不是沿着面向對象的純度,而是通常比繼承第一步更好的第一步,並且永遠不會在子類中有太多差異。一個典型的「YAGNI」 - 你不需要它「的情況。 –