7

Java に関する講義で、コンピューター サイエンスの教授は、クラスの Java インターフェイスはパブリック メソッドのプロトタイプであり、その動作の説明であると述べています。

ここに画像の説明を入力
(ソースhttps://www.youtube.com/watch?v=-c4I3gFYe3w @8:47)

そして、ビデオの 8:13 で、彼は、ティーチング アシスタントとのディスカッション セクションに行って、プロトタイプの意味を学習すると述べています。

上記のコンテキストでJavaで「プロトタイプ」とはどういう意味ですか?

4

7 に答える 7

8

この文脈でのプロトタイプという言葉の使用は残念だと思います.JavaScriptのようないくつかの言語は、講義で議論されているものとはまったく異なるプロトタイプ継承と呼ばれるものを使用します. 「契約」という言葉の方が適切だと思います。Java インターフェースは、クラスの作成者が、そのクラスの具象実装が、実装するインターフェースで宣言されたすべてのメソッドの実装を提供することを宣言できるようにする言語機能です。

多重継承に頼ることなく、Java クラスが複数の is-a 関係を形成できるようにするために使用されます (Java では許可されていません)。Vehicle クラスから継承するが、Product インターフェイスを実装する Car クラスを持つことができます。したがって、Car は Vehicle と Product の両方です。

于 2013-08-09T23:38:15.510 に答える
4

上記のコンテキストでJavaで「プロトタイプ」とはどういう意味ですか?

「プロトタイプ」という言葉は、標準的な Java 用語ではありません。JLS では使用されておらず、Java チュートリアル用語集にも記載されていません。つまり、Java 固有の意味はありません。

講師は、Java 固有の意味ではなく、より広い意味でこの言葉を使用しています。実際、このウィキペディアのページで説明されているように、彼の使用法は「関数プロトタイプ」と一致します。


残念なことに、「IT 英語」言語には、単語やフレーズが異なる文脈で異なる (時には矛盾する) ことを意味する例がたくさんあります。IT で出くわす「テンプレート」には、別の意味があります。例えば:

  • C++ では、"テンプレート" は、Java がジェネリック クラスまたはメソッドを呼び出すものを指します。

  • Javascript では、オブジェクトにメソッドを与える「テンプレート」属性があります。

  • より一般的には、テンプレートベースの型付けは、OO 型付けを行う代替の (より動的な) 方法です。

しかし、これらの意味が存在するという事実は、あなたの講師がインターフェイス メソッドのシグネチャを「テンプレート」と呼ぶのが間違っていたという意味ではありません。

于 2013-08-10T00:54:07.200 に答える
3

「プロトタイプ」は、使用するのに最適な/適切な終端ではありません。interfaces実装クラスが満たさなければならない「契約」に似ています。

メソッドのヘッド/定義は、実装するクラスで実装する必要があります (implementsクラス head/class definition/ でキーワードを使用public class xy implements ...)。

この命名規則は、多くのイデオロギー論争の余地を残していると思います。

または、著者はある種の精神的錯乱を起こし、プロトタイプの継承の構造を javascript から java に何らかの方法でマッピングしました。

于 2013-08-09T23:37:51.003 に答える
2

インターフェイスは、Java のクラスのプロトタイプではありません。

機械語コードに直接コンパイルする C や C++ などの言語では、コンパイラは、プログラム内のどこかで参照される前に、識別子 (変数/クラス/関数) の性質を認識する必要があります。つまり、これらの言語では、識別子に関連するマシン コード出力を生成するために、識別子の性質を知る必要があります。

簡単に言えば、C++ コンパイラは、クラスがコード内で使用される前に、そのクラスのメソッドとメンバーを認識する必要があります。これを実現するには、クラスが使用されるコード行の前にクラスを定義するか、少なくともその性質を宣言する必要があります。関数またはクラスの性質のみを宣言すると、「プロトタイプ」が作成されます。

Java では、「インターフェース」はクラスの記述のようなものです。これは、特定の種類のクラスが強制的に持つべきすべてのメソッドを定義します。その後、それらのインターフェイスを実装するクラスを作成できます。Java でインターフェイスが機能する主な目的は、特定のインターフェイス タイプとして宣言された変数が、そのオブジェクトを実装する任意のクラスのオブジェクトを保持できるようにすることです。

于 2013-08-09T23:39:06.180 に答える
2

彼は、クラスのヘッダーファイルでメソッドのプロトタイプを定義して、他のクラスがこれらのメソッドを認識できるようにする方法でそれをC/C++説明します。クラスの概念がない場合でも、ファイルの先頭でプロトタイプを定義できます。そして、同じファイルのどこかにこれらのプロトタイプを実装できるため、実装が提供される前でもメソッドを使用できます。したがって、ほとんど同じ方法で提供されるインターフェイスでは、このインターフェイスを実装するクラスによって実装されるメソッド (メソッド ヘッダー) のプロトタイプを定義できます。C++CJava

于 2013-08-09T23:40:01.160 に答える
1

Java に関する講義で、コンピュータ サイエンスの教授は次のように述べています。

クラスのJavaインターフェイスは次のとおり
です。1. パブリック メソッドのプロトタイプ、
2. およびそれらの動作の説明。

1. OK: - はい、クラスの実装された public メソッドのプロトタイプです。
2 の場合。この部分は少しトリッキーかもしれません。:)

  • なぜ?
  • インターフェイス定義 (プロトタイプを含む) は知っていますが、メソッドの動作を定義 (記述) していません。
  • コンピューター サイエンスの教授は次のように述べています。これは、そのインターフェースを実装するクラス (インターフェースの実装 = プロトタイプの定義または記述) を調べた場合にのみ正しいです。

はい、理解するのが少し難しいです:)

参考文献:
定義と説明
コンテキスト依存の
名前の可視性 - C++ チュートリアル


残業:

注: テストしていません。考えているだけです。:)

C++:

// C++ namespace just with prototypes: 
// could be used like interface similar with Java?
// hm, could we then define (describe) prototypes?
// could we then inherit namespace? :)

namespace anIntf{
   void politeHello(char *msg);
   void bigThankYou();
}
于 2014-03-09T07:28:00.757 に答える
1

プロトタイプは、コード内で使用する関数のシグネチャを提供します。それらは多少オプションです。以前に定義された関数のみを使用するようにコードを注文できる場合は、それらを定義せずに逃げることができます

以下に、2 つの整数を合計する関数のプロトタイプを示します。

int add(int a, int b);
于 2016-03-03T03:48:44.193 に答える