next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: La clase UNIVERSAL Sup: Programación Orientada a Objetos Ant: Destructores Err: Si hallas una errata ...


Herencia

Una clase informa a Perl que desea heredar de otra clase añadiendo el nombre de esa clase a la variable ISA de su paquete. Por ejemplo:
package A;
@ISA = ( "B" );
indica que la clase A hereda de la clase B.

La herencia en Perl determina el recorrido de búsqueda de un método. Si el objeto no se puede encontrar en la clase, recursivamente y en orden primero-profundo se busca en las clases de las cuales esta hereda, esto es en las clases especificadas en el vector @ISA. Para ser mas precisos, cuando Perl busca por una llamada a un método como $obj->method(), realiza la siguiente secuencia de búsqueda:

  1. Si la clase en la cuál el objeto fué bendecido (digamos MyClass) tiene una subrutina method se llama
  2. Si no, si existe un vector @ISA, para cada una de las clases en el vector @ISA se repiten los pasos 1 y 2
  3. Si no, si la clase UNIVERSAL (véase la sección 7.6.1) tiene un método con ese nombre, se le llama
  4. Si no, si la clase actual MyClass tiene un método AUTOLOAD se le llama
  5. Si no, si una de las clases antepasadas de esta (una vez mas búscadas en orden primero profundo) contiene un método AUTOLOAD, se le llama
  6. Si no, si la clase UNIVERSAL tiene un método AUTOLOAD, se le llama
  7. Si no, se abandona la búsqueda con un mensaje de error

Esta búsqueda sólo se hace una vez por método. Una vez localizado el método se utiliza una ``cache'' para acceder al método rápidamente. Si el vector @ISA o el vector @ISA de cualquiera de los antepasados de la clase es modificado, se limpia la ``cache''.



Subsecciones
next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: La clase UNIVERSAL Sup: Programación Orientada a Objetos Ant: Destructores Err: Si hallas una errata ...
Casiano Rodríguez León
2006-02-21