Problema do diamante: Diferenzas entre revisións
Contido eliminado Contido engadido
m Bot: Retiro 2 ligazóns interlingüísticas, proporcionadas agora polo Wikidata en d:q1070739 |
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
* [[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 [[
* [[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.
|