9

私は Stroustrup の「The C++ Programming Language」を読んでいて、彼は「抽象化」についてよく言及しています。

最も柔軟で効率的で有用な抽象化の多くは、型 (クラス) とアルゴリズム (関数) の他の型とアルゴリズムによるパラメーター化を伴います。

C++ は、洗練された効率的な抽象化を開発および使用するための言語です。

これは、C++ の抽象クラスに関連していますか? それとも、ポリモーフィズム、継承、またはテンプレートを使用していますか?

誰かが例を挙げてもらえますか?

4

3 に答える 3

2

汎用プログラミングでは、抽象化には正確な意味があり、「概念」と呼ばれます。概念は次のように定義されます

概念は、有効な式、関連付けられた型、不変条件、および複雑さの保証で構成される一連の要件です。要件を満たす型は、概念をモデル化すると言われています。概念は、洗練と呼ばれる別の概念の要件を拡張できます。

  • 有効な式は、式に含まれるオブジェクトが概念のモデルと見なされるために正常にコンパイルする必要がある C++ 式です。
  • 関連付けられたタイプは、1 つ以上の有効な式に参加するという点でモデリング タイプに関連するタイプです。通常、関連付けられた型には、モデリング型のクラス定義内にネストされた typedef を介してアクセスするか、traits クラスを介してアクセスできます。
  • 不変条件は、常に真でなければならないオブジェクトの実行時の特性です。つまり、オブジェクトに関係する関数は、これらの特性を維持する必要があります。不変条件は、多くの場合、事前条件と事後条件の形を取ります。
  • 複雑さの保証は、有効な式の 1 つの実行にかかる時間、またはその計算で使用されるさまざまなリソースの量に関する最大制限です。C++ 標準ライブラリで使用される概念は、SGI STL サイトで文書化されています。

概念を実際のコードに実装するには、いくつかの方法があります。古典的な OOP アプローチは、有効な式と関連する型を提供する抽象基本クラスを作成することです。具体的な派生クラスは、不変条件と複雑さの保証を提供します。テンプレートの場合、有効な式はより暗黙的であり、インスタンス化後にのみチェックされます。概念を実装するテンプレートは、ダック タイピングの形式です。アヒルのように見える場合は、アヒルのように鳴きます....

C++0x の開発プロセスでは、概念をコードで直接表現できるようにするために多大な努力が払われましたが、C++11 標準には組み込まれませんでした。ただし、Concepts Liteバージョンは、次の C++14 標準に登場する可能性があります。

于 2013-08-09T08:18:05.083 に答える
1

はい、それは c++ の抽象クラスに関連しており、そのコンテキストに限定されません。彼は一般的な方法で、c++ は抽象化を完全にサポートしていると説明しました。

例: C++ では、クラス型または関数呼び出しを他の型で使用できます。たとえば、関数呼び出しはクラス型/関数をパラメーターとして持つことができます。関数とクラスの両方がフォームの抽象化を参照します。関数またはクラスの定義をユーザーから隠すことまで)

于 2013-08-09T07:38:30.993 に答える