2012-01-19 45 views
0
class CommandSchedule 
    { 
    private : 
     List<SubSchedule*> mSubScheduleList; 
    public : 
     void addSubSchedule (int id) 
     { 
      mSubScheduleList.add(new SubSchedule(id)); 
     } 
     SubSchedule* addSubSchedule (int id) 
     { 
      SubSchedule* item = new SubSchedule(id); 

      mSubScheduleList.add(item); 

      return item; 
     } 
    }; 

在這個類中,我定義了2個addSubSchedule函數,一個返回void,一個返回指向對象的指針。封裝和對象指針

所以,我的問題是,如果函數,返回指向該對象的指針,打破了CommandSchedule類的封裝?我對封裝問題感到不舒服,所以任何幫助都會很讚賞。

+3

你真的需要這兩種方法嗎?你可能想考慮放棄'void'版本,因爲它似乎是多餘的。 –

回答

3

它爲什麼會破壞封裝?你的對象的內部表示仍有隱憂:

private : 
    List<SubSchedule*> mSubScheduleList; 

除非SubSchedule也被認爲是內部表示,這裏沒有問題。

在一個封裝良好的類中,只有其成員函數可以操縱其內部細節。在這種情況下,使用List的事實似乎是一個細節,因爲公共接口用戶關心的全部內容是該類允許他添加子計劃。這些子計劃如何存儲是一個內部細節。您稍後可以更改此詳細信息(例如,將它們存儲在SortedList中,而不會影響公共接口的用戶)。因此,使List<...>變量private可以促進良好的封裝。

如果界面的用戶希望能夠直接操縱對象,那麼在暴露這個對象時沒有問題。但如果沒有理由這樣做,那麼使用SubSchedule也可能是一個內部細節,因此不應在公開界面中公開。

+0

爲了解決這個問題,請在*內部表示*上添加一個簡短的解釋 - OP似乎對此感到困惑。 –