Computer >> 컴퓨터 >  >> 프로그램 작성 >> 프로그램 작성

데이터 개체 및 구조

<시간/>

기본 개념

데이터 구조는 데이터만 보유하도록 구현된 특수 클래스로 정의됩니다. 자동차, 아이, 동물, 이벤트, 직원, 회사, 고객 등. 이러한 데이터는 일반적으로 다른 클래스의 시작 부분에서 인스턴스 변수로 선언되거나 간주됩니다.

이 클래스의 메소드는 실제 중요한 작업을 수행하지 않아야 합니다. 그렇지 않으면 데이터 구조 클래스는 더 이상 데이터 구조가 아닙니다!

따라서 주로 메서드는 getter 및 setter(즉, 접근자 및 변경자)입니다. 일반적으로 인스턴스 변수가 비공개로 처리되기 때문입니다. 다른 의견이 있습니다. 데이터 구조 변수는 공개되어야 하고 클래스의 인스턴스에서 직접 액세스할 수 있지만 비공개 변수 개념이 더 나은지에 대해서는 논쟁의 여지가 있습니다.

  • 이 맥락에서 데이터 구조 클래스는 데이터(변수)를 나타내거나 노출하며 의미 있는(중요한) 메서드나 기능이 없습니다.
  • MainActivity, ListAdapter, Calculator, Iterator와 같은 일반 클래스(여기서는 Object라고 함)는 데이터를 숨기고 해당 데이터에서 작동하는 메서드를 표시하거나 노출합니다.

따라서 문제를 해결하기 위한 두 가지 접근 방식이 있습니다. 즉, 가장 순수한 형태로 데이터 구조를 구현하는 반면, 데이터에 대한 작업을 빌드하기 위해 또 다른 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 클래스의 모든 메소드를 변경해야 합니다.

데이터 구조와 객체의 차이점

  • 객체는 동작을 노출하고 데이터를 숨깁니다. 이를 통해 기존 동작을 변경하지 않고 새로운 종류의 객체를 간단하게 추가할 수 있습니다. 또한 기존 개체에 새로운 동작을 추가하기가 어렵습니다.
  • 데이터 구조는 데이터를 나타내거나 노출하며 중요한 동작이 없습니다. 이렇게 하면 기존 데이터 구조에 새로운 동작을 간단하게 추가할 수 있지만 기존 함수에 새 데이터 구조를 추가하는 것은 어렵습니다.