Pewarisan berbilang

(Dilencongkan daripada Diamond problem)

Pewarisan berbilang (bahasa Inggeris: multiple inheritance) ialah ciri dalam kebanyakan bahasa pengaturcaraan berorientasi objek di mana objek atau kelas mewarisi sifat atau ciri daripada lebih daripada satu objek atau kelas induk. Ini berbeza dengan pewarisan tunggal, di mana objek atau kelas hanya boleh mewarisi satu objek atau kelas induk.

Gambarajah pewarisan kelas berlian.

Antara bahasa yang menyokong pewarisan berbilang ialah C++, OCaml, Python, TCL (sejak versi 8.6), Perl 6, Curl, Dylan, Eiffel dan sebagainya.

Masalah berlian

sunting

Masalah berlian (diamond problem) merupakan masalah dalam pewarisan berbilang akibat ketaksaan wujud apabila dua kelas B dan C mewarisi kelas A, manakala D mewarisi kedua-dua B dan C. Jika ada kaedah (method) dalam A yang telah diatasi (override) oleh B dan/atau C, manakala D tidak mengatasi kaedah tersebut, maka versi kaedah yang diwarisi oleh D tidak dapat ditentukan dengan jelas sama ada daripada B atau C. Ini boleh mengakibatkan kod memberikan hasil di luar sangkaan pengaturcara.

Sebagai contoh, dalam konteks pembangunan perisian GUI, kelas Button mungkin mewarisi kedua-dua kelas Rectangle (untuk penampilan) dan Clickable (untuk kefungsian atau pengendalian input), kelas Rectangle dan kelas Clickable pula mewarisi kelas Object. Jika kaedah equals dipanggil melalui satu objek Button tetapi kaedah tersebut tidak wujud dalam kelas Button tetapi kaedah equals telah diatasi dalam salah satu atau kedua-dua kelas Button dan Rectangle, kaedah manakah yang sepatutnya dipanggil?

Masalah ini disebut "masalah berlian" sempena bentuk gambarajah pewarisan kelas bagi keadaan ini. Di sini, kelas A terletak di atas, B dan C masing-masing di bawahnya, makala D menyambungkan A dan B di bawah lalu menghasilkan bentuk berlian.

Pautan luar

sunting