2010年4月30日金曜日

SoftwareDesignの記事について

オブジェクト指向についての記事が書いてありました。

情報隠蔽とカプセル化の違いについてが述べられていました。
オブジェクト指向を説明している本などの資料で情報隠蔽=カプセル化という
説明が多いような気がする。
オブジェクト指向では情報隠蔽(information hiding)は抽象化をすることにより
実装を隠すという意味である説明が少ないような気がします。
このメソッドを呼び出せばオッケーです!っていうもの。

これを説明している本は少ないような気がする。。。。。

結論からすると
カプセル化:外部からのアクセス制限
情報隠蔽:抽象化により具体処理などの処理ロジック(実装)の情報隠蔽
となるようです。あっているかな?


情報隠蔽に関する論文が下記リンクだそうです。
http://campus.hesge.ch/Daehne/2008-2009/Module625/Algo/Documents/01-Article%20original%20de%20Parnas.pdf

2010年4月21日水曜日

Groovyでデコンパイル

groovyをデコンパイルしてgroovyの実装を確認してみる。
  1. package ph.jpn.calm.sample.groovy;  
  2.   
  3. class Book {  
  4. private String title  
  5.   
  6. }  


非常に簡単なクラスをデコンパイルすると以下のようなコードになる。
コンストラクタにメタクラスが存在する。このメタクラスを使っている
ことにより、スクリプトような動作を実現しているという。
時間があればもっと調べてみます。


  1. package ph.jpn.calm.sample.groovy;  
  2.   
  3. import groovy.lang.GroovyObject;  
  4. import groovy.lang.MetaClass;  
  5. import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;  
  6. import org.codehaus.groovy.runtime.callsite.CallSite;  
  7.   
  8. public class Book  
  9. implements GroovyObject  
  10. {  
  11. private String title;  
  12.   
  13. public Book()  
  14. {  
  15. Book this;  
  16. CallSite[] arrayOfCallSite = $getCallSiteArray();  
  17. MetaClass tmp12_9 = $getStaticMetaClass();  
  18. this.metaClass = ((MetaClass)ScriptBytecodeAdapter.castToType(tmp12_9, $get$$class$groovy$lang$MetaClass()));  
  19. tmp12_9;  
  20. while (true)  
  21. return;  
  22. }  
  23.   
  24. static  
  25. {  
  26. tmp10_7 = new Long(0L);  
  27. __timeStamp__239_neverHappen1271781713015 = (Long)tmp10_7;  
  28. tmp10_7;  
  29. tmp28_25 = new Long(1271781713015L);  
  30. __timeStamp = (Long)tmp28_25;  
  31. tmp28_25;  
  32. return;  
  33. while (true)  
  34. return;  
  35. }  
  36. }