Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

วัตถุข้อมูลและโครงสร้าง


แนวคิดพื้นฐาน

โครงสร้างข้อมูลถูกกำหนดให้เป็นคลาสพิเศษที่นำมาใช้เพื่อเก็บข้อมูลเท่านั้น เช่น โมเดลแท้ เช่น รถยนต์ เด็ก สัตว์ กิจกรรม พนักงาน บริษัท ลูกค้า ... ฯลฯ ข้อมูลเหล่านั้นโดยทั่วไปจะถูกประกาศหรือถือเป็นตัวแปรอินสแตนซ์ในการเริ่มต้นคลาสอื่น

เมธอดของคลาสนี้ไม่ควรทำงานที่สำคัญจริง ๆ มิฉะนั้นคลาสโครงสร้างข้อมูลจะไม่ใช่โครงสร้างข้อมูลอีกต่อไป!

ดังนั้นโดยหลักแล้ว วิธีการคือตัวตั้งค่าและตัวตั้งค่า (เช่น ตัวเข้าถึงและตัวกลายพันธุ์) โดยทั่วไปแล้วเนื่องจากตัวแปรอินสแตนซ์ถือเป็นแบบส่วนตัว มีความคิดเห็นอื่น:ตัวแปรโครงสร้างข้อมูลควรเป็นแบบสาธารณะ และสามารถเข้าถึงได้โดยตรงจากอินสแตนซ์ของคลาส แต่เป็นที่ถกเถียงกันว่าแนวคิดตัวแปรส่วนตัวนั้นดีกว่า

  • ในบริบทนั้น คลาสโครงสร้างข้อมูลจะเปิดเผยหรือเปิดเผยข้อมูล (ตัวแปร) และไม่มีเมธอดหรือฟังก์ชันที่มีความหมาย (สำคัญ)
  • คลาสปกติ (Called Object ที่นี่) เช่น MainActivity, ListAdapter, Calculator, Iterator จะปกปิดข้อมูลของพวกเขา และเปิดเผยหรือเปิดเผยวิธีการที่ทำงานบนข้อมูลเหล่านั้น

ดังนั้นเราจึงมีสองวิธีในการแก้ปัญหาในมือ นั่นคือ ใช้โครงสร้างข้อมูลในรูปแบบที่บริสุทธิ์ที่สุด ในขณะที่สร้างคลาสอ็อบเจ็กต์อื่นเพื่อสร้างการดำเนินการกับข้อมูล หรือ เราสามารถสร้างคลาสโมเดลเป็นคลาสอ็อบเจ็กต์ที่ปกปิด data โดยเปิดเผยวิธีการต่างๆ ดังตัวอย่างต่อไปนี้

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

ในโซลูชันนี้ รูปร่างจะถือเป็นโครงสร้างข้อมูล ในขณะที่คลาสเรขาคณิตถือเป็นวัตถุ

ข้อได้เปรียบ − หากเราต้องการเพิ่มเมธอด เราจะเพิ่มเมธอดในคลาสเรขาคณิตเท่านั้น (นี่คือเวลาที่ควรใช้โซลูชันนี้)

ข้อเสีย − หากเราต้องการเพิ่มโครงสร้างข้อมูล (เช่น รูปร่างเพิ่มเติม) เราจะต้องเปลี่ยนวิธีการทั้งหมดในคลาสเรขาคณิต

ความแตกต่างระหว่างโครงสร้างข้อมูลและออบเจกต์

  • วัตถุแสดงพฤติกรรมและปกปิดข้อมูล ทำให้ง่ายต่อการเพิ่มวัตถุชนิดใหม่โดยไม่ต้องเปลี่ยนพฤติกรรมที่มีอยู่ นอกจากนี้ยังทำให้ยากต่อการเพิ่มลักษณะการทำงานใหม่ให้กับวัตถุที่มีอยู่
  • โครงสร้างข้อมูลเปิดเผยหรือเปิดเผยข้อมูลและไม่มีพฤติกรรมที่สำคัญ สิ่งนี้ทำให้ง่ายต่อการเพิ่มลักษณะการทำงานใหม่ให้กับโครงสร้างข้อมูลที่มีอยู่ แต่ทำให้ยากต่อการเพิ่มโครงสร้างข้อมูลใหม่ให้กับฟังก์ชันที่มีอยู่