質問

カプセル化にはどのような種類がありますか?

これは基本的に、抽象化、ポリモーフィズム、継承などの中心的なオブジェクト指向の概念を指していると考えるのは正しいでしょうか?

カプセル化についての私の理解は、それがデータ/機能を隠す方法であるということですが、ポリモーフィズムや継承をカプセル化の形式として考えたことはありません。ただし、ポリモーフィズムがどのようにカプセル化とみなされるかは理解できます。オブジェクトの正確な型を隠すことができるためです。とやりとりしている。

それで、それだけだと思いますか、それとも私がいくつかの核となる概念を見逃しているでしょうか?

編集 コメントで誰かがプライベート/パブリックメソッドを参照している可能性があると述べていることに気づきました。おそらく私は質問を深く考えすぎていて、実際よりも複雑な答えを期待していますか?

役に立ちましたか?

解決

あなたは、私が思うあまり考えている。

http://en.wikipedia.org/wiki/Information_hidingする

を抜粋この記事から

コンピュータサイエンスの中に隠れた情報は変更する可能性が最も高いコンピュータ・プログラムにおける設計上の決定の隠ぺいの原則は、設計上の決定が変更された場合、このように変化してからプログラムの他の部分を保護する、です。保護が実装(変化する可能性が最も高い詳細)からプログラムの残りの部分を遮蔽する安定したインターフェースを提供することを含む。

カプセル化の一つの一般的な形式は、プライベートデータフィールドを非表示にするプロパティを使用しています。もっと一般的な形式は、役割と責任を持つだけでなくdivisonedクラスにソフトウェアの複雑さをカプセル化するためにOOを使用することです。それはあなたが取り組んで特定のタスクに関連するものを除くすべての無関係な情報を非表示に努め、より構造化されたスタイルにモノリシック手続きのデザインスタイルから移動する。これは、OOのキーテナントである。

他のヒント

これは、私の見解と用語のカプセル化は、(カプセル化する)ことを理解することは、ディスプレイの目的のために何かの本質を捉えるの芸術/科学です。実際には、定義によって - カプセル化するものをパッケージ化するか、別の容器で、それを囲むことです。したがって、用語のカプセル化は、あなたが達成しようとすると、それは必要に応じて再利用できるように便利な形でそれをパッケージ化しているものの本質を取ることを意味します。

だからこれを解釈し、それが後でそれがより便利になるだろう形態の材料をパッケージ化することを意味します。

あなたが合うように、本当に...これを解釈します。私はアルゴリズムとユーティリティの束を取り、他のプロジェクトでAPIとして使用することができますクラス構造を作成するとして、それを参照してください。このカプセル化されたコードは、継承されたおよび/またはAPIの根底にある本質を変えずに変更の目的のためにそれを有用にするように拡張することができます。

したがって、抽象化、多型と継承は、カプセル化の形態が、カプセル化されたコードを拡張および変更形態ではありません。

カプセルの異なる形式は、プロパティ、メソッド、フィールド、およびクラスの修飾子を意味するだろう - それは、官民、静的、仮想(C#で)です。他のすべて(すなわちオーバーロード、オーバーライド、影)が変形またはそのカプセル化の拡張です。

あなたは、変更されたコードを更に拡張/ /抽象化された継承されたが、延長されるのパッケージのは、カプセル化された製品です。

することができ、カプセル化を考慮することができます

カプセル化は、標準化の国際標準のための国際組織によって定義されます:「情報技術 - オープンは、分散処理を」ISO / IEC 10746、1998

これは、より原始的な定義で定義です。

エンティティ:関心の任意のコンクリートや抽象的なもの。

オブジェクト:エンティティのモデル。オブジェクトは、その動作とすることを特徴とします、 二重に、その状態によってます。

(対象の)

動作上の制約のセットとアクションのコレクション 彼らが発生することがありますときます。

インタフェース:から成るオブジェクトの挙動の抽象 制約のセットと一緒に、そのオブジェクトの相互作用のサブセット 彼らが発生する可能性がありますときに。

カプセル化:オブジェクトに含まれる情報であるプロパティ のみでサポートされている界面での相互作用を介してアクセス可能 対象ます。

ISOは、カプセル化の種類を定義していません。

他の記事は、情報隠蔽を言及しています。それは、暗黙的に見える参照んが、ISOは<のhref =「http://www.edmundkirwan.com/pub/」のrel = "nofollowをnoreferrerで「カプセル化理論の基礎を、」情報隠蔽の面で明示的にカプセル化を定義していません「> http://www.edmundkirwan.com/pub/ の

エドます。

カプセル化は、単に情報隠蔽以上のものです。それはそれの一つの側面です。これは、モジュールへのインタフェースに関係しています。インタフェースは、2つの非常に重要な機能を提供:カプセル化と抽象化を

  モジュールのクライアントがインタフェースにあるものよりも多くを知っている必要がないときに

抽象化されます。

  モジュールのクライアントがインタフェースにあるものよりも多くを知ることができないときは、

カプセル化されます。

(両方から定義の使用UML Perdita Stevensの)

カプセル化するので、単純に、私は物事の多くは、カプセル化として分類することができることを想像「情報隠蔽」を参照。しかし、私はそれが私が書いたものを私が書くものとは何もクライアント間の疎結合を作成するために使用するツールです言い換えれば、「実装の隠蔽」としてカプセル化と考える傾向があります。

だから私は信じている傾向があり、実用的、そのカプセル化は、私はすべてのクライアントにきれいな、固体界面を提示することを可能にする任意のパラダイムやベストプラクティスです。

一般的に単語の使用は、それが言うにかなり近いです。あなたはそれが含まれている何かをカプセル化し、取引のいずれかが緩んでさせてください。それについて考えるための最良の方法は、あなたが何かを取り、誰ももう詳細を見ることができないブラックボックスにそれを入れているということです。ボックスには、その場所にいくつかの他の解離しインターフェースを提供する、すべてのものを隠します。

情報の隠蔽に沿ったデータを持つあなたは、コード自体の内容のいずれかを隠すことができるので、カプセル化のほんの一態様です。お使いのシステムの一部をカプセル化の目的は、このようにそれが簡単に(両側に)別の詳細を理解すること、離れて全体の複雑さのそのビットを描画することです。 もっとですか

ポールます。

「カプセル化の候補定義:

  • 関連する操作や物事を物理的にグループ化すること。
  • 状態またはデータのゲートキーパー。
  • 実装を非表示にします。」

出典: カプセル化の定義

カプセル化を実現するには 2 つの部分/方法があります。

  • まず、カプセル化とは、関連するデータと動作を 1 つのユニットにパッケージ化する手法です。つまり、操作 (動作) を物理的にグループ化します。

例えば。:-

class Person {
    String name;
    int age;

    void talk() {
    }

    void think() {
    }

    void work() {
    }

    void play() {
    }
}
  • 次に、カプセル化は、外部による悪用からデータを保護するための技術であり、「情報隠蔽」または「データ隠蔽」と呼ばれます。

例えば。:-

class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public String getAge() {
        return age;
    }
}

出典: Java のカプセル化とは何ですか - 何を、なぜ、そしてどのように, ネタバレの作者はインターフェイスを例に挙げていますが、これは真実ではありません。インターフェースは抽象化のためのものです

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top