Está en la página 1de 33

Separata preparada para el desarrollo del curso de:

Lenguaje de Programacin I

Segunda Unidad Temtica: FUNDAMENTOS BSICOS DE LA PROGRAMACION ORIENTADA A OBJETOS EN PHP

Facultad de Ingeniera de Sistemas

TERCER CICLO

Semestre: 2013-II

2013

INDICE
PRIMERA UNIDAD TEMATICA FUNDAMENTOS BASICOS DE LA PROGRAMACION ORIENTADA A OBJETOS EN PHP QUINTA SEMANA MARCO TEORICO FUNDAMENTOS DE LA POO EN PHP Clases................................................... Propieades................................................... Metodos............................................... Mtodos Constructores..................................................... Objeto Instanciado.. Estados en Objetos..

3 4 4 5 6 7

MARCO PRACTICO Actividades....................................................................................................................... 8 SEXTA SEMANA MARCO TEORICO PROGRAMACION EN DOS CAPAS Lgica de Negocios...................................................................................... 9 Lgica de Presentacin...................................................................................... 9 MARCO PRACTICO Actividades....................................................................................................................... 18 SPTIMA SEMANA MARCO TEORICO VARIABLES Y METODOS ESTTICOS Variables Estticos.............................................................................................................. 19 Mtodos Estticos....................................................................................................... 19 MARCO PRACTICO Actividades........................................................................................................................ 23 OCTAVA SEMANA MARCO TEORICO HERENCIA DE CLASES Concepto.................................................... Ventajas y Precauciones de su uso......................................................... Niveles de Acceso..

24 25 25

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

QUINTA SEMANA Marco Terico


Logro El alumno construye clases con sus respetivos mtodos y propiedades con la finalidad de representar la realidad de un determinado contexto. Resumen La programacin orientada a objetos consiste en programar acercndonos a una forma muy parecida a la manera como interpretamos la realidad. Los objetos se encuentran agrupados dentro de una clase. Las clases contienen mtodos (acciones) y propiedades (datos descriptivos).

Fundamentos de la POO en PHP


Haremos un pequeo repaso de los conceptos preliminares de la programacin orientada a objetos, que se estudi en el semestre anterior: A. CLASE La clase es una plantilla o patrn a partir de la cual se crean muchos otros objetos similares, tambin se podra definir a una clase como la agrupacin de objetos que poseen caractersticas comunes. Ejemplos: Si Ud. tuviera que dibujar 30 mapas del Per Cmo los podra hacer de un modo muy rpido? Tendra que conseguir un molde o plantilla y a partir de ste podra crear los 30 mapas de un modo fcil y rpido. En este ejemplo el Molde o Patrn sera la Clase y cada uno de los mapas reproducidos vendran ser los Objetos instanciados. Qu clases puedes distinguir dentro de tu aula? En el aula existe la clase Alumnos, cada alumno vendra ser un objeto que se origina de esta clase. Otras clases podran ser: Carpetas, tiles, etc.

Como podemos darnos cuenta, los conceptos de la POO estn en la vida diaria, y son estos conceptos los que se aplican al momento de programar aplicaciones informticas.
<? class Calculadora { } ?> //Fin de la clase

B. PROPIEDADES DE LA CLASE

Las propiedades o atributos son las caractersticas descriptivas de una clase. Cuando definimos una propiedad especificamos un cierto tipo de dato. Ejemplos: Propiedades de la clase Calculadora marca (Tipo de dato String) precio (Tipo de dato String)
<? class Calculadora { // DEFINICION DE PROPIEDADES
//Propiedades public $marca; public $precio;

} ?>

//Fin de la clase

c. MTODOS EN LAS CLASES Son las funcionalidades, acciones o habilidades de la clase. Los mtodos son funciones que estn asociadas a un objeto. Los mtodos responden a la pregunta: Qu es lo que es capaz de hacer la clase? Los nombres de los mtodos generalmente estn asociados a una accin o verbos. Al final del nombre de los mtodos siempre se utilizarn parntesis dentro de los cuales muchas veces es necesario enviar algunos datos, para que puedan realizarse los procesos. Ejemplos: La clase calculadora contiene los siguientes mtodos: Sumar(4,5) Restar(3,2) Multiplicar(4,3) Multiplicar(4,2) La clase Alumnos contiene los siguientes mtodos: estudiar() hablar() decirSuEdad() La clase plumones contiene los siguientes mtodos: pintar() escribir() Nota:

Algunos mtodos reciben entre los parntesis: datos, los cuales sirven al mtodo para realizar su tarea. Estos datos son conocidos como argumentos o parmetros del mtodo. Algunos mtodos retornan un dato como resultado de la accin, por ejemplo el mtodo sumar(4,5) de la clase Calculadora, luego de realizar su accin devolver un dato de respuesta el cual es el resultado de la suma: 9.

<? class Calculadora { // DEFINICION DE PROPIEDADES


//Propiedades public $marca; public $precio;

public function sumar($a, $b) { $r=$a+$b; return $r; } } ?>

