Buscando artículos de calidad para compartir con ustedes, encuentro un reciente y magnífico artículo ("Object-Oriented PHP for Beginners") extraído del libro Pro PHP and jQuery, que a continuación se los muestro, pero en nuestro idioma. He incluido los ejemplos online, para que podamos apreciarlos mejor. Y es que, para muchos programadores, la programación orientada a objetos es un concepto aterrador, con una sintaxis muy complicada y otros temores.
Así pues, en este artículo aprenderemos los conceptos detrás de la Programación Orientada a Objetos con PHP (PHP OOP), un estilo de programación en el que las acciones relacionadas son agrupadas en clases para facilitar la creación de un código más compacto y efectivo...
¿Qué es la Programación Orientada a Objetos?
La programación orientada a objetos es un estilo de programación que nos permite (a los desarrolladores) agrupar tareas similares en clases. Esto ayudará a que nuestro código mantenga el principio "No te repitas" (en inglés Don't Repeat Yourself o DRY, la wikipedia lo define) y así, mantenerlo fácilmente.Uno de los mayores beneficios de la programación DRY es que, si una pieza de información cambia en tu programa, usualmente sólo se requerirá un cambio para actualizar el código. Uno de las más grandes pesadillas para los desarrolladores es mantener el código cuando los datos se declaran una y otra vez, lo que significa que cualquier cambio al programa se convierte en un juego, infinitamente más frustrante, que el ¿Dónde está Waldo?, donde hay que atrapar el contenido y funcionalidad duplicada.
OOP es intimidante para muchos de los desarrolladores porque nos introduce a una nueva sintaxis y, a simple vista, parece ser más complejo que el sencillo código estructurado o en línea. Sin embargo, una observación más avispada, nos mostrará que OOP es en realidad un enfoque, en última instancia, sencillo y simple, de programación.
La programación orientada a objetos es un estilo de programación que permite a los desarrolladores agrupar tareas similares en clases.
¿Qué son los Objetos y Clases?
Antes de profundizar en la OOP, debemos tener una comprensión básica de las diferencias entre Objetos y Clases. En esta sección veremos como se construyen las clases, sus diferentes capacidades y algunos usos.Reconociendo las diferencias entre Objetos y Clases
Fotos de Instant Jefferson y John Wardell
De buenas a primeras, hay una confusión en OOP: Desarrolladores experimentados empiezan a hablar sobre objetos y clases, y estos parecen ser términos intercambiables. Esto no es así, sin embargo, la diferencia puede ser un poco complicada de entender a primera vista.
Una clase, por ejemplo, es como el plano de una casa. Define la forma de la casa en un papel, y establece las conexiones entre las diferentes partes de la casa claramente. Aún cuando la casa todavía no existe.
Un objeto, entonces, es como una casa, construida de acuerdos al plano. Los datos que se almacenan en el objeto son como la madera, cables y concreto que componen la casa: Si la casa se hubiera montado sin un plano, sólo sería una pila de cosas. Sin embargo, cuando todo se junta, se convierte en una organizada y útil casa.
Las clases son la estructura de los datos y acciones, y usan esta información para construir objetos. Más de un objeto puede ser construido de la misma clase y al mismo tiempo; estos objetos son independientes los unos de los otros. Continuando con nuestra construcción analógica, esto es similar a un condominio que puede ser construido con el mismo plano: 150 casas distintas, que lucen igual, pero que tienes diferentes familias y decoraciones por dentro.
¿Cómo se estructura una clase?
La sintaxis para crear una clase es muy sencilla: Declara una clase usando la palabra "class", seguida del nombre de la clase y un set de llaves ({}):<?php
class MyClass{
// Los métodos y propiedades de la clase van aquí
}
?>
Después de crear la clase, una nueva clase puede ser instanciada y almacenada en una variable usando la palabra "new":
<?php
$obj = new MyClass;
?>
Para ver el contenido de la clase, podemos usar la función var_dump():
<?php
var_dump($obj);
?>
Prueba este proceso, colocando el siguiente código en un nuevo archivo llamado test.php (en tu localhost):
<?php
class MyClass{
// Los métodos y propiedades de la clase van aquí}
$obj = new MyClass;
var_dump($obj);
?>
Carga la página en tu navegador en http://localhost/test.php y la siguiente línea debe aparecerte:
1. object(MyClass)#1 (0) { }
De esta sencilla manera, haz completado tu primer script con OOP.
Definiendo las propiedades de una clase
Para agregar datos a la clase se usan las propiedades, o las variables de una clase específica. Éstas, trabajan exactamente igual que una variable común y corriente, excepto que ellas están enlazadas al objeto y, por lo tanto, sólo se puede acceder a ellas mediante él.Para añadir una propiedad a MyClass, añade el siguiente codigo en tu script:
<?php
class MyClass{
public $prop1 = "¡Soy la propiedad de una clase!";
}
$obj = new MyClass;
var_dump($obj);
?>
La palabra "public" determina la visibilidad de la propiedad, aprenderás un poco más sobre esto en unos momentos. Luego, la propiedad es llamada usando la sintaxis estándar de una variable, y un valor le es asignado (Aunque, las propiedades de una clase no necesitan de un valor inicial).
Para leer esta propiedad e imprimirla en el navegador, vamos a hacer referencia al objeto que la contiene:
<?php
echo $obj->prop1;
?>
Debido a que pueden existir múltiples instancias de una clase, si el objeto no es referenciado individualmente, el script será incapaz de determinar cual objeto leer. El uso de la flecha (->) es un operador OOP que accede al contenido de propiedades y métodos de un objeto dado.
Modifica el script en test.php para imprimir la propiedad en vez de volcar toda la clase, modificando el código como se muestra:
<?php
class MyClass{
public $prop1 = "¡Soy la propiedad de una clase!";
}
$obj = new MyClass;
echo $obj->prop1; // Imprime la propiedad
?>
Recarga el navegador y ahora aparecerá lo siguiente:
¡Soy la propiedad de una clase!
Definiendo los métodos de una clase
Los métodos son las funciones de una clase específica. Es decir, que las acciones individuales que un objeto será capaz de realizar, están definidas, dentro de una clase, como métodos.Por ejemplo, para crear métodos que establecen y obtienen el valor de una propiedad $prop1, añade lo siguiente a tu código:
<?php
class MyClass{
public $prop1 = "¡Soy la propiedad de una clase!";
public function setProperty($newval){
$this->prop1 = $newval;
}
public function getProperty(){
return $this->prop1 . "<br />";
}
}
$obj = new MyClass;
echo $obj->prop1;
?>
Nota: OOP permite a los objetos referenciarse a si mismos utilizando $this. Cuando trabajamos con un método, usa $this de la misma manera que usarías el nombre del objeto fuera de la clase.
Para usar estos métodos, hay que llamarlos como a cualquier función; pero primero, hay que referenciar al objeto que lo contiene. Imprime la propiedad de MyClass, cambia su valor e imprímelo otra vez, realizando las modificaciones que a continuación se indican.
<?php
class MyClass{
public $prop1 = "¡Soy la propiedad de una clase!";
public function setProperty($newval){
$this->prop1 = $newval;
}
public function getProperty(){
return $this->prop1 . "<br />";
}
}
$obj = new MyClass;
echo $obj->getProperty(); // Imprime el valor de la propiedad
$obj->setProperty("¡Soy el nuevo valor de la propiedad!"); // Establece un valor nuevo
echo $obj->getProperty(); // Imprime nuevamente para ver el cambio
?>
Recarga el navegador, y verás lo siguiente:
¡Soy la propiedad de una clase!
¡Soy el nuevo valor de la propiedad!
El poder de la programación orientada a objetos se hace evidente cuando se utilizan varias instancias de la misma clase.
<?php
class MyClass{
public $prop1 = "¡Soy la propiedad de una clase!";
public function setProperty($newval){
$this->prop1 = $newval;
}
public function getProperty(){
return $this->prop1 . "<br />";
}
}
// Create two objects
$obj = new MyClass;$obj2 = new MyClass;
// Get the value of $prop1 from both objects
echo $obj->getProperty();
echo $obj2->getProperty();
// Set new values for both objects
$obj->setProperty("¡Soy el nuevo valor de la propiedad!");
$obj2->setProperty("¡Yo pertenezco a la segunda instancia!");
// Output both objects' $prop1 value
echo $obj->getProperty();
echo $obj2->getProperty();
?>
Cuando recargues el navegador, aparecerá lo que sigue:
¡Soy la propiedad de una clase!
¡Soy la propiedad de una clase!
¡Soy el nuevo valor de la propiedad!
¡Yo pertenezco a la segunda instancia!
Como puedes ver, OOP mantiene los objetos como entidades separadas, lo que facilita la separación de diferentes piezas de código en pequeños, pero relacionados, paquetes.
De esta manera ya tenemos claro lo que es la programación orientada a objetos, el concepto de Clases y Objetos, la distinción entre ellos, y las definiciones de propiedades y métodos. Todo breve y claramente explicado. Aún faltan más aspectos que comentar sobre PHP OOP, pero quedarán pendientes para un post posterior.
Fuente: Este artículo es un extracto del libro Pro PHP and jQuery, en inglés: Object-Oriented PHP for Beginners.
Via baluart.net
No hay comentarios:
Publicar un comentario