Obtener dinero con AdFly

domingo, 1 de enero de 2017

Programación Orientada a Objetos en PHP 5




1.- ¿Qué es la Programación Orientada a Objetos?

La Programación Orientada a Objetos (POO) es un paradigma de programación que representa la realidad usando objetos y sus interacciones para diseñar aplicaciones y programas. Está basado en varias técnicas, incluyendo herencia, modularidad, polimorfismo y encapsulamiento. Su uso se popularizó a principios de la década de 1990. Actualmente son muchos los lenguajes de programación que soportan la orientación a objetos. Este paradigma de programación tomó posición como el estilo de programación dominante a mediados de los años ochenta, en gran parte debido a la influencia de C++, una extensión del lenguaje de programación C. Su dominación fue consolidada gracias al auge de las Interfaces gráficas de usuario, para las cuales la programación orientada a objetos está particularmente bien adaptada.

La programación orientada a objetos expresa un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas y módulos más fáciles de escribir, mantener y reutilizar.

2.- Características de la Programación Orientada a Objetos

Abstracción: Es fundamental para el pensamiento orientado a objetos. Permite concentrarse en los aspectos del problema presentado, mientras ignora detalles que tienden a distraer. Ya que el mundo real es complejo, se necesita extraer lo esencial e ignorar el resto de la información, eso es abstracción.

Encapsulamiento: La esencia del encapsulamiento está en ocultar la funcionalidad de un objeto, haciéndola invisible a las personas que lo utilicen. Esto reduce la complejidad de su utilización, porque sólo se tiene que comprender su interfaz, olvidándose de cómo está implementada.

Ocultamiento de información: El encapsulamiento conlleva al ocultamiento de información, no permitiendo mostrar al usuario los datos ni la implementación de las operaciones. La mayoría de las personas que escuchan radio no saben o no se preocupan de la complejidad que hay dentro del aparato para dar como salida lo que escuchamos. La radio hace lo que tiene que hacer sin mostrarnos los procesos necesarios para lograrlo, eso se llama ocultamiento de información.

Polimorfismo: Nos da la posibilidad de hacer que una operación exhiba diferente comportamiento en instancias diferentes. El comportamiento varía con respecto a los tipos de datos usados en diferentes operaciones.

Herencia: Las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes. Estos pueden compartir (y extender) su comportamiento sin tener que volver a implementarlo.

3.- De PHP 3 a PHP 5 (y PHP 6)

PHP fue originalmente diseñado en Perl, en base a la escritura de un grupo de CGI binarios escritos en el lenguaje C por el programador danés-canadiense Rasmus Lerdorf en el año 1994 para mostrar su currículum vitae y guardar ciertos datos, como la cantidad de tráfico que su página web recibía. El 8 de junio de 1995 fue publicado "Personal Home Page Tools" después de que Lerdorf lo combinara con su propio Form Interpreter para crear PHP/FI.

PHP 3: Dos programadores israelíes del Technion, Zeev Suraski y Andi Gutmans, reescribieron el analizador sintáctico (parser en inglés) en el año 1997 y crearon la base del PHP3, cambiando el nombre del lenguaje a la forma áctual. Inmediatamente comenzaron experimentaciones públicas de PHP3 y fue publicado oficialmente en junio del 1998.

Para 1999, Suraski y Gutmans reescribieron el código de PHP, produciendo lo que hoy se conoce como Zend Engine o motor Zend, un portmanteau de los nombres de ambos, Zeev y Andi. También fundaron Zend Technologies en Ramat Gan, Israel.

PHP4: En mayo de 2000 PHP 4 fue lanzado bajo el poder del motor Zend Engine 1.0. El día 13 de julio de 2007 se anunció la suspensión del soporte y desarrollo de la versión 4 de PHP, a pesar de lo anunciado se ha liberado una nueva versión con mejoras de seguridad,la 4.4.8 publicada el 13 de Enero del 2008 y posteriormente la versión 4.4.9 publicada el 7 de Agosto de 2008.

PHP5: El 13 de julio de 2004, fue lanzado PHP 5, utilizando el motor Zend Engine II (o Zend Engine 2). La versión más reciente de PHP es la 5.2.6 (1 de Mayo de 2008), que incluye todas las ventajas que provee el nuevo Zend Engine 2 como:

* Mejor soporte para la Programación Orientada a Objetos, que en versiones anteriores era extremadamente rudimentario, con PHP Data Objects.
* Mejoras de rendimiento.
* Mejor soporte para MySQL con extensión completamente reescrita.
* Mejor soporte a XML ( XPath, DOM, etc. ).
* Soporte nativo para SQLite.
* Soporte integrado para SOAP.
* Iteradores de datos.
* Manejo de excepciones.

PHP6: Está previsto el lanzamiento en breve de la rama 6 de PHP. Cuando se lance esta nueva versión quedarán solo dos ramas activas en desarrollo (PHP 5 y 6), pues se abandonó el desarrollo y soporte de PHP 4 el 13 de julio de 2007.

Las diferencias que encontraremos frente a PHP 5.* son:

