2007-07-01から1ヶ月間の記事一覧

Explicit Initialization

変数の初期値が何であるかを把握しやすくするため、すべての変数の初期化を一箇所で行いましょう。 インスタンス変数の初期化に関するパターンです。 インスタンス変数を持つクラスを実装する際には、initializeメソッドを実装して、そこで全てのインスタン…

vrubyを使ってコモンダイアログと遊ぶ

VisualuRuby(仮称)使い方のコモンダイアログのところが未作成なようなので、備忘録がてらメモ。 Windows向けのUIを手軽に作れるのがナイスなvrubyを使ってコモンダイアログを表示するサンプル。 require 'vr/vruby' #ファイル選択ダイアログを表示 file = SW…

Common State

オブジェクトの状態に関するパターンです。 あるクラスのすべてのインスタンスがそれぞれ異なる値を持つ場合は、インスタンス変数を定義しましょう。 class Point def initialize(x, y) @x = x @y = y end end a = Point.new(60, 120) b = Point.new(100, 30)

Constructor Method

インスタンスを生成するために何が必要かを明らかにするため、必要なパラメータをとり適切なインスタンス生成を行うメソッドを用意しましょう。 オブジェクトの生成に関するパターンです。 オブジェクトの生成を表現するもっとも単純でもっとも柔軟な方法は…

Conversion

あるオブジェクトの情報の形式に対して別の形式での表現が求められる場合は、その表現が可能な別のオブジェクトに変換しましょう。 具体的には、Converter MethodやConverter Constructor Methodの適応を考えます。

Converter Constructor Method

オブジェクトの変換に関するパターンです。*1 あるオブジェクトの持つ情報を元にして別のオブジェクトを新しく生成したい場合は、変換先のオブジェクトに変換元のオブジェクトを引数として持つコンストラクタを作りましょう。 class Pathname def initialize…

Converter Method

オブジェクトの変換に関するパターンです。*1 あるオブジェクトの持つ情報を別のオブジェクトの形式で表現しなおしたい場合は、変換元のオブジェクトに新しいオブジェクトに変換するためのメソッドを作りましょう。 p 10.to_f # => 10.0 p 10.to_s # => "10"…

Composed Method

メソッドは、一つのことのみを行う単位に分割しましょう。また分割する際は抽象度のレベルを統一しましょう。 メソッドの粒度に関するパターンです。 メソッドを適切な単位で分割することは、コードの可読性を維持する上で非常に大切なことです。適切な単位…

Intention Revealing Selector

メソッドには、そのメソッドが何を実現しているかにちなんだ名前をしましょう。 メソッドの命名に関するパターンです。 メソッドの命名でついやってしまいがちなのが、そのメソッドが仕事をどのようにして実現しているかまでをメソッド名に含めてしまうとい…

Smalltalkベストプラクティス・パターン

ソフトウェアでパターンというと、多くの方はオブジェクト指向における再利用のためのデザインパターンで紹介され広く世に広まったデザインパターンをイメージされると思います。しかし、同じくソフトウェアのパターンについて紹介しているソフトウェアアー…

任意の期間について日ごとに処理する

開始日から終了日のような任意の期間について日ごとに処理しなければいけない場合は、イテレータで。 require 'date' from = Date.new(2007,7,15) to = Date.new(2007,8,30) (from..to).each do |date| # ここに日ごとの処理を記述 end

CppUnitテスト自動化スクリプトをERBで

eXtreme Programmingテスト技法―xUnitではじめる実践XPプログラミング (OOP foundations)で紹介されている、CppUnit-xのテストケースが書かれたヘッダファイルからTestRunnerを自動生成してくれるスクリプトを、ERBを使って実現してみました。 require 'erb'…