d. METODOS CONSTRUCTORES Un mtodo constructor es un mtodo especial dentro de la clase, que lleva el nombre __construct().Su funcin es de permitir el instanciamiento de objetos y al mismo tiempo introducir estados (datos) a todas o a algunas las propiedades del objeto instanciado. Clase Calculadora con un mtodo constructor vacio:
<? class Calculadora { // DEFINICION DE PROPIEDADES
//Propiedades public $marca; public $precio;

public function sumar($a, $b) { $r=$a+$b; return $r; }


function __construct() { //Metodo constructor se ejecuta al producirse una instancia de la clase }

} ?>

Clase Calculadora con un mtodo constructor que recibe los estados de un objeto, es decir instancia un objeto con estado:

<? class Calculadora { // DEFINICION DE PROPIEDADES


//Propiedades public $marca; public $precio;

public function sumar($a, $b) { $r=$a+$b; return $r; }


function __construct($mar,$pre) { $this->marca=$mar; $this->precio=$pre; }

} ?>

e. OBJETO INSTANCIADO Los objetos instanciados son ejemplares resultantes de una clase cualquiera. Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crear. Esta accin de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccin de la palabra instance que en ingls significa ejemplar). Por ejemplo, un objeto instanciado de la clase fraccin es por ejemplo 3/5. El concepto o definicin de fraccin sera la clase, pero cuando ya estamos hablando de una fraccin en concreto 4/7, 8/1000 o cualquier otra, la llamamos objeto instanciado. Todo objeto instanciado hereda automticamente las propiedades y mtodos de su clase base En el caso de la clase Calculadora, la instancia de la clase se hara de la siguiente forma: Usando el Mtodo Constructor Vaco
<? $obj=new Calculadora(); $obj->marca="Casio"; $obj->precio=29.00; ?> //Creando el objeto instanciado con el constructor vaco

Usando el Mtodo Constructor con argumentos


<? //crear el objeto instanciado con el constructor que recibe estados $obj=new Calculadora("Casio",29.99); ?>

f. ESTADOS EN OBJETOS Cuando tenemos un objeto sus propiedades toman valores. Por ejemplo, cuando tenemos una Fraccin, la propiedad numerador tomar un valor en concreto, como

por ejemplo 1 y la propiedad denominador puede tomar el valor de 3. El valor concreto de una propiedad de un objeto se llama estado . Para acceder a un estado de un objeto, para ver su valor o cambiarlo se utiliza el operador -> Ejemplo:
<?
$obj=new Calculadora(); //Creando el objeto instanciado con el constructor vaco

//Recepciona valores para los estados de un objeto $obj->marca=Casio; $obj->precio=39.99; //Mostramos los estados de un objeto echo $obj->marca.<br>; echo $obj->precio.<br>; ?>

El objeto es obj, luego colocamos el -> y por ltimo el nombre de la propiedad a la que deseamos acceder. En el ejemplo anterior, estamos cambiando el valor del estado de las propiedades marca y precio del objeto obj, y luego mostramos los valores almacenados en las propiedades del objeto. EJEMPLOS PRCTICOS A continuacin, mostraremos algunos ejemplos de clases con sus respectivas propiedades y mtodos. Clase Reloj Propiedades: Marca, Modelo, Precio, Tipo Mtodos: mostrarlaHora(), mostrarlaFecha(), fijarAlarma(), iniciarCronometro() Clase Triangulo Propiedades: Color, TipodeBorde, TipodeTriangulo Mtodos: calcularArea(), calcularSemiPermetro() Clase BoletadeNota Propiedades: NroBoleta, FechadeEmision, Apellidos, Nombres Mtodos: calcularPromedioporAsignatura(), calcularPromedioPonderado()

Universidad Privada Telesup

Pg. 9

PRIMERA SEMANA Marco Prctico Actividad


Objetivo: Que el alumno construya una clase con sus mtodos y propiedades. Crear las siguientes clases, instancie un objeto y asgnele sus estados, invoque a los mtodos y muestre los valores devueltos por los mtodos y los resultados almacenados en las propiedades del objeto. Clase Triangulo Crear las propiedades y mtodo(s) que correspondan Clase Factura Crear las propiedades y mtodo(s) que correspondan Clase Vehiculo Crear las propiedades y mtodo(s) que correspondan

Universidad Privada Telesup

Pg. 10

SEXTA SEMANA Marco Terico


Logro Que alumnos aprenda a programar en dos capas, separando la lgica de presentacin y la lgica de negocios. Resumen La Lgica de Negocios corresponde a la definicin de la clase y sus mtodos y propiedades necesarios para dar solucin a un determinado problema. La lgica de Presentacin corresponde a la interface del usuario.

Programacin en dos Capas


LOGICA DE NEGOCIOS Corresponde a la definicin de una clase, la cual con sus mtodos y propiedades dan solucin a un determinado problema. Se encarga de atender exclusivamente los procesos, para esto define diversos mtodos, los cuales reciben parmetros de entrada o argumentos y retornan a cambios uno o varios datos de respuesta. Nota: En la regla de negocios no se debe imprimir mensajes hacia la interfaz del usuario, ni tampoco capturar datos de dicha interfaz.

