Patternsの邦訳版を読んだメモIT技術関連ついに邦訳版が出ましたので、購入。薄い本なのでサラッと読めそうな気がします。読みながらのメモです。分からなかったので調べたこととかも書いておきます。一部、訳が若干残念な感じなので英語版と一緒に読むことで理解が深まります。MVCについては、wikipediaとかに載ってます。モデルでは、元データへの直接参照を避けるためにcloneメソッドを通してデータを受け取る直接オブジェクト参照をすると、モデル外での操作がデータモデルに影響してしまう。コントローラの追加の例(068)自動で更新される時計の処理モデルがシステムイベントで更新される。ビューがそのイベントをリッスンしているのでビューが更新されるコントローラがそのイベントをリッスンしているので、コントローラに定義されているUIが更新されるユーザが入力した時刻に更新される時計の処理ユーザの入力でモデルを更新するビューがそのイベントをリッスンしているのでビューが更新されるコントローラがそのイベントをリッスンしているので、コントローラに定義されているUIが更新される(但し、ユーザの入力で既に変わっているの効果はない)この例では、コントローラにUIのビューが混じっているので混乱しやすいかも知れません。私はもちろん混乱しました。シングルトンパターン075の以下の文章の意味が分かりません。ActionScript3.0のひとつの特徴は、メソッドのすべての引数は、デフォルト設定が不要であるというものがあります。ActionScript3.0では、メソッドの引数にデフォルト値がない場合、その引数は必須となる。それだと前後の文章が理解できます。flash.utils.Proxyクラスの使いどころを、これで知りました。未定義のプロパティやメソッドを捕捉するために使うわけですね。他のクラスをすでに継承しているけど、あのクラス(EventDispatcher)の機能も欲しい!という場合の解決策です。この本で一番長い章です、タイトルが。ActionScript3.0はasbstractがないので、抽象メソッド内で例外を発生させる方法がありますと書いてありますが例がないので、例はこんな感じ。本書で指摘されているように、これだと実行時にエラーを発生させるだけなんですよね。命名規則をちゃんとして間違えてnewしちゃったらコンパイル時に気づいてね、みたいな感じで。イメージローダの件が例として挙げられていますが、イメージの幅や高さはEvent.INITイベントが発生するまで取得出来ないので注意が必要です。オブジェクトは、生データのロードが完了したときにオブジェクトによって送出されます。種類のデータイベントがあります。DataEvent.DATA:送受信されたデータのために送出されます。DataEvent.UPLOAD_COMPLETE_DATA:データが送信され、サーバーが応答したときに送出されます。flash.events.DataEventのasdocとのこと。このデザパタ本の中では下記のように使っています。これでhandler側から「渡したいデータ」にアクセス出来ます。私は普段、dispatchEventを送出する側にプロパティを持たせて、handler側からはevent.target.propertyNameを参照するようなやり方が多いです。やってデータ渡せるのは便利ですね。どっかで使ってみたいと思います。2に存在したObjectクラスの_resolveメソッドは未定義オブジェクトの呼び出しを捕捉することが出来ました。この機能はAS3から、flash.utils.Proxyに組み込まれました。flash.utils.Proxyクラスを継承することで未定義オブジェクトの呼び出しを捕捉します。未定義プロパティの捕捉には、getPropertyメソッドをオーバーライドします。未定義メソッドの捕捉には、callPropertyメソッドをオーバーライドします。AS3では多重継承が出来ないため、Proxyクラスを継承したクラスで他のクラスも継承したい場合には、コンポジションによって機能を追加します。先の「コンポジション経由でEventDispatcherを追加」はこれです。アダプタパターンは、対象のAPIを変換すること。ファサードパターンは、呼び出しを単純化することです。コレクションとイテレータの役割分担が大事。いままでちゃんと分けていなかったので反省です。インターフェースの実装を書く際に、毎回冗長なコードを書く可能性がある場合は、基本クラスを実装する。差分を継承先のクラスで書いていくようにしましょう。インターフェースを使い始めのころは、まじめに1つ1つのメソッドを実装していて気づくのですが、共通部分があったりするんですよね。抽象クラスで実装してそっから継承しようという話です。ところで、126の以下の文章の意味が分かりません。リーフエレメントはコンポジットエレメントになることができますが、コンポジットエレメントはリーフエレメントになることはできません。リーフエレメントはコンポジットエレメントの中に配置できます。逆にコンポジットエレメントはリーフエレメントの中に配置出来ません。逆の意味になってしまっていますので注意。デコレートパターンは、「マトリョーシカ」に例えることが可能とはいえ、マトリョーシカって?マトリョーシカ人形http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%88%E3%83%AA%E3%83%A7%E3%83%BC%E3%82%B7%E3%82%ABDecoratorパターンhttp://ja.wikipedia.org/wiki/Decorator_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3本チャプターで登場する「デコレート」は原書では「Decorated」と書かれています。デコレータがデコレーションする対象を指します。デコレータがデコーレトをなんやかんやという記述が繰り返されていると何が何やら分からなくなりそうです。上記のwikipediaにある図のComponentが本書の「デコレートオブジェクト」に当たります。パターンhttp://ja.wikipedia.org/wiki/Command_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3CommandStackのputCommandでなぜspliceするのか疑問でしたが、nextメソッドとprevメソッドを見たら分かりました。prevとnextで_indexが変わるので、prevしている最中にputCommandした場合には、それ以降に存在していた履歴を全部消す必要がありますね。図にすると、こんな感じ。本章後半にプロキシミティゲームの構築という節があるのですが、何故か理解できなくて何だろうと思っていたら、肝心なGameboardDataクラスの説明がすっぽり抜け落ちているではありませんか。各所に突然、GameboardDataクラスが登場していますが、定義が載っていません。3.0を読んでおけば良い感じです。特筆することはありませんでした。252の以下の表現がちょっと気になりました。stopPropagation()はcurrentTargetのリスナへのイベント通知は終了させますが、それ以上のディスプレイリスト探索を中止します。listeners.を直訳した感じなのですが、イベント通知は終了の意味がちょっと分かりづらいですね。stopPropagation()はcurrentTargetに登録されたリスナへのイベント通知は送出します。Listのイベント送出を中止します。いう意味だと思います。NetConnectionを使う。call時の第二引数でRespoderインスタンスを指定することで、サービス側でreturnする値を受け取ることが可能。3.0を読んでおけば良い感じです。特筆することはありませんでした。APIなんかもあります。コンストラクタでバックスラッシュ()を扱う場合、エスケープが必要となります。デザインパターンの知識が多少なりともあるほうが読みやすいと思います。デザインパターンの書籍として以下のような書籍を読んでから望むと良いかもしれません。Firstデザインパターン―頭とからだで覚えるデザインパターンの基本http://www.amazon.co.jp/dp/4873112494PHPによるデザインパターン入門http://www.amazon.co.jp/dp/4798015164その他、AS3の知識ももちろん必要です。AS3の書籍は以下のものがおすすめです。おれおれ正誤表を書いておきます。公式のものではないので参考程度にとどめて下さい。|075|ActionScript3.0のひとつの特徴は、メソッドのすべての引数は、デフォルト設定が不要であるというものがあります。|ActionScript3.0では、メソッドの引数にデフォルト値がない場合、その引数は必須となります。|126|リーフエレメントはコンポジットエレメントになることができますが、コンポジットエレメントはリーフエレメントになることはできません。|リーフエレメントはコンポジットエレメントの中に配置できます。逆にコンポジットエレメントはリーフエレメントの中に配置出来ません。AbstractReaderDecorator(本書ではこうあるべきですが、DL出来るサンプルファイルはすべてReaderDecoratorになってます。|252|stopPropagation()はcurrentTargetのリスナへのイベント通知は終了させますが、それ以上のディスプレイリスト探索を中止します。|stopPropagation()はcurrentTargetに登録されたリスナへのイベント通知は送出します。Listのイベント送出を中止します。ReactorのイベントReactorの基本的なイベントを紹介します。10注目記事-->引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。