แนวคิดพื้นฐาน
โครงสร้างข้อมูลถูกกำหนดให้เป็นคลาสพิเศษที่นำมาใช้เพื่อเก็บข้อมูลเท่านั้น เช่น โมเดลแท้ เช่น รถยนต์ เด็ก สัตว์ กิจกรรม พนักงาน บริษัท ลูกค้า ... ฯลฯ ข้อมูลเหล่านั้นโดยทั่วไปจะถูกประกาศหรือถือเป็นตัวแปรอินสแตนซ์ในการเริ่มต้นคลาสอื่น
เมธอดของคลาสนี้ไม่ควรทำงานที่สำคัญจริง ๆ มิฉะนั้นคลาสโครงสร้างข้อมูลจะไม่ใช่โครงสร้างข้อมูลอีกต่อไป!
ดังนั้นโดยหลักแล้ว วิธีการคือตัวตั้งค่าและตัวตั้งค่า (เช่น ตัวเข้าถึงและตัวกลายพันธุ์) โดยทั่วไปแล้วเนื่องจากตัวแปรอินสแตนซ์ถือเป็นแบบส่วนตัว มีความคิดเห็นอื่น:ตัวแปรโครงสร้างข้อมูลควรเป็นแบบสาธารณะ และสามารถเข้าถึงได้โดยตรงจากอินสแตนซ์ของคลาส แต่เป็นที่ถกเถียงกันว่าแนวคิดตัวแปรส่วนตัวนั้นดีกว่า
- ในบริบทนั้น คลาสโครงสร้างข้อมูลจะเปิดเผยหรือเปิดเผยข้อมูล (ตัวแปร) และไม่มีเมธอดหรือฟังก์ชันที่มีความหมาย (สำคัญ)
- คลาสปกติ (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(); } }
ในโซลูชันนี้ รูปร่างจะถือเป็นโครงสร้างข้อมูล ในขณะที่คลาสเรขาคณิตถือเป็นวัตถุ
ข้อได้เปรียบ − หากเราต้องการเพิ่มเมธอด เราจะเพิ่มเมธอดในคลาสเรขาคณิตเท่านั้น (นี่คือเวลาที่ควรใช้โซลูชันนี้)
ข้อเสีย − หากเราต้องการเพิ่มโครงสร้างข้อมูล (เช่น รูปร่างเพิ่มเติม) เราจะต้องเปลี่ยนวิธีการทั้งหมดในคลาสเรขาคณิต
ความแตกต่างระหว่างโครงสร้างข้อมูลและออบเจกต์
- วัตถุแสดงพฤติกรรมและปกปิดข้อมูล ทำให้ง่ายต่อการเพิ่มวัตถุชนิดใหม่โดยไม่ต้องเปลี่ยนพฤติกรรมที่มีอยู่ นอกจากนี้ยังทำให้ยากต่อการเพิ่มลักษณะการทำงานใหม่ให้กับวัตถุที่มีอยู่
- โครงสร้างข้อมูลเปิดเผยหรือเปิดเผยข้อมูลและไม่มีพฤติกรรมที่สำคัญ สิ่งนี้ทำให้ง่ายต่อการเพิ่มลักษณะการทำงานใหม่ให้กับโครงสร้างข้อมูลที่มีอยู่ แต่ทำให้ยากต่อการเพิ่มโครงสร้างข้อมูลใหม่ให้กับฟังก์ชันที่มีอยู่