
前回の記事で、オブジェクト指向とは、
プログラミングを部品化するための考え方
と、説明しました。
キーワードは覚えていますか?


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

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

- メソッドとは、プログラムの処理。
- クラスとは、そのメソッドを集めたもの。
- インスタンス化とは、別プログラムで利用するために、クラスを「実体化」する(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業界では、「ー」文字をあまり利用したがらないんですよね。
ユーザーをユーザと書いてみたり、サーバーを、サーバと書くことがあります。
業界用語的なものですね。
覚えておくと面白いかもしれません。

へ~。

本題に戻して、
インタフェースとは、
クラスに、このメソッドは必ず作ってくださいという
ルールを設定するものです。

たとえて言うと、車クラスには必ず
「アクセル」メソッドと「ブレーキ」メソッドがないと
困りますよね。
だから、必ず作るようにしましょうと、ルールを決めます。
このルール設定がインタフェースです。
プログラムにすると下記のようになります。
まとめ

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

わーい!
ありがとうございます!
コメント