LOGICA DE PRESENTACION Esta referido a la interfaz de usuario, en la cual el usuario ingresa datos y visualiza las respuestas finales.
A continuacin presentaremos 4 formas distintas de programar un mismo caso, en estas cuatro formas distintas observaremos la forma como la lgica de presentacin interacta con la lgica de negocios. 1RA FORMA: Utilizamos mtodos que recepcionan argumentos o parmetro de entrada Clase Alumnos [Lgica de Negocios] <? class Alumnos { public $nombres; public function calcularPromedio($n1,$n2,$n3){ $p=($n1+$n2+$n3)/3; return $p; } public function calcularSituacAcademica($p){ $sa=null; if($p>=10.5){ $sa="Aprobado"; }

Universidad Privada Telesup


else{ $sa="Desaprobado"; } return $sa; } } ?> main.php [Lgica de Presentacin] 1. 2. 3. 4. 5. 6. 7. 8. <? require_once "../model/Alumnos.php"; //capturar entradas $nom=$_POST["txtnom"]; $n1=$_POST["txtn1"]; $n2=$_POST["txtn2"]; $n3=$_POST["txtn3"]; $btnenviar=$_POST["btnenviar"];

Pg. 11

9. //Instanciar la clase 10.$obj=new Alumnos(); 11.//Preguntar si se presion el boton enviar 12.if($btnenviar!=""){ 13.//Invocar a los metodos 14.$p=$obj->calcularPromedio($n1,$n2,$n3); 15.$sa=$obj->calcularSituacAcademica($p); 16.} 17.?> 18.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 19.<html xmlns="http://www.w3.org/1999/xhtml"> 20.<head> 21.<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 22.<title>Documento sin ttulo</title> 23.</head> 24.<link rel="stylesheet" type="text/css" href="../css/estilo.css"/> 25.<body> 26.<h1>Universidad Privada Telesup 27.</h1> 28.<form id="form1" name="form1" method="post" action=""> 29.<table width="273" border="1"> 30.<tr> 31.<td width="52">Nombres</td> 32.<td width="205"><input name="txtnom" type="text" class="campoEditar" id="txtnom" /></td> 33.</tr> 34.<tr> 35.<td>Nota 1</td> 36.<td><input name="txtn1" type="text" class="campoEditar" id="txtn1" /></td> 37.</tr> 38.<tr> 39.<td>Nota 2</td>

Universidad Privada Telesup

Pg. 12

40.<td><input name="txtn2" type="text" class="campoEditar" id="txtn2" /></td> 41.</tr> 42.<tr> 43.<td>Nota 3</td> 44.<td><input name="txtn3" type="text" class="campoEditar" id="txtn3" /></td> 45.</tr> 46.<tr> 47.<td colspan="2"><input name="btnenviar" type="submit" class="boton" id="btnenviar" value="Enviar" /></td> 48.</tr> 49.</table> 50.</form> 51.<? if($btnenviar!="") { ?> 52.<table width="344" border="1"> 53.<tr> 54.<th colspan="2" scope="col">Resultados</th> 55.</tr> 56.<tr> 57.<td width="160">Promedio General</td> 58.<td width="168"><?=$p?></td> 59.</tr> 60.<tr> 61.<td>Situacion Academica</td> 62.<td><?=$sa?></td> 63.</tr> 64.<tr> 65.<td>&nbsp;</td> 66.<td>&nbsp;</td> 67.</tr> 68.</table> 69.<? } ?> 70.<p>&nbsp;</p> 71.</body> 72.</html> 2DA FORMA: Utilizamos propiedades para recepcionar los datos de entrada Clase Alumnos [Lgica de Negocios] <? class Alumnos { public $nombres; public $n1; public $n2; public $n3; public function calcularPromedio(){ $p=($this->n1+$this->n2+$this->n3)/3; return $p; } public function calcularSituacAcademica(){ $sa=null; $p=($this->n1+$this->n2+$this->n3)/3;

Universidad Privada Telesup


if($p>=10.5){ $sa="Aprobado"; } else{ $sa="Desaprobado"; } return $sa; } } ?> main.php [Lgica de Presentacin] 1. 2. 3. 4. 5. 6. 7. 8. <? require_once "../model/Alumnos.php"; //capturar entradas $nom=$_POST["txtnom"]; $n1=$_POST["txtn1"]; $n2=$_POST["txtn2"]; $n3=$_POST["txtn3"]; $btnenviar=$_POST["btnenviar"];

Pg. 13

9. //Instanciar la clase 10.$obj=new Alumnos(); 11.//Introducir los datos de entrada hacia las propiedades 12.$obj->n1=$n1; 13.$obj->n2=$n2; 14.$obj->n3=$n3; 15.//Preguntar si se presion el boton enviar 16.if($btnenviar!=""){ 17.//Invocar a los metodos 18.$p=$obj->calcularPromedio(); 19.$sa=$obj->calcularSituacAcademica(); 20.} 21.?> 22.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 23.<html xmlns="http://www.w3.org/1999/xhtml"> 24.<head> 25.<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 26.<title>Documento sin ttulo</title> 27.</head> 28.<link rel="stylesheet" type="text/css" href="../css/estilo.css"/> 29.<body> 30.<h1>Universidad Privada Telesup 31.</h1> 32.<form id="form1" name="form1" method="post" action=""> 33.<table width="273" border="1"> 34.<tr> 35.<td width="52">Nombres</td> 36.<td width="205"><input name="txtnom" type="text" class="campoEditar" id="txtnom" /></td> 37.</tr> 38.<tr>

Universidad Privada Telesup

Pg. 14

