Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Lenguaje de Programacin I
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
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)
//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) {
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í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> </td> <td> </td> </tr> </table> </form> <p> </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.
Pg. 7
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;
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ítulo</title> <script> function boton_listado(){ document.location.href = "listado.php"; } function boton_nuevaVenta(){ document.location.href = "../control/nuevaVenta.php"; }
Pg. 9
</script> </head> <body> <h1>CONOCE EL PERÚ</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> </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ítulo</title> <script>
Pg. 10
document.location.href = "../control/nuevaVenta.php"; } function boton_nuevoItem(){ document.location.href="main.php"; } </script> </head> <body> <h1>CONOCE EL PERÚ</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 {
Pg. 11
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.
Pg. 13
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
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().
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