Groovy

2007年5月25日 (金)

【準備中】連載: 気分はGroovy〜婚姻届問題《番外編》只今リハビリ中

 思い起こせば、ここに連載するはずの記事を保留にしたまま、はや十か月余りが過ぎてしまいました。当初は、Groovy で記述する予定でしたが、やはり Java の縛(釈迦の掌の内にある孫悟空?)からは逃れられそうになく、将来の明るい見通しも立ちそうにもないので、断念せざるを得ないという状況です。その間 Ruby/Python からも遠ざかっていたので、今はリハビリ(?)を兼ねて、別の連載を担当しています。今後は、Groovy/Pnuts に代えて、Ruby/Python などで記述した事例を紹介する予定です。
 この「婚姻届問題」は、自然言語で記述された要求仕様とは別に、VDM++ で記述された要求仕様に従って、Smalltalk で実現した事例がもとになっています。別解として、これと同等の(やや見劣りはしますが)JML/Java で実現したものがあります。
 この事例は、一般的なグラフ索を、限定的に扱った問題として捉えることができます。単純な木の探索と違って、両親が別々の家系図に属していることから、「三親等にある」という関係をどのようなデルで表現するかが鍵となります。さらに、応用問題として、RDB を使ったデータベーススキーマの定義を考案してみるのも面白いでしょう。
 過去に「未成年男子17歳を含む婚姻届けが受理された」という不手際がニュースにもなりました。現実的な問題として、役所の窓口では、婚姻の条件を満たしているかをここまで厳密に調べることはないでしょう。しかし、このようなシステム開発の発注があったと仮定するなら、興味深い課題になるかもしれません。みなさんも、いろいろな事例を実現してみると、その理解が深まるかもしれません。
 式手法の適用は、先進的な欧米企業の取り組みに比べて、まだ多くの日本企業(大学や研究機関は別として)は発展途上にあると言えます。しかし、先日の「NTT ひかり電話」の障害の原因が「アルファベットの大文字を誤って小文字で入力したこと」にあると聞くと、対岸の火事とばかりも言っていられません。さあみなさんも、そろそろ危機感を持って、形式手法に本腰を入れて取り組んでみませんか。

==================================
後藤いるか 著 ◆ 監修:小泉ひよ子とタマゴ倶楽部

| | コメント (0) | トラックバック (1)

2006年7月 3日 (月)

【準備中】連載: 気分はGroovy〜婚姻届問題《1》年齢は

------------ 序 ------------

「GoTo不要論」などあって、この業界では形見の狭い思いをしている、全国の藤さんの励みになればと思い、僕がこのコーナーの連載を担当します。

------------ 本文 ------------

続きを読む "【準備中】連載: 気分はGroovy〜婚姻届問題《1》年齢は"

| | コメント (0) | トラックバック (0)

2006年4月14日 (金)

連載: Java.use(better) NITRIS 問題《10》でもここなら置けますよ★★

キーワード ◆ __class__・lambda 式・OCL・reject 演算・select 演算・Smalltalk・クロージャー・ハリウッドの原則・フレームワーク
サンプルプログラム ◆ Nitris.py

※ PDF でご覧になるなら ⇒ 「piyo60414.pdf」をダウンロード

------------ 序 ------------

フレームワークの本質を理解するときに「ハリウッドの則」と呼ばれるメタファーが役立ちます。伝統的なプログラミングスタイルから脱却して、オブジェクト指向を習得するときに、越えなければならない壁のひとつと言えるでしょう。◆ あるクラスを定義して、メソッドを記述するとともに、そのメソッドを呼出すコードを記述することでしょう。しかし、これからフレームワークについて理解しようとするときに、自分が記述したコードを自分が呼出すことがないという状況に直面します。いわば、既存のフレームワークから呼出してもらうためのコードを記述するという立場です。「私を呼ぶなかれ、私あなたを呼ぶのだ」

◆ select 演算と reject 演算とは、相補的な関係にあるので、これらを対にして理解するのが早道です。◆ Jython では、クロージャーが使えないので、λ式を使ってコレクション演算を実現しています。Smalltalk では、伝統的な select: や reject: など、クロージャーを使った汎用的なフレームワークが提供されています。OCL では、iterate 演算を基本として、他のループ演算を体系的に導出しています。同様に、Smalltalk では、do: を中核に体系化されています。そのため、Collection を頂点とするクラス体系では、do: を再定義するだけで、他のメソッドを再定義する必要がなくなります。JRuby/Ruby や Groovy でもクロージャーを使えるので、Jython/Python と比べると、より簡潔なコードを記述できることでしょう。《ひよ子》

------------ 本文 ------------

続きを読む "連載: Java.use(better) NITRIS 問題《10》でもここなら置けますよ★★"

| | コメント (0) | トラックバック (0)

2006年4月 4日 (火)

連載: Java.use(better) NITRIS 問題《2》ゲームを始める前に★

キーワード ◆ Groovy・JRuby・Jython・オブジェクト指向プログラミング
サンプルプログラム ◆ Nitris.py

※ PDF でご覧になるなら ⇒ 「piyo60404.pdf」をダウンロード

------------ 序 ------------

◆ 今日は、実際にサンプルプログラムを実行して、ゲームの様子を観察します。今回のサンプルは、CUI を使って作成していますが、今後、GUI を使って作成したり、さらに3次元で表示するなどの予定です。◆ このサンプルでは、乱数をもとに作成したブロックを、ボード上に落とす様子を観察できます。落とされるブロックと、ボード上の石の配置を、文字列で表現しています。実際のゲーム作りに着手する前に、その基本動作を確認するだけなら、CUI でも十分に可能なのです。◆ さあ、実際にプログラムを実行して、ゲームのルールを確認してください。

◆ サンプルプログラムは、Jython で作成しました。Jython とは、Python のリファレンス実装のひとつで、Java で記述されています。◆ Jython を導入すると、Java とのコラボレーションが可能になり、その選択の幅も広がります。たとえば、演算子の多重定義も自由自在です。オブジェクト指向プログラミング(OOP)言語としては非力な Java ですが、Jython をパートナーにすることで、本格的な OOP 言語へと進化します。次のリリースを待たずに、Java に欠けている機能を思いのままに拡張できるのです。Java の可能性を拡げる選択肢には、Jython 以外にも、GroovyJRuby などがあります。《ひよ子》

【参考文献】Python and Java: The Best of Both Worlds
・http://www.python.org/workshops/1997-10/proceedings/hugunin.html

------------ 本文 ------------

続きを読む "連載: Java.use(better) NITRIS 問題《2》ゲームを始める前に★"

| | コメント (0) | トラックバック (1)