★このページはまだ書きかけです。 
!!!様々なクラスで再利用可能なのが小物クラス
粒度が非常に小さいクラスのことを小物(こもの)クラスと私は呼んでいます。次のようなものです。
*数量
*金額
*日付
*氏名
*宛先
*クレジットカード番号
*電話番号
などなど。\\
これらは、他のクラスの属性として使われることを前提としています。そのため、極めて汎用的に設計しておく必要があります。その代わり、一度作ってしまえばシステムや時代ををまたがって再利用することが可能です。\\

!!数値系クラス
業務システムで一番使うのが数値系のクラス群です。まずは以下のクラス図を見てください。\\
[numeric.png]\\
たかだか数量や金額にこんなにたくさんのクラスが出てくるのか、と驚く人もいるでしょう。図に出てくるクラスとインタフェースを列記します。\\
#数値
#数量
#金額
#通貨%%sup ※/%
#円貨金額
#消費税率一覧
#消費税率
#外貨金額
#レート一覧
#レート
#MoneyExchanger (両替)
 ※通貨は数値系クラスではありません。\\
順に見ていきましょう。

!【数値】
数値系全てのクラスの最上位に位置するクラスです。数値を取るクラスを汎化して抽出されたクラスです。\\
内部では、各言語が持っている十進数クラスを利用することになります(Javaではjava.math.BigDecimal)。その上で、
*業務上必要な演算処理(例えば四則演算)
*カンマ区切りの文字列を編集して返す
等の処理を実装します。こうすることで、__文字列編集用の関数を別途用意する必要がなくなり__、さらに、画面・帳票・バッチとありとあらゆるプログラムで共通利用することが可能となります。\\

!【数量】
数量クラスは、
#数値
#単位
の2つの属性から出来ています。例えば、
*3個
*10kg
*43坪
などの情報を持つことになります。\\
システムの性格にもよりますが、__デフォルトの単位を「個」__にしておくと便利でしょう。\\
そして、
*単位付きの文字列を返す
という処理を持たせます。上記で書いた例のような文字列そのものが返ってくるのでとても便利です。\\
場合によっては、「単位」もクラスとして定義しておく必要があります。\\

!【金額】
__様々な通貨の金額を汎化した__クラスです。このクラスは通貨を持ちます。アプリケーションはこのクラスのオブジェクト(インスタンス)を直接扱うのではなく、円貨金額と外貨金額のオブジェクトを使います。\\
上記クラス図は日本の業務システムで利用する前提で記述してあります。FX取引などのサイト開発では外貨→円貨のみの金額変換ではなく全ての通貨の相互変換が必要になるため、円貨と外貨を区別しないモデルが必要なことに注意してください。\\

!【通貨】
通貨は、金額が__どこの国(または地域)の通貨であるか__を示すために必要です。このクラスはレート一覧を持ち、指定された日付(あるいは年月)のレートを返す処理を持ちます。\\
通貨は数値系のクラスではありません。\\

!【円貨金額】
日本の通貨である__円の金額__を持ちます。そして日本特有の処理である「消費税額を返す」処理を持たせます。こうすることで、消費税計算の関数を別途作る必要がなくなります。消費税率を特定するために消費税一覧クラスを持ちます。\\

!【消費税一覧】
複数の消費税を持つ「一山クラス」です。消費税は日付によって税率が異なるため複数あり得るからです。\\


!!金額クラス
商品単価クラスが持っている金額クラスを考えてみます。日本の通貨である円を前提にするならばクラスにするまでもなく、intなどの整数属性として持てばいいように思えます。\\
しかし金額クラスとして定義しておけば次のような振る舞いを持たせることが可能になります。\\
*消費税金額を返す
*カンマと通貨記号で編集した文字列を返す
日本において消費税計算は特に重要で、計算の基となる情報として「消費税区分(内税/外税/税額)」が必要になります。「税額」という区分値は、その金額が消費税自体を表す時に使います。また消費税率も必要ですが、これは全オブジェクトで共通なのでクラス変数として定義します。\\
これらを反映したのが次のクラス図です。\\
[amount_class.png]\\


!!日付クラス
日付クラスは何かが実行された年月日を持っているクラスです。\\
日付クラスはとても汎用的に設計する必要があります。例えば、区切り文字で日付を編集した文字列を返すメソッドを実装するにしても、スラッシュ(/)で区切るメソッドやハイフン(-)で区切るメソッドなどいくつか必要になります。また、
*翌日の日付を返す
*翌月の日付を返す
*翌年の日付を返す
なども持っていると使う側が便利です。\\
特に会計システムなどでサイト計算が必要な場合は、
*xx日後の日付を返す
というメソッドも持ちます。\\
日本でのみ使われる前提のシステムの場合はロケールを意識しなくて済みますが、グローバルシステムの場合はシステムが稼働しているロケールも意識して日付編集を行う必要が出て来ます。\\
上記クラス図で解るように日付クラスは色々なクラスから利用されるため、色々な可能性を考えて設計する必要があります。\\