0

重複の可能性:
抽象化とカプセル化の違いは?
抽象化とカプセル化の違いは何ですか?

OOP設計について議論するとき、カプセル化と抽象化の概念が重要であることに気づきました。しかし、私はそれらが互いにどのように異なるのかよくわかりません。私はたくさんの記事や投稿(それらのほとんどはこのサイトからのものです)を読んだことがありますが、それらは単に互いに矛盾しています。

抽象化は、現実世界のオブジェクトの複雑さを分解する手段であると私は理解しています。この分解には、実世界のオブジェクトを集合的に表す複数のオブジェクトの作成が含まれる場合があります。抽象化には多くのレイヤーを含めることもできます。クラスの継承は、これが当てはまる場合の例です。

カプセル化は、クラス内の内部実装データを隠すプロセスです。これには、Access修飾子やAccessorメソッドなどの言語機能が重要です。

これらの定義が正しい場合(間違っている場合は訂正してください)、インターフェイスはどのような原則で使用されますか?抽象化?実世界のオブジェクトのグループをインターフェイスにまとめることができるからですか?またはカプセル化。インターフェイス自体を使用して、内部の機能を明らかにすることなく、オブジェクトの機能を公開できます。

可能であれば、これら2つの原則を明確に区別する簡単な例も提供できますか?

乾杯。

4

2 に答える 2

0

少なくとも私にとって抽象化を理解する最良の方法は、この例を使用して、幾何学的図形の瞬間を考えることです。三角形、正方形、長方形、円など、この「幾何学的図形」の一部を形成するこの要素をクラスモデルで表現したい場合は、次のようにすることができます

public abstract class GeometricFigures
{

    public int perimeter(); //Common Behavior
}

この要素は私たちの世界で実際の表現を持たないため、これは抽象クラスです。GeometricFigures クラスはインスタンス化できないため、問題ありません。

GeometricFiguresこのクラスの子を定義することもできます。

public class Triangle inherits GeometricFigures
{
    public int size1;
    public int size2;
    public int size3;
    public int perimeter( int size1, int size2, int size3);
}

の概念により、このクラスは現実には存在しないというAbstraction父クラスの理解を表すことができますGeometricFigures

于 2012-05-16T16:34:49.433 に答える
0

インターフェイスは、抽象化カテゴリに属します。それらは、クラスの共通機能を別のクラスに「抽象化」または分解し、すべてのサブクラスに契約を順守させ、そのすべてのメソッドを実装するように強制します。私の考えでは、抽象化とインターフェースは、コードの再利用を容易にするコードの再利用であり、カプセル化は主にセキュリティ対策を強化するものだと考えています。どちらも主要な OOP の概念であり、いくつかの比較を共有しています。

于 2012-05-16T16:37:04.347 に答える