どうも。ひろです。
今回はオブジェクト指向プログラミングでよく出でくる
「インターフェース」
についての記事にしようと思います。
インターフェース=窓口と言うことを頭に入れてお読みください。
インターフェースとは?
何かの処理をするための窓口です。
もう少し詳しくお話ししましょう。
例えば誰かにお願いしたい作業があるとします。
お願いした人がどのように作業をするかなんて意識していませんよね?
自分がお願いしたことをやってもらうために、
ルールを展開してその通りの結果をもらうことができれば、
自分は満足ですよね。
そういったルールを展開して決められた形で結果をもらう
「窓口」のような役割をしているのがインターフェースです。
実装例
今回はC +で例を書きます。
細かいコードの解説はまた別で記事にしたいと思います。
初学者向けで、私が行き詰まった点をつまんで記事にしていきます。
他の言語でも書けるので以下を参照してください
ソースコード
-ヘッダファイル
IF.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#ifndef IF_h #define IF_h class Print { public: virtual ~Print() {}; virtual void print() = 0; virtual void input() = 0; }; #endif |
IFImp.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#ifndef IFImp #define IFImp #include <stdio.h> #include "IF.h" class IFImp : public Print { private: int a; public: IFImp() {}; virtual ~IFImp() {}; virtual void print() override; virtual void input() override; virtual int get(); }; #endif |
-実装ファイル
IFImp.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#include "IFImp.h" #include "IF.h" #include <iostream> using namespace std; // 実装ファイル //文字表示 void IFImp::print() { cout << get() << endl; } //文字入力 void IFImp::input() { cout << "input number:" << endl; cin >> a; } //入力した数字を取得 int IFImp::get() { return a; } |
main.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <iostream> #include "IF.h" #include "IFImp.h" int main() { // インスタンス生成 Print *interface = new IFImp; interface->input(); interface->print(); // インスタンス破棄 delete interface; return 0; } |
-実行結果
インターフェースを使う利点
インターフェースないのメソッドが用意されていることが報償されており、
クラスのメソッドをあらかじめ把握しやすくなります。
その処理内容は別にどうでも良くてこういう結果が欲しいのであれば
インターフェースのこのメソッドを使用すれば結果が得られるので
利用者はインターフェースのメソッドのみを見れば良いのです。
抽象クラス・実装クラス
インターフェースは抽象クラスと実装クラスに分かれます。
抽象クラスには処理内容は書きません。
つまり、メソッド名だけ定義しとくと言う感じです。
実装クラスは抽象クラスを継承したうえで実際の処理を書いていくクラスになります。
上記の実装例ではIF.hに対する実装ファイルがないですよね?
IF.hは抽象クラスなので実際の処理は書きません。
IFImp.hは実装クラスなので、IF.hを継承しこのインターフェースを利用する人は
気にしなくていいような処理も実装クラスの方に追加します。
この例で言うとgetメソッドになります。
getメソッドは入力された値を取得するという処理ですが、
インターフェースを利用する人は取得の仕方を気にする必要はないですよね?
利用者側の人は表示だけしたもらえれば良いので実装クラスで取得の処理を書いています。
まとめ
インターフェースについてのまとめです。
-窓口的な存在
-抽象クラスと実装クラスの2つから構成される
-利用者はインターフェースのルールに従って値を渡せば期待する結果を得ることができる。
インターフェースについてよくわからないという方も多いと思いますが
実際にコードを書いて慣れてくると徐々に理解できるようになってきます。
なのでたくさんコードを書いてたくさん吸収していきましょう。
ここまで読んでくださりありがとうございました。
違っている点などありましたらご指摘お待ちしております!
参考にした記事
インターフェースとは
[https://qiita.com/hataggg/items/32516d7dc0737edc220f]
【Java】「interface」のメリットと使い所を考えてみた
https://qiita.com/shutokawabata0723/items/facc5fb71ff86010034f
抽象クラスとインターフェース
https://java2005.cis.k.hosei.ac.jp/materials/lecture19/abstractclass.html
Interface,Implementsを使う利点って何?【PHPのInterface】