GUÍA DE POO EN PHP
María Guadalupe García MuñozLorena Zúñiga Reyes
TIC-91
CLASES
o Las clases son plantillas que agrupan comportamiento (métodos) y estados (atributos)
de los futuros objetos.
oCada objeto es una representación abstracta de una entidad del mundo real o virtual
en términos de:
o Un conjunto de características esenciales (atributos).
o Un conjunto de operaciones o comportamientos que permiten la manipulación de
estos atributos (métodos).
EJEMPLO ATRIBUTOS DE UNA CLASE
CÓDIGO EJEMPLO
EJECUCIÓN DEL EJEMPLO
EJEMPLO METODOS DE UNA CLASE
CÓDIGO EJEMPLO
EJECUCIÓN DEL EJEMPLO
REFERENCIA THIS
◦ $this es la variable que hace referencia a la instancia actual del objeto. En todos los
lenguajes con orientación a objetos existe una variable, que hace referencia al objeto
con el que se está trabajando, en php esta es su variable.
EJEMPLO
CÓDIGO EJEMPLO
EJECUCIÓN DE EJEMPLO
DIFERENTES FORMAS PARA EL PASO DE ARGUMENTOS A UN METODO◦ FORMA #1 this:
◦ los argumentos se pueden asignar directo desde el método principal,
◦ Primero se instancia el objeto por ejemplo
◦ Automovil new=obj marca();
◦ Después se le asigna el valor por medio del this
◦ Obj $this->marca=bmw;
◦ FORMA #2 usando los métodos de la clase:
◦ Los argumentos se pueden asignar a los atributos de la clase por medio de un método.
◦ Primero se instancia el objeto por ejemplo
◦ Persona new=obj Persona();
◦ Después se le asigna el valor por medio del this
◦ Obj $this->asignanombre(Emanuel);
DEVOLER UN VALOR DESDE UN MÉTODO◦ <?php
◦ class person {
◦ var $name;
◦ //esta function regresa el valor de
◦ function muestra_name() {
◦ echo “$this->name”;
◦ }
CÓDIGO EJEMPLO
EJECUCIÓN DE EJEMPLO
CONSTRUCTOR
◦ En programación orientada a objetos (POO), un constructor es una subrutina cuya
misión es inicializar un objeto de una clase. En el constructor se asignan los valores
iniciales del nuevo objeto.
◦ Se utiliza para crear tablas de clases virtuales y poder así desarrollar el polimorfismo,
una de las herramientas de la programación orientada a objetos. Al utilizar un
constructor, el compilador determina cual de los objetos va a responder al mensaje
(virtual) que hemos creado. Tiene un tipo de acceso, un nombre y un paréntesis.
EJEMPLO
CÓDIGO EJEMPLO EJECUCIÓN DE EJEMPLO
HERENCIA
◦ La herencia es un mecanismo que permite la definición de una clase a partir de la
definición de otra ya existente. La herencia permite compartir automáticamente
métodos y datos entre clases, subclases y objetos.
◦ La herencia está fuertemente ligada a la reutilización del código en la OOP. Esto es, el
código de cualquiera de las clases puede ser utilizado sin más que crear una clase
derivada de ella, o bien una subclase.
◦ Hay dos tipos de herencia: Herencia Simple y Herencia Múltiple. La primera indica que
se pueden definir nuevas clases solamente a partir de una clase inicial mientras que la
segunda indica que se pueden definir nuevas clases a partir de dos o más clases
iniciales.
EJEMPLO
CÓDIGO EJEMPLO
EJECUCIÓN DE EJEMPLO
POLIMORFISMO
◦ Permite referirme a objetos de clases diferentes mediante el mismo elemento
◦ de programa y realizar la misma operación de diferentes formas, según sea el objeto
al que se hace referencia en ese momento.
MODIFICADORES DE ACCESO
◦ Private: Cuando un método o atributo (variable) es declarada como private, su usoqueda restringido al interior de la misma clase, no siendo visible para el resto. Unaclase no puede ser Private, sólo atributos y métodos.
◦ (default): Si no se le asigna ningún modificador al elemento (variable, método y clase)Java asigna uno denominado "por defecto" el cual permite la visibilidad de loselementos(variables, métodos y clases) en clases que se encuentren en el mismopaquete(posteriormente explicaremos los paquetes).
◦ Protected: Un método o atributo definido como protected es visible para las clasesque se encuentren en el mismo paquete y para cualquier subclase de esta aunqueeste en otro paquete. Este modificador es utilizado normalmente para Herencias, asíque lo estudiaremos más a fondo cuando lleguemos a las Herencias.
◦ Public: El modificador public ofrece la máxima visibilidad, una variable, método oclase con modificador public será visible desde cualquier clase, aunque estén enpaquetes distintos.
Public
◦ Los elementos declarados como Public son accesibles tanto desde fuera como desde dentro de la clase.
◦ Ejemplo
◦ <?php
◦ class Vehiculo
◦ {
◦ public $marca;
◦ function __construct($marca)
◦ {
◦ $this->marca=$marca;
◦ }
◦ }
◦ $micoche = new Vehiculo("Toyota");
◦ echo $micoche->marca;
◦ ?>
◦ El atributo marca es público y por lo tanto es visible desde fuera de la clase.
CÓDIGO EJEMPLO
EJECUCIÓN DE EJEMPLO
PRIVATE
◦ Los elementos declarados como Private son accesibles sólo 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;
◦ ?>
◦ Nota:El atributo marca no es visible fuera de la clase en la que se definió.
CÓDIGO EJEMPLO
EJECUCIÓN DE EJEMPLO
PROTECTED
◦ Indica que los elementos sólo pueden ser accedidos desde su mismo paquete y desde cualquier clase que extienda la clase en que se encuentra, independientemente de si esta se encuentra en el mismo paquete o no.
◦ <html>
◦ <head>
◦ <title>Pruebas</title>
◦ </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;
◦ }
◦ }
◦ $suma=new Suma();
◦ $suma->valor1=10;
◦ $suma->cargar2(10);
◦ $suma->operar();
◦ echo 'El resultado de la suma de 10+10 es:';
◦ $suma->imprimirResultado();
◦ ?>
◦ </body>
◦ </html>
CÓDIGO EJEMPLO
CLASES ABSTRACTAS
◦ 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.
EJEMPLO◦ <html>
◦ <head>
◦ <title>Pruebas</title>
◦ </head>
◦ <body>
◦ <?php
◦ abstract 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>
CÓDIGO EJEMPLO
EJEMPLO
EJECUCIÓN DE EJEMPLO
INTERFACE
◦ Las interfaces, tal como las clases abstractas. no se pueden instanciar. Sus métodos deben ser re-escritos por la clase que implemente.
◦ Todos los metodos definidos en una interfaz, deben ser codificados en la clase que implementa dicha interfaz.
◦ La clase que implemente la interfaz debe utilizar exactamente las mismas estructuras de metodos que fueron definidos en la interfaz.
◦ Las interfaces se pueden extender al igual que las clases mediante el operador extends.
◦ Una clase puede implementar diferente interfaces.
◦ Una interfaz no se puede instanciar y todos sus metodos son publicos dada la propia naturaleza de la interfaz.
◦ Una interfaz no puede contener ni atributos, ni metodos implementados, solo declaraciones de metodos y constantes.
EJEMPLO◦ <?php
◦ interface Poligono
◦ {
◦ function calculo();
◦ }
◦ class classCuadrado implements Poligono
◦ {
◦ function calculo()
◦ {
◦ echo 'area de un cuadrado : a=l*l<br>';
◦ }
◦ }
◦ class classRectangulo implements Poligono
◦ {
◦ function calculo()
◦ {
◦ echo 'area de un rectangulo : a=b*h<br>';
◦ }
◦ }
◦ class classTriangulo implements Poligono
◦ {
◦ function calculo()
◦ {
◦ echo 'area de un triangulo : a=(b*h)/2<br>';
◦ }
◦ }function area(Poligono $obj)
◦ {obj->calculo();
◦ }
◦ $cuadrado = new Cuadrado;
◦ $rectangulo = new Rectangulo;
◦ $triangulo = new Triangulo;
◦ area($cuadrado);
◦ area($rectangulo);
◦ area($triangulo);
CÓDIGO EJEMPLO