4.5 如果類包含另一個類的對象,那麼包含類應當向被包含的對象發送消息(調用方法)。
也就是說,所有的包含關系都應當是使用關系。
如果不是這樣,那麼包含的類有什麼用處呢?當然,面向過程的開發人員會想到可能有一個Get方法供其它類使用這個包含的對象,那麼按照“資料隐藏原則”,為什麼 不讓使用包含類的類直接包含被包含的這個對象呢?
包含一個對象一定是需要使用它才包含。
比如說汽車包含了發動機,如果違背這條原則的話則定義如下:
[cpp] view plain copy print ?
- class 汽車
- {
- 發動機 m_發動機;
- 發動機 Get發動機(){return m_發動機;}
- }
- //對于使用駕駛員來說,汽車的操作如下:
- 發動機 a=汽車A.Get發動機();
- a.啟動();
對駕駛員來說,就知道了“汽車裡有發動機”的内部細節(),這肯定是不合适的。
那麼我們應當将發動機的啟動操作由汽車類來調用,而不是駕駛員,那麼定義如下:
[cpp] view plain copy print ?
- class 汽車
- {
- 發動機 m_發動機;
- 啟動()
- {
- m_發動機.啟動();
- }
- }
- //對于使用駕駛員來說,汽車的操作如下:
- 汽車A.啟動();
轉載于:https://www.cnblogs.com/stst/p/4909632.html