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