เมื่อเทพการเขียนโปรแกรมเก่าได้ประดิษฐ์การเขียนโปรแกรมเชิงวัตถุด้วยคลาสพวกเขาตัดสินใจเมื่อมันมาถึงการจัดองค์ประกอบและการสืบทอดที่มีความสัมพันธ์สองอย่างสำหรับวัตถุ: "คือ" และ "มี"
สิ่งนี้สามารถแก้ไขปัญหาของคลาสย่อยที่แตกต่างจากคลาสพาเรนต์ แต่ทำให้สามารถใช้งานได้โดยไม่ต้องใช้รหัส เนื่องจากอินสแตนซ์คลาสย่อย "เป็น" วัตถุซูเปอร์คลาสและสามารถทดแทนได้โดยตรงสำหรับมันแม้ว่าคลาสย่อยจะมีฟังก์ชันสมาชิกหรือสมาชิกข้อมูลมากขึ้นก็ตาม "" มี "รับประกันว่ามันจะทำหน้าที่ทั้งหมดของพาเรนต์และมีทั้งหมด สมาชิก. ดังนั้นคุณอาจบอกว่า Point3D "เป็น" Point และ Point2D "คือ" Point หากทั้งคู่สืบทอดจาก Point นอกจากนี้ Point3D อาจเป็นคลาสย่อยของ Point2D
อย่างไรก็ตามความเท่าเทียมกันระหว่างคลาสเป็นปัญหาเฉพาะโดเมนและตัวอย่างข้างต้นไม่ชัดเจนว่าโปรแกรมเมอร์ต้องการอะไรเพื่อให้โปรแกรมทำงานอย่างถูกต้อง โดยทั่วไปแล้วจะมีการติดตามกฎของโดเมนคณิตศาสตร์และค่าของข้อมูลจะสร้างความเท่าเทียมกันหากคุณ จำกัด ขอบเขตของการเปรียบเทียบในกรณีนี้คือสองมิติ แต่ไม่ใช่ถ้าคุณเปรียบเทียบสมาชิกข้อมูลทั้งหมด
ดังนั้นคุณจะได้ตารางความเท่าเทียมกันที่แคบลง:
Both objects have same values, limited to subset of shared members
Child classes can be equal to parent classes if parent and childs
data members are the same.
Both objects entire data members are the same.
Objects must have all same values and be similar classes.
Objects must have all same values and be the same class type.
Equality is determined by specific logical conditions in the domain.
Only Objects that both point to same instance are equal.
โดยทั่วไปคุณเลือกกฎที่เข้มงวดที่สุดที่คุณสามารถทำได้ที่จะยังคงทำหน้าที่ที่จำเป็นทั้งหมดในโดเมนปัญหาของคุณ การทดสอบความเท่าเทียมกันในตัวสำหรับตัวเลขได้รับการออกแบบให้มีข้อ จำกัด มากที่สุดเท่าที่จะเป็นไปได้สำหรับวัตถุประสงค์ทางคณิตศาสตร์ แต่โปรแกรมเมอร์มีหลายวิธีที่หากไม่ใช่เป้าหมายรวมถึงการปัดเศษขึ้น / ลงการตัดทอน gt, lt ฯลฯ . วัตถุที่มีการประทับเวลามักจะถูกเปรียบเทียบโดยเวลาการสร้างของพวกเขาและดังนั้นแต่ละอินสแตนซ์จะต้องไม่ซ้ำกันเพื่อการเปรียบเทียบได้เฉพาะ
ปัจจัยการออกแบบในกรณีนี้คือการหาวิธีที่มีประสิทธิภาพในการเปรียบเทียบวัตถุ บางครั้งการเปรียบเทียบแบบเรียกซ้ำของข้อมูลสมาชิกวัตถุทั้งหมดเป็นสิ่งที่คุณต้องทำและอาจมีราคาแพงมากหากคุณมีวัตถุจำนวนมากและมีสมาชิกข้อมูลจำนวนมาก ทางเลือกอื่นคือการเปรียบเทียบค่าข้อมูลที่เกี่ยวข้องเท่านั้นหรือให้วัตถุสร้างค่าแฮชของข้อมูลสมาชิกที่เกี่ยวข้องกับการเปรียบเทียบอย่างรวดเร็วกับวัตถุอื่นที่คล้ายคลึงกันเก็บการเรียงลำดับและการตัดเพื่อให้การเปรียบเทียบเร็วขึ้นและน้อยกว่าซีพียูเข้มข้น เหมือนกันในข้อมูลที่จะถูกเลือกและตัวชี้ที่ซ้ำกันไปยังวัตถุเดียวจะถูกแทนที่