2007-06-23

プログラマの方のための第2回: クラスは作れる。継承もできる。で、次は?

スーパークラスとサブクラスの関係―継承関係までは、たいていの方はそれほど苦労せずに使えるようになるようです。
で、次のステップは?
はい、ポリモーフィズムです。

多態性などとも呼ばれる、オブジェクトのこの特質を使いこなせるようになること。
それがこれからオブジェクト指向のさまざまな利点を生かすための土台となります。



ポリモーフィズムの前に


ここで一度確認です。
たいていの方は、何かのクラスを元にして、サブクラスを作ったり、共通部分をくくりだしてスーパークラスにしたりすることはできますよね。
スーパークラスとサブクラスの関係というのは、共通関数のくくりだしと同じ感覚でも作れちゃいます。
ですから、少しプログラミングの経験があれば、オブジェクト指向してなくてもなんなく利用できてしまうわけです。
しかし、ちょっと待ってください。
そこにオブジェクトは存在してますか?
この段階できちんとオブジェクト指向できてないと、ここから先のさまざまなオブジェクト指向の恩恵のほどんどを、受けることができないのです。
それでは、オブジェクト指向言語を使う意味はありません。
ああそのとおり。実のところオブジェクト指向のことわかってないんだよ。ただクラス作ってるだけなんだよ。という方、ご安心ください。
オブジェクトとはなにか?どうやって発見すればいいのか?についても、「オブジェクト思考」のカテゴリの記事で取り上げていきます。
いっしょに、じっくりと考えていきましょう。

さて、ポリモーフィズム

サブクラスは、スーパークラスの特性を全て含んでいますよね。
特性とは、具体的に言うとメソッドやプロパティです。
つまり、スーパークラスが受け取れるメッセージは全てサブクラスも受け取れる。
サブクラスは、常にスーパークラスを置き換えることが可能なのです。
これ、重要です。
この性質を利用して、以下のようなことができます。
スーパークラスAと、そのサブクラスB、Cがあるとします。
Aを型として宣言した変数には、Aのインスタンスはもちろんのこと、BのインスタンスでもCのインスタンスでも代入することができます。
そうすると、その変数を使うコードでは中に何が代入されているのかとは関係なく、同じメッセージを送ることができます。
でも、実際にそれを受け取るのは、そのとき代入されていたオブジェクトなのです。
これは、よくこういった例えられ方をします。
人間も犬も動物です。
ですので、人間も犬も動物型の変数に代入することができます。
動物型の変数に対して「歩け」というメッセージを送ると、人間も犬も歩きますが、人間は2本足で歩くのに対して、犬は4本足で歩きます。
人間と犬とで、「歩く」というメソッドの実装のしかたが違うのです。
しかし、指示する側は、そんなことは関係なく「歩け」という同じメッセージを送ることができるのです。
「多態性」という言われ方は、このように同じメッセージに対して、サブクラスごとに違う振る舞いをすることからきています。
ポリモーフィズムは、いたるところで利用されています。
例えば全てのGUI部品は、普通ひとつの継承階層に属しています。そうすることで、できる限り同じような扱い方ができるようになっているのです。
また複数のウィンドウを持つアプリケーションの場合、各ウィンドウを同じやり方で表示することができます。
その他、アプリケーションがいろいろなプラグインを同じように扱うシクミだとかにもポリモーフィズムが利用されてたりします。
ここでは、説明のために目立つところを挙げましたが、ポリモーフィズムは何も特殊なところでのみ使用されるものではありません。
オブジェクト指向の経験を積んだプログラマがアプリケーションを作る場合、ポリモーフィズムを利用しないことはほとんどないと言っていいでしょう。
ポリモーフィズムはオブジェクト指向の基礎を成す概念なのです。
ここがわかれば、上級プログラマへの道は拓けたと言えるんじゃないでしょうか。

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...