2015-11-05 88 views
1

我想問一個關於面向對象編程領域中聚合關係的問題。類圖中的聚合關係?

現在我有一個由2個類組成的類。

我們知道在主類有作爲屬性

但主要的類不包含除聚合類的任何屬性或方法來聚合類的引用聚合關係。

這是正確的面向對象的編程

例如世界:

主要類叫做騎士:

別人是馬和劍。

所以騎士階級由馬和劍組成。

這是一個聚合關係...

public class knight{ 
private horse h; 
private sword s; 

// no others attributes and methods 
} 

我的問題:在離開騎士類沒有任何屬性和方法如上正確???

+0

爲什麼downvote?這是一個正確的問題,完全問道。 +1。 – Gangnus

回答

3

是的,這是正確的,但沒用。

你忘記了,你必須以某種方式暴露騎士的屬性。領域或一些與他們合作的方法應該是公開的。或者你的騎士是不是騎士,但:-)

隱士例如:

public boolean putSwordOn(Sword sword){}; //sets current sword 
public boolean putSwordInSheath(){}; // uses sword 
public boolean pullSwordOut(){};  // uses sword 
public boolean attack(Creature target){}; // uses sword 
public void kissSwordAndSwearToServe(Knight senior); // uses sword 
public boolean climbHorse(Horse horse){}; // sets current horse 
public boolean gallop(Point direction){}; // uses horse 

此外,你必須在術語的問題。這樣的連接(具有)由association表示。這是在類圖上以實線表示的,可能帶有點或菱形或箭頭。一個association有一些aggregation。它是關於該類型的多少個實例屬於該字段以及它們是如何屬於的。 aggregation可以compositionsharednone。我們可以說,這associationnoneaggregation,而是命名爲「聚合」的東西,有none聚集明顯不正確。所以,你說的是association的關係。

+0

非常感謝您的答覆,但我還有一個問題。你說這是正確的,但沒用。現在如果這個類在編寫我的代碼時永遠無用。你認爲這是正確的嗎? ...現在我只想從主類(騎士)獲得馬和劍類...正在使劍和馬抽象這是一個好主意? –

+1

1.您有權制作無用的課程。它可以用於培訓和演示其問題。 2.至於使用抽象類的領域,是的,這是非常頻繁和現代的方式。你將它們聲明爲最常見的東西 - 作爲一些接口或抽象類,但是你CREATE/CONSTRUCT它們是一些可實例化的類。 'List list = new ArrayList()'。我不認爲劍和馬應該是抽象類。但是你可以製作抽象類武器和駿馬。 – Gangnus

+0

所以你認爲更好地使用主類的方法使其有用? –

2

是的,爲什麼不呢?

絕對沒有理由不正確。