Ejercicio: Búsqueda de Métodos

Puesto que los constructores son métodos, son buscados siguiendo el mecanismo descrito en la sección 6.6. Considere el código en la tabla 6.1. Las clases en el ejemplo heredan según el esquema que se muestra en la figura 6.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 6.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: Formas de bendición: esquema de herencia del programa
\begin{figure}\centerline{\epsfig{file=inheritance.eps, height=6cm}}\end{figure}

Casiano Rodríguez León
Licencia de Creative Commons
Principios de Programación Imperativa, Funcional y Orientada a Objetos Una Introducción en Perl/Una Introducción a Perl
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=43.
2012-06-19