Problema do diamante: Diferenzas entre revisións

Contido eliminado Contido engadido
Addbot (conversa | contribucións)
m Bot: Retiro 2 ligazóns interlingüísticas, proporcionadas agora polo Wikidata en d:q1070739
Vivaelcelta (conversa | contribucións)
Sen resumo de edición
Liña 8:
Diferentes linguaxes de programación diríxense a este problema de maneiras diferentes:
 
* [[C++]] por defecto segue cada ruta de herdanza por separado, polo que un obxecto D realmente contendería dous obxectos A separados, e o uso dos membros de A debe ser adecuadamente definido. Se a herdanza de A a B e a herdanza de A a C están marcadas como "virtuais" ("class B : virtual A"), C++ preocúpase por crear só un obxecto A, e o uso dos membros de A funciona correctamente. Se [[herdanza virtual]] e herdanza non virtual son misturadasmesturadas, hai un só A virtual e un só A non virtual para cada ruta de herdanza non virtual a A.
* [[Common Lisp]] intenta ofrecer tanto o comportamento por defecto como a capacidade de redefinilo. Por defecto, escóllese o método coas clases argumento máis específicas <!-- traducido do artigo inglés. que significa? -->; é dicir, na orde na que as clases pai son nomeadas na definición da subclase. Sen embargo, o programador pode redefinir isto, dando unha orde de resolución de método específico ou establecendo unha regra para a combinación de métodos.
* [[Eiffel]] manexa esta situación seleccionando e renomeando directivas, onde os métodos dos ascendentes a empregar nun descendente son explicitamente especificados. Isto permite que os métodos da clase base sexan compartidos entre seus descendentes o incluso dar a cada uno de eles una copia separada de la clase base.
* [[Perl]] y [[IoÍo (lúa)|Ío]] manexan isto mediante a especificación das clases de herdanza nunha lista ordenada. Na ambigüidade mostrada arriba, a clase B e os seus ascendentes serían comprobados antes da clase C e os seus ascendentes, polo que o método A sería herdado a través de B.
* [[Python]] ten que tratar con isto dende a introdución de clases de novo estilo, das que todas teñen un ascendente común, <code>object</code>. Python crea una lista de clases que se buscan de esquerda a dereita e de abaixo cara arriba (D, B, A, C, A) e logo elimina tódalas aparicións dunha clase repetida menos a última. Polo que, a orde de resolución do método é: D, B, C, A.