スポンサーサイト

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

オブジェクト指向入門 第11回 オブジェクトを生成する時は、クラスを一つ指定する

今回はラモスの例の続きです。

前回、オブジェクトの特徴として、それがどの集合(クラス)に属するかは生成した時に決まり、以降は変えられない事について書きました。

オブジェクト指向言語のオブジェクトには、もっと基本的な特徴があります。
それは、

  ・生成する時、どのクラスに属するかを指定しなければならない。
  ・指定できるクラスは、一つだけである。

というものです。
当たり前過ぎる事ですが、このルールに反するクラス設計はさけなければなりません。


もう一度、ラモスの例を見てみましょう。

ramos.jpg

ご存知の通り、ラモスはブラジルから日本に帰化してますし、以前はサッカー選手でしたが最近は監督をしています。

オブジェクトを生成する時に一つのクラスしか指定できない事を考えますと、多彩な人生を過ごしているラモスを生成するのに適したクラスは、上図には無いと言えます。


前回の問題も今回の問題も、同じ方法で解決できます。

再度、クラス図を確認してください。

派生クラスが三つありますが、一つだけ仲間外れがあります。
サッカー選手クラスです。

他の派生クラスは国籍で特化していますが、このクラスだけは職業で特化しています。

このように継承する理由が派生クラスごとに違いますと、今回のように生成時にクラスを一つ指定できず困ってしまいます。

なぜなら、理由ごとに一つずつクラスを指定したくなるからです。
このようなケースの多は、ブラジル人オブジェクトが欲しいわけでも、サッカー選手オブジェクトが欲しいわけでもなく、ブラジル人サッカー選手オブジェクトが欲しいのです。

C++では、多重継承を使ってブラジル人サッカー選手クラスと一つにできましたが、様々な理由で敬遠され、JavaやC#では作れなくなりました。

そこで継承する理由は必ず一つにします。


まず、クラス図に理由を書き足して見ます。

ramos2.jpg

継承が二つの固まり(セット)に別れました。
このセットをGeneralizationSetと言います。

そして、個々のセットに付けた名前(国籍と職業)はクラスの一種で、パワー型と言います。


次に、パワー型のインスタンスを考えます。つまり、実例をあげます。
国籍ならブラジル国籍や日本国籍などが実例と言えます。

不思議な事に、パワー型のインスタンスもクラスであり、パワー型をクラスにすると自然にインスタンスを自身の派生クラスとできます。

ramos3.jpg

最後に、今までの派生クラスの代わりに、これらを属性にします。

ramos4.jpg

これで、解決しました。
Personクラスに属するオブジェクトは、属性のオブジェクトを変える事で、国籍も職業も自由に変えられます。
多重度を増やせば、多重国籍を取得したり、二足のわらじを履かせたりもできます。


■まとめ
  ・生成する時、どのクラスに属するかを指定しなければならない。
  ・指定できるクラスは、一つだけである。


この話は、もう少しだけ続きます。
スポンサーサイト

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

コメントの投稿

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

プロフィール

Author:きっぽ

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

この人とブロともになる

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