13

http://www.cs.cornell.edu/courses/cs211/2006sp/Lectures/L08-abstraction/08_abstraction.htmlによると

抽象化には 2 つの種類があります。1 つは関数の抽象化で、もう 1 つはデータの抽象化です。しかし、抽象クラスはどこに当てはまりますか? 私が見る限り、抽象クラスはまったく異なる概念であり、名前がOOPの原則と関係があることを示唆していますが。

誰かがこれに光を当てることができますか?

4

3 に答える 3

12

これらは非常に異なる概念です。

抽象化は、ブラックボックスの概念に似ています。入力が入り、ブラックボックスが何かをし、出力が出ます。ブラックボックスで何が起こっているかは関係ありません。知っておく必要があるのは、それが機能することだけです。これの実際の例はjavaのハッシュ関数です。ユーザーが知っておく必要があるのは、入力値をハッシュすることだけです。数値がどのようにハッシュされるかはユーザーにとって重要ではありません。ブラックボックスは抽象化です。重要なのは、それがどのように機能するかを知る必要はなく、それが機能するということです。

抽象クラス(少なくともJavaでは)は、インターフェースと完全なOOPクラスの混合物です。インターフェイスは、拡張クラスが持つ必要のあるメソッドを定義します。これは、インターフェイスを適切に実装し、すべてが期待どおりに機能することを保証するというコード内の合意です。抽象クラスにはこれらの空のメソッド(合意)があり、呼び出すことができるメソッドも完全に実装されています。

于 2012-09-26T03:00:28.977 に答える
0

オブジェクトは一般にデータと機能を組み合わせており、抽象クラスもその例外ではありません。場合によっては、提供される抽象化はほぼ純粋なデータであり、データへのアクセスを提供するためだけの関数(コレクションクラスなど)があります。他のケースはほぼ逆です(たとえば、C ++のファンクターによって提供される抽象化は通常ほとんど関数です)。

もちろん、それらはほとんど極端です-多くの(ほとんど?)クラスはそれらの間のどこかにあります。

于 2012-09-26T02:56:15.043 に答える