36
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

18C5B05C-7889-41E2-8CFB-09568B4E4B67.png

くるみクンは生まれたばかりの新人ちゃん AI (すぐ総当たりでも力押しでやりだすから) なので勘弁してやってください。継承を使ってオブジェクトの特徴分類をしようとすると、これ、誰もが一度は陥ってしまったことのある状況ですよね。

オブジェクトの特性が一般化-特殊化するのは汎化-派生なんだから is-a で全部できると思ってやろうとすると、すぐに、現実的なニーズに迫られて、当初想定していなかった分類軸との総当たり組み合わせみたいな数のクラスができてしまいます。空を飛べない鳥なんてのは普通にありそうなイレギュラー派生だけど、卵を産む哺乳類だとか、いざとなったら飛べる魚だとか...

そこで、そもそもこの分け方、掛け合わせで数が増えるってことは、複数の分類軸が混在しているからなんじゃないか、と考えます。すると、進化論で見た現代の生物学的分類と、進化論以前の、主な生息域や生態で見た分類が混ざっていることに気づきます。

生物学的な分け方は、たしかに正しい、主となるにふさわしい分類ですが、古来からのじっさいの生態による分類も、十分に意味のある特徴ですね。クジラは魚とみなされてきた海の生き物で、そう認識したほうが都合のいい場合も十分にある。

そういう、異なる軸上にある概念は、それぞれ別々にモデリングし、主となる概念に has-a 関係として、従属する特徴を橋渡しした組み合わせで表現しようとモデリングを考え直したときに出てくるのが、Bridge パターンです。

実際のプログラミングでは、たとえば、仕入れ先リストや顧客リストといった、取引先リストの派生モデルに関係するもの (What) と、HTML で表示したいか CSV でダウンロードしたいかといった、出力機能の派生モデルに関係するもの (How) を分ける。で、What が How を持つ形で組み合わさったインスタンスになる感じです。流行りの言葉でいえば、ドメインモデルとインフラストラクチャの組み合わせがユースケースだよって感じかな。

Bridge パターンは「継承よりコンポジションを好め」の典型的な例です。観念的でふわっとしていて、実体をつかみにくいパターンですが、そういうふわふわ概念にも、継承よりコンポジションがあるよということです。

36
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?