12
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

マンガでわかる Bridge

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

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

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

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

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

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

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
12
Help us understand the problem. What are the problem?