39.<td>Nota 1</td> 40.<td><input name="txtn1" type="text" class="campoEditar" id="txtn1" /></td> 41.</tr> 42.<tr> 43.<td>Nota 2</td> 44.<td><input name="txtn2" type="text" class="campoEditar" id="txtn2" /></td> 45.</tr> 46.<tr> 47.<td>Nota 3</td> 48.<td><input name="txtn3" type="text" class="campoEditar" id="txtn3" /></td> 49.</tr> 50.<tr> 51.<td colspan="2"><input name="btnenviar" type="submit" class="boton" id="btnenviar" value="Enviar" /></td> 52.</tr> 53.</table> 54.</form> 55.<? if($btnenviar!="") { ?> 56.<table width="344" border="1"> 57.<tr> 58.<th colspan="2" scope="col">Resultados</th> 59.</tr> 60.<tr> 61.<td width="160">Promedio General</td> 62.<td width="168"><?=$p?></td> 63.</tr> 64.<tr> 65.<td>Situacion Academica</td> 66.<td><?=$sa?></td> 67.</tr> 68.<tr> 69.<td>&nbsp;</td> 70.<td>&nbsp;</td> 71.</tr> 72.</table> 73.<? } ?> 74.<p>&nbsp;</p> 75.</body> 76.</html> 3RA FORMA: Utilizamos propiedades para recepcionar los datos de entrada y valores de salida (respuestas) Clase Alumnos [Lgica de Negocios] 1. 2. 3. 4. 5. 6. 7. <? class Alumnos { public $nombres; //propiedades de entrada public $n1; public $n2; public $n3;

Universidad Privada Telesup


8. //propiedades de salida (guardan informacin) 9. public $p; 10.public $sa; 11.public function calcularPromedio(){ 12.$this->p=($this->n1+$this->n2+$this->n3)/3; 13.} 14.public function calcularSituacAcademica(){ 15.if($this->p>=10.5){ 16.$this->sa="Aprobado"; 17.} 18.else{ 19.$this->sa="Desaprobado"; 20.} 21.} 22.} 23.?> main.php [Lgica de Presentacin] 1. 2. 3. 4. 5. 6. 7. 8. <? require_once "../model/Alumnos.php"; //capturar entradas $nom=$_POST["txtnom"]; $n1=$_POST["txtn1"]; $n2=$_POST["txtn2"]; $n3=$_POST["txtn3"]; $btnenviar=$_POST["btnenviar"];

Pg. 15

9. //Instanciar la clase 10.$obj=new Alumnos(); 11.//Introducir los datos de entrada hacia las propiedades 12.$obj->n1=$n1; 13.$obj->n2=$n2; 14.$obj->n3=$n3; 15.//Preguntar si se presion el boton enviar 16.if($btnenviar!=""){ 17.//Invocar a los metodos 18.$obj->calcularPromedio(); 19.$obj->calcularSituacAcademica(); 20.} 21.?> 22.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 23.<html xmlns="http://www.w3.org/1999/xhtml"> 24.<head> 25.<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 26.<title>Documento sin ttulo</title> 27.</head> 28.<link rel="stylesheet" type="text/css" href="../css/estilo.css"/> 29.<body> 30.<h1>Universidad Privada Telesup 31.</h1>

Universidad Privada Telesup

Pg. 16

32.<form id="form1" name="form1" method="post" action=""> 33.<table width="273" border="1"> 34.<tr> 35.<td width="52">Nombres</td> 36.<td width="205"><input name="txtnom" type="text" class="campoEditar" id="txtnom" /></td> 37.</tr> 38.<tr> 39.<td>Nota 1</td> 40.<td><input name="txtn1" type="text" class="campoEditar" id="txtn1" /></td> 41.</tr> 42.<tr> 43.<td>Nota 2</td> 44.<td><input name="txtn2" type="text" class="campoEditar" id="txtn2" /></td> 45.</tr> 46.<tr> 47.<td>Nota 3</td> 48.<td><input name="txtn3" type="text" class="campoEditar" id="txtn3" /></td> 49.</tr> 50.<tr> 51.<td colspan="2"><input name="btnenviar" type="submit" class="boton" id="btnenviar" value="Enviar" /></td> 52.</tr> 53.</table> 54.</form> 55.<? if($btnenviar!="") { ?> 56.<table width="344" border="1"> 57.<tr> 58.<th colspan="2" scope="col">Resultados</th> 59.</tr> 60.<tr> 61.<td width="160">Promedio General</td> 62.<td width="168"><?=$obj->p?></td> 63.</tr> 64.<tr> 65.<td>Situacion Academica</td> 66.<td><?=$obj->sa?></td> 67.</tr> 68.<tr> 69.<td>&nbsp;</td> 70.<td>&nbsp;</td> 71.</tr> 72.</table> 73.<? } ?> 74.<p>&nbsp;</p> 75.</body> 76.</html> 4TA FORMA: Utilizamos para todo el proceso un solo mtodo (con parmetros de entrada y parmetros de salida) Clase Alumnos [Lgica de Negocios]

Universidad Privada Telesup


1. <? 2. class Alumnos { 3. public $nombres; 4. public function hallarInformacion($n1,$n2,$n3,&$p,&$sa){ 5. $p=($n1+$n2+$n3)/3; 6. if($p>=10.5){ 7. $sa="Aprobado"; 8. } 9. else{ 10.$sa="Desaprobado"; 11.} //fin del else 12.} //fin del metodo 13.} //fin de la clase 14.?> main.php [Lgica de Presentacin] 1. 2. 3. 4. 5. 6. 7. 8. <? require_once "../model/Alumnos.php"; //capturar entradas $nom=$_POST["txtnom"]; $n1=$_POST["txtn1"]; $n2=$_POST["txtn2"]; $n3=$_POST["txtn3"]; $btnenviar=$_POST["btnenviar"];

Pg. 17

9. //Instanciar la clase 10.$obj=new Alumnos(); 11.//Preguntar si se presion el boton enviar 12.if($btnenviar!=""){ 13.//Invocar a los metodos 14.$obj->hallarInformacion($n1,$n2,$n3,$p,$sa); 15.} 16.?> 17.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 18.<html xmlns="http://www.w3.org/1999/xhtml"> 19.<head> 20.<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 21.<title>Documento sin ttulo</title> 22.</head> 23.<link rel="stylesheet" type="text/css" href="../css/estilo.css"/> 24.<body> 25.<h1>Universidad Privada Telesup 26.</h1> 27.<form id="form1" name="form1" method="post" action=""> 28.<table width="273" border="1"> 29.<tr> 30.<td width="52">Nombres</td> 31.<td width="205"><input name="txtnom" type="text" class="campoEditar" id="txtnom" /></td> 32.</tr> 33.<tr>

Universidad Privada Telesup

Pg. 18

34.<td>Nota 1</td> 35.<td><input name="txtn1" type="text" class="campoEditar" id="txtn1" /></td> 36.</tr> 37.<tr> 38.<td>Nota 2</td> 39.<td><input name="txtn2" type="text" class="campoEditar" id="txtn2" /></td> 40.</tr> 41.<tr> 42.<td>Nota 3</td> 43.<td><input name="txtn3" type="text" class="campoEditar" id="txtn3" /></td> 44.</tr> 45.<tr> 46.<td colspan="2"><input name="btnenviar" type="submit" class="boton" id="btnenviar" value="Enviar" /></td> 47.</tr> 48.</table> 49.</form> 50.<? if($btnenviar!="") { ?> 51.<table width="344" border="1"> 52.<tr> 53.<th colspan="2" scope="col">Resultados</th> 54.</tr> 55.<tr> 56.<td width="160">Promedio General</td> 57.<td width="168"><?=$p?></td> 58.</tr> 59.<tr> 60.<td>Situacion Academica</td> 61.<td><?=$sa?></td> 62.</tr> 63.<tr> 64.<td>&nbsp;</td> 65.<td>&nbsp;</td> 66.</tr> 67.</table> 68.<? } ?> 69.<p>&nbsp;</p> 70.</body> 71.</html>

Universidad Privada Telesup

Pg. 19

SEXTA SEMANA Marco Prctico Actividad


Objetivo: Que el alumno domine las distintas formas de interactuar la lgica de presentacin y la lgica de negocios. Crear una aplicacin PHP con enfoque a la POO utilizando las 4 formas aprendidas en clase. Caso Prctico: Luego de ingresar la cantidad de horas trabajadas y el costo de pago por hora, se calcule el salario mensual de un trabajador, sabiendo que dicho clculo se genera en base a las horas mensuales trabajadas por el precio especificado por hora. Si se pasan de 192 horas mensuales trabajadas, las horas extraordinarias se pagarn a razn de 1.5 veces la hora ordinaria. Tener en cuenta que todos los trabajadores obtienen una bonificacin del 20% del salario mensual siempre en cuando hayan elaborado ms de 100 horas al mes. Crear un formulario para mostrar la funcionalidad de la clase, el formulario debe tener las siguientes entradas: Horas Trabajadas y Costo Hora y debe mostrar las siguientes salidas: Salario Mensual, Bonificacin y Total a Percibir.

Universidad Privada Telesup

Pg. 20

SPTIMA SEMANA Marco Terico


Logro El alumno aplica el uso de las variables y mtodos estticos y las diferencia frente a las propiedades y mtodos de instancia. Resumen La variable y mtodo esttico estn asociados directamente a la clase y no a un objeto instanciado en particular, esto quiere decir que para utilizarlo se debe acceder desde la misma clase y no desde una instancia.

Variables y Mtodos Estticos


Variables Estticas: Son aquellas variables que se declaran a nivel de la clase, se diferencian de las propiedades, porque para acceder a ellas no se requiere de una instancia, se puede acceder a estas variables directamente a travs del nombre de la clase. Las variables estticas conservan un mismo valor para toda la clase y no cuentan con estados (datos) diferentes en cada objeto instanciado. En otros lenguajes de programacin las variables estticas son conocidos como variables globales. Para acceder a una variable esttico debemos hacerlo a travs de la referencia de la clase. Ejemplo:
<? //Imprime el valor de la variable esttica tipo echo Fraccion::tipo; ?>

Mtodos Estticos: Son aquellos mtodos que pertenecen directamente a la clase y que para acceder a ellos no se requiere de una instancia, se puede acceder a estos mtodos directamente a travs del nombre de la clase. Para acceder a un mtodo esttico debemos hacerlo a travs de la referencia de la clase.

Universidad Privada Telesup

Pg. 21

Los mtodos estticos pueden involucrar a varios objetos instanciados dentro del proceso. Ejemplo Crear la clase Fraccion e implementar el mtodo sumar y simplificar LOGICA DE NEGOCIOS Fraccion.php
<? class Fraccion { public $n; public $d; //Metodo constructor vacio public function __construct(){ } //Mtodo esttico (Esta accin involucra a varios objetos de la clase) public static function sumar($f1,$f2){ $fr=new Fraccion(); $fr->n=($f1->n*$f2->d)+($f1->d*$f2->n); $fr->d=($f1->d*$f2->d); return $fr; } //Mtodo esttico (Esta accin involucra a varios objetos de la clase) public static function restar($f1,$f2){ $fr=new Fraccion(); $fr->n=($f1->n*$f2->d)-($f1->d*$f2->n); $fr->d=($f1->d*$f2->d); return $fr; } //Metodo miembro(Esta accin involucra a un solo objeto de la clase) public function simplificar($fr){ $div=2; $n=$fr->n; $d=$fr->d; if($n>$d) { $mayor=$n; } else { $mayor=$d; } while($div<=$mayor){ if($n%$div==0 and $d%$div==0){ $n=$n/$div; $d=$d/$div; } else { $div++; } } //Construir la fraccion nuevamente $fr->n=$n; $fr->d=$d; return $fr; } //fin del metodo simplificar } //fin de la clase ?>

Universidad Privada Telesup


LOGICA DE PRESENTACION Demo.php
<? require_once("Fraccion.php"); //Invoca al codigo de Fraccion.php //atrapar valores $f1=$_REQUEST["txtf1"]; $f2=$_REQUEST["txtf2"]; $ope=$_REQUEST["cboope"]; $benviar=$_REQUEST["btnenviar"]; //Conseguir el numerador y denominador de la fraccion 1 $p=strpos($f1,"/"); //Hallando la posicion del / $n1=substr($f1,0,$p); //Capturando el numerador $d1=substr($f1,$p+1); //Capturando el denominador //Conseguir el numerador y denominador de la fraccion 2 $p=strpos($f2,"/"); $n2=substr($f2,0,$p); $d2=substr($f2,$p+1); //Instanciar la clase $fr=new Fraccion(); //Crear un objeto a partir de la clase $f1=new Fraccion(); $f1->n=$n1; $f1->d=$d1; $f2=new Fraccion(); $f2->n=$n2; $f2->d=$d2; if($ope=="Sumar"){ //Cuando es metodo miembro se invoca a traves de la instancia //Cuando es metodo estatico se invoca desde la clase $fr=$fr->simplificar(Fraccion::sumar($f1,$f2)); } elseif($ope=="Restar"){ $fr=$fr->simplificar(Fraccion::restar($f1,$f2)); }

Pg. 22

?> <!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> <style type="text/css"> <!-.Estilo1 { color: #FFFFFF; font-weight: bold; font-size: 14px; } .Estilo2 { font-size: 18px; color: #FF0000;

Universidad Privada Telesup


} --> </style> </head> <link rel="stylesheet" type="text/css" href="css/estilo.css"> <body> <h1>Fraccion</h1> <form id="form1" name="form1" method="post" action=""> <table width="267" border="1"> <tr> <td width="88">Fraccion 1</td> <td width="186"><input type="text" name="txtf1" id="txtf1" /></td> </tr> <tr> <td>Fraccion 2</td> <td><input type="text" name="txtf2" id="txtf2" /></td> </tr> <tr> <td>Operacion</td> <td><select name="cboope" id="cboope"> <option>Seleccione Operacion</option> <option value="Sumar">Sumar</option> <option value="Restar">Restar</option> <option value="Multiplicar">Multiplicar</option> <option value="Dividir">Dividir</option> </select> </td> </tr> <tr> <td colspan="2"><div align="center"> <input type="submit" name="btnenviar" id="btnenviar" value="Enviar" /> </div></td> </tr> </table> </form> <? if($benviar!="") { //Si se presion el botn enviar ?> <table width="273" border="1"> <tr> <td bgcolor="#003300"><div align="center"><span class="Estilo1">Respuesta</span></div></td> </tr> <tr> <td><div align="center" class="Estilo2"><?=$fr->n?>/<?=$fr->d?></div></td> </tr> </table> <? } ?> <p>&nbsp;</p> </body> </html>

Pg. 23

Universidad Privada Telesup Actividad


Desarrollar las siguientes aplicaciones webs utilizando el cdigo PHP: Aadir en la clase Fraccion la siguiente propiedad: Entero (Esta propiedad servir para las fracciones mixtas)

Pg. 24

Aadir en la clase Fraccion los siguientes mtodos: Multiplicar() Dividir() ConvertiraImpropia() ConvertiraMixta()

Crear una nueva pgina main para convertir fracciones mixtas a impropias. En esta nueva pgina se recepcionar una fraccin mixta y el sistema nos devolver una fraccin impropia. Crear otra pgina main para convertir fracciones impropias a mixtas. En esta nueva pgina se recepcionar una fraccin impropia y el sistema nos devolver una fraccin mixta.

Nota: Para todos los casos use la mejor presentacin esttica.

Universidad Privada Telesup

Pg. 25

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

Herencia de Clases Concepto: La herencia de clases permite que se pueda definir nuevas clases basadas en clases existentes, lo cual facilita re-utilizar cdigo previamente desarrollado. Si una clase deriva o extiende de otra, hereda todos sus atributos y mtodos. Las clases derivadas son conocidas como subclases y su antecesora es denominada clase base. La clase derivada puede aadir nuevas variables y mtodos y/o redefinir las variables y mtodos heredados. En cierta forma es como si la sub-clase (la clase derivada) contuviera un objeto de la super-clase; en realidad lo ampla con nuevas variables y mtodos. PHP permite mltiples niveles de herencia, No obstante, no permite que una clase derive de varias (no es posible la herencia mltiple). Recordar: Se pueden crear tantas clases derivadas de una misma clase como se quiera. La Clase Derivada hereda mtodos y propiedades de la Clase Padre. Adicionalmente Podemos aadir otros mtodos o atributos a la clase hijo. En PHP para indicar que una clase deriva de otra se utiliza la palabra extends, como por ejemplo: <? class Alumno extends Persona { ... } ?>

Universidad Privada Telesup

Pg. 26

En el ejemplo anterior, se est creando la clase Alumno la cual deriva o hereda de la clase Persona. Por tanto la clase Alumno habr heredado las propiedades y mtodos de la clase Persona.

VENTAJAS Y PRECAUCACIONES DE SU USO La principal ventaja del uso de herencia de clases es la reutilizacin de los mtodos de clases base, lo cual impide que se repita el mismo cdigo muchas veces dentro del desarrollo de una aplicacin, y por otro lado favorece el mantenimiento de los programas, porque cualquier cambio que se realice en una clase base inmediatamente replica para todas las subclases que extienden de esta, lo cual ahorra el tiempo a la labor de la programacin . Al disear nuestras clases es fundamental que primero se disee adecuadamente un modelo inicial , utilizando metodologas basadas en el anlisis y diseo de sistemas orientado a objetos , de no ser as nuestro diseo de clases con sus respectivas herencias podra ser inconsistente e inarticulado. NIVELES DE ACCESO Es el mecanismo que permite definir el tipo de nivel de acceso a la informacin de los objetos, (clases, mtodos y propiedades). En PHP los niveles de acceso estn dados de la siguiente forma: Public Los elementos declarados como Public son accesibles tanto desde fuera como desde dentro de la clase.

Universidad Privada Telesup

Pg. 27

<?php class Vehiculo { public $marca; function __construct($marca) { $this->marca=$marca; } } $micoche = new Vehiculo("Toyota"); echo $micoche->marca; ?> El atributo marca es pblico y por lo tanto es visible desde fuera de la clase. Private Los elementos declarados como Private son accesibles slo desde la misma clase donde fueron definidos. <?php class Vehiculo { private $marca; function __construct($marca) { $this->marca=$marca; } } $micoche = new Vehiculo("Toyota"); echo $micoche->marca; ?> Si ejecutamos el cdigo obtendremos el siguiente error: Fatal error: Cannot access private property Vehiculo::$marca El atributo marca no es visible fuera de la clase en la que se defini. Protected Los elementos declarados como Protected son accesibles desde la misma clase donde fueron definidos y en sus subclases.

Universidad Privada Telesup

Pg. 28

<?php class Vehiculo { protected $marca; function __construct($marca) { $this->marca=$marca; } } class Coche extends Vehiculo { function __construct($marca) { $this->marca=$marca; } } $micoche = new coche("Toyota"); echo $micoche->marca; ?> Si ejecutamos el cdigo obtendremos el siguiente error Fatal error: Cannot access protected property Coche Producido por la lnea que contiene este cdigo: echo $micoche->marca; Este error sucede por utilizar el atributo marca fuera de la clase Vehculo y quedar as fuera de su visibilidad. En cambio el uso de este atributo en la clase Coche y Vehculo es correcto. Nota : Los mtodos o atributos sin ninguna de las declaraciones (public, private o protected) por defecto sern public. Ejemplo:

Universidad Privada Telesup


LOGICA DE NEGOCIOS Crear el siguiente modelo de clases:

Pg. 29

LOGICA DE PRESENTACIN Luego crear un formulario que instancie la subclase AluPresencial e invoque los mtodos heredados.

CODIGO FUENTE LOGICA DE NEGOCIOS Persona.php


1. <? 2. class Persona { 3. public $nombres; 4. public $fnac; 5. public function calcularEdad(){ 6. $fhoy=strtotime("now"); 7. $ffnac=strtotime($this->fnac); 8. return (($fhoy-$ffnac)/86400)/365;

Universidad Privada Telesup


9. } 10. } 11. ?>

Pg. 30

Alumnos.php
1. <? 2. require_once "Persona.php"; 3. class Alumnos extends Persona { 4. public $n1; 5. public $n2; 6. public $n3; 7. public function calcularPromedio(){ 8. return ($this->n1+$this->n2+$this->n3)/3; 9. } 10. } 11. ?>

Profesor.php
1. <? 2. require_once "Persona.php"; 3. class Profesor extends Persona { 4. public $titulo; 5. public $especialidad; 6. } 7. ?>

AluPresencial.php
1. <? 2. require_once "Alumnos.php"; 3. class AluPresencial extends Alumnos { 4. } 5. ?>

AlumVirtual.php
1. <? 2. require_once "Alumnos.php"; 3. class AlumVirtual extends Alumnos { 4. } 5. ?>

ProfNombrados.php
1. <? 2. require_once "Profesor.php"; 3. class ProfNombrados extends Profesor {

Universidad Privada Telesup


4. } 5. ?>

Pg. 31

ProfContratados.php
1. <? 2. require_once "Profesor.php"; 3. class ProfContratados extends Profesor { 4. } 5. ?>

CODIGO FUENTE LOGICA DE PRESENTACIN


1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. <? require_once("../model/AluPresencial.php"); $mesesabr=array("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov", "dec"); $meses=array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","S etiembre","Octubre","Noviembre","Diciembre"); //Capturar valores $dia=$_POST["cbodia"]; $mes=$_POST["cbomes"]; $a=$_POST["cboanio"]; $n1=$_POST["txtn1"]; $n2=$_POST["txtn2"]; $n3=$_POST["txtn3"]; $btnprocesar=$_POST["btnprocesar"]; //Armar la fecha $fechanac=$dia." ".$mes." ".$a; echo $fechanac; //Instanciar a una de las clases del modelo $obj=new AluPresencial(); //Ingresar valores a las propiedades $obj->fnac=$fechanac; $obj->n1=$n1; $obj->n2=$n2; $obj->n3=$n3; //Llamar a los metodos $edad=$obj->calcularEdad(); $pro=$obj->calcularPromedio(); ?> <!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" /> <title>Documento sin t&iacute;tulo</title> </head> <link rel="stylesheet" type="text/css" href="../css/estilo.css"> <body> <h1>Alumnos</h1> <form id="form1" name="form1" method="post" action=""> <table width="323" border="1"> <tr>

Universidad Privada Telesup


39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91.

Pg. 32

<td width="118">Nombre</td> <td width="189" colspan="3"><input name="txtnom" type="text" class="campoEditar" id="txtnom" /></td> </tr> <tr> <td>Fecha Nacimiento </td> <td><select name="cbodia" id="cbodia"> <option value="">Dia</option> <? for($i=1;$i<=31;$i++) { ?> <option value=<?=$i?>><?=$i?></option> <? } ?> </select> </td> <td><select name="cbomes" id="cbomes"> <option value="">Mes</option> <? for($i=0;$i<12;$i++) { ?> <option value="<?=$mesesabr[$i]?>"><?=$meses[$i]?></option> <? } ?> </select></td> <td><select name="cboanio" id="cboanio"> <option>A&ntilde;o</option> <? for($i=1986;$i<1999;$i++) { ?> <option value="<?=$i?>"><?=$i?></option> <? } ?> </select></td> </tr> <tr> <td>Nota 1 </td> <td colspan="3"><input name="txtn1" type="text" class="campoEditar" id="txtn1" /></td> </tr> <tr> <td>Nota 2 </td> <td colspan="3"><input name="txtn2" type="text" class="campoEditar" id="txtn2" /></td> </tr> <tr> <td>Nota 3 </td> <td colspan="3"><input name="txtn3" type="text" class="campoEditar" id="txtn3" /></td> </tr> <tr> <td colspan="4"><div align="center"> <input name="btnprocesar" type="submit" class="boton" id="btnprocesar" value="Procesar" /> </div></td> </tr> </table> </form> <? if($btnprocesar!="") { //Si se presion btn?> <div id="salida"> <table width="200" border="1"> <tr> <th colspan="2" scope="col">Respuestas</th> </tr> <tr> <td width="76">Edad</td> <td width="108"><?=$edad?></td> </tr>

Universidad Privada Telesup


92. 93. 94. 95. 96. 97. 98. 99. 100. 101. <tr> <td>Promedio</td> <td><?=$pro?></td> </tr> </table> </div> <? } // fin del if ?> <p>&nbsp;</p> </body> </html>

Pg. 33

Actividad 4
Aplicar los conceptos de herencias y niveles de accesos en el siguiente caso prctico: La Empresa XYZ es una empresa que se desempea como un operador logstico, se encarga de almacenar, transportar y distribuir toda clase de enseres a sus clientes, la empresa XYZ cuenta con muchos almacenes en Lima y Provincias los cuales se clasifican en Almacn de Perecibles y Almacn de No perecibles. Todos estos almacenes cuentan con un nmero de identificacin, Responsable, MontoTotaldeMercaderia, Pliza de Seguro (Excepto los No Perecibles) y Regin a la que abastecen. Los almacenes de Perecibles se clasifican en: Almacenes con Refrigeracin, Almacenes Aclimatados y Almacenes Trmicos, los cuales cuentan adicionalmente con un SubEncargado y Operador de Almacn. Los almacenes de No Perecibles se clasifican en: Almacenes de tipo: A1, A2 y A3. Los cuales solo cuentan con un Sub-Encargado y carecen de un Operador de Almacn. Los almacenes perecibles deben contar con el mtodo: calcularMontodelaPrima(), el cual corresponde al 11.5% del montoTotaldeMercadera si se trata de almacenes de la regin Lima y del 18% si se tratan de almacenes de otras regiones. Crear una clase demo en la cual se visualice la instancia de un almacn A1 y la invocacin de los mtodos y propiedades heredados. 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