lunes, 9 de septiembre de 2013

Perl Orientado a Objetos


La Programación Orientada a Objetos también es posible en el Lenguaje Perl, para su construcción se hace a través de la extensión ".pm", generalmente llamados módulos o clases, cada nueva clase se crea a través de un nombre con la palabra reservada "package", toda clase u objeto necesita de un método constructor, generalmente llamado new aunque puede ser otro nombre, el cual contiene la referencia al objeto creado así como las variables de instancias que podrán o no ser manipuladas a través de los métodos de la clase.

En el siguiente ejemplo, puedes ver una demostración de la creación de una clase llamada "Coche", esta clase tiene 4 variables de instancia, aunque sólo 3 de ellas pueden ser modificadas, ya que todos los coches tienes 4 ruedas, sin embargo el color, velocidad y puertas si pueden ser cambiados a través de sus métodos, si no se decide cambiarlos se mantendrán los valores por defecto, que contienen el método constructor.

Para ello primero creamos el objeto que guardarás con extensión ".pm" -> "Coche.pm" ...

Coche.pm


package Coche;
#El modulo strict genera errores, es decir, asegura de que la escritura de codigo es llevada a cabo correctamente
use strict; 

#Se inicializa el constructor de referencia del objeto, generalmente se hace con la palabra 'new'
sub new{
    my $this=shift; #Cogemos la clase que somos o una referencia a la clase (si soy un objeto)
    my $class = ref($this) || $this; #Averiguo la clase a la que pertenezco

    my $self={}; #Inicializamos la tabla hash que contendrá las variables de instancia
    $self->{COLOR} = "rojo"; #color predeterminado  
    $self->{RUEDAS} = 4;   #numero de ruedas, valor fijo
 $self->{VELOCIDAD_MAXIMA} = 240; #velocidad predeterminada
 $self->{PUERTAS} = 5; #numero de puertas predeterminado

    bless $self, $class; #Se crea la clase
    return ($self); #Devolvemos la clase recién construida
}


#METODOS DE LA CLASE

#COLOR DEL COCHE
sub color
{
#Recibe el parametro por default de la clase
my $self=shift;
#Si se indica el color como parametro mostrarlo de lo contrario mantener el default
$self->{COLOR} = shift if (@_);
return $self->{COLOR};
}

#RUEDAS DEL COCHE, no acepta parametros ya que todos los coches tienes 4 ruedas
sub ruedas
{
#Recibe el parametro por default de la clase
my $self=shift;
return $self->{RUEDAS};
}

#VELOCIDAD MAXIMA
sub velocidad_maxima
{
#Recibe el parametro por default de la clase
my $self=shift;
#Si se indica la velocidad como parametro mostrarlo de lo contrario mantener el default
$self->{VELOCIDAD} = shift if (@_);
return $self->{VELOCIDAD};
}

#PUERTAS
sub puertas
{
#Recibe el parametro por default de la clase
my $self=shift;
$self->{PUERTAS} = shift if (@_);
return $self->{PUERTAS};
}

#Esto es imprescindible para indicar la finalizacion de la clase
#Fin
1;


A continuación creamos un archivo en la misma carpeta donde has guardado la clase, a este archivo lo puedes llamar "index.pl".

index.pl

#Importamos el modulo o clase
use Coche;

my $coche=Coche::new("Coche");
#para inicializar la clase tambien se puede hacer de la siguiente forma
#my $coche=Coche->new();

$color = $coche->color("Verde");
$ruedas = $coche->ruedas;
$velocidad_maxima = $coche->velocidad_maxima(280);
$puertas = $coche->puertas(3);

print "Caracteristicas del coche ... \n";
print "Color: $color \n";
print "Ruedas: $ruedas \n";
print "Velocidad maxima: $velocidad_maxima k/h \n";
print "Puertas: $puertas \n";


Si ejecutas el archivo index.pl podrás ver como hemos llamado a la clase e indicado nuevas características o propiedades, menos el número de ruedas como ya se comentó anteriormente ...

Tutorial de iniciación a Perl en Español


Como se puede ver, es cuestión de seguir unas pautas sencillas para la creación de nuevos módulos. Perl contiene muchos módulos integrados que simplemente con la palabra reservada "use" los podemos importar a los proyectos, hay módulos para cualquier tarea o acción que se deseé realizar, también existe la posibilidad de instalar nuevos módulos a través de "cpan", aunque esto lo veremos más adelante.