* Soportará Unicode.
* Limpieza de funcionalidades obsoletas como register_globals, safe_mode...
* PECL.
* Mejoras en orientación a objetos.

4.- Objetos, clases, métodos y atributos en PHP 5

Clase: Las clases son tipos de datos definidos por el usuario. Son Declaraciones o abstracciones de objetos, lo que significa, que una clase es la definición de un objeto, definiendo sus características y funcionalidades.

class Persona
{
  var $nombre;
  var $apellido;

  function __construct($nom, $ape)
  {
    $this->nombre = $nom;
    $this->apellido = $ape;
  }
}

Objeto: Es una instancia de una clase, que interactúa con otros objetos para proporcionar una solución a un problema.

Se puede decir que un objeto tiene lo siguiente:

- Estado, en un instante dado en el tiempo: El estado de un objeto son las propiedades y los valores que toman estas propiedades en un instante en el tiempo (tiempo de ejecución). Un objeto conoce su estado en cualquier instante del tiempo. Su estado se revela a través de su interfaz.

- Identidad, que es única entre los objetos de la misma clase: La identidad de un objeto se refiere a la manera única en que el objeto en que el objeto es conocido, referido y distinguido de todos los objetos del sistema.

- Comportamiento, que son usualmente los datos y funciones de dicha clase: El comportamiento consiste de responsabilidades que promete llevar a cabo el objeto. Es la manera en que un objeto reacciona a los mensajes que recibe (de otros objetos).

<?php
class Persona
{
  var $nombre;
  var $apellido;

  function __construct($nom, $ape)
  {
    $this->nombre = $nom;
    $this->apellido = $ape;
    echo “<br>Acabo de ingresar<br>”;
  }
}
$Estudiante = new Persona(“Juan”, “Pérez”);
?>

Métodos (funciones): Son las operaciones que puede realizar un cliente sobre un objeto. Forman parte de la declaración de la clase.

<?php
class Persona
{
  var $nombre;
  var $apellido;
  var $edad;
  var $hablar;

  function __construct($nom, $ape, $ed)
  {
    $this->nombre = $nom;
    $this->apellido = $ape;
    $this->edad = $ed;
    if($this->edad > 2)
    {
      $hablar = true;
    }
  }

  function getNombre()
  {
    return $this->nombre;
  }

  function getApellido()
  {
    return $this->apellido;
  }

  function habla()
  {
    return $this->hablar;
  }

  function getEdad()
  {
    return $this->edad;
  }

  function setNombre($nom)
  {
    $this->nombre = $nom;
  }

  function setApellido($ape)
  {
    $this->apellido = $ape;
  }

  function setHabla($ha)
  {
    $hablar = $ha;
  }

  function setEdad($ed)
  {
    $this->edad = $ed;
  }
}

$Estudiante = new Persona("Juan", "Pérez", 5);
echo $Estudiante->getNombre();
$Estudiante->setNombre("María");
echo "<br>Ahora se llama: " . $Estudiante->getNombre();
?>

5.- Abstracción de datos en PHP 5

Podemos tener un conjunto de objetos que tienen unas características comunes y funcionalidades, también comunes, pero que difieren en la manera de llevarlas a cabo. Para esto está la abstracción. Una clase abstracta es la que tiene métodos abstractos. Los métodos abstractos son los que están declarados en una clase, pero no se ha definido en la clase el código de esos métodos.
abstract class Humano
{
  protected $cabello;
  protected $ojos;
  protected $cuerpo;

  abstract function nacer();

  abstract function vivir();

  abstract function parrandear();

  abstract function aprender();

  abstract function enseñar();

  abstract function morir();
}

6.- Encapsulamiento y principio de ocultación en PHP 5

Uno de los principios de la programación orientada a objetos es la encapsulación, que es un proceso por el que se ocultan las características internas de un objeto a aquellos elementos que no tienen porque conocerla. Los modificadores de acceso sirven para indicar los permisos que tendrán otros objetos para acceder a sus métodos y propiedades.

Modificador public

Es el nivel de acceso más permisivo. Sirve para indicar que el método o atributo de la clase es público. En este caso se puede acceder a ese atributo, para visualizarlo o editarlo, por cualquier otro elemento de nuestro programa. Es el modificador que se aplica si no se indica otra cosa.

Modificador private

Es el nivel de acceso más restrictivo. Sirve para indicar que esa variable sólo se va a poder acceder desde el propio objeto, nunca desde fuera. Si intentamos acceder a un método o atributo declarado private desde fuera del propio objeto, obtendremos un mensaje de error indicando que no es posible acceder a ese elemento.

Modificador protected

Este indica un nivel de acceso medio y un poco más especial que los anteriores. Sirve para que el método o atributo sea público dentro del código de la propia clase y de cualquier clase que herede de aquella donde está el método o propiedad protected. Es privado y no accesible desde cualquier otra parte. Es decir, un elemento protected es público dentro de la propia clase y en sus heredadas.


7.- Herencia en PHP 5

