🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

4回答

2447閲覧

【Java】interfaceという呼称の由来が知りたいです。

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1グッド

0クリップ

投稿2019/09/20 01:50

編集2019/09/20 01:52

いつもお世話になっております。
表題の通り、javaにおけるinterfaceという呼称があまり腑に落ちず、由来が知りたく質問します。

インターフェースという言葉は

アプリケーションインターフェース
オーディオインターフェース

など、「○○の間に入って仕事してくれるもの」という印象があるのですが
javaでimplementsするアレについては、そういった「○○の間に入って仕事してくれるもの」という要素がない気がしました。

weblio辞書で検索したところ、

(二者間の)境界面、接点、共通の問題、インターフェイス

とのことで、いまのところは『「このメソッドを実装しなさいよ」という共通の問題をクラスに与えるもの』というのが一番しっくり来ています。

詳しい方がいらっしゃいましたら背景をご教示いただけますと幸いです。
どうぞよろしくお願いいたします。

BluOxy👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BluOxy

2019/09/20 02:07

由来を知ってどうしたいのでしょう。そっちが真の問題ではないのでしょうか。
m.ts10806

2019/09/20 02:11

由来系の質問全部に言えますね。 知ったところで深い理解につながらないことがほとんどだと思ってます。
退会済みユーザー

退会済みユーザー

2019/09/20 02:33 編集

BluOxy様 ・インターフェースとはどういうものなのか ・抽象クラスとはどういう風に使い分けるのか は大体理解できているつもりで、自分で作業をする分にも困っていません。 ただ、IT分野におけるインターフェースという言葉が文脈によって異なるために頭がこんがらがってきたので 一旦由来に立ち返って正しく理解したいと思いました。 たとえば初学者に説明しようとした際にもそのあたりをザックリ分かっているとわかりやすい説明ができるのではと思っています。
m.ts10806

2019/09/20 02:39

初学者に説明するときに使い方や役割を説明することはあっても由来まで説明することはほとんどないですね。「そういうもの」として、どういう場面で有用なのかを教えることに注力されます。 突き詰めると「Classってなんでそう名付けられたの?」ということからになりますし(もしかしたら言語名も)
BluOxy

2019/09/20 02:43

ご理解されていらっしゃるなら、interfaceを使うことのメリットを簡潔に伝えられれば説明として十分だと思います。聞いてる人は由来を聞いても分かった気になるだけで却って混乱を招きそうです。 自分はextendsやinterfaceを教えるとき「is-a関係」「can-do関係」を交えて説明をします。 あとは依存性の注入という書き方を教え、それを交えてポリモーフィズムのことも説明できると思います。
退会済みユーザー

退会済みユーザー

2019/09/20 02:59

>「is-a関係」「can-do関係」を交えて説明 たしかに呼称にこだわるよりもこれが一番スッキリ理解できそうだと思いました!確かにポリモーフィズムまでまとめて説明できますね。(一度にどこまで言うかは理解度の様子を見ながらですが、、、) ありがとうございます。
guest

回答4

0

「○○の間に入って仕事してくれるもの」という印象があるのですが

その印象がおかしいです。同じWeblioに、コンピューター用語としての定義が書かれています。

インターフェイス 《電算システムにおけるハードウェア同士の接点または接点となるプログラム; 人間と電算システムとの接点,また接点となるプログラムや機器》

あくまで「接点」であるだけで、「仕事をする」という意味合いはありません。

投稿2019/09/20 02:07

maisumakun

総合スコア145967

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/09/20 03:05

回答ありがとうございます。 「○○の間に入って仕事してくれるもの」  間に入って⇒接点  仕事してくれるもの⇒プログラムや機器 の意味合いで、引用に当てはめると >また接点となるプログラムや機器 をイメージして書いていました。 仕事という表現が抽象的だったことは申し訳ないです。
guest

0

ベストアンサー

interfaceという呼称の由来が知りたい

「can-do関係を持たせるもの」という抽象的な概念に対してたまたまJavaはinterfaceと命名したのではないでしょうか。

・work抽象メソッドを持つWorkableインターフェース

