天天看點

OOD沉思錄 --- 類和對象的關系 --- 包含關系1

4.5 如果類包含另一個類的對象,那麼包含類應當向被包含的對象發送消息(調用方法)。

 也就是說,所有的包含關系都應當是使用關系。

 如果不是這樣,那麼包含的類有什麼用處呢?當然,面向過程的開發人員會想到可能有一個Get方法供其它類使用這個包含的對象,那麼按照“資料隐藏原則”,為什麼 不讓使用包含類的類直接包含被包含的這個對象呢?

包含一個對象一定是需要使用它才包含。

 比如說汽車包含了發動機,如果違背這條原則的話則定義如下:

[cpp] view plain copy print ?

  1. class 汽車  
  2. {  
  3.    發動機 m_發動機;  
  4.    發動機 Get發動機(){return m_發動機;}  
  5. }  
  6. //對于使用駕駛員來說,汽車的操作如下:  
  7. 發動機 a=汽車A.Get發動機();  
  8. a.啟動();  

對駕駛員來說,就知道了“汽車裡有發動機”的内部細節(),這肯定是不合适的。    

那麼我們應當将發動機的啟動操作由汽車類來調用,而不是駕駛員,那麼定義如下:

[cpp] view plain copy print ?

  1. class 汽車  
  2. {  
  3.    發動機 m_發動機;  
  4.    啟動()  
  5.    {             
  6.        m_發動機.啟動();  
  7.    }  
  8. }  
  9. //對于使用駕駛員來說,汽車的操作如下:  
  10. 汽車A.啟動();  

轉載于:https://www.cnblogs.com/stst/p/4909632.html