数据对象和结构

基本概念

数据结构被定义为仅用于保存数据的特殊类,即纯模型,例如汽车,孩子,动物,事件,员工,公司,客户...等。这些数据通常在其他类的开头声明或视为实例变量。

此类的方法不应执行任何实际的重要工作,否则数据结构类不再是数据结构!

因此,主要是方法是获取器和设置器(即访问器和更改器),通常是因为实例变量被视为私有变量。还有另一种观点:数据结构变量应该是公共的,可以直接从类的实例访问,但是私有变量的概念更好是有争议的。

  • 在这种情况下,数据结构类显示或公开其数据(变量),并且没有有意义(重要)的方法或功能。

  • 诸如MainActivity,ListAdapter,Calculator,Iterator之类的普通类(在此称为“对象”)隐藏其数据,并揭示或公开其对这些数据起作用的方法。

因此,我们有两种方法可以解决当前的问题,即以最纯粹的形式实现数据结构,同时构建另一个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类中更改所有方法。

数据结构和对象之间的区别

  • 对象公开行为并隐藏数据。这使得在不更改现有行为的情况下添加新的对象变得很简单。这也使向现有对象添加新行为变得困难。

  • 数据结构显示或公开数据,并且没有重大行为。这使向现有数据结构中添加新行为变得简单,但使向现有功能中添加新数据结构变得困难。