作成日 2007/5/19
最終更新日 2009/2/1
[ Japanese | English ]

エンティティクラス、バウンダリクラス、コントロールクラス、その他のクラス

 えーと、オブジェクト指向ではエンティティクラスが一番の基本であるのですが、当然それ以外の種類のクラスもあります。
 ここではBCEパターン(※1)におけるエンティティクラスとはどのようなクラスなのか簡単に説明し、BCEパターンにはそれ以外にどのようなクラスがあって、どのような特徴を持っているのかについて説明します。
 それと、さらにBCEパターン以外で出てくるクラス(※2)についても簡単に説明します。

-----
※1:BCEパターンを知らない人はGoogleで「BCEモデル」、「BCEパターン」、「ロバストネス分析」などの単語で調べてください。
ちなみに”BCE”の”B”はバウンダリ(Boundary)、”C”はコントロール(Control)、”E”はエンティティ(Entity)のことです。
それと、BCEパターンの”C”はMVCパターンの”C”とは別物なので注意してください。
※2:”BCEパターン以外で出てくるクラス”というときりがないです。
というのは、BCEパターン以外のパターンなんてたくさんあるし、そもそもクラスの種類なんてものは設計者が勝手に定義できる(※3)ので。
ですので、だるまが知っているものだけ説明します。
※3:UMLを勉強したことがある人なら「ステレオタイプ」というものを聞いたことがあると思います。

1.エンティティクラスとは
2.バウンダリクラスとは
3.コントロールクラスとは
4.BCEパターン以外で出てくるクラス
5.エンティティ、コントロール、バウンダリなどと分離するメリット
6.関連や依存の方向性について
7.参考文献など


1.エンティティクラスとは

 エンティティクラス(Entity Class)というのは、簡単に言うとデータを保持するクラスです。
 ER図のEもエンティティのEなので、ER図を知っている人はすぐにわかると思います。(わからない人は「クラス図とER図とクラスの抽出」を見てください。)
 
 あと、エンティティクラスの特徴としては、
  1. データベースに永続化(※1)されることが多い。
  2. 抽出方法がER図におけるEntityに似ている(※2)。
  3. DOA(データ中心アプローチ)との関連が深いかも(※2)。
  4. クラスの凝集度が高く、変更がかかりにくい(※3)。
  5. クラス図でステレオタイプ<<entity>>をつけることがある。
  6. クラス図で下記のアイコンで表記することがある。
くらいかなぁ。

-----
※1:永続化とはデータをデータベースやファイル(例えば、テキストファイル、エクセルブックやXML 、バイナリファイルなど)などに保存して、プログラムが終了してもデータが消えないようにすることです。
※2:詳しくは「クラス図とER図とクラスの抽出 - だるまのエクセルVBA」、「クラスの正規化 - だるまのエクセルVBA」を見てください。
※3:クラスの凝集度は高い方が良いです。詳しくは「オブジェクト指向とモジュールの凝集度、モジュールの結合度 - だるまのエクセルVBA 」を見てください。
このページのトップへ

2.バウンダリクラスとは

 バウンダリクラス(Boundary Class)自分が作ろうとしているシステムと外部システムやユーザ(ユースケース図においてアクターとして抽出するもの)とのやり取りをするクラスです。
 Boundaryを日本語に直すと「境界」です。つまり自分が作ろうとしているシステムの境界部分のクラスです。

 バウンダリクラスの例としては、画面クラスかなぁ。他にも他のシステムとの連携用にファイルを出力したり、ユーザがあとで確認する書類を出力したりするようなクラスです。あ、ファイルを出力するからといっても、必ず、バウンダリクラスになるわけではないです。ファイルを出力しても外部システムやユーザが読むわけでなく、単に自分が作ったプログラムしか読み書きしないファイルを出力するのであれば、それはバウンダリクラスにはなりません。
 それと、画面でもなければ、ファイルを出力しないからといってバウンダリクラスではないということにもなりません。DLLを作った場合は、外部に公開しているクラスは当然バウンダリクラスになりますし、分散システムで外部システムとのやり取りにCORBA を使うならIDLで定義したインターフェースがバウンダリクラスとなります。

 バウンダリクラスの特徴としては
  1. エンティティクラスやコントロールクラスと比べると変化しやすいらしい。
  2. バウンダリクラスの属性や、画面レイアウトを決めるのはウォーターフォールモデルでいうところの外部設計か?
  3. クラス図でステレオタイプ<<boundary>>をつけることがある。
  4. クラス図で下記のアイコンで表記することがある。
