5

カプセル化の種類は何ですか?

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

カプセル化についての私の理解は、それがデータ/機能を隠す方法であるということですが、ポリモーフィズムがオブジェクトの正確なタイプを隠すことができるので、ポリモーフィズムがカプセル化と見なされる方法を見ることができますが、私は実際にはポリモーフィズムまたは継承をカプセル化の形式とは見なしませんでしたと相互作用しています。

それで、それはそれについてだと思いますか、それとも私はいくつかのコアコンセプトを欠いていますか?

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

4

7 に答える 7

3

あなたは考えすぎだと思います。

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

この記事からの抜粋:

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

カプセル化の一般的な形式の 1 つは、プロパティを使用してプライベート データ フィールドを隠すことです。さらに一般的な形式は、オブジェクト指向を使用して、ソフトウェアの複雑さを、役割と責任を持つ十分に分割されたクラスにカプセル化することです。これは、モノリシックな手続き型デザイン スタイルから、作業中の特定のタスクに関連するもの以外のすべての無関係な情報を隠そうとする、より構造化されたスタイルに移行するため、OO の重要なテナントです。

于 2008-12-22T02:10:16.017 に答える
1

カプセル化は、単に情報を隠すだけではありません。それはその一面です。モジュールへのインターフェースに関係しています。インターフェイスは、カプセル化と抽象化という 2 つの非常に重要な機能を提供します。

抽象化とは、モジュールのクライアントがインターフェースにあるもの以上を知る必要がない場合です。

カプセル化とは、モジュールのクライアントがインターフェイスにあるもの以上を知ることができない場合です。

(両方の定義はPerdita Stevens によるUML の使用から)

于 2008-12-22T02:30:49.580 に答える
1

カプセル化 (カプセル化する) という用語は、表示目的で何かの本質を捉える芸術/科学であるというのが私の見解と理解です。実際、定義上、カプセル化とは、何かをパッケージ化するか、別のコンテナーに入れることです。したがって、カプセル化という用語は、達成しようとしているものの本質を取り、必要に応じて再利用できるように有用な形でパッケージ化することを意味します。

したがって、これを解釈すると、後でより役立つ形で資料をパッケージ化することを意味します。

だから本当に...あなたが適切だと思うようにこれを解釈してください. 一連のアルゴリズムとユーティリティを使用して、他のプロジェクトで API として使用できるクラス構造を作成することだと思います。このカプセル化されたコードは、継承および/または拡張して、API の基本的な本質を変更することなく、変更された目的に役立つようにすることができます。

したがって、抽象化、ポリモーフィズム、継承はカプセル化の形式ではなく、カプセル化されたコードを拡張および変更する形式です。

カプセル化のさまざまな形式は、プロパティ、メソッド、フィールド、およびクラスの修飾子を意味します。つまり、public、private、static、virtual (C# の場合) です。他のすべて (つまり、オーバーロード、オーバーライド、シャドウ) は、そのカプセル化の変更または拡張です。

変更されたコードは、さらに継承/抽象化/拡張できるカプセル化と見なすことができますが、拡張されるパッケージはカプセル化された製品です。

于 2008-12-22T02:26:28.043 に答える
1

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

より原始的な定義の観点から定義されています。

エンティティ: 興味のある具体的または抽象的なもの。

オブジェクト: エンティティのモデル。オブジェクトは、その動作によって特徴付けられ、二重に、その状態によって特徴付けられます。

(オブジェクトの) 動作: 発生する可能性がある一連の制約を持つアクションのコレクション。

インターフェース: オブジェクトの相互作用のサブセットと、それらがいつ発生するかに関する一連の制約から構成される、オブジェクトの動作の抽象化。

カプセル化: オブジェクトに含まれる情報は、オブジェクトがサポートするインターフェースでの相互作用を通じてのみアクセスできるという特性。

ISO は、さまざまなタイプのカプセル化を定義していません。

他の投稿では、情報の隠蔽について言及しています。ISO は、情報の隠蔽に関してカプセル化を明示的に定義していませんが、暗黙のように見えます。http://www.edmundkirwan.com/pub/ の「カプセル化理論の基礎」を参照してください。

エド。

于 2008-12-30T09:16:37.243 に答える
0

カプセル化は単に「情報隠蔽」を指すため、カプセル化に分類できるものはたくさんあると思います。ただし、カプセル化を「実装の隠蔽」と考える傾向があります。つまり、カプセル化は、私が書いたものと、私が書いたもののクライアントとの間の疎結合を作成するために使用するツールです。

そのため、カプセル化は、あらゆるクライアントにクリーンで堅牢なインターフェイスを提示できるようにするパラダイムまたはベスト プラクティスであると、実用的に考える傾向があります。

于 2008-12-22T02:14:40.610 に答える
0

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

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

出典:カプセル化の定義

カプセル化を実現するには、次の 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;
    }
}

出典: What is Encapsulation in Java - What is Encapsulation in Java - The WHAT, WHY and HOWスポイラーの作成者はインターフェイスを例として挙げていますが、これは真実ではありません。インターフェイスは抽象化のためのものです

于 2016-06-26T06:12:54.427 に答える
0

一般的に、単語の使用法は、それが言っていることにかなり近いです。あなたは何かを封じ込めるときにそれをカプセル化し、どんな取引も解き放ちません。それについて考える最良の方法は、あなたが何かを取り、もはや誰も詳細を見ることができないブラックボックスに入れているということです. ボックスはすべてを隠し、代わりに別の関連付けられていないインターフェイスを提供します。

情報の隠蔽はカプセル化の 1 つの側面にすぎません。データとともに、コード自体の詳細を隠蔽することもできるからです。システムの一部をカプセル化する目的は、その複雑さを全体から引き離し、(両側の) 個別の詳細を理解しやすくすることです。もっと?

ポール。

于 2008-12-22T04:19:23.777 に答える