・WorkableをimplementsするProgrammerクラス
・WorkableをimplementsするDoctorクラス

これならProgrammer can work, Doctor can work.と書き表せるのでその関係を明示したいときに
ProgrammerDoctorクラスに対しWorkableインタフェースを実装すると良いのでしょう。

そしてメソッドの引数の型にWorkableインタフェース(can workなオブジェクト全て)を指定し、そのメソッドの中で引数に入れられた具象オブジェクトのworkメソッドを呼べばその具象オブジェクトの種類によって実際の振る舞いが変わります。

java

1public void startWork(Workable worker){ 2 worker.work(); 3}

それがポリモーフィズムですから、初学者にはこのレベルまで教えられれば十分かと思います。

投稿2019/09/20 02:57

編集2019/09/20 03:00
BluOxy

総合スコア2663

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/09/20 03:08

ありがとうございます。 私のズレた疑問に対して方向修正までしてくださり大変助かりました!
guest

0

「異なる要素を結びつける」といった意味になると思います。

他動詞として「結合する」「連結する」
といった意味もありますし。

投稿2019/09/20 02:08

m.ts10806

総合スコア80875

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/09/20 02:40

ご回答ありがとうございます。 「異なる要素を結びつける」ということですが、たとえば ・work抽象メソッドを持つWorkableインターフェース ・WorkableをimplementsするProgrammerクラス ・WorkableをimplementsするDoctorクラス があったとして、全く別のクラスであるProgrammer・Doctorという要素を Workableなものとして結びつけるというイメージでしょうか? 重ねてで申し訳ありませんが、何卒よろしくお願いいたします。
m.ts10806

2019/09/20 02:42

「なものとして」はどこから出てきたんでしょうか。
退会済みユーザー

退会済みユーザー

2019/09/20 02:48

インターフェースの命名規則で「○○ができる」という意味合いで動詞+ableをつけますよね。 なので、2つのクラスを「仕事ができるものとして」の意味合いで「Workableなものとして」と表現しました。 分かりにくくて申し訳ないです。
m.ts10806

2019/09/20 02:59 編集

意味合いを追うのであればimplementsも含めて考える必要がありますよ。 どんなにinterface定義してもimplementsしなきゃ意味ありませんし。「お作法」で飲み込んだ方がスッキリします
guest

0

解決済みですがちょっと気になる話題だったので
これは公式の文献などではなく個人的な解釈、予想というか想像なのでそれ前提でお願いします

インタフェースは「間に入って仕事をしてくれるもの」ではなく「操作するものと仕事をするものの仲介」のような感じです
テレビの音量を上げるボタンはテレビのインタフェースの1つですが
押したら音量が上がったとしてそれは「ボタンが行った仕事」ではなく、ボタンはテレビ内の音量を上げる機能(仕事)を呼び出しただけですよね?

そしてJavaの話になりますが、「メソッドの定義」というのはclassのオブジェクトに対するインタフェースになると思います。
例えばStringにtoUpperCase()というメソッドがあり、これを呼び出すと文字列の大文字表現を返してくれます。
内部でどのような処理が行われているかはわからなくとも、toUpperCaseという名前、引数なし、戻り値Stringという定義通りに使えば(つまり、テレビの音量ボタンを押すように)思い通りの結果が返ってきます(Locale型の引数を持つtoUpperCaseもありますけど)。
そしてJavaのinterfaceですが、これは基本的に内部処理のないメソッドの定義が書かれています。
(Serializableのようなメソッド定義のないものがあったりJava8以降はdefaultで内部処理の実装があったりしますがそれは脇に置いておいて)

interfaceをimplementsしたclassはそのinterfaceで定義されたメソッドの内部処理、つまり実装を書かないとコンパイルエラーになるので、「このclassはこのインタフェース(メソッド定義)を持っています」ということが保証されます。
つまりinterfaceというのは『classに持たせるインタフェース(メソッド定義)のセット』のような意味合いなのではないでしょうか? と個人的には考えています。

投稿2019/09/20 03:12

q_sane_q

総合スコア610

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問