くらいかなぁ。
このページのトップへ

3.コントロールクラスとは

 コントロールクラスは…、なんだろう。 あまり理解できてない…。すまん。

 ただ、エクセルにおいては、最後に"s"がついているクラスがこれに相当するみたいだ。(例えば、AddInsクラス)
 ↑間違っている気がする。良く分からない。(このページを見ている人へ:すいません。)

 詳しいことは、参考文献の1を見て。

 コントロールクラスの特徴としては
  1. 属性があまりないらしい。
  2. クラス図でステレオタイプ<<control>>をつけることがある。
  3. ユースケース図でのユースケースを実現するためのクラス。 
  4. だるまがあまり理解していない。
  5. クラス図で下記のアイコンで表記することがある。
くらいかなぁ。
このページのトップへ

4.BCEパターン以外で出てくるクラス

 BCEパターン以外で出てくるクラスについて説明します。
 ここでは、クラスの機能で分類したときに出てくるクラスについて説明します。
 抽象クラス、具象クラス(※1)、インターフェースクラスなど、機能ではなく、えーと、定義方法で分類したクラスについては説明しません。

  1. ユーティリティクラス
     java.lang.Mathクラス のような、なんというか、関数を提供するクラスで、インスタンスを生成できないようになっている。
     クラス図においてステレオタイプ<<utility>>(※2)をつけることがある。
     エクセルVBAでは標準モジュールを使用して定義する。
  2. DAO(Data Access Object)クラス
     なんだろう…、簡単に言うとデータベースにアクセスするクラスでいいと思う。
     多分、オブジェクト指向とRDB(リーレーショナルデータベース)の間のインピーダンスミスマッチ(※3)を解決する部分。
  3. その他
     まあ、他にも適用するデザインパターンやシステムの対象(例えば、組み込みなど)によってもいろいろなクラスがある。
-----
※1:抽象クラスの反対。インスタンスを生成できるクラスのこと
※2:もしかしたら、ステレオタイプではなくキーワードかもしれない。
※3:O/Rインピーダンスミスマッチがわからない人は参考文献 の2番を見てください。
このページのトップへ

5.エンティティ、コントロール、バウンダリなどと分離するメリット

 エンティティ、コントロール、バウンダリなどと、分離するメリットについて説明します。
 分離しない方がソースの行数が少なくすむので、プログラミング工程のみを考えた場合は分離しない方が良かったりします。しかし、その後のテストや機能拡張による修正までを考えた場合は分離した方が良いです。

 分離するメリットには以下のものがあります。
  1. 1つのクラスが小さくなるので、見やすくなります。クラスの凝集度も変わってくると思います。
     ちなみに、クラスは凝集度が高く、結合度が小さい方が良いです。
  2. 再利用がしやすくなる。
     バウンダリとコントロールがごっちゃになった場合、例えば、今まで画面から行っていた処理をバッチで実施しようとしたとき再利用できないです。
  3. 仕様変更による変更の影響を抑えることが出来ます。
     バウンダリ、コントロール、エンティティでは変更を受ける頻度が異なります。エンティティが最も変更を受ける可能性が低く、バウンダリが最も高いです。
     変更の可能性が高いところと低いところを分けることにより、変更がかかったときの影響を少なくすることが出来ます。
  4. 分離していた方がテストがしやすいです。
     テストは1度やったらおしまいではないです。回帰テストといい、後で、何度も行う場合があります。 
     また、テストの自動化がしやすい箇所としにくい箇所は分けておいたほうが良いです。
このページのトップへ

