スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

オブジェクト指向入門 第9回 集約/委譲/カプセル化

今回は、集約/委譲/カプセル化についてサクサクと書いてみたいと思います。


まず、集約(Composition)です。
作曲家をComposerと言いますが、構成/合成して1つにする事をCompositionと言います。
UML2.0では「合成」と訳される事が多いです。

例えば、自動車がエンジンやタイヤで構成されていますが、このような時に「自動車はエンジンやタイヤを集約している」と表現します。
扇風機にモーターが内蔵されている構造を、クラス図にしますと次のようになります。

Fan.jpg

このモーターなど、構成要素の事を属性(Property)や部品(Part)と言います。
Partより複数形のPartsの方が、外来語として定着している言い方と思います。

他にも、ユーザー情報がID/パスワード/個人情報で構成されているなど、集約はプログラムのデータ構造を表現する際に非常に多用されます。
その個人情報も名前/住所/電話番号・・・で構成されるなど、階層的に使用する事もよくあります。

データベースと相性が抜群に良い概念でもあります。


次に、委譲(delegation)です。

文字通り、あるオブジェクトの操作の一部を、他のオブジェクトに委譲/委任する事です。

委譲は重複コードを減らす際に役立ちます。
以前のケータイの例を考えて見ましょう。

MobilePhone.jpg

この図では、カメラとケータイがカメラI/Fを実装しています。
しかし、カメラとケータイの両方に写真を撮る機能を書くと、コードが重複してしまいます。

そこでカメラをケータイの部品として、処理を委譲する事で重複を回避します。

    class MobilePhone : Phone, ICamera
    {
        private ICamera camera = new Camera();  // 集約する

        void ICamera.TakePicture()
        {
            camera.TakePicture();   // 処理を委譲する
        }
    }

このように、委譲は集約関係にあるクラス間でよく使用されます。


最後に、カプセル化(Data Encapsulation)です。
Encapsulationは要約という意味の単語で、何かの最も重要な部分を数単語で表現する事です。

オブジェクト指向では、あるクラスが自身の属性や部品へ不正なアクセスをされない様に防ぐ事をいいます。
先ほどのケータイの例では、カメラをprivateで定義する事で、外部から勝手にカメラを制御されない様にしています。

このように、公開するものを最小限に要約する事をカプセル化と言います。


今回の3つはセットで使用される事が多いです。
操作の一部を集約した部品に委譲して、その部品は非公開にし、操作だけを公開する事で要約するといった感じです。


■まとめ
  ・集約・・・データ構造を表現する。
  ・委譲・・・処理の一部を移譲する。
  ・カプセル化・・・インターフェイスを要約する。


さて、今までいろいろな事を書いてきました。
  ・クラス
  ・オブジェクト
  ・インスタンス
  ・継承
  ・実装
  ・ポリモーフィズム
  ・集約
  ・委譲
  ・カプセル化

これらを活用すると、プログラムの要件や仕様を適切に表現できるようになります。
しかし、中には一工夫しないと表現が難しいものもあります。

次回は、そういったオブジェクト指向が苦手にしている事について書いてみる予定です。
スポンサーサイト

テーマ : ソフトウェア開発
ジャンル : コンピュータ

コメントの投稿

管理者にだけ表示を許可する

プロフィール

Author:きっぽ

カテゴリ
最新記事
最新コメント
最新トラックバック
月別アーカイブ
FC2カウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。