next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Delegación en la Inicialización Sup: Herencia Ant: Práctica: Un Método Universal Err: Si hallas una errata ...


Ejercicio: Búsqueda de Métodos

Puesto que los constructores son métodos, son buscados siguiendo el mecanismo descrito en la sección 7.6. Considere el código en la tabla 7.1. Las clases en el ejemplo heredan según el esquema que se muestra en la figura 7.2. ¿Cuál es la salida del programa? ¿A que clase pertenece el objeto $a? Esto es, ¿En que paquete es bendecido? ¿A que clase pertenece el objeto $b? ¿Cual es la diferencia entre bendecir con un argumento y con dos argumentos?


Tabla 7.1: Un programa con una herencia complicada
#!/usr/bin/perl -w

package B;

package C;
sub new {
  my ($self, %args) = @_;
  print "C::new\n";
  bless { %args }, 
     ref($self) || $self;
}

package E;
sub new {
  my ($self, %args) = @_;
  print "E::new\n";
  bless { %args };
}

package F;

package G;
@ISA = qw(E C);
package A;
@ISA = qw(B C);

package D;
@ISA = qw(E F G);

sub new {
  my ($self, %args) = @_;
  print "D::new\n";
  bless 
    { %args }, ref($self) || $self;
}

package H;
@ISA = qw(A D);

package main;

my $a = H->new();
print ref($a),"\n";

my $b = G->new();
print ref($b),"\n";


Figura 7.2: Formas de bendición: esquema de herencia del programa
\begin{figure}\centerline{\epsfig{file=inheritance.eps, height=6cm}}\end{figure}


next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Delegación en la Inicialización Sup: Herencia Ant: Práctica: Un Método Universal Err: Si hallas una errata ...
Casiano Rodríguez León
2006-02-21