2012-01-01から1年間の記事一覧
前回に引き続きenchant.jsで遊ぶ。 今回はもう少しゲームっぽいものってことで簡単なブロック崩しを組んでみた。main.jsは以下の通り。 /** * enchant.js を使う前に必要な処理。 */ enchant(); GAME_WIDTH = 320; GAME_HEIGHT = 320; GAME_FPS = 15; BALL_P…
ゲームをサクッと作る場合にどういう選択がいいのか最近考えてた。個人的にはiOSとかAndroidとかスマフォとかでも動くように作れると幸せ。調べてみると、enchant.jsを使ってHTML5+javascriptなゲームを気軽に作れるみたいなので試してみた。 javascriptは書…
公式サイトは以下の通り。 http://www.makotemplates.org/ インストール とりあえず手元の環境にインストールしてみる。 rubyのgemとかにあたるpythonのpipでインストールできるらしいので、とりあえずpipを導入することからはじめる。まずはeasy_installを…
pythonで簡易コンソールを作る機会があったのでメモしておく。コンソールを作る場合、以下のように標準入力でループさせて処理させる方法がある。 参考:http://python.g.hatena.ne.jp/mhrs/20060522/p2 #!/usr/bin/env python # -*- coding:utf-8 -*- # # e…
boost/format.hppは指定したフォーマットに従って文字列を生成するときに使える。 sprintfに近い印象だけど、char*とか出てこないから安全? http://boost.cppll.jp/HEAD/libs/format/doc/format.htmlなお、実行時に変な変換をすると例外を投げるので、死ん…
boost/foreach.hppはイテレータを用いたコンテナの順次参照をより直感的に記述できるようにするもの。 http://www.kmonos.net/alang/boost/classes/foreach.htmlJavaとかである for(Hoge hoge : HogeList) {} のような記法を可能にする。C++0xだとfor文の記…
emacsでC++のコードを書いてるとき、 行頭にエンコーディングの指定を書く headerでインクルードガードを書く という定形作業が毎回発生してうっとおしいのでどうにかしたい。下記のサイトを参考にemacsにテンプレを導入してみる。(ほぼそのままですが) http…
Interpreterパターン 構文解析を行うパターン。各文規則に対してクラスを割り当て、逐次でパースすることで実行に持っていく。 ポイントは 文規則のクラスを再帰的に呼び出すことで、構文木を生成する 独自表現が使えるため、プログラムの柔軟性が高まる と…
Commandパターン 種々のコマンドをクラスとして表現するパターン。ポイントは、 各コマンドに対してクラスを割り当てることでコマンドの追加・管理が容易になる 共通の実行形式にすることで、タスクリストによる逐次処理とかが実装しやすい とかかなぁ。うー…
Proxyパターン 必要になってから作るパターン。実際の処理との間に一段クラスをかませることで、必要になるまで実処理の実行を抑止させる。 ポイントは ワンクッション挟むことで途中までの処理を肩代わりさせる 使う側からはProxyも実処理も透過的に見せる …
Flyweightパターン 共有で用いるインスタンスをプールし、使いまわすパターン。ポイントは 無駄なnewが減る メモリが節約できる GCがない言語とかだとnewそのものが減るのは安全性の観点でも効果がありそう。個人的にはSingletonとあんま違わないように見え…
Stateパターン 各状態に対して固有のクラスとして表現するパターン。特徴は 状態変化を単純なインスタンスの差し替えで表現できる 新しい状態の追加が用意 といったところ。クラス図だけ見るとStrategyパターンと同じだけど、違いは何だろ。 Strategyパター…
Mementoパターン 状態の履歴を保存するパターン。対象のインスタンスの情報を保持するMementoクラスを作成する。 ポイントは 保存・復元を行うクラスのインスタンス状態を保持するクラスを用意することで、内部状態操作を閉じた範囲で行える こと。インスタ…
Observerパターン 状態変化を他のオブジェクトに通知するパターン。 ポイントは 通知によって複数オブジェクト間で同期を取れる ことかな。前回のMediatorパターンと似てるけど、こっちは通知することが主目的。実装。いい例が思い浮かばなかったので今回は…
Mediatorパターン 相談役は一人、なパターン。クラス間のやり取りをMediatorとなるクラスを介して行うことで、処理のパスを一箇所に集約する。 ポイントは クラス間の通信パスをスター型でまとめることでプログラムの見通しが良くなる Mediatorに相談するCol…
facadeパターン 複雑な処理の窓口となるクラスを用意し、複雑なAPIの操作を隠蔽するパターン。ポイントは、 相互に関係しあるAPIの処理フローをひとつのメソッドにまとめることにより、使う側から見てわかりやすいAPIにする といったところ?これだけだとあ…
Visitorパターン データ構造上を探索しながら処理をしていくパターン。データとなるElementクラスとそれに処理を行うVisitorクラスを用意し、相互にメソッドを呼び合うことでデータの網羅的な処理を行う。 ポイントは データ構造とそれに対する処理を分離す…
Chain of Responsibilityパターン 処理をチェインさせて順次実行していき、目的の処理を決めるパターン。ポイントは、 処理と要求を結びつきを弱めることができる 状況に応じた処理の切り替えがしやすくなる といったところですかね。実装します。Javaの勉強…
Decoratorパターン クラスをかぶせていって機能追加を行うパターン。共通の親元を持つ中身と飾りのクラスを用意し、共通メソッドを再帰的に呼び出していくことで機能拡張をする。 Decoratorパターンの特徴は、 共通の親クラスを持つサブクラスで包んでいくた…
Compositeパターン 共通メソッドによる再帰処理を行うパターン。 例えばファイルシステムの検索とかを実装する際に、FileクラスとDirectoryクラスを同一の親クラスを継承して作成することによって、クラスを同一視して扱うみたいな感じ。 Compositeパターン…
Strategyパターン 具体的な実装クラスを差し替えることで戦略、つまり動作の切り替えを行うパターン。 クラスの構成的にはBridgeとすごく似てて、 切り替える動作のメソッド定義をしたStrategyインターフェース 実際の動作を定義したConcreteStrategyクラス …
Bridgeパターン 機能と実装を分離させるパターン。機能追加はサブクラスを作成してメソッド追加するとかのことで、実装追加は具象クラスを追加するとかのこと。 この2つの拡張を別々に行えるようにするために、具象クラスの分を公開クラスに集約して扱う。と…
Abstract Factoryパターン 決められた部品や製品を作成する抽象的な工場のパターン。作成を担当するFactoryクラス、そのFactoryで生成されるProductクラス群から構成される。 実装では外部に公開するメソッドを定義した「抽象的な工場と製品」を用意し、外部…
Builderパターン 作成に必要なメソッドまとめたBuilderクラスを用いて決められたものをDirectorクラスのメソッドとして作成するパターン。 Template Methodパターンとよく似ているが、 Teplate Method スーパークラスで呼び出し元メソッドを定義 Builder Dir…
Prototypeパターン Protorypeパターンの特徴はclassをnewするのではなく予め作成したインスタンスをコピーするところ。 メリットとしては、 クラス名を明示的に指定しないため、プログラム間の依存性を小さくできる たくさんのクラスを扱うときに予めまとめ…
OMakefileの中身考察 Singletonのサンプルで使ってるOMakefileについてテキトーなメモ書いとく。(あくまで主観で裏付けあまりしてませんので注意) 中身はこんな感じ。 CXX = g++ CFILES[] = main MAIN = singleton_test CXXProgram($(MAIN), $(CFILES)) .PHO…
Singletonパターン 常に存在するインスタンスを一つに絞るためのパターン。個人的に思いつく特徴は。 存在するインスタンス数をせい制限することでメモリにやさしい インスタンス作成コストの削減 クラスの提供側でインスタンスを管理できる とかかな。なん…
Factory Methodパターン 作成のためのメソッドだけフレームワーク側で提供して、実際の作成をサブクラスに任せるというパターン。 Factory、つまり工場なわけですが、工場で製造工程だけは先に決めといて、実際になに作るかは後で決めるみたいなイメージかな…
Template Methodパターン 共通APIで動作の異なるクラスを作成するためのパターン。 ポイントは 呼び出し元となるテンプレートメソッドは親クラスに実装 テンプレートメソッドを構成するメソッドの具体的な定義は子クラスで実装 というところですかね。なには…
Adaptorパターン 異なる形式のAPI間をつなぐためのパターン。古いバージョンとの互換性の確保や、仕様の異なる外部プログラムの利用とかで使われる。 要するに仲介役となるクラスを対象のプログラムの間に挟む訳だが、方法は2つある。 繋ぐ口のインターフェ…