Cとc ++のヘッダーファイルがJavaで使用されるインターフェイスと同じ機能を持っているかどうかを知りたいですか?そうでない場合、ヘッダーファイルとインターフェイスの違いは何ですか?
結構です。ヘッダーファイル内の定義は、Javaクラスのpublic
メンバーにより密接に対応しています。ヘッダーファイルとパブリック/プライベートアクセス修飾子の両方により、パブリックに表示されるインターフェイスを区別できますコードの/ APIとその内部実装の詳細。
CまたはC++の宣言には、1つの定義ルールが適用されます。コンパイルされたプログラムには、宣言された関数またはグローバル変数ごとに1つの実装しか含めることができません(すべての定義が同等であるinline
として宣言されている場合を除く)。したがって、ヘッダー内の1つの関数宣言について、1つの関数定義を.cまたは.cppファイルに記述します。別の定義を使用したい場合は、コードを再コンパイルする必要があります。
Java interface
s(または純粋な仮想メソッドを持つC++クラス)も一種の「インターフェース」を宣言しますが、非常に異なります。1つのclass
は多くのinterface
sを実装でき、 interface
は、多くのclass
esによって実装できます。後者の点は非常に重要です。interface
を介してオブジェクトのメソッドのみを呼び出すコードを記述できます。後で、このinterface
に準拠するオブジェクトをそのコードに提供できますが、コードは引き続き機能します。コードを再コンパイルすることなく、実行時に複数の実装を選択できます。これにより、柔軟性が大幅に向上します。依存性注入。
基本的に、ヘッダーとinterface
sの動作は大きく異なります。ヘッダーには、後で解決されるがコンパイル中にまだ解決される前方宣言が含まれています。 interface
(または非final
class
)は、実行時に動的ディスパッチによって解決される仮想メソッドを定義します。
また、異なる概念を意味します。ヘッダーやクラスのパブリック/プライベートアクセス修飾子などのメカニズムにより、抽象データ型(ADT)を実装できます。 ADTは一部のデータ構造の実装の詳細をカプセル化し、外部コードがパブリック関数またはメソッドを介してそれらの構造にアクセスすることのみを許可します。対照的に、interface
sと仮想メソッドはobjectsを実装できます。 1つのinterface
は、多くの異なるオブジェクトによって実装できます。 1つの共通のinterface
のオブジェクトが異なる動作をするこの機能は、polymorphismとも呼ばれます。
ADTとオブジェクトはどちらも「カプセル化」と関係がありますが、それらはまったく異なります。それらは補足概念として理解されるべきです。
ただし、オブジェクト指向ソリューションには大きな関心が寄せられています。例えば。 Design Patternsの本では、動的ディスパッチなどのオブジェクト指向の手法を適用することで、いくつかの興味深い問題を解決するのに十分な柔軟性をソフトウェアシステムに導入する方法を調査しています。ランダムな例として、複合パターンを使用すると、アイテムのコレクションを単一のアイテムと同等に扱うことができます。どうやって?コレクションと単一のアイテムの両方が同じinterface
を実装します。これは、ヘッダーファイルだけでは不可能です。