La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Programación II Ing. Diego J. Arcusin 9 – Perl II.

Presentaciones similares


Presentación del tema: "Programación II Ing. Diego J. Arcusin 9 – Perl II."— Transcripción de la presentación:

1 Programación II Ing. Diego J. Arcusin info@digikol.com.ar 9 – Perl II

2 Namespaces El perl provee mecanismos para proteger las variables. La función package Permite la definición de namespaces. En un namespace cada una de las variables es única. De esta manera se pueden utilizar dos variables distintas con el mismo nombre, cada una de ellas en un Namespace diferente. El Namespace main es el namespace default por lo que todo programa perl tiene implicita la instrucción: package main; En realidad en perl no existe tal cosa La variable _PACKAGE_ forma parte de perl, y contiene el nombre del namespace actual Para más información: perldoc -f package

3 Ejemplo de namespaces #!/usr/bin/perl my $saludos = Desde cualquier lado: Saludos de "; # Namespace Ucema' package Ucema; $promedio = 8; print 'En namespace '.__PACKAGE__.', $promedio = ', $promedio, "\n"; print $saludos,__PACKAGE__,"\n"; # Namespace Uade' package Uade; $promedio = 5; print 'En namespace '.__PACKAGE__.', $promedio = ', $promedio, "\n"; print $saludos,__PACKAGE__,"\n"; # Namespace 'main' (default namespace) package main; $promedio = 7; print 'En namespace '.__PACKAGE__.', $promedio = ', $promedio, "\n"; print Promedio publico: ', $main::promedio, "\n"; print Promedio Ucema: ', $Ucema::promedio, "\n"; print Promedio Uade: ', $Uade::promedio, "\n"; print $saludos,__PACKAGE__,"\n";

4 Alcance de las variables Las variables declaradas con my son acccesibles dentro de un determinado alcance (scope), pero no fuera del mismo. El alcance de la variable está dado por el bloque actual donde se encuentra el código. El alcance puede ser un loop, una subrutina, o un programa completo.

5 Módulos Perl permite el desarrollo de módulos personalizados para ser utilizados en lugar de las subrutinas. La función use se utiliza para acceder a un módulo desde un programa. Un módulo es un archivo de texto con código perl qué suele terminar con la extensión.pm

6 Ejemplo de módulo M ó dulo Ucema.pm : # Namespace Ucema' package Ucema; $promedio = 8; my $costo = 500; 1; M ó dulo Uade.pm : # Namespace Uade' package Uade; $promedio = 5; my $costo = 300; 1;

7 Ejemplo de módulo (cont.) Programa programa.pl: #!/usr/bin/perl use strict; use Ucema; use Uade; my $promedio = 7; print 'Mi promedio: ', $promedio, "\n"; print Promedio de Ucema: ', $Ucema::promedio, "\n"; print Promedio de Uade: ', $Uade::promedio, "\n"; print Los costos de las Universidad fueron declarados con 'my':\n"; print '$Ucema::costo no es accesible desde aca', "\n"; print '$Uade::costo tampoco', "\n"; La linea use Ucema; busca el archivo de nombre Ucema con extensión.pm, y luego importa el namespace Ucema con todos los subrutinas y variables públicas que tenga este módulo. La función use indica éxito con True, por eso la última linea de un módulo tiene que evaluar a True, por esto todos los módulos terminan con 1;. La variable $costo está declarada con my (o sea privada). Esto quiere decir que solo está accesible dentro del scope del archivo Ucema.pm, y no desde programa.pl, mientras que $promedio está declarada como pública, y por lo tanto accesible desde programa.pl.

8 Otro ejemplo Módulo Trim.pm: # Trim.pm package Trim; sub ltrim { $string = shift; $string =~ s/^\s*//g; return $string; } sub rtrim { $string = shift; $string =~ s/\s*$//g; return $string; } sub trim { $string = shift; $string =~ s/^\s*(\S+)\s*$/$1/g; return $string; } 1;

9 programa2.pl: #!/usr/bin/perl use Trim; my $s = ' hola '; my $s2 = Trim::trim($s); my $s3 = Trim::ltrim($s); my $s4 = Trim::rtrim($s); print "$s\n"; print "$s2\n"; print "$s3\n"; print "$s4\n"; Otro ejemplo (cont.)

10 "The Comprehensive Perl Archive Network Es un directorio central donde se almacenan módulos y programas perl creados por terceras personas que integran operaciones habituales. Contiene un mecanismo de búsqueda junto con él directorio organizado en categorías específicas donde se pueden crear módulos prediseñados. http://www.cpan.org Algunos módulos de CPAN: DBIDBDCGIMAIL HTMLNETFINDXML Y otros. CPAN

11 En Perl la terminología de Object-Oriented (OO) programming se aplica de la siguiente manera: Un objeto es una variable que pertenece a una clase. Métodos son funciones asociadas a objetos o clases. Propiedades de instancia son propiedades que afectan sólo al objeto. Propiedades de clase son propiedades que afectan a todos los objetos de la clase. Una clase es un Package, y normalmente un módulo, o sea un archivo.pm. El objeto (o variable) es una referencia a la que se le ha aplicado la función bless. Clases y Objetos

12 Clases vs. Librería: Similitudes y diferencias: Las dos se almacenan en un archivo.pm. Una clase es un conjunto de métodos (subrutinas), pero incluye un método normalmente (pero no necesariamente) llamado new(), que crea un objeto. A través de este método se puede acceder a los demás métodos. Además, un objeto cuenta con propiedades, que se pueden modificar a traves de métodos. Esto permite a un objeto llevar distintos estados durante la ejecución de un programa. Una libreria es un conjunto de funciones (subrutinas) con algo en común (por eso se almacenan en el mismo archivo), que se pueden ejecutar desde un programa, pero estas funciones no llevan un estado (como lo hace un objeto), solo devuelve uno o varios valores. Clases vs. Librerías

