2011-08-26 84 views
0

我目前正在使用書籍和網站自學OOP。我處於需要練習的地步。我開始了一個小型項目,我知道如何以程序化的方式進行。但是當我嘗試以面向對象的方式進行操作時,它給我留下了問題。需要幫助定義類職責

我的項目概念是這樣的。我想在工作中組織/歸檔/管理我們系統上的互連。我使用2班。設備和接口。

設備有一些接口。
設備類有以下methodes:

  • 無效addInterface(字符串名稱)
  • 無效removeInterface(接口I)
  • 接口getInterface(接口I)#我應該寫道:接口getInterface(字符串接口名)
  • 空隙printAllInterface()

接口類具有以下methodes:

  • 空隙connectInterface(接口interfaceToConnectTo)
  • 空隙disconnectInterface(接口interfaceToDisconnectFrom)
  • 空隙printAllConnection()

基本上,我創建兩個設備,添加一些接口到每個最終使一些連接在接口之間。

設備知道它的所有接口。一個接口知道它連接到的所有其他接口。

但是,給定一個接口,我怎麼知道它屬於哪個設備?

如果接口知道設備,它們變得緊密耦合。對於我目前所瞭解的情況,這不是很好的面向對象。另一種方法是瀏覽所有設備以瞭解他們是否具有我正在尋找的界面。看起來效率很低。我相信我錯過了一些明顯的東西。任何人都可以看到它嗎?

由於

更新: 這可以被看作是在MS Visio文件的形狀和連接。界面實際上只是一個形狀上的連接器。該設備是形狀。

回答

1

如果你有,你必須能夠確定Device對於給定Interface的要求,這意味着DeviceInterface即使你沒有編寫它已經緊密耦合。如果將這兩個類別分開,則不能再假定所有Interfaces都屬於Device

如果所有Interface對象必須屬於一個Device的話,那麼我看不出有上InterfacesetDevice/getDevice方法的任何問題。是的,它創建了循環依賴,但它看起來是模擬特定域的最佳方式。在我看來,搜索每個Device只是爲了查看它是否包含特定的Interface是一個更糟糕的設計決定。

但是,如果Interface存在而不屬於Device或者可能屬於完全不同的類,那麼您需要重新考慮更高級別的體系結構。一些沿線:我該如何重組這些類,所以我不需要從Interface得到Device答案真的取決於你的具體領域,我們不太瞭解你的問題中的信息。

+0

確實接口必須屬於一個設備。這個循環引用讓我覺得在我的設計中出現了錯誤 – Jason

0

對現有接口的一點小評論。恕我直言,接口上的打印方法應該移動到不同的接口,以便設備接口只負責維護它所控制的接口。此外,「接口getInterface(接口pInterface)」方法接收作爲輸入參數並返回? 至於答案,上面的答案有幾個問題提出。如果我理解正確,設備類將在調用addInterface()時創建一個接口;如果用例是給定接口的設備將被返回,接口上的getDevice()就可以了(我不會添加setDevice()方法; Device可以傳入接口的構造函數中)如果接口總是屬於設備。 編輯:但是,如果您想給您的api用戶一個印象,即您的用例要求與接口關聯的設備可以在運行時更改,那麼setDevice()方法會更可取。

+0

我正在計劃在_core_設計正確的時候使用Model/View/Controler模式。他們在那裏進行調試。我應該在我原來的帖子中提到它。 – Jason