Flex、AIR、Java、Androidなど

1月13日 2009

Bridgeパターンの理解

Posted by: tachibana In: プログラミング

※この記事は私が本を読み、頭で考えたことを将来完全に理解してから見直して笑ったりするためにそのまま羅列したものです。故に間違った理解や意味不明なこともたくさん出てくると思います。プログラミングを教えるような立場の方には有益かも(笑)?

Bridgeパターンの理解

一つのパッケージの中に機能のクラス階層と実装のクラス階層が混在することは当然考えられる。

ただ、この分け方がよく分からん。もともと再利用したいパーツが機能のクラス階層と実装のクラス階層に分かれていた場合、機能のクラス階層には実装のクラス階層のクラスはまだ登場しない。まあ継承されるメソッドや変数が定義されているだけだろう。

そこに新たにクラス階層との結びつきを定義するのがBridgeパターンか?

ここでは、機能のクラス階層のトップがそのクラス型の変数をもち、コンストラクタで初期化している。しかしこれだと既にこのクラスのコンストラクタを引数無しで使っているクラスがあったらそれは実装を大幅に変更する必要があるんでないかい??

まあそれは置いといて、初期化したクラスの抽象メソッドの定義はその初期化したオブジェクト自身の抽象メソッドに結び付けている。このままでは何の処理も行われないよね?

ここでのに機能のクラス階層と実装のクラス階層の各役割が重要なのか?
機能のクラス階層は渡されたオブジェクトを格納し、それのメソッドを利用し働く。メインクラス上には機能のクラス階層のクラスが置かれ、それのメソッドにアクセスがそのメソッド内で既に初期化さえている実装のクラス階層のクラスのメソッドを呼ぶ。サブクラスはインスタンスもsuperで、単に新たなメソッドを付け加えただけ。

利点がよく分からん。

クラス図を見ると例えば既に実装のクラス階層があり、そこに新たにそれとは別な機能(それを利用するが)をもった階層を展開したような時にはその階層と既にある実装のクラス階層を結びつける際、スーパークラスのコンストラクタないで実装を行えばサブクラスはスーパークラスのコンストラクタを呼ぶ実装をすればそれだけでその実装のクラス階層と結び付けられる、ということがBridgeパターンなのか?

書いてあった。こうやってクラスが綺麗に分かれていたら拡張はかなり楽になる。結びついているのは機能のクラス階層のトップのコンストラクタだけだから。その他は意識する必要がない。こりゃええわ。ここがポイントだ。

自分なりの結論:

プロジェクト内には具体的に仕事をするクラス(基本的にあるクラスを継承し、少なくとも抽象クラスではないクラス)の階層と、手続きの内容を定義した抽象クラスと、それを実装するクラス階層が存在する。また、これらは意図的に分けるようにしなければならない。この際は機能のサブクラスのサブクラスが実装のクラスのサブクラスのサブクラスの・・・を実装しうんぬんというようなことはやってはいけない。実装を行うのは継承のトップにあるクラスが、トップにあるインターフェースを実装するようにする。また、この際は実装のクラスを継承するのではなくコンストラクタ内でインスタンス化し処理を実装のクラスに委譲する。
EasyFreeAds Blog News Facebook Twitter Myspace Friendfeed Technorati del.icio.us Digg Google Yahoo Buzz StumbleUpon

No Responses to "Bridgeパターンの理解"

Comments are closed.

Categories

 

2019年8月
« 4月    
 1234
567891011
12131415161718
19202122232425
262728293031  

About

Author: tachibana

  • ちょっとしたことはTwitterに書いています。こっちはアプリの公開等の時に更新されます。
  • 最近はもっぱらJavaとObjective Cです。AS3は飽きました。
  • スクリプト言語ではPerlが好きでしたが最近はGAE/Jで何でもやってます。
  • Linuxは自宅サーバー建てるのがやっとのレベルです。前の会社で何日も徹夜してやったのはいい思い出です。
  • アプリへのご要望などご意見等ありましたらお気軽にご連絡下さい。

Alternative content here