抽象化 (抽象型およびインターフェイス)Abstractions (Abstract Types and Interfaces)

抽象化は、コントラクトを記述するコントラクトの完全な実装を提供しない型です。An abstraction is a type that describes a contract but does not provide a full implementation of the contract. 抽象化は通常インターフェイスまたは抽象クラスとして実装し、適切に定義された一連のコントラクトを実装する型の必要なセマンティクスを説明するリファレンス ドキュメントが付属します。Abstractions are usually implemented as abstract classes or interfaces, and they come with a well-defined set of reference documentation describing the required semantics of the types implementing the contract. .NET Framework で最も重要な抽象化のものがStreamIEnumerable<T>、およびObjectします。Some of the most important abstractions in the .NET Framework include Stream, IEnumerable<T>, and Object.

抽象化のコントラクトをサポートする具象型を実装して、フレームワーク Api がかかる (操作) でこの具象型を使用してフレームワークを拡張することができます、抽象化します。You can extend frameworks by implementing a concrete type that supports the contract of an abstraction and using this concrete type with framework APIs consuming (operating on) the abstraction.

時の試練に耐え得ることが有意義で便利な抽象化は、設計することは困難です。A meaningful and useful abstraction that is able to withstand the test of time is very difficult to design. メインの難しさがなくなると不要な少なく、メンバーの適切なセットを取得しています。The main difficulty is getting the right set of members, no more and no fewer. 抽象化のメンバーが多すぎる場合は、難しいかを実装することが不可能になります。If an abstraction has too many members, it becomes difficult or even impossible to implement. 約束の機能が少なすぎますメンバー場合は、多くの興味深いシナリオで役に立たないになります。If it has too few members for the promised functionality, it becomes useless in many interesting scenarios.

フレームワークで多くの抽象化には、フレームワークの使いやすさも悪影響に影響します。Too many abstractions in a framework also negatively affect usability of the framework. 多くの場合、具体的な実装と抽象化で動作している Api の大きい画像に組み込む方法を理解せず、抽象化を理解することが難しくなります。It is often quite difficult to understand an abstraction without understanding how it fits into the larger picture of the concrete implementations and the APIs operating on the abstraction. また、抽象化とそのメンバーの名前は必ずしも抽象頻繁なものになりますわかりにくいと印象は最初の使用量のより広範なコンテキストを理解することがなく。Also, names of abstractions and their members are necessarily abstract, which often makes them cryptic and unapproachable without first understanding the broader context of their usage.

ただし、抽象化は、その他の拡張メカニズムは、できない多くの場合と一致する非常に強力な機能拡張を提供します。However, abstractions provide extremely powerful extensibility that the other extensibility mechanisms cannot often match. 多くのアーキテクチャ パターン、プラグインなどの中核には制御の反転 (IoC)、パイプライン、やなど。They are at the core of many architectural patterns, such as plug-ins, inversion of control (IoC), pipelines, and so on. フレームワークのテストの容易性の非常に重要なもいます。They are also extremely important for testability of frameworks. 適切な抽象化を使用すれば、単体テストするために大量の依存関係を消去できます。Good abstractions make it possible to stub out heavy dependencies for the purpose of unit testing. 要約すると、抽象化は、最新のオブジェクト指向フレームワークのいる豊富な機能を担当します。In summary, abstractions are responsible for the sought-after richness of the modern object-oriented frameworks.

X DO NOT いくつかの具体的な実装と、抽象化を使用する Api を開発してテストする場合を除き、抽象化を提供します。X DO NOT provide abstractions unless they are tested by developing several concrete implementations and APIs consuming the abstractions.

✓ DO 抽象化を設計するときは、抽象クラスとインターフェイス間慎重に選択します。✓ DO choose carefully between an abstract class and an interface when designing an abstraction.

✓ CONSIDER 抽象クラスの具象実装のテストの参照を提供します。✓ CONSIDER providing reference tests for concrete implementations of abstractions. このようなテストは、その実装が正しく、コントラクトを実装するかどうかをテストするユーザーを許可する必要があります。Such tests should allow users to test whether their implementations correctly implement the contract.

Portions © 2005, 2009 Microsoft Corporation.All rights reserved.Portions © 2005, 2009 Microsoft Corporation. All rights reserved.

Pearson Education, Inc. からのアクセス許可によって了承を得て転載Framework デザイン ガイドライン。規則、手法、および再利用可能な .NET ライブラリの第 2 版のパターンKrzysztof Cwalina、Brad 内容では、Microsoft Windows の開発シリーズの一部として、Addison-wesley Professional、2008 年 10 月 22日を公開します。Reprinted by permission of Pearson Education, Inc. from Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition by Krzysztof Cwalina and Brad Abrams, published Oct 22, 2008 by Addison-Wesley Professional as part of the Microsoft Windows Development Series.

関連項目See also