13 Un objeto en perl no es más que una referencia de la cuál se sabe a que clase pertenece. Una clase es un package que provee métodos para tratar con las referencias a objetos Un método es una simple subrutina que espera una referencia a un objeto como primer argumento En Perl un objeto se crea con la función bless enviando como argumento la referencia al objeto (ver perldoc -f bless por detalles). En teoría, la referencia puede referirse a cualquier tipo de variable, pero en general siempre se refiere a un hash vacío. Normalmente se crea un objeto a través de una función llamada new ( ) # Crear el objeto sub new { my $class = shift; return bless {}, $class; } Podemos llamar a new de dos formas: my $object = Some::Class->new(); o bien: my $object = new Some::Class; Un objeto en perl

14 Todas las subrutinas dentro de Some/Class.pm sirven como métodos, y aquellas subrutinas que modifican o devuelven valores del hash del objeto sirven como propiedades. Este ejemplo agrega un método y una propiedad al archivo Some/Class.pm : sub un_metodo { print "Hola!\n }; sub una_propiedad { my $object = shift; $object->{PROPIEDAD} = shift if @_; return $object->{PROPIEDAD}; } Métodos y Propiedades

15 Para acceder a los métodos y las propiedades desde un programa: #!/usr/bin/perl -w use strict; use Some::Class; my $object = Some::Class->new(); # Acceder a un metodo $object->un_metodo; # Acceder a una propiedad - siempre se debe hacer a traves de un metodo # Propiedad - set $object->una_propiedad(123); # Propiedad - get print $object->una_propiedad(),"\n"; Métodos y Propiedades (cont.)

16 Es importante resaltar que es posible acceder directamente el valor del hash (en este ejemplo $object->{PROPIEDAD} ) en vez de usar el método una_propiedad para hacerlo, pero no es una forma adecuada de programación. El método una_propiedad de Some::Class puede contener funcionalidad agregada que debe ser transparente al usuario de Some::Class. La documentación del módulo debe indicar que métodos se deben usar. Métodos y Propiedades (cont.)

17 Preguntas ?

18 1) Dado un archivo de Log de un Servidor Web con la siguiente estructura: Dirección IP | Fecha y Hora | URL Visitada | Navegador Utilizado Existe un registro para cada solicitud realizada al servidor. La Fecha y Hora tiene el siguiente formato: DD/MMM/YYYY:hh:mm:ss Ejemplo: 05/Dec/2005:10:16:05 Se solicita: Proveer la lista de todos los navegadores con los que se accedió al sitio y el porcentaje de utilización de cada uno (Cantidad de registros accedidos por cada navegador / cant, total de registros). Contar cuántas imágenes se accedieron en el mes de Noviembre del 2005. (Las imágenes son aquellas URLs que terminan en.gif,.jpg o.png) Armar una lista ordenada con todas las direcciones IP distintas que accedieron a la URL: http://www.sitio.com.ar/loginincorrect.php Ejercicios

19 2.Hemos sido contratados para formar parte del Staff de Operaciones del Area de Sistemas de Editorial Libros lo más. Nuestro jefe, sabiendo acerca de nuestros conocimientos de UNIX y perl nos solicita: a)Para un proyecto de reingeniería del sistema de Facturación de la Editorial, desarrollar un módulo perl que contenga una clase denominada libro que contenga los siguientes métodos: New: Crea un nuevo libro. Para poder crear un nuevo objeto libro, este método deberá recibir el código de ISBN y el título del libro. Al crearse el libro toma el estado Sin Publicar, una cantidad en Stock de 0 unidades, y una cantidad de ventas totales en 0. Imprimir: Recibe como parámetro la cantidad de copias impresas del libro. Esta cantidad se suma al stock disponible. Además, cambia el estado del libro a Disponible. Venta: Recibe como parámetro la cantidad de copias vendidas del libro. Si la cantidad de copias es mayor al stock actual. Vuelve con un error. Si la cantidad de copias es menor o igual al stock actual, se disminuye la cantidad de copias en stock de acuerdo a la venta, y se incrementa un acumulador de ventas totales de acuerdo a la cantidad vendida. Si la cantidad en stock llega a cero, el estado pasa a ser Agotado. Estado: Retorna el Estado actual del libro. Stock: Retorna el Stock actual del libro. Ejercicios

20 b) Preparar un listado con los libros impresos en Argentina con los que cuenta la Editorial. Deberemos elaborar un programa perl que muestre todos los titulos por orden alfabético. Contamos con un archivo con los datos de los libros publicados por la editorial con el siguiente formato: ISBN DEL LIBRO|COD AUTOR|TITULO|CODIGO DE CONTROL Ejemplo de registros: 590-24-1121-8|00230120|Poda|5400006699 950-24-0938-8|00329311|Adiestramiento Canino|5400006600 590-24-1122-6|00230120|Rosas|5400006600 … 950-24-0975-2|01000023|Feng Shui Soluciones Prácticas|010006699 Nota 1: No considerar aquellos libros cuyo código de control finalice en 99 ya que los códigos que terminan con este número indican que el mismo está agotado. Nota 2: Considerar sólo aquellos libros cuyo código de control comience con 54 ya que los códigos que comienzan con este número indican que el mismo fue publicado en Argentina. Ejercicios


Descargar ppt "Programación II Ing. Diego J. Arcusin 9 – Perl II."

Presentaciones similares


Anuncios Google