Множинне успадкуванняМножи́нна спадко́вість — властивість деяких обʼєктно-орієнтованих мов програмування, в яких класи можуть успадкувати поведінку і властивості більш ніж від одного суперкласу (безпосереднього батьківського класу). Це відрізняється від простого спадкування, у випадку якого клас може мати тільки один суперклас. Мови програмування з підтримкою множинного спадкування: Eiffel, C++, Dylan, Python, Perl, Curl, Common Lisp (завдяки CLOS), OCaml, Tcl (завдяки Incremental Tcl)[1] та Object REXX (завдяки використанню класів домішок). ОглядМножинне спадкування дозволяє класу успадковувати функціональність від декількох інших класів, оскільки дозволяє класу Worker : Human Musician : Human, Worker StreetMusician : Human, Musician, Worker Якщо компілятор переглядає клас StreetMusician, йому необхідно знати, коли об'єднувати однакові властивості, а коли тримати їх окремо. Наприклад, має сенс об'єднати властивості Age класу Human в StreetMusician. Вік людини не змінюється незалежно від того, чи ми розглядаємо її як музиканта, працівника або як людину загалом. З іншого боку, ім'я може бути як сценічним псевдонімом, так і справжнім ім'ям. Вибір об'єднати або відокремити покладається на програміста, який має знати, що саме є правильним при розробці певного класу. Різні мови обробляють повторюване успадкування різними шляхами.
Smalltalk, C#, Objective-C, Object Pascal, Java, Nemerle, та PHP не підтримують множинної спадковості реалізації, і це дозволяє уникнути будь-якої неоднозначності. Однак всі вони, крім Smalltalk, надають класам можливість реалізувати декілька інтерфейсів. Перевіркою на необхідність множинного спадкування може стати ситуація, коли після побудови структури класів кінцеві класи (листя) можна згрупувати в набори за різними ортогональними ознаками і ці набори між собою перетинаються, що може слугувати ознакою неможливості обійтися однією структурою спадкування, в якій існували б якісь проміжні класи з потрібною поведінкою. Алмазна проблема«Алмазна проблема» (англ. diamond problem) (інколи згадувана як «Смертоносний діамант смерті») це неоднозначність, яка виникає, коли два класи B і C успадковуються від A, а клас D успадковується від обох B і C. Якщо в A є метод, який B і C перевизначили, а D не замістив його, тоді яку версію методу успадковує D: метод B чи метод C? Наприклад, у контексті розробки програмного забезпечення для GUI, клас Це явище називають «алмазною проблемою» через форму діаграми успадкування класів у цій ситуації. У цьому випадку клас A знаходиться вгорі, B і C окремо під ним, а D об’єднує обидва внизу, утворюючи форму ромба. Примітки
|