【継承・キャスト・インタフェース】オブジェクト指向(上級編)

【継承・キャスト・インタフェース】 オブジェクト指向
ぴかり(夫)
ぴかり(夫)

前回の記事で、オブジェクト指向とは、

プログラミングを部品化するための考え方

と、説明しました。

キーワードは覚えていますか?

【図解・実は簡単】オブジェクト指向とはプログラムの部品化です!
新人ヒヨコ IT企業に就職し、システムエンジニア1年生になった新人ヒヨコです! 新人ヒヨコ 研修で、『オブジェクト指向』を教えてもらったのですが、難しくてイマイチわかりません...
新人ヒヨコ
新人ヒヨコ

クラスメソッド、そしてインスタンス化でしたね。

ぴかり(夫)
ぴかり(夫)

そうです!

では、復習がてら前回の図をもう一回見てみましょう。

ぴかり(夫)
ぴかり(夫)
  • メソッドとは、プログラムの処理。
  • クラスとは、そのメソッドを集めたもの。
  • インスタンス化とは、別プログラムで利用するために、クラスを「実体化」する(newをつける)こと。

 

前回の記事では、

その実体化したクラスを変数に入れるところまで説明しました。

ぴかり(夫)
ぴかり(夫)

今回は、オブジェクト指向(上級編)ということで

・継承

・型のキャスト

・インタフェース

と、いうものを説明します。

新人ヒヨコ
新人ヒヨコ

わかりました!

スポンサーリンク

継承について

ぴかり(夫)
ぴかり(夫)

まずは、「継承」について説明します。

ぴかり(夫)
ぴかり(夫)

継承とは、既に作られたクラスを拡張することです。

新人ヒヨコ
新人ヒヨコ

そんなことができるんですね。

ぴかり(夫)
ぴかり(夫)

さて、ここで問題です。

 

クラスそのものを変更するパターン1と、

「継承」をつかってクラスを拡張したパターン2では、

どのような違いがあると思いますか?

新人ヒヨコ
新人ヒヨコ

う~ん…。

むずかしいです。

ぴかり(夫)
ぴかり(夫)

では、ヒントです。

 

オブジェクト指向とはプログラムを部品化するための考え方でした。

部品化したクラスというのは、不特定多数の人が使うことができるのです。

 

不特定多数が使う場合、パターン1では困ることが起きます。

それは、どのようなことでしょうか?

新人ヒヨコ
新人ヒヨコ

パターン1で変更した場合、使ってる人全員に更新してもらう必要がありそうですね。

スマホアプリのアップデートみたいな感じで。

 

ぴかり(夫)
ぴかり(夫)

そうです!

部品化したクラスは不特定多数の人が使うので、

勝手に中身を変更されては混乱してしまいます。

でも、使いやすいように、既存のクラスにメソッドを足したいときがありますよね。

そんな時に、便利なのが継承です。

 

継承をつかえば、自分好みにクラスをカスタマイズできるのです!

ぴかり(夫)
ぴかり(夫)

それでは、「継承」はどうプログラミングするかを見てみましょう。

今までの四則演算クラスに、平均値を計算するメソッドを追加します。

継承には「extends」というコマンドを利用します。

新人ヒヨコ
新人ヒヨコ

ふむふむ。このようにプログラムすれば、

HeikinクラスはShisokuenzanクラスを継承することになるんですね。

ぴかり(夫)
ぴかり(夫)

このHeikinクラスをインスタンス化して利用するときは、

継承したShisokuenzanクラスのメソッドも利用できます。

ぴかり(夫)
ぴかり(夫)

今回作成したHeikinクラスのheikinメソッドはもちろん利用できるし、

継承したShisokuenzanクラスのTashizan_twoメソッドも利用できます。

これが、継承です。

型のキャストについて

ぴかり(夫)
ぴかり(夫)

つぎに、「型のキャスト」について説明します。

ぴかり(夫)
ぴかり(夫)

「型」とは、「変数」に入るデータが、

どんな種類かを指定することです。

 

「変数」はデータを入れる箱のようなものですが、

どんなデータでも入れられるわけではなく、あらかじめ

どのようなデータなのかを指定する必要があります。

 

その指定を「型」と言います。

 

よく利用される型として、以下のようなものがあります。

 

・文字列型 (String型など)

・数値型 (Integer型など)

・論理型 (Boolean形)

ぴかり(夫)
ぴかり(夫)

たとえば、文字列(String型)を入れる変数をつくる場合は、

以下のようにプログラムします。

String hensuu_mojiretsu = “サンプル文字列”;

ぴかり(夫)
ぴかり(夫)

では問題です。

数字を入れる変数を作る場合はどうしますか?

新人ヒヨコ
新人ヒヨコ

数字の場合はInteger型なので、こうですよね?

