1.對(duì)象和數(shù)據(jù)結(jié)構(gòu)的區(qū)別
(1)數(shù)據(jù)結(jié)構(gòu)中的對(duì)象只是數(shù)據(jù),面向?qū)ο笾械膶?duì)象包括了數(shù)據(jù)和行為。
(2)數(shù)據(jù)結(jié)構(gòu)暴露其數(shù)據(jù),沒有提供有意義的函數(shù);對(duì)象把數(shù)據(jù)隱藏于抽象之后,暴露操作數(shù)據(jù)的函數(shù)。
(3)數(shù)據(jù)結(jié)構(gòu)難以添加新的的數(shù)據(jù)類型,因?yàn)樾枰膭?dòng)所有函數(shù),面向?qū)ο蟮拇a則難以添加新的函數(shù),因?yàn)樾枰薷乃械念悺?/p>
在任何一個(gè)復(fù)雜的系統(tǒng)都會(huì)同時(shí)存在數(shù)據(jù)結(jié)構(gòu)和對(duì)象,我們需要判斷的是要添加的是新的數(shù)據(jù)類型還是新的行為函數(shù)。
2.迪米特法則:模塊不應(yīng)了解它所操作對(duì)象的內(nèi)部情形。
類C的方法f只應(yīng)調(diào)用以下對(duì)象的方法:
(1)C;
(2)由f創(chuàng)建的對(duì)象;
(3)作為參數(shù)傳遞給f的對(duì)象;
(4)由C的實(shí)體變量持有的對(duì)象;
方法不應(yīng)調(diào)用由任何函數(shù)返回的對(duì)象的方法,換句話說,只和朋友說話,不和陌生人說話。以下就是違反該法則的一段代碼:
final String?outputDir=ctxt.getOptions().getScratchDir().getAbsolutePath();
當(dāng)然,迪米特法則的前提是對(duì)象,如果是數(shù)據(jù)結(jié)構(gòu),沒有什么行為,則他們自然會(huì)暴露其內(nèi)部數(shù)據(jù)結(jié)構(gòu),迪米特法則也失效了。
如果數(shù)據(jù)結(jié)構(gòu)只簡(jiǎn)單的擁有公共變量而沒有函數(shù),對(duì)象擁有私有變量和公共函數(shù),這個(gè)問題就不會(huì)混淆。