Computer >> Máy Tính >  >> Lập trình >> Lập trình

Đối tượng dữ liệu và cấu trúc

Khái niệm cơ bản

Cấu trúc dữ liệu được định nghĩa là các lớp đặc biệt được triển khai để chỉ lưu giữ dữ liệu, tức là các mô hình thuần túy, ví dụ:Xe, Trẻ em, Động vật, Sự kiện, Nhân viên, Công ty, Khách hàng ... vv. Những dữ liệu đó thường được khai báo hoặc được coi là các biến cá thể trong phần đầu của các lớp khác.

Các phương thức của lớp này sẽ không thực hiện bất kỳ công việc quan trọng thực sự nào, nếu không thì lớp cấu trúc dữ liệu không phải là một cấu trúc dữ liệu nữa!

Vì vậy, chủ yếu, các phương thức là getters và setters (tức là trình truy cập và trình biến đổi), nói chung là vì các biến cá thể được coi là riêng tư. Có ý kiến ​​khác:rằng các biến cấu trúc dữ liệu nên là công khai và có thể được truy cập trực tiếp từ phiên bản của lớp, nhưng có thể tranh luận rằng khái niệm biến private tốt hơn.

  • Trong bối cảnh đó, lớp cấu trúc dữ liệu tiết lộ hoặc hiển thị dữ liệu (biến) của nó và không có phương thức hoặc hàm có ý nghĩa (quan trọng).
  • Một lớp bình thường (được gọi là Đối tượng ở đây), như MainActivity, ListAdapter, Máy tính, Iterator, che giấu dữ liệu của chúng và tiết lộ hoặc để lộ các phương thức hoạt động trên những dữ liệu đó.

Vì vậy, chúng ta có hai cách tiếp cận để giải quyết vấn đề trong tay, tức là triển khai một Cấu trúc dữ liệu ở dạng tinh khiết nhất của nó, trong khi xây dựng một lớp Đối tượng khác để xây dựng các hoạt động trên dữ liệu của chúng, HOẶC, chúng ta có thể tạo các lớp mô hình dưới dạng các lớp Đối tượng, che giấu dữ liệu trong khi hiển thị các phương pháp của chúng, như trong ví dụ sau

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(); }
}

Trong giải pháp này, các hình dạng được coi là cấu trúc dữ liệu, trong khi lớp Hình học được coi là Đối tượng.

Lợi thế - Nếu chúng tôi yêu cầu thêm nhiều phương thức, chúng tôi sẽ chỉ thêm chúng trong lớp Hình học (đây là lúc giải pháp này nên được thực hiện).

Bất lợi - Nếu chúng tôi yêu cầu thêm nhiều Cấu trúc dữ liệu hơn (tức là nhiều hình dạng hơn), chúng tôi sẽ phải thay đổi tất cả các phương thức của bạn trong lớp Geometry.

Sự khác biệt giữa cấu trúc dữ liệu và đối tượng

  • Đối tượng phơi bày hành vi và che giấu dữ liệu. Điều này làm cho việc thêm các loại đối tượng mới trở nên đơn giản mà không thay đổi các hành vi hiện có. Nó cũng gây khó khăn khi thêm các hành vi mới vào các đối tượng hiện có.
  • Cấu trúc dữ liệu tiết lộ hoặc để lộ dữ liệu và không có hành vi đáng kể. Điều này giúp việc thêm các hành vi mới vào cấu trúc dữ liệu hiện có trở nên đơn giản nhưng khó thêm cấu trúc dữ liệu mới vào các chức năng hiện có.