Ketika dewa pemrograman lama menciptakan pemrograman berorientasi objek dengan kelas, mereka memutuskan ketika datang ke komposisi dan pewarisan untuk memiliki dua hubungan untuk objek: "adalah" dan "memiliki".
Ini sebagian memecahkan masalah subclass yang berbeda dari kelas induk tetapi membuatnya dapat digunakan tanpa melanggar kode. Karena turunan subclass "adalah" objek superclass dan dapat diganti secara langsung untuk itu, meskipun subclass memiliki lebih banyak fungsi anggota atau anggota data, "memiliki" menjamin bahwa ia akan melakukan semua fungsi induk dan memiliki semua anggota Jadi Anda bisa mengatakan Point3D "adalah" Point, dan Point2D "adalah" Point jika keduanya mewarisi dari Point. Selain itu Point3D bisa menjadi subclass dari Point2D.
Namun, kesetaraan antar kelas adalah masalah khusus domain, dan contoh di atas tidak jelas untuk apa yang dibutuhkan oleh programmer agar program dapat bekerja dengan benar. Secara umum, aturan domain-matematika diikuti dan nilai-nilai data akan menghasilkan kesetaraan jika Anda membatasi ruang lingkup perbandingan hanya dalam kasus ini dua dimensi, tetapi tidak jika Anda membandingkan semua anggota data.
Jadi Anda mendapatkan tabel persamaan penyempitan:
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.
Anda biasanya memilih aturan yang paling ketat yang Anda bisa yang masih akan melakukan semua fungsi yang diperlukan dalam domain masalah Anda. Tes kesetaraan bawaan untuk angka dirancang sedemikian ketatnya untuk tujuan matematika, tetapi pemrogram memiliki banyak cara untuk mengatasinya jika itu bukan tujuannya, termasuk pembulatan ke atas / ke bawah, pemotongan, gt, lt, dll. . Objek dengan cap waktu sering dibandingkan dengan waktu pembuatannya sehingga setiap instance harus unik sehingga perbandingan menjadi sangat spesifik.
Faktor desain dalam hal ini adalah untuk menentukan cara yang efisien untuk membandingkan objek. Kadang-kadang perbandingan rekursif semua anggota objek data adalah apa yang harus Anda lakukan, dan itu bisa menjadi sangat mahal jika Anda memiliki banyak dan banyak objek dengan banyak anggota data. Alternatif adalah dengan hanya membandingkan nilai data yang relevan, atau memiliki objek menghasilkan nilai hash anggota data yang bersangkutan untuk perbandingan cepat dengan objek serupa lainnya, menjaga koleksi diurutkan dan dipangkas untuk membuat perbandingan lebih cepat dan kurang intensif cpu, dan mungkin memungkinkan objek yang identik dalam data yang akan diambil dan pointer duplikat ke objek tunggal diletakkan di tempatnya.