lunes, 24 de septiembre de 2012

Herencia, Polimorfismo y encapsulamiento en PHP (Parte 1)

La programación orientada a objetos no es un tema nuevo que debamos abordar a fondo, sin embargo existen conceptos erróneos acerca de los términos de herencia, polimorfismo y encapsulamiento, no solo en PHP, sino en varios lenguajes y en especial para aquellas personas que apenas se están adentrando al mundo de la programación. 
Y como no ser de esta forma, si también nos topamos con catedráticos que te enseñan una forma de programar "por que así se hace" y personas de un conocimiento tan avanzado, que se les dificulta darte a entender lo que estos terminos significa. 
HERENCIA:
La herencia es la forma en que se nos permite otorgarle a nuevas clases las características de la clase principal creada. Supongamos que exista una clase llamada Vehiculo. Esta clase (la clase padre) puede tener los métodos genéricos que acoplen a todos los vehículos. Como arrancar, frenar, indicador de combustible, entre otras muchas. 
Sin embargo, un automóvil difiere mucho de un avión, por lo que aunque ambas son vehículos, tienen propiedades diferentes. Recuerda que una propiedad es un algo que define a un elemento como único. 
Veamos un ejemplo. 
Crearemos una clase padre llamada Vehiculo. 
class vehiculo
{
  private $patente;
  private $origen;
  private $anio;
  function __construct($patente, $origen, $anio)
  {
    $this->patente=$patente;
    $this->origen=$origen;
    $this->anio=$anio;
  }
  public function verPatente()
  {
    return $this->patente;  
  }
}
Analizando un poco: La función __construct() se encarga de inicializar las variables propias de la clase. En caso de que no exista, PHP crea automágicamente una función con el mismo nombre de la clase, permitiendo que el programa siga su ejecución normal. La función verPatente() retorna la variable $patente, que en un principio fue declarada privada, pero con el acceso a la función pública se puede acceder a su contenido. 
Siguiendo con el tema. La herencia en PHP se lleva a cabo al utilizar la palabra reservada extends que básicamente significaria "La clase A se extiende de la clase B". Creando ahora una clase que herede de vehículo, podemos definirla de la siguiente manera: 
class Avion extends vehiculo
{
  private $asientos; 
           private $tren;
  function __construct($patente, $origen, $anio, $asientos)
  {
    parent::__construct($patente, $origen, $anio);
    $this->asientos=$asientos;
  }
             function subirTrenDeAterrizaje()
           {
             $this->tren="Arriba";
           }
        }
Analizando un poco: Se crea la clase Avion, que hereda (extends) de la clase padre llamada vehiculo. En el caso de un avión, este cuenta con un determinado número de asientos, por lo que se ha declarado una función de uso interno (private) asientos. Para poder inicializarla cuando se instancie un objeto de tipo avión, es necesario sobreescribir el constructor padre, por lo que se sobreescribe con parent::<clase> que quiere decir: "De la clase padre (parent) sobreescribe la clase :: <clase>". Finalmente y como efecto de demostración, agregamos una clase única a nuestra nueva clase avión: La funcionalidad de subir su tren de aterrizaje. Quizá deberiamos agregar la función bajarTrenDeAterrizaje, pero conforme a las publicaciones iremos extendiendo este tema.

Nuevamente, Hola Mundo!

Bienvenidos!.
En CodeSoft México nos encanta compartir nuestros conocimientos, y que mejor manera de llevarlo a cabo sino a través de un blog donde compartiremos diferentes formas de realizar programas en diferentes lenguajes, cada uno dependiendo de nuestros colaboradores y, por qué no, del público en general.
Usualmente usamos PHP en la programación web, pero no quiere decir que no sepamos otros trucos, en especial aquellos que tanto han llegado a frustrar a los programadores debido a errores sencillos pero que se pueden llevar horas buscando la solución. ¿Te suena familiar?
En CodeSoft nos preocupan nuestros clientes y por ello también los capacitamos a la medida que vamos creciendo como empresa. Estamos completamente seguros que con nuestra experiencia y tus habilidades, haremos crecer tu negocio y nosotros seremos reconocidos como una opción competitiva en el mercado.
Saludos,
Personal de CodeSoft México.