Issuu on Google+

Guía de POO en PHP  Morales Ortiz Diana Gabriela  Ruiz Munguía Andrea  Villavicencio Ponce Juan Daniel


1. Elementos que conforman una clase •

Atributos

Los atributos son todas aquellas características que le asociamos a un tipo de objeto (clase). Si por ejemplo, queremos definir los atributos de una clase llamada Perro, podemos especificar que son la raza, la edad, su color y el nombre del dueño, por mencionar solo algunos de ellos. Los atributos que asociamos a una clase, dependen en gran medida del uso que le daremos dentro del sistema que diseñamos actualmente, pero también pueden ser definidos pensando en futuras implementaciones.

Métodos

Los métodos representan todas aquellas acciones que puede realizar o se pueden llevar a cabo sobre un objeto de una clase. Así, por ejemplo, la clase Perro puede tener los métodos correr, comer, bañar y vacunar, por mencionar algunos de ellos. A nivel de implementación, estos métodos son segmentos de código similares a los procedimientos y funciones utilizadas en la programación modular.


Ejemplo de Atributo Public class Precio { // DeclaraciĂłn del atributo

Objeto foco. Atributos: encender, apagar, aumentar la luz, etc.

Ejemplo de MĂŠtodo nombreObjeto.nombreMĂŠtodo( [lista de argumentos])

Ejemplo: calcular Perimetro pintar finalizar


2. Referencia THIS

โ€ข

Solo es utilizado en programaciรณn orientada a objetos y se define $this dentro de un objeto como un puntero al objeto en que estรก contenido. La palabra this estรก disponible para hacer referencia al objeto en el que se encuentra y puede ser utilizada en cualquier objeto


CODIGO EN PHP

PANTALLA DE EJECUCION


3. Diferentes formas para el paso de argumentos a un método •

Puede que necesitemos que los métodos NuevoIngreso y NuevoGasto devuelvan el saldo nuevo, además de true o false. ¿Podemos hacerlo? Veamos: siendo estrictos en la respuesta, no se puede, ya que un método no puede retornar más de un valor. Sin embargo, sí podemos hacer que un método devuelva datos en uno o varios de sus argumentos. ¿Cómo? Pues pasando esos argumentos por referencia. Me explicaré mejor: un método puede aceptar argumentos de dos formas distintas (en C# son tres, aunque dos de ellas tienen mucho que ver): argumentos pasados por valor y argumentos pasados por referencia.

Cuando un método recibe un argumento por valor, lo que ocurre es que se crea una copia local de la variable que se ha pasado en una nueva dirección de memoria. Así, si el método modifica ese valor, la modificación se hace en la nueva dirección de memoria, quedando la variable original sin cambio alguno. Por ejemplo, si hubiéramos escrito el método NuevoIngreso de este modo:


Ejemplo Codigo public bool NuevoIngreso(double cantidad){ if (cantidad <=0) return false; this.saldo += cantidad; cantidad=this.saldo; return true; } Si el saldo era 100, y efectuamos la siguiente llamada, ¿cuál sería la salida en la consola?: double dinero=345.67; MisCuentas.NuevoIngreso(dinero); Console.Write(dinero);

Ejemplo Imagen


4. Devolver un valor desde un método

• •

En un método que devuelve un objeto (de hecho, una referencia), se puede devolver null

En un método con un tipo de dato primitivo como retorno, se puede devolver cualquier valor o variable que pueda ser casteada hacia el tipo de retorno declarado

En un método con un objeto como tipo de retorno, se puede devolver cualquier tipo de objeto que pueda ser implícitamente convertido hacia el tipo de retorno declarado


CODIGO


5. Constructor Java no permite variables miembro de clase ni objetos sin inicializar, los inicializa siempre con valores por defecto. La inicialización de objetos requiere el uso de constructores.

El compilador proporciona un constructor público por omisión para cada clase que se define. Un constructor es un método especial de la clase que se llama automáticamente cada vez que se crea un objeto de esa clase su función es inicializar objetos de la clase.

Al crear un objeto de una clase: 1º Se reserva memoria (operador new) 2º Se inician los atributos del objeto bien a los valores indicados en la declaración o a los valores por defecto. (atributos numéricos a 0, alfanuméricos a nulo y referencias a null) 3º Se llama al constructor. Un miembro de una clase puede ser iniciado con un objeto de otra clase.


CODIGO <?php class cliente{ var $nombre; var $numero; var $peliculas_alquiladas; function __construct($nombre,$numero){ $this->nombre=$nombre; $this->numero=$numero; $this->peliculas_alquiladas=array(); }

function dame_numero(){ return $this->numero; } } //instanciamos un par de objetos cliente $cliente1 = new cliente("Pepe", 1); $cliente2 = new cliente("Roberto", 564); //mostramos el numero de cada cliente creado echo "El identificador del cliente 1 es: " . $cliente1->dame_numero(); echo "El identificador del cliente 2 es: " . $cliente2->dame_numero(); ?>


6. La herencia

Es una propiedad que permite que los objetos sean creados a partir de otros ya existentes, obteniendo características (métodos y atributos) similares a los ya existentes.


<html> <head> <title>Pruebas</title> CODIGO </head> <body> <?php class Operacion { protected $valor1; protected $valor2; protected $resultado; public function cargar1($v) { $this->valor1=$v; } public function cargar2($v) { $this->valor2=$v; } public function imprimirResultado() { echo $this->resultado.'<br>'; }} class Suma extends Operacion{ public function operar() { $this->resultado=$this->valor1+$this->valor2; ]} class Resta extends Operacion{ public function operar(){ $this->resultado=$this->valor1-$this->valor2; }} $suma=new Suma(); $suma->cargar1(10); $suma->cargar2(10); $suma->operar(); echo 'El resultado de la suma de 10+10 es:'; $suma->imprimirResultado(); $resta=new Resta(); $resta->cargar1(10); $resta->cargar2(5); $resta->operar(); echo 'El resultado de la diferencia de 10-5 es:'; $resta->imprimirResultado(); ?> </body> </html>


7. El polimorfismo Se denomina polimorfismo a la capacidad que tienen los objetos de una clase de responder al mismo mensaje o evento en función de los parámetros utilizados durante su invocación. Un objeto polimórfico es una entidad que puede contener valores de diferentes tipos durante la ejecución del programa.

Superclase sup = new (Subclase);

Clasificación Se puede clasificar el polimorfismo en dos grandes clases: • Polimorfismo dinámico (o polimorfismo paramétrico) es aquél en el que el código no incluye ningún tipo de especificación sobre el tipo de datos sobre el que se trabaja. Así, puede ser utilizado a todo tipo de datos compatible. • Polimorfismo estático (o polimorfismo ad hoc) es aquél en el que los tipos a los que se aplica el polimorfismo deben ser explicitados y declarados uno por uno antes de poder ser utilizados. El polimorfismo dinámico unido a la herencia es lo que en ocasiones se conoce como programación genérica.


<?php CODIGO class Vehiculo{ protected $nafta = 100; //Comienza con 100 litros de nafta public function getNafta(){ return $this->nafta; }} class Ferrari extends Vehiculo{ public function avanzar(){ $this->nafta -= 20; }} class Fiat extends Vehiculo{ public function avanzar(){ $this->nafta -= 8; }} class Usuario { private $vehiculo; function __construct($objeto){ $this->vehiculo = $objeto; } public function avanzarVehiculo(){ $this->vehiculo->avanzar(); } public function nafta(){ return $this->vehiculo->getNafta(); }} $usuario1 = new Usuario (new Fiat); $usuario1->avanzarVehiculo(); $usuario2 = new Usuario (new Ferrari); $usuario2->avanzarVehiculo(); echo "Al Fiat del usuario 1 le quedan " . $usuario1->nafta() . " litros<br/>"; // Al Fiat del usuario 1 le quedan 92 litros echo "Al Ferrari del usuario 2 le quedan " . $usuario2->nafta() . " litros<br/>"; // Al Ferrari del usuario 2 le quedan 80 litros


8. Diferencia entre Publico, Privado y Protected

Private , Public y Protected definen el nivel de acceso que se tendrá pra los elementos internos de la clase (pueden ser métodos o atributos). Los Private sólo pueden ser llamados/accedidos desde métodos pertenecientes a la clase donde fueron definidos, los Public pueden ser llamados/accedidos desde dentro y fuera de la clase (con permiso de lecto/escritura), los Protected son parecidos a los Private sólo que permiten herencia, es decir, los métodos y atributos Protected son accesibles desde la clase en la que se definieron y en las clases que hereden de ella.


CODIGO <?php /** * */ class MyClass { public $public = 'Public'; protected $protected = 'Protected'; private $private = 'Private'; function printHello(){ echo $this->public; echo $this->protected; echo $this->private;}} obj = new MyClass(); echo $obj->public; // Funciona bien echo $obj->protected; // Error Fatal echo $obj->private; // Error Fatal $obj->printHello(); // Muestra Public, Protected y Private class MyClass2 extends MyClass{ // Se puede redeclarar los mĂŠtodos public y protected, pero no el private protected $protected = 'Protected2'; function printHello(){ echo $this->public; echo $this->protected; echo $this->private;}} $obj2 = new MyClass2(); echo $obj2->public; // Funciona bien echo $obj2->protected; // Error Fatal echo $obj2->private; // Undefined $obj2->printHello(); // Muestra Public, Protected2, Undefined


9. Clase abstracta

Este Tipo de Clases nos permiten crear “método generales”, que recrean un comportamiento común, pero sin especificar cómo lo hacen. A nivel de código tienen por particularidad que algunos de sus métodos no tienen “cuerpo de declaración”, ¿qué quiere decir esto? no tienen las llaves { } ni código dentro de ellos y deben estar precedidos por la palabra clave abstract. Si una clases contiene uno o más métodos abstractos está clase debe ser abstracta. Estas clases como son generalidades no pueden ser instanciadas por ningún objeto (se dice que su nivel de abstracción es demasiado alto), entonces su único fin es ser heredado/extendido por otras clases.


CODIGO

public abstract class Figura { // Atributos: public int numeroLados; public int area; public int volumen; // MĂŠtodos: abstract public void calcularArea(); abstract public void calcularVolumen(); }


10. Definición de Interfaz

Las interfaces, tal como las clases abstractas. no se pueden instanciar. Sus métodos deben ser re-escritos por la clase que implemente.


Poo en php