Programación Orientada a Objetos en PHP

Programación Orientada a Objetos en PHP

Fecha: 21-Feb-2010 | Autor: .
Guardado en: Artículos, Códigos

Una de las ventajas que ofrece PHP desde su versión 5.0 es la capacidad de utilizar completamente el paradigma de programación que se conoce como Programación Orientada a Objetos (POO de ahora en adelante). POO utiliza “objetos” estructuras de datos que consisten en propiedades y métodos. Este paradigma intenta representar las partes de una aplicación y/o la aplicación completa de una forma más humana.

Componentes pilares de la POO.
Para entender la POO es necesario dominar los siguientes conceptos.

Objeto. Se refiere comúnmente a atributos (elementos) y comportamientos (métodos) encapsulados en una entidad. Son un método natural para implementar estructuras de datos abstractos, trayendo “físicamente” componentes de datos con procedimientos para luego manipularlos. Todo objeto tiene estado, exhibe un comportamiento bien definido y posee identidad única.

Clase. Es un tipo de dato definido por el programador que determina las estructuras de datos que lo forman y las funciones asociadas con él, es decir es un modelo con el que se construyen los objetos.
Se define como el constructor utilizado como “plano” para crear un Objeto. Describe el estado y el comportamiento del objeto creado. Un objeto creado por una Clase es una instancia de la clase y la clase que creó esa instancia es considerado como el tipo del objeto. Un ejemplo de un objeto creado por una clase “fruta” sería “piña”, otro “pera” y así sucesivamente. Es la abstracción de un concepto.

Instancia. Se crea cuando una construye un objeto. Las instancias de una clase comparten los mismo atributos pero pueden diferir en qué los atributos contengan. Por ejemplo una clase “Persona” describe los atributos comunes de una persona; cada persona es generalmente parecida, pero varía en atributos como “altura” y “peso”. La clase listaría tipos de atributos, así como también las acciones que una persona podría realizar: “saltar”, “caminar”, “andar”, “comer”. La instancia es el objeto creado en tiempo de corrida de una aplicación. Otro ejemplo sería: “Lassie” es una instancia de la clase “Perro” y así también “Pluto” sería otra instancia de la misma clase.

Características bases de la POO.

Herencia. Es la capacidad formar nuevas Clases usando clases previamente definidas. Las nuevas clases, conocida como Clases Derivadas, toman (o heredan) los atributos y los métodos preexistentes de la clase “madre”. Es una intento para ayudar a reusar código con poca o casi ninguna modificación.

Métodos. Se refiere como las funciones de un objeto.

Abstracción. Es un concepto o idea no asociada a una instancia. El concepto se originó por la analogía con las abstracción en matemáticas. Teóricamente envuelve la facilidad de definir objetos que representan “actores” abstractos que pueden realizar un trabajo o acción. Un ejemplo sería una clase “casa” que defina la estructura de una casa.

Encapsulamiento. Se refiere a “esconder” el estado de una propiedad o método de un objeto.

Polimorfismo. Es la habilidad de un tipo “A” que aparece y es usado como otro tipo “B”. Significa que un tipo “A” de alguna manera deriva de un tipo “B” o que un tipo “A” implementa una interface que representa un tipo “B”. Por ejemplo, si a un “Perro” se le ordenara que hablara, éste ladraría, mas si a un “Cerdo” se le ordenara que hablara respondería con un “oink oink“.

Constante. Es la equivalencia de variable global de la programación estructurada.

Ventajas de la POO


¿Por qué este anuncio?
  • Fomenta la reutilización y extensión del código.
  • Permite crear sistemas más complejos.
  • Relacionar el sistema al mundo real.
  • Facilita la creación de programas visuales.
  • Construcción de prototipos
  • Agiliza el desarrollo de software
  • Facilita el trabajo en equipo
  • Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible.

POO en PHP 5
Cada definición de una clase comienza con palabras clave “class”, seguido de un nombre de clase, que puede ser cualquier nombre que no es una palabra reservada en PHP. Luego por un par de llaves, que contiene la definición de los miembros de las clases y métodos. Una pseudovariable $this está disponible cuando un método se llama desde un objeto dentro del mismo contexto. $this es una referencia al objeto de la convocatodo (por lo general, el objeto al que pertenece el método, pero puede ser otro objeto, si el método es llamado estáticamente desde el contexto de un objeto secundario).

Todo esto queda ilustrado en los ejemplos siguientes:

Ejemplo #1 variable $this

