プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

データオブジェクトと構造


基本概念

データ構造は、データのみを保持するために実装された特別なクラスとして定義されます。つまり、純粋なモデルです。車、子供、動物、イベント、従業員、会社、顧客...など。これらのデータは通常、他のクラスの先頭でインスタンス変数として宣言または考慮されます。

このクラスのメソッドは、実際に重要な作業を実行するべきではありません。そうしないと、データ構造クラスはデータ構造ではなくなります!

したがって、主に、メソッドはゲッターとセッター(つまり、アクセサーとミューテーター)です。これは、通常、インスタンス変数がプライベートとして扱われるためです。別の意見があります。データ構造変数はパブリックであり、クラスのインスタンスから直接アクセスできる必要がありますが、プライベート変数の概念が優れていることは議論の余地があります。

  • そのコンテキストでは、データ構造クラスは、そのデータ(変数)を公開または公開し、意味のある(重要な)メソッドまたは関数を持ちません。
  • MainActivity、ListAdapter、Calculator、Iteratorなどの通常のクラス(ここではオブジェクトと呼ばれます)は、データを隠蔽し、それらのデータを処理するメソッドを公開または公開します。

したがって、手元にある問題を解決するための2つのアプローチがあります。つまり、データ構造を最も純粋な形式で実装し、別のObjectクラスを構築してデータに対する操作を構築するか、モデルクラスをObjectクラスとして作成し、それらを隠蔽することができます。次の例のように、メソッドを公開している間のデータ

public class Square {
   public Point topLeft1;
   public double side1;
}
public class Rectangle {
   public Point topLeft1;
   public double height1;
   public double width1;
}
public class Circle {
   public Point center1;
   public double radius1;
}
public class Geometry {
   public final double PI = 3.141592653589793;
   public double area(Object shape) throws NoSuchShapeException {
   if (shape instanceof Square) {
      Square s = (Square)shape;
      return s.side1 x s.side1;
   }else if (shape instanceof Rectangle) {
      Rectangle r = (Rectangle)shape;
      return r.height1 x r.width1;
   }else if (shape instanceof Circle) {
      Circle c = (Circle)shape;
      return PI x c.radius1 x c.radius1; }
      throw new NoSuchShapeException(); }
}

このソリューションでは、形状はデータ構造として扱われ、Geometryクラスはオブジェクトとして扱われます。

利点 −メソッドをさらに追加する必要がある場合は、Geometryクラスにのみ追加します(これは、このソリューションを実装する必要がある時間です)。

短所 −より多くのデータ構造(つまり、より多くの形状)を追加する必要がある場合は、Geometryクラスのすべてのメソッドを変更する必要があります。

データ構造とオブジェクトの違い

  • オブジェクトは動作を公開し、データを隠します。これにより、既存の動作を変更せずに、新しい種類のオブジェクトを簡単に追加できます。また、既存のオブジェクトに新しい動作を追加することも困難になります。
  • データ構造はデータを明らかにまたは公開し、重要な動作はありません。これにより、既存のデータ構造に新しい動作を追加するのは簡単になりますが、既存の関数に新しいデータ構造を追加するのは難しくなります。

  1. データ構造の二分木とプロパティ

    このセクションでは、1つの二分木データ構造のいくつかの重要なプロパティを確認します。このような二分木があるとします。 一部のプロパティは-です レベル「l」のノードの最大数は$2^{l-1}$になります。ここで、レベルは、ルート自体を含む、ルートからノードへのパス上のノードの数です。ルートのレベルは1であると考えています。 高さhの二分木に存在するノードの最大数は$2^ {h}-1$です。ここで、heightは、ルートからリーフへのパス上のノードの最大数です。ここでは、1つのノードを持つ木の高さが1であると考えています。 n個のノードを持つ二分木では、可能な最小の高さまたは最小のレ

  2. データ構造における二分木表現

    ここでは、コンピュータのメモリでバイナリツリーを表現する方法を説明します。表現するには2つの異なる方法があります。これらは配列とリンクリストを使用しています。 このようなツリーが1つあるとします- 配列表現は、レベル順の方法を使用して要素をスキャンすることにより、ツリーデータを格納します。したがって、ノードをレベルごとに格納します。一部の要素が欠落している場合は、空白のままにします。上記のツリーの表現は以下のようになります- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 10 5