6.関連や依存の方向性について

 関連や依存の方向性について説明します。
 要するに2つのクラスがあったとき、片方のクラスからもう片方のクラスを使用したり、もう片方のクラスのオブジェクトを保持(例えば集約)して良いかどうかという話です。

 当たり前の話になりますが、関連や依存の方向性は、
    変更のかかりやすいクラス → 変更のかかりにくいクラス
としてください(変更のかかりやすいクラスが変更のかかりにくいクラスを使用するようにしてください)。
 エンティティ、コントロール、バウンダリで変更のかかりやすさは、
  1. バウンダリ
  2. コントロール
  3. エンティティ
の順となっています。ですので、エンティティからコントロールを使用したり保持したりしないようにしてください。
 もし、どうしても・・・と言う場合(逆の方向性を持たせたい場合)、例えば、エンティティのデータが変わったときにコントロールに通知したい場合は、イベントを発信する(※1)ようにした方がよいです。

-----
※1:イベントの発信はVBA(Ver.6.0以上)ではEventステートメントを使用して実現できます。VBA(Ver.5.0)の場合はイベントは作成できません。これは困る・・・。
Javaの場合はオブザーバパターンを使用して実現することとなります。

このページのトップへ

7.参考文献など

 このページを作成するのに参考にしたページです。
 ただし、だるまは、このページを作成するにあたり、これらのページを100%理解してから作成したわけではない(おいおい。)です。
 間違い(リンク先のページではなく、このページに)があったら、ごめんなさい。

番号

リンク先の名称

リンク先の説明

リンクした日

1 実践ロバストネス分析 第 1 回 ロバストネス分析の基礎  ロバストネス分析の基礎についてか書かれています。
 バウンダリクラス、コントロールクラス、エンティティクラスの説明も書かれています。
2007/5/20
2 [ThinkIT] 第1回:O/Rマッピングとは? (1/3) O/Rマッピングについて書かれています。 2007/5/20
3 JUnitスーパーTips 第4回 - ITアーキテクト [IT Architect] GUIとロジックを分離することのメリットを説明しています。
GUIはバウンダリクラス、ロジックは(恐らく)コントロールクラス(もしかしたら+エンティティクラス)に相当すると思います。
2008/6/10
4 オブジェクト指向とモジュールの凝集度、モジュールの結合度 - だるまのエクセルVBA  だるまのページです。モジュールの凝集度、結合度、その他品質について説明しています。 2008/6/14

番号

著者名

書籍名

ISBN

1 古川 正寿 独習オブジェクト指向開発 (Teach Yourself OOP) 978-4798107622
2 オージス総研オブジェクトの広場編集部 (著), 山内 亨和 その場でつかえるしっかり学べるUML2.0 978-4798012391
3 竹政 昭利 , 橋本 大輔 , 桐越 信一 , 国正 聡 , 照井 康真 UMLモデリング教科書 UMLモデリングL2 (UMLモデリング教科書) 978-4798109831


Prev Up Next  Top
このページのトップへ

このページの利用によって発生した、いかなる損害について、このホームページの作成者は責任を負いません。
このページの間違いや嘘を見つけた方、このページに書いて欲しい情報がある方はメールをお願いします。

Microsoft 、Windows 、Visual Basic および Excel は米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
ここではExcel® をエクセル、Visual Basic® for Applications をVBAと表記する場合があります。
Mac 、Mac OS 、Mac OS X は米国Apple Computer,Inc.の登録商標または商標です。
Sun、Sun Microsystems、サンのロゴマーク、Java、及び、Sun/Solaris/Java に関連するすべての商標およびロゴマークは米国 Sun Microsystems, Inc. の米国およびその他の国における商標または登録商標です。
OMG、UML、Unified Modeling Languageは、Object Management Groupの商標または登録商標です。
CORBAは、Object Management Groupが提唱する分散処理環境アーキテクチャの名称です。
その他、社名および商品名、システム名称などは、一般に各社の商標または登録商標です。

このホームページの作成者はこれらの会社とはいっさい関係がありません。