P1N6Ü1N0 - PERL - Objetos



Inicio
C
Perl
Caml
Shell
GTK
SQL

Perl tiene capacidad de crear programas orientados a objetos. No miré demasiado el tema de crear tus propios objetos, pero para esto teneis un excelente tutorial:

man perltoot

Aquí voy a explicar cómo usar los objetos que PERL nos ofrece, porque algunas veces usándolos podemos hacer programas muy potentes con pocas líneas de código.

Antes de nada voy a explicar un poco por encima (y seguramente no de forma muy exacta) lo que es un objeto.

Un objeto es una variable que engloba en su interior datos y código. Para la gente que no sabe nada de orientación a objetos, creo que lo más fácil es ver esto con un ejemplo:

Imaginémos que tenemos un módulo para manejar listas enlazadas de cosas (típico módulo que todo el mundo hace). Este es el ejemplo perfecto de objeto, tenemos un tipo de dato, que es la estructura que contiene la lista en su interior, y tenemos un conjunto de funciones que todas ellas reciben el tipo de dato como parámetro, porque todas ellas son para manejar una lista.

Pues si lo hacemos en un lenguaje orientado a objetos, es lo mismo, pero para llamar a estas funciones, en lugar de hacerlo asi:

ModuloLista_insertar(lista, dato)

...se hace de esta otra forma:

lista->insertar(dato)

...que ahorra código, básicamente, pero en el fondo es la misma cosa. Luego los objetos permiten hacer cosas complicadas como herencia, que ya sin un lenguaje orientado a objetos son algo más complicadas.

De hecho, cuando el compilador traduce esa línea, la convierte en algo del estilo de esto:

class_Lista_insertar(lista,dato)

...así que realmente no hay diferencia, es básicamente cuestión de notación.

En perl también se usan los objetos de esta forma (con ->), pero antes de seguir, una consideración:

Todo objeto tiene una función que no recibe ningún objeto como parámetro, sino que lo devuelve, es la fonción constructora. Esta función reserva memoria para el objeto e inicializa las variables de su estructura que haga falta.

Esta función, tanto en perl como en muchos otros lenguajes, se llama new. En otros lenguajes de programación para crear un objeto nuevo de tipo Lista, se pone algo como esto:

Lista l=new Lista();

En perl se pondría algo asi:

$l=ModuloLista->new();

Vemos que los objetos se meten en variables de tipo escalar, esto es porque un objeto no es más que una referencia (un puntero), y se puede poner perfectamente en un escalar.

Vamos a ver entonces cómo se usan los objetos de perl con un ejemplo sencillo, supongamos que perl tiene el módulo "ModuloLista":

use ModuloLista;
$lista = ModuloLista->new();
$lista->añadir("perro");
$lista->añadir("gato");
$lista->añadir("pez");
$lista->añadir("buitre carroñero");
$lista->imprimir;

Este ejemplo crearía la lista (new), añadiría un conjunto de valores, y al final, la imprimiría (recuerda que no hacen falta nunca los paréntesis).

Algunos objetos tienen métodos (funciones asociadas) con parámetros que tienen nombre, es una forma de obligar al programador que los use por un lado a que sepa lo que está mandando, y por otro a que no pase más parámetros que esos. Cuando es así, se pasan los parámetros como si estuvieramos creando un hash:

Persona->new(
		nombre => "Manolo",
                edad   => 21,
                altura => 81.32);

Y lo mismo para los demás métodos.

  Los gráficos de esta página han sido creados con GIMP.