コンピューティングにおいて、インターフェースとは、コンピュータシステムの2つ以上の独立したコンポーネントが情報を交換する際の共有境界を指します。情報交換は、ソフトウェア、コンピュータハードウェア、周辺機器、人間、そしてこれらの組み合わせの間で行われます。[ 1 ]タッチスクリーンなど、一部のコンピュータハードウェアデバイスはインターフェースを介してデータの送受信が可能ですが、マウスやマイクなど、特定のシステムにデータを送信するためのインターフェースのみを提供するものもあります。[ 2 ]
ハードウェアインターフェース

ハードウェアインターフェースは、さまざまなバス、ストレージデバイス、その他のI/Oデバイスなど、多くのコンポーネントに存在します。ハードウェアインターフェースは、インターフェースにおける機械的、電気的、論理的信号と、それらを順序付けるプロトコル(シグナリングと呼ばれることもあります)によって記述されます。[ 3 ] SCSIなどの標準インターフェースは、I/Oデバイスなどのコンピューティングハードウェアの設計と導入を、コンピューティングシステムの他のコンポーネントの設計と導入から切り離し、それによってユーザーとメーカーにコンピューティングシステムの実装における大きな柔軟性を提供します。[ 3 ]ハードウェアインターフェースは、データの一部を同時に伝送する複数の電気的接続と並列にすることも、データが一度に1ビットずつ送信されるシリアルにすることもできます。 [ 4 ]
ソフトウェアインターフェース
ソフトウェアインターフェースは、様々な「レベル」における多種多様なインターフェースを指す場合があります。例えば、オペレーティングシステムはハードウェアとインターフェースする場合があります。オペレーティングシステム上で実行されるアプリケーションやプログラムは、データストリーム、フィルタ、パイプラインを介して相互作用する必要がある場合があります。 [ 5 ]オブジェクト指向プログラムでは、アプリケーション内のオブジェクトはメソッドを介して相互作用する必要がある場合があります。[ 6 ]
実際には
設計の重要な原則は、デフォルトですべてのリソースへのアクセスを禁止し、明確に定義されたエントリポイント、つまりインターフェイスを介したアクセスのみを許可することです。[ 7 ]ソフトウェアインターフェイスは、基盤となるコンピュータシステムのコンピュータリソース(メモリ、CPU、ストレージなど)へのアクセスを提供します。ソフトウェアによるそのようなリソースへの直接アクセス(つまり、適切に設計されたインターフェイスを介さない)は、機能性と安定性に重大な影響(時には悲惨な影響)をもたらす可能性があります。
ソフトウェアコンポーネント間のインターフェースは、定数、データ型、手続きの種類、例外仕様、メソッドシグネチャなどを提供することができます。また、パブリック変数がインターフェースの一部として定義される場合もあります。[ 8 ]
ソフトウェアモジュールAのインターフェースは、そのモジュールの実装とは意図的に別個に定義されます。後者には、インターフェースで記述された手続きやメソッドの実際のコード、およびその他の「プライベート」な変数やプロシージャなどが含まれます。Aと対話する別のソフトウェアモジュールB(例えばAのクライアント)は、公開されたインターフェースを介してのみ対話を行うように強制されます。この配置の実用的な利点の1つは、 Aの実装を同じインターフェースの別の実装に置き換えても、 B が故障しないということです。つまり、 A がインターフェースの要件を内部的にどのように満たしているかは、Bには関係ありません。B はインターフェースの仕様のみに関心があるからです。(リスコフの置換原則も参照してください。)
オブジェクト指向言語では
一部のオブジェクト指向言語、特に完全な多重継承を持たない言語では、「インターフェース」という用語は、クラスの抽象化として機能する抽象型を定義するために使用されます。インターフェースはデータを含みませんが、メソッドシグネチャとして動作を定義します。そのインターフェースに対応するすべてのメソッドのコードとデータを持ち、そのように宣言しているクラスは、そのインターフェースを実装していると言われます。 [ 9 ]さらに、単一継承言語でも複数のインターフェースを実装することができ、したがって同時に異なる型を持つことができます。 [ 10 ]
インターフェースは型定義です。オブジェクトを交換できる場所(例えば、関数やメソッドの呼び出しなど)であればどこでも、交換するオブジェクトの型は、特定のクラスを指定するのではなく、実装されているインターフェースまたは基底クラスのいずれかを使用して定義できます。このアプローチは、そのインターフェースを実装する任意のクラスを使用できることを意味します。例えば、最終的な実装が利用可能になるまで開発を進めるために、ダミー実装を使用することができます。また、テスト中に偽の実装やモック実装を代用することもできます。このようなスタブ実装は、開発プロセスの後半で実際のコードに置き換えられます。
通常、インターフェースで定義されたメソッドにはコードが含まれないため、メソッド自体を呼び出すことはできません。呼び出されたときに実行される非抽象コードで実装する必要があります。「 」というインターフェースは、と というStack2つのメソッドを定義する場合があります。これは、例えばとのように、異なる方法で実装できます。前者は高速で、固定サイズのデータ構造を使用します。後者はサイズ変更可能なデータ構造を使用しますが、速度は多少低下します。 push()pop()FastStackGenericStack
インターフェースは多くのメソッドを持つことができますが、1つしか持たない、あるいは全く持たないこともあります。例えば、JavaReadable言語では単一のメソッドを持つインターフェースが定義されています。様々な実装が様々な目的で利用されており、例えば、、、、、などがあります。マーカーインターフェースのようなインターフェースはメソッドを全く持たず、リフレクションを用いた汎用処理に実行時情報を提供する役割を果たします。[ 11 ]read()BufferedReaderFileReaderInputStreamReaderPipedReaderStringReaderSerializable
インターフェースへのプログラミング
インターフェースの使用により、「インターフェースプログラミング」と呼ばれるプログラミングスタイルが可能になります。このアプローチの背後にある考え方は、プログラミングロジックをオブジェクトの内部実装の詳細ではなく、使用するオブジェクトのインターフェースに基づいて構築することです。インターフェースプログラミングは実装の詳細への依存度を低減し、コードの再利用性を高めます。[ 12 ]
この考え方を極端に推し進めると、制御の反転により、作業を実行するために使用されるインターフェイスの特定の実装をコードに挿入する コンテキストが残されます。
ユーザーインターフェース
ユーザーインターフェイスは、コンピューターと人間との対話ポイントです。これには、ユーザーとコンピューター システム間でデータが転送される さまざまな対話形式 (グラフィックス、サウンド、位置、動きなど) が含まれます。
参照
- 抽象化の反転
- アプリケーションバイナリインターフェース
- アプリケーションプログラミングインターフェース
- ビジネス相互運用性インターフェース
- コンピュータバス
- カップリング(コンピュータプログラミング)
- ハードディスクドライブインターフェース
- 実装(コンピュータサイエンス)
- 実装の継承
- 相互運用性
- 継承セマンティクス
- モジュールプログラミング
- ソフトウェアコンポーネント
- 仮想相続
参考文献
- ^フックウェイ、B. (2014). 「第1章 インターフェースの主題」.インターフェース. MITプレス. pp. 1– 58. ISBN 9780262525503。
- ^ IEEE 100 - IEEE標準用語の権威ある辞書。ニューヨーク市、ニューヨーク州、米国:IEEEプレス。2000年。574 ~ 575頁。ISBN 9780738126012。
- ^ a b Blaauw, Gerritt A.; Brooks, Jr., Frederick P. (1997)、「第8.6章 デバイスインタフェース」、コンピュータアーキテクチャ - 概念と進化、Addison-Wesley、pp. 489– 493、ISBN 0-201-10557-8 参照: Patterson, David A.; Hennessey, John L. (2005)、「第8.5章 プロセッサ、メモリ、オペレーティングシステムへのI/Oデバイスのインターフェイス」、Computer Organization and Design - The Hardware/Software Interface、第3版、Morgan Kaufmann、pp. 588–596、ISBN 1-55860-604-1
- ^ Govindarajalu, B. (2008). 「3.15 周辺機器インターフェースとコントローラー - OG」 . IBM PCとクローン:ハードウェア、トラブルシューティング、メンテナンス. Tata McGraw-Hill Publishing Co. Ltd. pp. 142– 144. ISBN 9780070483118. 2018年6月15日閲覧。
- ^ Buyya, R. (2013). 『クラウドコンピューティングのマスター』タタ・マグロウヒル・エデュケーション. p. 2.13. ISBN 9781259029950。
- ^ Poo, D.; Kiong, D.; Ashok, S. (2008). 「第2章 オブジェクト、クラス、メッセージ、メソッド」.オブジェクト指向プログラミングとJava . Springer-Verlag. pp. 7– 15. ISBN 9781846289637。
- ^ Bill Venners (2005-06-06). 「Leading-Edge Java: Design Principles from Design Patterns: Program to an interface, not an implementation - A Conversation with Erich Gamma, Part III」 . artima developer . 2011-08-05にオリジナルからアーカイブ。2011-08-03に閲覧。
インターフェースのみに依存すると、実装から分離されます。つまり、実装は変更可能であり、これは健全な依存関係です。例えば、テスト目的で、重いデータベース実装を軽量なモック実装に置き換えることができます。幸いなことに、今日のリファクタリングサポートにより、最初からインターフェースを作成する必要はありません。問題を完全に理解したら、具体的なクラスからインターフェースを抽出できます。意図したインターフェースは、「インターフェース抽出」リファクタリングを1回行うだけで作成できます。…
- ^パターソン, DA; ヘネシー, JL (2004年8月7日). 『コンピュータの構成と設計:ハードウェア/ソフトウェア・インタフェース(第3版)』エルゼビア. 656ページ. ISBN 9780080502571。
- ^ 「インタフェースとは」。Javaチュートリアル。Oracle。2012年4月12日時点のオリジナルよりアーカイブ。 2012年5月1日閲覧。
- ^ 「インタフェース」 . Javaチュートリアル. Oracle. 2012年5月26日時点のオリジナルよりアーカイブ。2012年5月1日閲覧。
- ^ 「シリアル化におけるパフォーマンス向上テクニック」 . Precise Java. 2011年8月24日時点のオリジナル記事よりアーカイブ。 2011年8月4日閲覧。
まず、Serializableインターフェースについて説明します。これはマーカーインターフェースであり、メソッドは持ちません。
- ^ガンマ、ヘルム、ジョンソン、ブリシデス (1995).デザインパターン:再利用可能なオブジェクト指向ソフトウェアの要素. アディソン・ウェスレー. pp. 17–18 . ISBN 9780201633610。