< ?php
class A
{
function foo()
{
if (isset($this)) {
echo '$this esta definido (';
echo get_class($this);
echo ")\n";
} else {
echo "\$this no esta definido.\n";
}
}
}
 
class B
{
function bar()
{
A::foo();
}
}
 
$a = new A();
$a->foo();
A::foo();
$b = new B();
$b->bar();
B::bar();
?>

La salida sería la siguiente:
$this is defined (a)
$this is not defined.
$this is defined (b)
$this is not defined.

Ejemplo #2 Definición simple de una Clase

< ?php
class SimpleClass
{
// member declaration
public $var = 'a default value';
 
// method declaration
public function displayVar() {
echo $this->var;
}
}
?>

Ejemplo #3 Valores por defecto de los miembros de una clase

< ?php
class SimpleClass
{
// invalid member declarations:
public $var1 = 'hello '.'world';
public $var2 = <<<EOD
hello world
EOD;
public $var3 = 1+2;
public $var4 = self::myStaticMethod();
public $var5 = $myVar;
 
// valid member declarations:
public $var6 = myConstant;
public $var7 = self::classConstant;
public $var8 = array(true, false);
}
?>

Creando una Instancia
Para crear una instancia de una clase un nuevo objeto debe ser creado y asignado a una variable. Un objeto será siempre asignado cuando se crea un nuevo objeto al menos que el objeto tenga un constructor definido que arroje una excepción en caso de error. Las clases deben ser definidas antes de crear la instancia.

Ejemplo #4 Creando una Instancia

< ?php
$instance = new SimpleClass();
 
// This can also be done with a variable:
$className = 'Foo';
$instance = new $className(); // Foo()
?>

Extendiendo una clase
Una clase puede heredad métodos y miembros de otra clase usando la plabra clave “extends” en la declaración. Nos es posible extender de múltples clases, una clase puede solo heredar de una clase base. Los métodos y miembros heredados pueden ser sobreescribidos al menos que la clase lo defina como “final”, redeclarándolo con el mismo nombre que en la clase padre.

Ejemplo #5 Heredando de una Clase

< ?php
class ExtendClass extends SimpleClass
{
// Redefine the parent method
function displayVar()
{
echo "Extending class\n";
parent::displayVar();
}
}
 
$extended = new ExtendClass();
$extended->displayVar();
?>

Constantes
Es posible definir valores constantes en una clase. Las Constantes difieren de las variables normales en que no se usa el símbolo “$” para declararlas. El valor debe ser una expresión constante, no una variable, ni tampoco el resultado de una operación matemática.

Ejemplo #6 Definiendo y usando una constante

< ?php
class MyClass
{
const constant = 'constant value';
 
function showConstant() {
echo self::constant . "\n";
}
}
 
echo MyClass::constant . "\n";
 
$classname = "MyClass";
echo $classname::constant . "\n"; // PHP 5.3.0
 
$class = new MyClass();
$class->showConstant();
 
echo $class::constant."\n"; // PHP 5.3.0
?>

Conclusión
Hasta aquí llega la primera parte de la Programación Orientada a Objetos en PHP 5. Aún faltan muchas otras características interesantes que serán tratadas más adelante. Se recomienda dominar bien el concepto de Objeto y Clase, ya que el resto es pura sintaxis. Recomiendo que prueben los ejemplos aquí mostrados para un mayor dominio del tema.

Este post fue desarrollado por David Tavárez (@davidtavarez), originalmente para PHPnight, ahora publicado en Pixelar.me.



Si te gustó, comparte:
Y si fue de ayuda, puedes comprarme un café:
...ó la cena si quieres! ;)

Etiquetado como: , , , ,


4 comentarios, participa!

  1. Ichigo

    22. Feb, 2010

    No sabía que en PHP5 se podía usar el paradigma POO, muchas gracias por la info.

    Saludos man.

  2. aldo

    24. May, 2010

    como hago para acceder a las funciones de una variable de un objeto que tenga como tipo de dato otra clase

  3. Leon

    18. Nov, 2010

    Curso de PHP POO VideoTutoriales:

    link:

    http://www.cesarcancino.com/?cat=2

  4. Agustin Aguirre

    18. Oct, 2011

    Hola, estuve dando una vuelta por el sitio y esta muy bueno, me dio ganas de hace algo en php.

    tengo la idea de hacer algo simple, necesito conectarlo con mysql y mostrar unos datos en una grilla, donde se pueda modificar.

    actualmente estoy programando en .net (Visual Studio 2008) donde tengo el sistema de escritorio y me gustaría agregarle esa parte en web.

    Que me recomiendan?

Deja tu opinión