オブジェクト指向

1 つのメソッドは 1 つのことに専念する

メソッドはできるだけ単純にしよう。読んで解読する人のことを考えよう。ここでは例として、指定の文字列中の指定の単語を "<B>" と "</B>" で囲んで強調表示に設定する場合を考える。この動作を分解すると、 指定の文字列から単語を抽出する。 抽出した単語が指定…

Interpreterパターン

Interpreterパターンは、文法を解釈しその内容を実行するインタプリタの作成に使う。ここでは、以下の仕様の 1 桁の数字を計算するインタプリタを作ってみる。 使用できる演算子は '*' と '+'。 '*' は '+' より先に計算する。 '(' と ')' で囲んだ部分は先…

Stateパターン

Stateパターンは、オブジェクトの状態によって動作を変えるときに使う。例として文字列の引用符 (") の対応をチェックしてみる。ここで、オブジェクトの状態は、 引用符の外 引用符の中 の二つ。それぞれの状態での動作は、

Visitorパターン

デザインパターンの中のVisitorパターンは、 データ構造をたどって、その要素について処理をし、かつ、 その処理が複数ある。 という場合に使う。ここでは、データ構造として以下のようなComponentクラス, Compositeクラス, およびLeafクラスを使った木構造…

ドメイン駆動設計のユビキタス言語とモデル駆動設計

エリック・エヴァンスのドメイン駆動設計 の中心となる二つの概念のまとめ。 ユビキタス言語 プロジェクト関係者がモデルの記述に使用する共通言語。 この言語をコミュニケーションからコードまで利用する。 モデル駆動設計 解決する問題の理解とソフトウェ…

Enum ではなく Class を使う

Enum を使うと switch ... case ... することになる。たとえば、プログラム言語を Enum で定義して、その名前を表示する例。 using System; namespace UseClassInsteadOfEnum { public enum ProgrammingLanguageEnum { CSharp, Java, } public class ByEnum …

プログラムをオブジェクト指向にするには

プログラムをオブジェクト指向にするには、 そのプログラムがなにをするか、に加えて、 それをどこにやらせるか、 が重要になる。気を付けるのは、他のクラスのプロパティを使って、いろいろ計算しているところ。次の例では、適用期間 (ApplicableTerm) クラ…

知識レベル-操作レベルを使うとき(1)

アナリシスパターンの知識レベル-操作レベルを使うときとして、 プログラムの再コンパイルなしで、 なにかの種類を増減したい。 場合がある。たとえば、測定の種類として身長や体重などがあるとする。これらがプログラムのコンパイル時点で決定できるならば…

シリアライズ LOB パターン

データベースに関連が複雑なオブジェクトを保存するときに使用するパターン。参照: P of EAA: Serialized LOBたとえば、あるオブジェクトが個数が可変のオブジェクトを保持する場合、普通にデータベースのテーブルに保存しようとすると、 データベースに、そ…