jueves, 7 de enero de 2016

Objetos en PHP 5

Una vez que las clases han sido declaradas, será necesario crear los objetos y utilizarlos, aunque hemos visto que algunas clases, como las clases abstractas son solo modelos para otras, y por lo tanto no necesitan instanciar al objeto.

Instanciar una clase
Para instanciar una clase, solo es necesario utilizar la palabra clave new. El objeto será creado, asignando esta instancia a una variable (la cual, adoptará la forma de objeto).
Lógicamente, la clase debe haber sido declarada antes de ser instanciada, como se muestra a continuación:

# declaro la clase
class Persona {
#...
}
# creo el objeto instanciando la clase
$persona = new Persona();

Reglas de Estilo sugeridas

Utilizar nombres de variables (objetos) descriptivos, siempre en letra minúscula, separando palabras por guiones bajos. Por ejemplo si el nombre de la clase es NombreDeMiClase como variable utilizar $nombre_de_mi_clase. Esto permitirá una mayor legibilidad del código.

Propiedades en PHP 5
Las propiedades representan ciertas características del objeto en sí mismo. Se definen anteponiendo la palabra clave var al nombre de la variable (propiedad):

class Persona {
var $nombre;
var $edad;
var $genero;
}

Las propiedades pueden gozar de diferentes características, como por ejemplo, la visibilidad: pueden ser públicas, privadas o protegidas. Como veremos más adelante, la visiblidad de las propiedades, es aplicable también a la visibilidad de los métodos.

Propiedades públicas

Las propiedades públicas se definen anteponiendo la palabra clave public al nombre de la variable. Éstas, pueden ser accedidas desde cualquier parte de la aplicación, sin restricción.

class Persona {
public $nombre;
public $genero;
}

Propiedades privadas
Las propiedades privadas se definen anteponiendo la palabra clave private al nombre de la variable. Éstas solo pueden ser accedidas por la clase que las definió.

class Persona {
public $nombre;
public $genero;
private $edad;
}
 
Propiedades protegidas
Las propiedades protegidas pueden ser accedidas por la propia clase que la definió, así como por las clases que la heredan, pero no, desde otras partes de la aplicación. Éstas, se definen anteponiendo la palabra clave protected al nombre de la variable:

class Persona {
public $nombre;
public $genero;
private $edad;
protected $pasaporte;
}

Propiedades estáticas
Las propiedades estáticas representan una característica de “variabilidad” de sus datos, de gran importancia en PHP 5. Una propiedad declarada como estática, puede ser accedida sin necesidad de instanciar un objeto. y su valor es estático (es decir, no puede variar ni ser modificado). Ésta, se define anteponiendo la palabra clave static al nombre de la variable:

class PersonaAPositivo extends Persona {
public static $tipo_sangre = 'A+';

Clases y Objetos en PHP 5

Definición de Clases
Según el Manual Oficial de PHP, una Clase es:
[…] “una colección de variables y funciones que trabajan con estas variables. Las variables se definen utilizando var y las funciones utilizando function” [...]

Para definir una clase, el Manual Oficial de PHP, continúa diciendo:
[…] “La definición básica de clases comienza con la palabra clave class, seguido por un nombre de clase, continuado por un par de llaves que encierran las definiciones de las propiedades y métodos pertenecientes a la clase. El nombre de clase puede ser cualquier etiqueta válida que no sea una palabra reservada de PHP. Un nombre válido de clase comienza con una letra o un guión bajo, seguido de la cantidad de letras, números o guiones bajos que sea.” […]

Veamos un ejemplo de definición de clase:
class NombreDeMiClase {
#...
}

Reglas de Estilo sugeridas

Utilizar CamelCase para el nombre de las clases.
La llave de apertura en la misma línea que el nombre de la clase, permite una mejor legibilidad del código.

Declaración de Clases abstractas
Las clases abstractas son aquellas que no necesitan ser instanciadas pero sin embargo, serán heredadas en algún momento. Se definen anteponiendo la palabra clave abstract a class:

abstract class NombreDeMiClaseAbstracta {
#...
}

Este tipo de clases, será la que contenga métodos abstractos (que veremos más adelante) y generalmente, su finalidad, es la de declarar clases “genéricas” que necesitan ser declaradas pero a las cuales, no se puede otorgar una definición precisa (de eso, se encargarán las clases que la hereden).

Herencia de Clases
Los objetos pueden heredar propiedades y métodos de otros objetos. Para ello, PHP permite la “extensión” (herencia) de clases, cuya característica representa la relación existente entre diferentes objetos. Para definir una clase como extención de una clase “padre” se utiliza la palabra clave extends.

class NombreDeMiClasePadre {
#...
}

class NombreDeMiClaseHija extends NombreDeMiClasePadre {
/* esta clase hereda todos los métodos y propiedades de la clase padre NombreDeMiClasePadre
*/
}

Declaración de Clases finales En PHP
PHP 5 incorpora clases finales que no pueden ser heredadas por otra. Se definen anteponiendo la palabra clave final.

final class NombreDeMiClaseFinal {
#esta clase no podrá ser heredada
}

Características conceptuales de la POO

La POO debe guardar ciertas características que la identifican y diferencian de otros paradigmas de programación. Dichas características se describen a continuación.

Abstracción

Aislación de un elemento de su contexto. Define las características esenciales de un objeto.

Encapsulamiento
Reúne al mismo nivel de abstracción, a todos los elementos que puedan considerarse pertenecientes a una misma entidad.

Modularidad

Característica que permite dividir una aplicación en varias partes más pequeñas (denominadas módulos), independientes unas de otras.

Ocultación (aislamiento)
Los objetos están aislados del exterior, protegiendo a sus propiedades para no ser modificadas por aquellos que no tengan derecho a acceder a las mismas.

Polimorfismo
Es la capacidad que da a diferentes objetos, la posibilidad de contar con métodos, propiedades y atributos de igual nombre, sin que los de un objeto interfieran con el de otro.

Herencia
Es la relación existente entre dos o más clases, donde una es la principal (padre) y otras son secundarias y dependen (heredan) de ellas (clases “hijas”), donde a la vez, los objetos heredan las características de los objetos de los cuales heredan.

Recolección de basura

Es la técnica que consiste en destruir aquellos objetos cuando ya no son necesarios, liberándolos de la memoria.

Elementos de la POO (Programación Orientada a Objetos)

Clase
Una clase es un modelo que se utiliza para crear objetos que comparten un mismo comportamiento, estado e identidad.

class Persona {
# Propiedades
# Métodos
}

Objeto
Es una entidad provista de métodos o mensajes a los cuales responde (comportamiento); atributos con valores concretos (estado); y propiedades (identidad).

$persona = new Persona();
/*
El objeto, ahora, es $persona,
que se ha creado siguiendo el modelo de la clase Persona
*/

Método
Es el algoritmo asociado a un objeto que indica la capacidad de lo que éste puede hacer.

function caminar() {
#...
}

Evento y Mensaje
Un evento es un suceso en el sistema mientras que un mensaje es la comunicación del suceso dirigida al objeto.

Propiedades y atributos
Las propiedades y atributos, son variables que contienen datos asociados a un objeto.

$nombre = 'Juan';
$edad = '25 años';
$altura = '1,75 mts';