2016-07-17 8 views
-1

私はインターネットから次の定義を見つけました。どちらも私のものと似ています:抽象化とインターフェイスの違いは何ですか?

抽象化:抽象化はOOPSのもう一つの優れた特徴です。抽象化とは、オブジェクトのクライアントに必要な詳細のみを表示することを意味します。あなたのPCのモニターの内部の詳細を知っていますか?モニターをオンに切り替えるとどうなりますか?これはモニターの内部で何が起きているのですか?いいえ、あなたにとって重要なことは、天気モニターがオンかどうかです。あなたの車のギアを交換するときは、あなたの車のエンジンの内部の詳細について本当に心配ですか?いいえ、しかし、あなたにとって重要なことは、ギアがそれを変えなければならないということです!これは抽象です。ユーザーにとって重要な詳細のみを表示します。 Employeeクラスをパラメータとして取り、現在の月の従業員の給与を整数値として返す "CalculateSalary"メソッドがEmployeeクラスにあるとします。今、誰かがその方法を使いたいと思ったら。彼は従業員オブジェクトがどのように給与を計算するか気にする必要はありませんか?彼が関心を寄せる必要があるのは、メソッドの名前、その入力パラメータ、および結果のメンバの形式です。 抽象化では、オブジェクトのユーザー(クライアント)に関係する詳細のみが表示されます。クラスを使用しているクライアントは、クラスの操作方法のような内部の詳細を意識する必要はありませんか?彼は少数の細部を知る必要がある。これは確かにコードの再利用に役立ちます。

インターフェイス:インターフェイスは、オブジェクトが実行できるアクションの説明です。たとえば、ライトスイッチを反転すると、ライトが点灯し、あなたは気にしません。オブジェクト指向プログラミングでは、インターフェイスは、オブジェクトが「X」になるために必要とするすべての機能の説明です。ここでも、例として、「ACTS LIKE」のライトは、turn_on()メソッドとturn_off()メソッドを持つ必要があります。インターフェイスの目的は、コンピュータにこれらのプロパティを適用させ、TYPE Tのオブジェクト(インターフェイスに関係なく)にX、Y、Zなどの関数が必要であることを知ることです。

インターフェイスは、オブジェクトがオブジェクト(クラス)の特定のプロパティを強制できるプログラミング構造/構文です。たとえば、車のクラスとスクーターのクラスとトラックのクラスがあるとします。これらの3つのクラスにはそれぞれ、start_engine()アクションが必要です。各車両の「エンジンが始動する」方法は各特定のクラスに委ねられますが、start_engineアクションが必要であるという事実はインターフェースのドメインです。

両方の説明が同じことを言っているわけではありませんか?それで彼らは同じか異なっていますか?

+0

私は「抽象化」がより一般的な単語(より抽象的なbtw)であると理解しています。1.理論的な方法OOPの問題について考える。 2ソフトウェアのキャノン/パターン。ワード "インターフェイス"はより専門的で、コードを書くことに属します(プログラミング) –

答えて

2

インターフェイスでは、には何かを行うことができます。要約(イオン)かもしれないさらにあなたに言うどのようにこれらのいくつかを行う。したがって、インタフェースは常に一種の抽象ですが、抽象化はインタフェースよりも多くの情報を運ぶことができます。

C++ - 世界では、 Javaでは、インタフェースの明示的な宣言はありません。代わりに、クラスは、基本クラスが提供するすべてのインタフェースを自動的に提供します。私たちの中には、純粋な仮想メソッド(および場合によっては非純粋な仮想デストラクタ)とインタフェースのみを持つクラスを呼び出す傾向があります。厳密に言えば、それはインタフェースを指定する唯一の方法ではなく、新しい/今後登場するC++の機能(Conceptsなど)がこのシーンを変える可能性が高いことに注意してください。同様に、クラスには少なくとも1つの純粋仮想メソッドがあると抽象クラスであると言いますが、テンプレート/特性ベースのコンポジションを使用するときには異なる定義があり、仮想と継承の代わりに実行とインタフェースを使用するときには異なる定義があるかもしれません。

2

抽象化は、細部から離れて、「ズームアウト」することです。コードをレイアウトするための構造を作成することで、実装か​​ら抽象化する傾向があります。一例として、体の中の個々の細胞のことを考えるのではなく、その人を全体として考えたり、さらに進んで、人々のグループについて考えることができます。

インターフェイスはそれだけです。コードとのインターフェイスこれは通常、あなたのクラスには必ずpublic関数の形式ですが、必ずしもそうではありません。理想的には、インタフェースは、それがどのように影響を受けることなく、何が何ができるかを記述する必要があります。たとえば、歩く人を得る機能はありますが、個々の筋肉を動かす機能はありません。は、機能は関数プロトタイプが何をしている使用されている方法について説明し

インターフェース:C++の関数、たとえば、の文脈では

0

関数を呼び出すクライアントは、関数がどのように実装されているか(つまり、どのように処理するか)を心配する必要はありません。要するに、の抽象表現のレイヤーがあります。

関連する問題