Programación II

20
Programación II Ing. Diego J. Arcusin [email protected] 9 – Perl II

description

9 – Perl II. Programación II. Ing. Diego J. Arcusin [email protected]. Namespaces. El perl provee mecanismos para proteger las variables. La función package - PowerPoint PPT Presentation

Transcript of Programación II

Page 1: Programación II

Programación II

Ing. Diego J. Arcusin [email protected]

9 – Perl II

Page 2: Programación II

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

Page 3: Programación II

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";

Page 4: Programación II

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.

Page 5: Programación II

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

Page 6: Programación II

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;

Page 7: Programación II

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.

Page 8: Programación II

Otro ejemplo

Módulo Trim.pm:# Trim.pmpackage 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;

Page 9: Programación II

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.)

Page 10: Programación II

"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:

DBI DBD CGI MAILHTML NET FIND XML

Y otros.

CPAN

Page 11: Programación II

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

Page 12: Programación II

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

Page 13: Programación II

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 objetosub 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

Page 14: Programación II

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

Page 15: Programación II

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.)

Page 16: Programación II

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.)

Page 17: Programación II

Preguntas

?

Page 18: Programación II

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:ssEjemplo: 05/Dec/2005:10:16:05Se 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

Page 19: Programación II

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

Page 20: Programación II

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|5400006699950-24-0938-8|00329311|Adiestramiento Canino|5400006600590-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