オブジェクト指向についての記事が書いてありました。
情報隠蔽とカプセル化の違いについてが述べられていました。
オブジェクト指向を説明している本などの資料で情報隠蔽=カプセル化という
説明が多いような気がする。
オブジェクト指向では情報隠蔽(information hiding)は抽象化をすることにより
実装を隠すという意味である説明が少ないような気がします。
このメソッドを呼び出せばオッケーです!っていうもの。
これを説明している本は少ないような気がする。。。。。
結論からすると
カプセル化:外部からのアクセス制限
情報隠蔽:抽象化により具体処理などの処理ロジック(実装)の情報隠蔽
となるようです。あっているかな?
情報隠蔽に関する論文が下記リンクだそうです。
http://campus.hesge.ch/Daehne/2008-2009/Module625/Algo/Documents/01-Article%20original%20de%20Parnas.pdf
2010年4月30日金曜日
2010年4月21日水曜日
Groovyでデコンパイル
groovyをデコンパイルしてgroovyの実装を確認してみる。
非常に簡単なクラスをデコンパイルすると以下のようなコードになる。
コンストラクタにメタクラスが存在する。このメタクラスを使っている
ことにより、スクリプトような動作を実現しているという。
時間があればもっと調べてみます。
package ph.jpn.calm.sample.groovy; class Book { private String title }
非常に簡単なクラスをデコンパイルすると以下のようなコードになる。
コンストラクタにメタクラスが存在する。このメタクラスを使っている
ことにより、スクリプトような動作を実現しているという。
時間があればもっと調べてみます。
package ph.jpn.calm.sample.groovy; import groovy.lang.GroovyObject; import groovy.lang.MetaClass; import org.codehaus.groovy.runtime.ScriptBytecodeAdapter; import org.codehaus.groovy.runtime.callsite.CallSite; public class Book implements GroovyObject { private String title; public Book() { Book this; CallSite[] arrayOfCallSite = $getCallSiteArray(); MetaClass tmp12_9 = $getStaticMetaClass(); this.metaClass = ((MetaClass)ScriptBytecodeAdapter.castToType(tmp12_9, $get$$class$groovy$lang$MetaClass())); tmp12_9; while (true) return; } static { tmp10_7 = new Long(0L); __timeStamp__239_neverHappen1271781713015 = (Long)tmp10_7; tmp10_7; tmp28_25 = new Long(1271781713015L); __timeStamp = (Long)tmp28_25; tmp28_25; return; while (true) return; } }
登録:
投稿 (Atom)