• Publicidad

Objetos en Perl

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Objetos en Perl

Notapor danimera » 2006-08-18 22:56 @997

Mi pregunta ahora radica en Perl trabaja con Objetos, Si es asi alguien podria darme un pequeño ejemplo y donde encontrar mas informacion??


QUE ES PER GTK?? si alguien me puede decir............... :?
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Publicidad

Notapor explorer » 2006-08-19 03:37 @193

JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor explorer » 2006-08-19 09:08 @422

Un ejemplo muy sencillo:
Código: Seleccionar todo
    1 #!/usr/bin/perl  -l
    2
    3 package Coches;
    4 use strict;
    5
    6 sub new {
    7   my $Coche = 4;
    8   bless \$Coche;
    9   return \$Coche;
   10 }
   11
   12 sub ver_puertas {
   13   my $coche = shift;
   14   print $$coche;
   15 }
   16
   17 sub poner_puertas {
   18   my $coche = shift;
   19   $$coche = shift;
   20 }
   21
   22 package main;
   23 use strict;
   24
   25 my $auto = Coches->new();
   26 $auto->ver_puertas;
   27 $auto->poner_puertas(2);
   28 $auto->ver_puertas;
   29
   30 __OUTPUT__
4
2
En este programa, además de la parte principal (main), tenemos definido un paquete llamado Coches.
* En la línea 6 a 10 definimos un método llamado new (por tradicción, pero podría ser cualquier otro nombre). Se encargará de dar consistencia a la creación de objetos.
* En la sétptima línea declaramos y definimos nuestro espacio para guardar la información de nuestro objeto. En nuestro caso, será un simple escalar, que, de momento, guarda el valor '4'.
* En la octava, 'bendecimos' a nuestro escalar con la función bless. Lo que hacemos en ese momento es asociar el nombre de nuestra clase con nuestro espacio de almacenamiento. Se podría decir también que estamos 'bautizando' a nuestro espacio de almacenamiento con un cierto nombre (en nuestro caso, 'Coches').
* En la novena, salimos, devolviendo una referencia a nuestra variable. Realmente, lo que tenemos que devolver es siempre una referencia, para que podamos refererirnos a ella más tarde.
* Luego siguen dos métodos. En el primero, sacamos a pantalla el valor de nuestro espacio de almacenamiento (nuestro escalar). En 'ver_puertas', se recibe como primer argumento la referencia a nuestro objeto. Y con una desreferencia sacamos el valor. Si pusieramos ahí un print ref $coche; nos devolvería el nombre de la clase a la que pertenece $coche, que es 'Coches'.
* En 'poner_puertas' hacemos al revés, ponemos un valor.
* En el paquete principal, creamos un nuevo objeto (línea 25). Nos devuelve una referencia a un objeto 'Coches'. Como sabemos que es una referencia a un escalar, podríamos hacer un print $$auto para obtener el valor del objeto, PERO no es la forma correcta de programar OO. Hay que intentar siempre usar métodos de acceso (por aquello de la encapsulación de datos).
* Finalmente, lo que hacemos es sacar el valor actual de nuestro objeto, modificarlo y volver a mostrarlo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor danimera » 2006-08-19 19:06 @837

He entendido el ejemplo que me mandas
Código: Seleccionar todo
 sub new {
    7   my $Coche = 4;
    8   bless \$Coche;
    9   return \$Coche;
   10 }

Pero entiendo que en perl, los objetos pueden tener propiedades que sean código, es decir que ejecutan código.
Un objeto es una variable que engloba en su interior datos y código.
¿Cómo hago referencia a esto?
Código: Seleccionar todo
sub ver_puertas {
  my $coche = shift;
  print $$coche;
}


$auto->ver_puertas; Será que esto,

Entiendo también que cambia lo forma de llamar la función

modulo_insertar(lista, dato);

se hace de esta otra forma:

lista->insertar(dato);
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Notapor explorer » 2006-08-19 20:29 @895

Si, algo así.

$auto, en el ejemplo, es nuestro objeto que pertenece a la clase Coches. Y para quitarle dos puertas al coche, necesitamos:
* a qué coche nos referimos: $auto
* qué método necesitamos para realizar la operación: poner_puertas
* y finámente, algún argumento para esto, que colocaremos entre paréntesis de poner_puertas.

En el ejemplo, hay 3 métodos que pertenecen a la clase Coches. Ese es el código de esa clase.

La forma de llamar a los métodos cambia porque, además de los argumentos, hay que indicar a qué objeto nos referimos.

Otra forma de hacerlo sería: Coches::poner_puertas($auto,2); (es decir, pasamos a nuestro objeto como primer argumento del método).
Incluso también es posible hacerlo de forma indirecta: poner_puertas $auto(2), pero esta última es horrible y no hay que usarla nunca, ni siquiera para lo que normalmente se utiliza, con new: $auto = new Coches();. El editor Eclipse+e-p-i-c, por ejemplo, si se utiliza esta forma de crear objetos, no muestra los métodos contenidos en la clase, a la hora de autocompletar.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron