Está en la página 1de 15

Separata preparada para el desarrollo del curso de:

Lenguaje de Programacin I

Tercera Unidad Temtica: POLIMORFISMO, MANEJO DE SESIONES Y EXCEPCIONES

Facultad de Ingeniera de Sistemas

TERCER CICLO

Semestre: 2013-II

2013

INDICE
PRIMERA UNIDAD TEMATICA POLIMORFISMO, MANEJO DE SESIONES Y EXCEPCIONES NOVENA SEMANA EXAMEN PARCIAL DCIMA SEMANA MARCO TEORICO PROGRAMACION EN DOS CAPAS Lgica de Negocios...................................................................................... 9 Lgica de Presentacin...................................................................................... 9 MARCO PRACTICO Actividades....................................................................................................................... 18 DCIMA PRIMERA SEMANA MARCO TEORICO VARIABLES Y METODOS ESTTICOS Variables Estticos.............................................................................................................. 19 Mtodos Estticos....................................................................................................... 19 MARCO PRACTICO Actividades........................................................................................................................ 23 DCIMA SEGUNDA SEMANA MARCO TEORICO HERENCIA DE CLASES Concepto.................................................... Ventajas y Precauciones de su uso......................................................... Niveles de Acceso..

24 25 25

MARCO PRACTICO Actividades....................................................................................................................... 32

DCIMA SEMANA Marco Terico

Logro Que el participante conozca y utilice el concepto de polimorfismo al construir aplicaciones PHP Resumen El polimorfismo permite que un objeto adopte distintas conductas o desempeos dependiendo del escenario donde se encuentre. Para aplicar el polimorfismo se requiere construir una interface o clase abstracta (con mtodos abstractos sin implantacin -), y luego definir las implementaciones necesarias (clases con la implementacin)

Polimorfismo, Manejo de Sesiones y Excepciones


Este concepto de la programacin orientada a objetos permite que un objeto adopte varias conductas dependiendo del escenario donde se encuentre. Para aplicar el polimorfismo, primero se debe construir una interface. Qu es una interface? Es un prototipo que contiene mtodos abstractos. Aqu se definen las acciones o procesos que programaremos, sin implementarlos o programarlos. Qu son mtodos abstractos? Son aquellos mtodos que se incluyen dentro de una interface, no tienen implementacin. Ejemplo: Construyamos la interface Comprobante.php
<? interface Comprobante { public function calcular($total); } ?>

//Mtodo abstracto

Qu son las implementaciones? Son clases que tienen la implementacin de los mtodos abstractos definidos en la interface. Se debe construir una implementacin por cada escenario, por ejemplo, si se ha construido la interface Comprobante, podramos construir para empezar, dos implementaciones: Boleta y Factura. Ejemplo:

Boleta.php
<? require_once("Comprobante.php"); class Boleta implements Comprobante { //implementar el metodo public function calcular($total){ $servicio=$total*0.10; $Totalgeneral=$total+$servicio; $lista["servicios"]=$servicio; $lista["Total_General"]=$Totalgeneral; return $lista; } } ?>

Factura.php
<? require_once("Comprobante.php"); class Factura implements Comprobante { //implementar el metodo public function calcular($total){ $Preciosinigv=$total/1.19; $igv=$Preciosinigv*0.19; $servicio=$total*0.10; $Totalgeneral=$total+$servicio; $lista["Precio_sin_igv"]=number_format($Preciosinigv,2); $lista["Igv"]=number_format($igv,2); $lista["Total"]=$total; $lista["servicios"]=$servicio; $lista["Total_General"]=$Totalgeneral; return $lista; } } ?>

Qu es el componente Factory? Este componente nos permitir fabricar un objeto a partir de la seleccin del usuario aplicando el polimorfismo. Por ejemplo: Dependiendo de la eleccin del usuario podemos crear el objeto instanciado Factura o Boleta. ComprobanteFactory.php
<? require_once("Boleta.php"); require_once("Factura.php"); class ComprobanteFactory { public static $FACTURA=1; public static $BOLETA=2; //Metodo estatico (accion asociado a la clase) public static function getComprobante($tipo){ $obj=null; if($tipo==self::$FACTURA){ $obj=new Factura(); } elseif($tipo==self::$BOLETA) {

$obj=new Boleta(); } return $obj; //retornarmos el objeto fabricado } } ?>

LOGICA DE PRESENTACION <? require_once("ComprobanteFactory.php"); //capturar valores $total=$_REQUEST["txttotal"]; $tipocom=$_REQUEST["cbocom"]; if($tipocom!=""){ //echo "tipo : ".$tipocom; $obj=ComprobanteFactory::getComprobante($tipocom); $lista=$obj->calcular($total); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Documento sin t&iacute;tulo</title> </head> <link rel="stylesheet" type="text/css" href="css/estilo.css"> <body> <h1>Comprobante de Pago</h1> <form id="form1" name="form1" method="post" action=""> <table width="333" border="1"> <tr> <td width="126">Total</td> <td width="191"><input type="text" name="txttotal" id="txttotal" /></td> </tr> <tr> <td>Tipo de Comprobante</td> <td><h1> <select name="cbocom" id="cbocom" onchange="submit()"> <option>Seleccione Comprobante</option> <option value="1">Factura</option> <option value="2">Boleta</option> </select> </h1></td> </tr>

<tr> <td>&nbsp;</td> <td>&nbsp;</td> </tr> </table> </form> <p>&nbsp;</p> </body> </html> <? if($tipocom!=""){ //visualizar el contenido del array lista (Asociativo) foreach($lista as $pos=>$dato){ //para recorrer una coleccion o lista (array asociativo) echo $pos." ".$dato."<br>"; } } ?> Conclusin De acuerdo a si el cliente escoge Boleta o Factura, se crear el objeto instanciado (Factura o Boleta), el mtodo calcular tambin se ve afectado por el polimorfismo, dado a que dependiendo de si el objeto instanciado es Factura o Boleta, la respuesta retornada ser distinta.

Actividad
Desarrollar la siguiente aplicacin web utilizando el cdigo PHP: Crear una aplicacin Java usando polimorfismo, con las siguientes caractersticas: Crear una Interface Nmeros, con el mtodo abstracto: String traducir(int nro) Crear las siguientes clases como implementaciones de la interface Numeros e implemente el mtodo traducir() : o Clase Espaol o Clase Ingles o Clase Frances El mtodo traducir, debe recibir un nmero del 1 al 10 y devolver su equivalente en letras, segn el idioma de su implementacin.

Universidad Privada Telesup

Pg. 7

DCIMA PRIMERA SEMANA Marco Terico


Logro El alumno aplica el uso de las variables de sesin para guardar datos en un mbito global de una aplicacin web Resumen Una sesin web inicia cuando un usuario accede al servidor web a travs de la direccin URL. Una variable de sesin almacena datos globalmente dentro de un conjunto de pginas en el contexto de una instancia de usuario.

Sesiones
Una sesin es el espacio que ocupa en la memoria del servidor un usuario conectado al servidor web. La sesin empieza cuando el usuario accede a la pgina y termina cuando el usuario entra en inactividad por espacio de tiempo determinado por el servidor. Por lo tanto en un servidor web existen tantas sesiones como usuarios conectados existan. Variables de Sesin Una variable de sesin es aquella que almacena un dato u objeto en el mbito de la sesin de usuario, es decir que dicho dato u objeto puede ser accedido por cualquier otra pgina de la misma sesin. Cmo se crea una variable de sesin? $_SESSION[ciudad]=Lima; Posteriormente desde otra pgina de la misma sesin podemos visualizar dicha variable: echo $_SESSION[ciudad]=Lima; Datos adicionales: Para poder usar variables de sesin lo primero que tenemos que hacer es iniciar la sesin:
session_start();

El uso de las variables de sesin depende de la configuracin de register_globals en el php.ini. Es aconsejable que tenga el valor "off". Cuando register_globals=off, para registrar una variable de sesin tenemos que poner:
$_SESSION['variable_ de_sesion'] = valor;

Si queremos saber si una variable de sesin tiene datos:


if (isset($_SESSION['variable_ de_sesion']))

Universidad Privada Telesup


{ else { echo "Variable NO registrada"; } echo "Variable registrada"; }

Pg. 8

Serializacin Para guardar un objeto dentro de una variable de sesin, debemos serializarlo. El proceso de serializacin consiste en crear representaciones de texto de cualquier dato de PHP, como arrays y objetos. Deserializacin Es el proceso inverso a serializacin, podemos convertir una cadena de texto serializado a lo que era anteriormente: Un Objeto. Aplicacin: Cuando tengamos que almacenar un objeto dentro de una variable de sesin, primero lo serializaremos antes de asignarlo a la variable de sesin. Para recuperarlo, primero lo Deserializaremos, para vuelva a ser nuevamente un objeto. CARRITO DE COMPRAS : Caso Prctico Realizar un carrito de compras que almacene los datos seleccionados en un array de objetos y luego debe ser enviado a una variable de sesin a fin de preservarlos para el resto de pginas de la aplicacin. Carpeta view (LOGICA DE PRESENTACION) Main.php Recepciona los tems que se desea agregar al carrito de compras
<?php session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" type="text/css" href="../css/estilo.css"/> <title>Documento sin t&iacute;tulo</title> <script> function boton_listado(){ document.location.href = "listado.php"; } function boton_nuevaVenta(){ document.location.href = "../control/nuevaVenta.php"; }

Universidad Privada Telesup

Pg. 9

</script> </head> <body> <h1>CONOCE EL PER&Uacute;</h1> <table width="300"> <tr> <td width="132"><input name="listado" type="button" class="boton" id="listado" value="Listado" onclick="boton_listado()" /></td> <td width="156"><input name="nuevaVenta" type="button" class="boton" id="nuevaVenta" value="Nueva Venta" onclick="boton_nuevaVenta()" /></td> </tr> </table> <h2>Item</h2> <form id="form1" name="form1" method="post" action="../control/procesar.php"> <table width="300"> <tr> <td width="66">Servicio</td> <td width="222"><input name="servicio" type="text" class="campoEditar" id="servicio" size="30" maxlength="100" /></td> </tr> <tr> <td>Precio</td> <td><input name="precio" type="text" class="campoEditar" id="precio" size="10" maxlength="10" /></td> </tr> <tr> <td>Cantidad</td> <td><input name="cant" type="text" class="campoEditar" id="cant" size="10" maxlength="10" /></td> </tr> <tr> <td colspan="2"><input name="grabar" type="submit" class="boton" id="grabar" value="Grabar" /></td> </tr> </table> </form> <p>&nbsp;</p> </body> </html>

Listado.php Lista el contenido del carrito de compras (pero antes de mostrarlos los deserealiza)
<?php require_once '../logic/Venta.php'; session_start(); if( ! isset($_SESSION["venta"]) ){ header("location: main.php"); } $vventa = unserialize($_SESSION["venta"]); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" type="text/css" href="../css/estilo.css"/> <title>Documento sin t&iacute;tulo</title> <script>

Universidad Privada Telesup


function boton_nuevaVenta(){

Pg. 10

document.location.href = "../control/nuevaVenta.php"; } function boton_nuevoItem(){ document.location.href="main.php"; } </script> </head> <body> <h1>CONOCE EL PER&Uacute;</h1> <table width="300"> <tr> <td width="153"><input name="nuevoItem" type="button" class="boton" id="nuevoItem" value="Nuevo Item" onclick="boton_nuevoItem()"/></td> <td width="135"><input name="nuevaVenta" type="button" class="boton" id="nuevaVenta" value="Nueva Venta" onclick="boton_nuevaVenta()" /></td> </tr> </table> <table width="400" border="1"> <tr class="tablaTitulo"> <td width="198">Servicio</td> <td width="59">Precio</td> <td width="41">Cant.</td> <td width="74">Subtotal</td> </tr> <?php foreach ($vventa->getLista() as $rec) { ?> <tr class="tablaDato"> <td><?=$rec["servicio"]?></td> <td><?=$rec["precio"]?></td> <td><?=$rec["cant"]?></td> <td><?=$rec["subtotal"]?></td> </tr> <?php } ?> </table> <h3>Total: <?=$vventa->getTotal()?> </body> </html> </h3>

Carpeta logic (LOGICA DE NEGOCIOS) Contiene la clase que permitir encapsular los datos antes de ser guardados en la variable de sesin. Ventas.php
<?php class Venta {

Universidad Privada Telesup


private $lista = null; function __construct() { $this->lista = array(); } public function add( $rec ){ $rec["subtotal"] = $rec["precio"] * $rec["cant"]; $this->lista[] = $rec; } public function getLista(){ return $this->lista; } public function size(){ return count($this->lista); } public function getTotal(){ $total = 0.0; foreach ($this->lista as $rec) { $total = $total + $rec["subtotal"]; } return $total; } } ?>

Pg. 11

Carpeta control (LOGICA DE NEGOCIOS) Resetea el contenido del carrito de compras


nuevaVenta.php <?php session_start(); session_destroy(); session_unset(); header("location: ../view/main.php"); ?> Procesar.php Guarda los datos recibidos en la variable de sesin (pero antes lo serializa) <?php require_once '../logic/Venta.php'; session_start(); $rec["servicio"] = $_REQUEST["servicio"]; $rec["precio"] = $_REQUEST["precio"]; $rec["cant"] = $_REQUEST["cant"];

Universidad Privada Telesup


if( isset($_SESSION["venta"]) ){ $venta = unserialize( $_SESSION["venta"] ); }else{ $venta = new Venta(); } $venta->add($rec); $_SESSION["venta"] = serialize($venta); header("location: ../view/listado.php"); ?>

Pg. 12

Actividad
Realizar una aplicacin PHP que permita a un alumno seleccionar las asignaturas que desea llevar al momento de matricularse a un nuevo semestre. Utilice: Sessiones, Serializacin, Deserealizacin y Array de Objetos. Valide el hecho de que el alumno no puede seleccionar dos veces el mismo curso en una matrcula.

Universidad Privada Telesup

Pg. 13

DECIMA SEGUNDA SEMANA Marco Terico


Logro Construye un modelo de clases con las que representa una realidad de un contexto y aplica la herencia de clases Resumen Una clase base es una clase principal desde donde derivan otras subclases las cuales heredan propiedades y mtodos.

Uso de Excepciones Control De Errores De Ejecucin Durante el desarrollo de nuestros programas se pueden presentar diversos tipos de errores, los cuales se clasifican de la siguiente forma: a. Errores de Compilacin: Son aquellos errores que se presentan en el momento de la compilacin nuestro programa, el compilador informa el nmero de lnea donde se produjo el error. Este tipo de error se produce generalmente cuando no cumplimos rigurosamente las reglas de sintaxis del Lenguaje de Programacin. Algunos IDEs tiene el atributo Intelligent Sense con el cual automticamente subrayan la lnea de error mientras se escribe el cdigo fuente. b. Errores de Lgica: Este error se percibe cuando los resultados emitidos por nuestro programa son incorrectos e imprecisos, la razn de este tipo de error se debe al mal planteamiento de la lgica del programador. c. Errores en Tiempo de Ejecucin: Este error se presenta imprevistamente durante el tiempo de ejecucin (run-time) de nuestro programa, cuando ste no soporta una instruccin, y como resultado se cuelga o cierra. Estos tipos de errores deben ser controlados por la misma aplicacin, colapse. Precisamente las excepciones o Exceptions en Java controlan este ltimo tipo de errores. MANEJO DE EXCEPCIONES y no deberan ocasionar que la ejecucin

Universidad Privada Telesup

Pg. 14

A diferencia de otros lenguajes de programacin orientados a objetos como C/C++, PHP incorpora en el propio lenguaje la gestin de errores en tiempo de ejecucin. Cmo lo hace? Veamos: Qu es una Exception? En el lenguaje PHP, una Exception es un objeto que se genera automticamente cuando se produce un error de ejecucin, una excepcin representa al error en s, contiene informacin del error producido. Algunas excepciones son fatales y provocan que se deba finalizar la ejecucin del programa. En este caso conviene terminar ordenadamente y dar un mensaje explicando el tipo de error que se ha producido. Otras, como por ejemplo, al no encontrar un fichero en el que hay que leer o escribir algo, pueden ser recuperables. En este caso el programa debe dar al usuario la oportunidad de corregir el error (indicando una nueva localizacin del fichero no encontrado). PHP 5 tiene un modelo de excepciones similar al de otros lenguajes de programacin. Una excepcin puede ser lanzada thrown, y capturada ("catched") dentro de PHP. El codigo debe estar delimitado dentro de un bloque try, para facilitar el capturar las excepciones potenciales. Cada bloque try debe tener al menos un bloque catch. Mltiples bloques catch pueden ser usados para capturar diferentes clases de excepciones. En la ejecucin normal (cuando no hay excepciones dentro de un bloque try, o cuando el bloque catch correspondiente a la clase de la excepcion lanzada no esta presente) continuar hasta el ltimo bloque catch definido en la secuencia. Las excepciones pueden ser iniciadas o reiniciadas dentro de un bloque catch. Cuando es lanzada una excepcin, la siguiente lnea de cdigo no ser ejecutada y PHP intentar encontrar el primer bloque de captura de excepciones catch. Si una excepcin no es capturada se despliega un error fatal de PHP con un mensaje de que la excepcin no fue capturada, a menos que exista un manejador de errores definido como set_exception_handler().

Ejemplo: Lanzando una Excepcin

Universidad Privada Telesup


<?php
try { $error = 'Always throw this error'; throw new Exception($error); // Code following an exception is not executed. echo 'Never executed'; } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; } // Continue execution echo 'Hello World'; ?>

Pg. 15

El resultado del ejemplo seria: 0.2 Caught exception: Division by zero. Hello World

III. BIBLIOGRAFIA
Autor GUTIERREZ RODRIGUEZ, Abraham. Titulo PHP 5 a travs de ejemplos Edicin Editorial Alfa Omega & Rama Editorial 2011 Macro, Ao 2008 2011

CORONEL, PHP Profesional. Gustavo

También podría gustarte