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の実装を確認してみる。
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;
}
}