जब पुराने प्रोग्रामिंग देवता कक्षाओं के साथ ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग का आविष्कार कर रहे थे, तो उन्होंने फैसला किया कि जब यह रचना और विरासत के लिए एक वस्तु के लिए दो संबंध रखता है: "एक" और "एक" है।
इसने अभिभावकों की तुलना में उपवर्गों की समस्या को आंशिक रूप से हल किया, लेकिन बिना कोड को तोड़े उन्हें उपयोगी बना दिया। क्योंकि एक उपवर्ग उदाहरण एक "सुपरक्लास ऑब्जेक्ट" है और इसके लिए सीधे प्रतिस्थापित किया जा सकता है, भले ही उपवर्ग में अधिक सदस्य फ़ंक्शन या डेटा सदस्य हों, "एक" की गारंटी है यह माता-पिता के सभी कार्यों को पूरा करेगा और इसके सभी सदस्य हैं। तो आप कह सकते हैं कि एक Point3D "एक बिंदु है, और एक Point2D" एक "बिंदु है अगर वे दोनों बिंदु से विरासत में मिले हैं। इसके अतिरिक्त एक प्वाइंट 3 डी, प्वाइंट 2 डी का एक उपवर्ग हो सकता है।
कक्षाओं के बीच समानता समस्या डोमेन-विशिष्ट है, हालांकि, और उपरोक्त उदाहरण अस्पष्ट है कि प्रोग्रामर को प्रोग्राम को सही ढंग से काम करने के लिए क्या चाहिए। आम तौर पर, गणित-डोमेन नियमों का पालन किया जाता है और यदि आप इस मामले में केवल दो आयामों में तुलना के दायरे को सीमित करते हैं, तो डेटा का मान समानता उत्पन्न करेगा, लेकिन यदि आप सभी डेटा सदस्यों की तुलना नहीं करते हैं।
तो आपको समानताओं की एक तालिका मिलती है:
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, आदि शामिल हैं। । टाइमस्टैम्प वाली वस्तुओं की तुलना अक्सर उनकी पीढ़ी के समय से की जाती है और इसलिए प्रत्येक उदाहरण अद्वितीय होना चाहिए ताकि तुलना बहुत विशिष्ट हो।
इस मामले में डिजाइन कारक वस्तुओं की तुलना करने के लिए कुशल तरीके निर्धारित करना है। कभी-कभी सभी ऑब्जेक्ट डेटा सदस्यों की एक पुनरावर्ती तुलना आपको क्या करनी चाहिए, और यह बहुत महंगी हो सकती है यदि आपके पास बहुत सारे और बहुत सारे ऑब्जेक्ट हैं जिसमें बहुत सारे डेटा सदस्य हैं। विकल्प केवल प्रासंगिक डेटा मूल्यों की तुलना करने के लिए हैं, या ऑब्जेक्ट ने अपने डेटा सदस्यों के हैश मान को अन्य समान वस्तुओं के साथ त्वरित तुलना के लिए उत्पन्न किया है, संग्रह को क्रमबद्ध और तुलनात्मक रूप से तुलनात्मक रूप से कम सीपीयू गहन बनाने के लिए छंटाई और छंटाई करते हैं, और शायद उन वस्तुओं की अनुमति देते हैं डेटा में समरूप होने के लिए समान हैं और किसी एकल ऑब्जेक्ट के लिए डुप्लिकेट पॉइंटर को इसके स्थान पर रखा जाना चाहिए।