Como su nombre indica el concepto de herencia se aplica cuando creamos una clase, que va a heredar los métodos y atributos de una ya definida, entonces la clase que hemos creado es una subclase. Para que una clase sea subclase de otra ya creada deberemos usar la palabra reservada extends.

<?php

abstract class Omnivoro
{
  protected $pelo;
  protected $cuerpo;

  abstract function nacer();

  abstract function vivir();

  //abstract function morir();
}

class Persona extends Omnivoro
{
  protected $nombre;
  protected $apellido;
  protected $sueldo;

  function __construct($nom, $ape)
  {
    $this->nombre = $nom;
    $this->apellido = $ape;
    $this->sueldo = 0;
  }

  function nacer()
  {
    echo "<br>Hola<br>";
  }

  function vivir()
  {
    echo "<br>Hola otra vez<br>";
  }

  function getNombre()
  {
    return $this->nombre;
  }

  function getApellido()
  {
    return $this->apellido;
  }

  function getSueldo()
  {
    return $this->sueldo;
  }

  function setNombre($nom)
  {
    $this->nombre = $nom;
  }

  function setApellido($ape)
  {
    $this->apellido = $ape;
  }

  function setSueldo($suel)
  {
    $this->sueldo = $suel;
  }
}

class Gerente extends Persona
{
  private $clave;
  function __construct($nombre, $apellido, $cla)
  {
    parent::__construct($nombre, $apellido);
    $this->clave = $cla;
  }

  function getClave()
  {
    return $this->clave;
  }

  function setClave($cla)
  {
    $this->clave = $cla;
  }
}

class Empleado extends Persona
{
  private $situacion_actual;
  function __construct($nombre, $apellido, $sit_act)
  {
    parent::__construct($nombre, $apellido);
    $this->situacion_actual = $sit_act;
  }

  function getSituacionActual()
  {
    return $this->situacion_actual;
  }

  function setSituacionActual($sit_act)
  {
    $this->situacion_actual = $sit_act;
  }
}

$gerente[0] = new Gerente("Carlos", "Ramonez", "123");
$gerente[1] = new Gerente("Carlos", "Ramonez", "123");
$gerente[2] = new Gerente("Carlos", "Ramonez", "123");

for($i=0; $i < 3; $i++)
{
  echo "<strong>Empleado #".($i+1)."</strong> ";
  echo $gerente[$i]->getNombre()." ";
  echo $gerente[$i]->getApellido(). " ";
  echo $gerente[$i]->getClave()."<br><br>";
}

?>

8.- Polimorfismo y sobrecarga de métodos PHP 5

El Polimorfismo es 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.

<?php

function dibujar($x)
{
  // Supongamos que este es un método de una clase "Pizarra"
  $x->dibujar();
}
$obj=new Círculo(3,187);
$obj2=new Rectángulo(4,5);
$pizarra->dibujar($obj); // llamará al método dibujar de Círculo.
$pizarra->dibujar($obj2); // llamará al método dibujar de Rectángulo.
?>

La Sobrecarga no es soportada por PHP. En POO uno sobrecarga un método cuando se definen dos o tres métodos con el mismo nombre, pero con diferentes números o tipos de parámetros (dependiendo del lenguaje). No existen tipos de datos en PHP, así que sobrecargar por tipos de datos no funciona, sin embargo, sobrecargar por cantidad de parámetros sí se puede:

<?php
class MiClase
{
  function __construct()
  {
    $nombre="MiClase".func_num_args();
    $this->$nombre();
    // Notar que $this->nombre(); generalmente estaría mal
    // pero aqui $nombre es un string con el nombre del
    // método que se va a llamar
  }
  function __construct($x)
  {
    //código;
  }
  function __construct($x,$y)
  {
  //código;
  }
}
?>

9.- Serialización en PHP 5

Serialización:
<?php

/*class Connection {
  var $link;
  var $server;
  var $username;
  var $password;
  var $db;

  public function __construct($server, $username, $password, $db){
    $this->server = $server;
    $this->username = $username;
    $this->password = $password;
    $this->db = $db;
    $this->connect();
  }

  private function connect(){
    $this->link = mysql_connect($this->server, $this->username, $this->password);
    mysql_select_db($this->db, $this->link);
  }

  public function __sleep(){
    mysql_close($this->link);
  }

  public function __wakeup(){
    $this->connect();
  }
}*/

// Creamos nuestra clase de conexion
$con = "Lo ";//new Conexion("localhost","root","root","test");
echo $con;
// Serializamos nuestra clase
$miClaseparaGuardar = serialize($con);
// guardamos en un archivo la clase
$gestor = fopen("cla.txt", 'w+');
fwrite($gestor, $miClaseparaGuardar );
fclose($gestor);
?>

Deserialización:
<?php

// Recuperamos los datos de la clase
$gestor = fopen("cla.txt", 'r');
$contenido = fread($gestor, filesize("cla.txt"));
fclose($gestor);
$con = unserialize($contenido);
echo $con;
?>

Fuentes:
PHP

No hay comentarios:

Publicar un comentario