Javaオブジェクト指向プログラミング講座

多態性の仕組み

全334コースを10日間無料で

ぜひご覧ください。

無料で視聴する すべての加入プランを見る
または
オブジェクト指向プログラミングの第3の特徴、オブジェクトの振る舞いを実行時に決めることができる「多態性」の仕組みについて解説します。
講師:
08:20

字幕

このレッスンではオブジェクト指向プログラミングの第3の特徴オブジェクトのふるまいを実行時に決めることが出来る、多態性の仕組みについて解説します。多態性とは同じ名前の操作が異なるふるまいをすることです。例えば M さん、M さんはマネージャーだとします。そこに写真、そのチームにA さん、B さん、C さんと3人いたとします。M さんはマネージャーなのでみなさん仕事を始めて下さいと言うわけです。そうすると A さん、B さん、C さんどうするでしょうか。何をしていいかわからない。しかし、社員は会社に入った時にそれぞれ自分の役割が決まってるわけです。その役割を果たすわけです。M さんはいちいち細かい指示はしません。ただ仕事を始めて下さい、というだけです。例えば A さんはプログラマーだったとしましょう。プログラマーだったら仕事と言ったらプログラミングの仕事をするわけです。B さん、仮に営業だったとします。そうすると営業の仕事をするわけです。C さん、仮に事務職だったら事務の仕事をするわけです。これ UML で汎化関係で表します。社員、これを「営業」「プログラマ」「事務」と3種類に分類しています。 それぞれ仕事をするというのはUML ですから操作を持ってるわけですね。営業の人も仕事をするという操作社員も仕事をするという操作もっているわけです。みんな「仕事をする」って同じ名前の操作なんですね。同じ名前の操作が異なるふるまいをするこの人の「仕事をする」これプログラミングです。この人の「仕事をする」は営業の仕事この人の「仕事をする」は事務の仕事やること違うわけです。しかし名前は「仕事をする」と同じなんです。これ便利なのは仕事を頼む人、プログラミングして下さいとか営業して下さいというこようなこともただ仕事を始めて下さい、要するに「仕事をする」仕事をして下さいと言えばいいわけですね。これが多態性なんです。同じ名前の操作が異なるふるまいをすることです。多態性についてもうちょっと説明します。従来の方法、プログラミングの方法です。図形の面積を求めます。長方形は幅 × 高さですね。w が幅、h が高さです。三角形は幅 × 高さ ÷ 2楕円の面積はこの幅の半分と高さの半分 × 3.14丁度円になる半径 × 半径 × 3.14面積の求め方は図形によって違うこれは当然です。これプログラムでやるとしたらそのまま書けばいい訳ですね。 当然そうです。つまり面積を求めるという手続きだったとします。そうすると、それはオブジェクトに対して面積を求めよといった時にそれぞれの方法で面積を求めればいいわけです。これみな面積と同じ名前ですけどただ中身はこう違うわけですね。それぞれの方向で面積を求める、つまり条件分岐が入るわけですね。従来の方法、例えば C 言語とかで書いたりするとif、then、else で書いたりswitch、case 文で書いたりもしも長方形であれば幅×高さもしも三角形であれば幅×高さ÷2 とかいう風に条件分岐が入るわけです。それが従来の方法です。当然ですね。多態性を使うとこれがどうなるかというと多態性と継承と関係があってまず図形というクラス作ります。そこに幅と高さを持ってます。面積を求めるという手続き、持ってます。これ継承ですね。長方形というのはこの図形を継承して幅、高さありますけど長方形というクラスを作るわけです。三角形というクラスも、これを継承します。この幅と高さを持ってるわけですね。楕円形もこれを継承して幅と高さを持っています。全部面積という手続きを持ってます。これ継承ですね。多態性のプログラムをどうするかというと「ojb.面積」と書いてます。 オブジェクトに対して面積ていう操作を呼びだすオブジェクトが何か書いてないこれは三角形かもわからないし長方形かもわからないし楕円形かもわからない、知らないとにかくそのオブジェクトに対して面積という操作を呼びだす。そうするとこのオブジェクトは自分が長方形か三角形か楕円形かそれは自分が知ってるわけです。だから、この人が、もしも楕円形だとしたら今度、楕円形の面積を求めるわけだし長方形だとしたら長方形の面積を求める。つまりこの部分に条件分岐if、then、else とかswitch、case 文は入らないです。もうちょっと説明します。obj の種類を問わない多態性のメリットちょっと違う説明ですけど今度、図形の種別によって例えば図形を塗りつぶすという何かそういうお絵かきソフトを作ったとします。その塗りつぶすとき図形種別三角か四角か楕円かによってやり方が違うわけです。そうすると switch、case 文でもしも長方形の場合はこういう風に塗りつぶす。三角形の場合はこういう風に塗りつぶす。こういうプログラムを作るわけですね。色を変更しましょう。赤を緑にしたり、そういう所でもやっぱり図形種別によってここで、また条件分岐が入るわけです。 図形の拡大、縮小そこでもやっぱり図形の種別によってやり方が違うとこういう風にあちこちで図形種別によって条件分岐しなければいけないわけですね。これは従来のプログラムです。これに対して呼び出し側に条件分岐が必要多態性による方法はオブジェクトに対して塗りつぶしとかオブジェクトに対して色を変更オブジェクトに対して拡大縮小ここで条件分岐、入らないです。何故かと言ったらオブジェクトは自分が何か知ってるわけです。三角か四角か楕円か。もしも四角であればそれに自分の拡大縮小という操作を呼びだせば良い。これが呼び出し側に条件分岐が入らないというのがプログラムを拡張する時に非常に便利なんです。例えば、今、図形3種類しか考えていません。長方形、三角形、楕円何かまた違う図形例えば、何か五角形だとか菱形だとか増えてきたらどうなるかというとこの switch、case 文の所以前も菱形全部菱形、菱形と入れなきゃいけないわけです。ところが多態性の方法はそれが増えたってここ何も変更ないです。呼び出し側で変更ないです。これが、拡張性に優れているということです。実際のプログラミングはもうちょっと後で説明いたします。このレッスンではオブジェクト指向プログラミングの第3の特徴オブジェクトのふるまいを実行時に決めることができる多態性の仕組みについて解説しました。

Javaオブジェクト指向プログラミング講座

このコースではオブジェクト指向プログラミングの3大特徴である「カプセル化」「継承」「多態性」を、UMLモデルとJavaプログラムを対比しながら解説します。「カプセル化」ではコンストラクタや可視性、「継承」ではUML汎化関係とJavaの関係、「多態性」では継承およびインタフェースによるプログラミング方法などを説明します。

3時間23分 (36 ビデオ)
現在、カスタマーレビューはありません…
 
ソフトウェア・トピック
価格: 2,990
発売日:2016年09月27日

このコースは、「オンデマンド」でご利用可能であり、ダウンロードすることもオンラインで見ることもできます。

ダウンロードすると、オフラインでコースを使用し、豊富なインターフェースをフルに活用できます。複数のデバイスを使用したり、 一度に全コースをダウンロードしたくない場合は、アカントにログインして、ストリーミング・ビデオとしてコースのレッスンを視聴してください。

ビデオトレーニングをお楽しみいただけますように! お問い合わせは、cs-jp@lynda.com宛までご連絡ください。