Integer hensuu_suuji = 999;

ぴかり(夫)
ぴかり(夫)

そうですね!

ちなみにIntegerだけは、intと省略もできますよ。

 

それでは、さっきの四則演算の例をもう一度見てみましょう。

ぴかり(夫)
ぴかり(夫)

インスタンス化したデータを変数に入れいている箇所

「Shisokuenzan hensuu_1 = new Shisokuenzan();」

では、変数の型は何になっているでしょうか?

新人ヒヨコ
新人ヒヨコ

一番最初にくるのが型だと思うんですけど…。

Shisokuenzanが型なんですか?

ぴかり(夫)
ぴかり(夫)

そうです!

つまり「型」とは、変数に入るデータのクラスを示したものなのです。

新人ヒヨコ
新人ヒヨコ

型って、あらかじめ決まっているものではないんですか?

ぴかり(夫)
ぴかり(夫)

決まっているものもあります。

 

先ほど、例に出した

・文字列型 (String型など)

・数値型 (Integer型など)

・論理型 (Boolean形)

は、典型的な決まった型です。

 

ただ、これも既に作成済みのクラスなんです。

新人ヒヨコ
新人ヒヨコ

ふむふむ。

ぴかり(夫)
ぴかり(夫)

では、この章の本題である

型のキャストについて説明したいと思います。

ぴかり(夫)
ぴかり(夫)

説明しやすいように、

  • 四則演算クラスを切符のような形の型
  • 平均計算クラスを鍵穴のような形の型

で、表してみました。

 

そして、これをインスタンス化(実体化)したのが、

以下の図です。

新人ヒヨコ
新人ヒヨコ

平均計算クラスのインスタンス化された図は、

継承した四則演算クラスと繋がっていますね。

ぴかり(夫)
ぴかり(夫)

そして、そのインスタンス化したクラスを入れる箱、

つまり変数は以下の図とします。

新人ヒヨコ
新人ヒヨコ

インスタンス化のときと同じで、平均計算クラスの型には

四則演算クラスの型も繋がっていますね。

ぴかり(夫)
ぴかり(夫)

では、ここで問題です。

①と②で、どちらかはプログラムエラーになります。

 

①:四則演算型の変数に平均計算クラスのインスタンスを入れる

②:平均計算型の変数に四則演算クラスのインスタンスを入れる

 

どちらがエラーになるでしょう?

 

新人ヒヨコ
新人ヒヨコ

うーん。

ぴかり(夫)
ぴかり(夫)

答えは、②がエラーになります。

理由を説明していきましょう。

まずはエラーにならない、①の場合です。

ぴかり(夫)
ぴかり(夫)

この図のように、エラーにはならないのですが

変数に入っていない、平均計算クラスのメソッドは利用できません。

 

では、次はエラーになる②です。

ぴかり(夫)
ぴかり(夫)

この場合は、平均計算の実体(インスタンス)がないのでエラーになります。

箱はあるのに使えないので、プログラミングの世界ではエラーになります。実際のプログラムは以下のようになります。

ぴかり(夫)
ぴかり(夫)

そして、「型のキャスト」とは

一度、インスタンス化したクラスに対して、拡張したクラスのインスタンスを付加するイメージです。

ぴかり(夫)
ぴかり(夫)

プログラムで書くとこうなります。

キャストしたいクラスの型を 括弧()で示します。

 

インタフェースについて

ぴかり(夫)
ぴかり(夫)

それでは、最後にインタフェースについて説明します。

 

ただ、これを使うのは上級プログラマーになってからですので

さらっと説明しますね。

 

ちなみに…。

表記は「インターフェース」と記載されることも多いのですが、どちらも同じことです。

 

なぜだかSE業界では、「ー」文字をあまり利用したがらないんですよね。

ユーザーをユーザと書いてみたり、サーバーを、サーバと書くことがあります。

業界用語的なものですね。

覚えておくと面白いかもしれません。

新人ヒヨコ
新人ヒヨコ

へ~。

ぴかり(夫)
ぴかり(夫)

本題に戻して、

インタフェースとは、

クラスに、このメソッドは必ず作ってくださいという

ルールを設定するものです。

ぴかり(夫)
ぴかり(夫)

たとえて言うと、車クラスには必ず

「アクセル」メソッドと「ブレーキ」メソッドがないと

困りますよね。

だから、必ず作るようにしましょうと、ルールを決めます。

 

このルール設定がインタフェースです。

 

プログラムにすると下記のようになります。

 

まとめ

ぴかり(夫)
ぴかり(夫)

継承キャストインタフェースまで理解できれば、初心者プログラマーからは脱出できたと言えるでしょう。

 

ここまでよく頑張りました!!

新人ヒヨコ
新人ヒヨコ

わーい!

ありがとうございます!

 

 

 

 

コメント