このブログは、自分のFlash等々のスキルアップのために始めました。で、自分のスキルってどれくらいなのかなと思ったとき、端的にって今一歩のところで上級に届かないって所なのかなと思う。
例えば、だいたい最初に考えた仕様通りにコーディングできてとりあえず動くものは作れるのだけど、抽象クラスとかってなんなの?なんで使うのかいまいちピンとこないって感じです。そんなこんななんで、デザインパターンを入門してみます。
よくいわれる人種ネタで、「ドイツ人は歩く前に考え、イギリス人は歩きながら考え、イタリア人は歩いてから考える」というのがあります。(実際にはそうでもないような気がするけど)昔イギリスに留学してたというのもあってか(これも関係ないかもしれないけど)イギリス・スタイルがしっくりくる感じ。
本でじっくり学んでから行動を起こすより、なにかをしながら足りないところは本を読む。今関係ないところはあとで読むみたいなスタイル。すなわちこのブログみたいなスタイル。
何はともあれ、とりあえず手を動かしてみます。
使用するテキストは
「増補改訂版Java言語で学ぶデザインパターン入門」結城 浩
同僚のひろしさんお勧めの本です。これをパラパラめくって必要ありそうなところをjavaからAS2.0に書き換えていろいろ学んでしまおうというのがこのコーナーの趣旨。一回目は「Iterator(1つ1つ数え上げる)」です。
続きを読む "ActionScript2.0でデザインパターン(Iteratorの巻き)" »
二回目はAdapter(一皮かぶせて再利用)です。これは普段からAdapterとか言う単語を知る前から自然に使ってたので簡単に理解できました。
このパターンの勘所は元々提供されているClassがあって(今回はBanner.as)クライアント(Main.as)が新しいインターフェース(Print.as)に適合させる必要がある場合、ずれを埋める役目(PrintBanner.as)すなわちAdapterを用意すれば元々提供されているClassを書き換えなくてもオッケーじゃん、便利じゃん。というところです。
やり方としては、「継承」と「委譲」というのがあって、いきなり非日常単語が出てくるのですが、ビビる必要はなし。要は「引き継ぎ式」と「お任せ式」ってことですね。それぞれのソースを書いてみました。
続きを読む "ActionScript2.0でデザインパターン(Adapterの巻き)" »
ということで第三回目はTemplate Methodです。
大枠の処理はスーパークラスで決めて細かいところはサブクラスに任せるってパターンですね。ストーリー的に言うと、頑固者の靴職人が、弟子に木型を渡して仕事をさせてるみたいな感じかな。
このパターンだとインターフェースを使用する意味がよくわかります。ということで早速コーディング。出てくる登場人物は三人です。
・AbstractDisplay.as(職人の親方です。displayメソッドを実装してます。)
・CharDisplay.as(弟子1です。)
・StringDisplay.as(弟子2です。)
・Main.as(お客さん。すなわち依頼主です。)
それではソースをみてきましょう。
続きを読む "ActionScript2.0でデザインパターン(Template Methodの巻き)" »
はい、第四回目はFactory Methodです。
出てくる登場人物は5人
・Factory.as
・Product.as
・IDCard.as
・IDCardFactory.as
・Main.as
ひな形の役割のFactory.asさんとProduct.asはインターフェースがあるだけで、実際のインスタンス化はサブクラスのお二人、IDCard.asさんとIDCardFactory.asさんにお任せってパターンです。
今回は参考書の方はpackageを使ってまして、せっかくなんでActionScript 2.0版のほうも使ってみました。いままでpackageを使ったこと無かったんでちょっと手間取りました。
基本的にはフォルダを切ってそこに書いたクラスを放り込むような感じで、classの命名のところでhogepackage.hogeclassとするとオーケーみたい。importするときはjavaとかとおんなじで、
import hogepackage.*;
と、パッケージを使いたいclassの文頭に書いておくと、そのパッケージ内のクラスをパブリッシュするときに勝手にサーチしてくれる。まあ、importなくても、文中にhogepackage.hogeclassといった感じに書けば動くことは動きますが、面倒だし、パッケージをまとめとけば後々いいことありそうな雰囲気。というか、覚えておこう。
この辺は本題とは直接関係ないです。
では、順番にみてきましょう。
続きを読む "ActionScript 2.0でデザインパターン(Factory Methodの巻き)" »
おつぎは、Singleton。インスタンスが作成されるのを一個のみにしたい時に使用するパターンですよ、と参考書には書いてありました。仕組み的には、コンストラクタをprivateにしてnew できないようにしちゃうパターンです。ま、作り方はあんま難しくないです。覚えておいて損はないでしょう。
確かに、絶対に一個しかインスタンスがないようにとプログラム的に制限してしまえば便利な場面もあるかも。ほかのインスタンスをコントロールするためのインスタンスとか。複数あると混乱しちゃうインスタンスとか。
ストーリー的には唯一無比のオリジナリティーを追求しているカリスマが俺についてこいみたいな勢いで仁王立ちしてる感じ?
ていうか、よけいわかんなくなった。
new できないのにインスタンスはあるってのが変な感じだけど、まあ、そんなもんなんでしょう。
続きを読む "ActionScript 2.0でデザインパターン(Singletonの巻き)" »
いきなり更新頻度が落ちて喫茶マウンテンの形相を帯びてきたこのコーナーですが、まだ続けてます。ぜひ登頂したいところです。
今回のお題はPrototype(コピーしてインスタンスを作る)です。今回のパターンの意義として以下の3つがテキストに書いてありました。
1)似たようなクラスが大量にできてしまいそうな場合
2)複雑な過程を経てインスタンス化される場合
3)フレームワークとインスタンスを切り分けたい場合
クラス→インスタンス じゃなく、インスタンス→インスタンスというふうに生成するとコードがすっきりするし、クラス名がソースコードに書かれないので、部品としての結合が弱まって再利用しやすくなるらしいです。なるほど。と、いわれても、いまいちピンとこないです。まあ、とりあえず形を覚えて使えそうな場面をこれから意識的に探してみよう。
続きを読む "ActionScript2.0でデザインパターン(Prototypeの巻き)" »
7回目の今回はBuilder「複雑なインスタンスを組み立てる」です。複雑な構造のプログラムも大まかなところから細かいところへ分けて考えると楽にできますねというパターンです。一言でいってデカルトパターンということです。(謎)
このコード書いていて思い出したのは高校のときのデッサンの授業です。初心者の人はいきなりディティールの描き込みから入っちゃうのだけど、全体の構図やおおまかな明暗とかマッスのベースを作って、モチーフとの印象を確認しながら描くと対象に近づきやすくなります。今回はそんなパターン。
デッサンとかだと各工程が有機的につながってるからあまり良くない例だったかな。
例えば、、、
クライアントが「これ作ってね。」と依頼してきた。Directorはおおまかな仕事の進め方はわかるので、とりあえず「ほいきた。」と仕事を引き受ける。でもって実務は下請け業者(TextBUilder、HTMLBuilder)に流してるかんじ?平たく言えば中抜きやってる人。こんな商売なら、クライアントのニーズが変わっても下請け業者を切り替えるだけでよい→うまー!って。。
例えが悪すぎ。軽くへこんだ。
orz
続きを読む "ActionScript2.0でデザインパターン(Builderの巻き)" »
ActionScript 2.0のAbstract Factoryパターンでつまずき中。
プログラム自体が複雑というのもあります。orz
まあそっちの方は順を追っていけばよいはなしですが、問題はクラスを文字列から動的にロードする方法です。Javaで言うところの、forName(hoge).newInstance()のところです。
いろいろ調べてみると、
var InstanceName = new eval(classname)();
みたいな感じで実現できるみたいです。
続きを読む "クラスを文字列から動的にロード" »
蜜柑じゃなかった、未完です。
今回は、前回でふれた、クラスを文字列からロードするときに厳密に型を指定しないとだめ問題が解決してないため未完です。
抽象的な工場にて使用する抽象的な部品プログラムとその使い方の大まかな流れを決めて、具体的な仕事は具体的な工場と、具体的な部品プログラムに任せるパターンです。
これをやっとくと、具体的なプログラムに変更を加える必要があるとき、パッケージとその工場にあたるプログラムの名前を変更するだけでごっそり実装を差し替えることができて便利ですねと。なるほど。
ただ、同じ種類の処理に変更する時は、さくっと変更できるけど、処理の種類自体を追加したいときとかはいろいろ縛りが出て来ちゃうので注意。
以下ソース。
続きを読む "ActionScript2.0でデザインパターン(AbstractFactoryの巻き)" »
やっと9回目。今回はBridgeパターンです。移植作業は簡単でした。
ポイントはクラスを機能と実装の階層に分けて橋渡しをさせるような作りにしておき、後々、修正するときにどっちの階層をいじるのか明確にしておくと混乱が少ないですねというパターン。ふーん。
とはいえ、機能と実装の階層とか言われてもよくわからん。テキストではともて手際よく解説されていたので、自分なりにわかる形でメモっておこう。なんか学校の講義ノートっぽくなってきた。
機能の階層
大まかな機能を持ったクラスを拡張させて新しいメソッドを追加するときにできる階層関係
実装の階層
インターフェースの具体的な処理を書くときに追加されたクラスとできる階層関係
だいたいこんな風に理解したのだけど、説明はへたくそです。実際問題、本買った方が早いです。
続きを読む "ActionScript 2.0でデザインパターン(Bridgeの巻き)" »