jueves, 7 de noviembre de 2013

Programación OO - Elementos principales.


Elementos principales.


Independientemente del leguaje de implementación, el paradigma de programación objeto se basa en 4 conceptos fundamentales. La abstracción, el encapsulamiento, el polimorfismo y la herencia. Dichos pilares van a ser explicados a continuación en forma superficial. 
  

Abstracción:


En POO la abstracción hace referencia a la capacidad de expresar las características principales de un objeto. Como consecuencia de esto se logra tener un modelo claro del objeto centrado en la pregunta ¿qué hace? 

El método de abstracción es arbitrario. Lo que permite que un objeto pueda ser visto a través de abstracciones diferentes. La siguiente figura muestra la colección de toros de Picasso que ejemplifica de forma magistral el espíritu de la abstracción, en dicha secuencia se puede observar como los primeros toros son muy ricos en detalles que no hacen parte esencial de la representación del toro hasta llegar al número 11, donde se encuentra un toro reducido a una representación de muy pocos trazos pero con expresividad suficiente para saber que es un toro.  


Imagenes tomadas de: http://www.artyfactory.com/art_appreciation/animals_in_art/pablo_picasso.htm

 

Encapsulamiento. 


El encapsulamiento se utiliza para ocultar o esconder las características esenciales de un objeto, de manera que no pueda ser alterado por otros objetos, en cierto modo proveen un efecto de caja negra donde la interacción entre objetos debe hacerse por medio de su interfaz y no directamente. 

Dependiendo de la implementación del lenguaje OO. Se tienen diferentes reglas de visibilidad para atributos, métodos y / o clases, dichas reglas son:

  1. Privado: visible sólo para la clase y para las clases amigas o del mismo paquete en C++ y Java, respectivamente.
  2. Protegida: visible sólo para las clases derivadas (subclases).
  3. Pública: visible para todas las clases con las que está asociada.

 

Herencia:

 
Tiene su justificación en una ventaja de la programación OO, que es la reutilización de código, tomando en cuenta la analogía con la herencia genética, en programación se trata de que una clase puede heredar de otra u otras. Las clases hijas son especializaciones de la súper clase por lo que deben incluir atributos y métodos propios, Existen dos tipos de herencia denominadas herencia simple y herencia múltiple. 

La herencia simple se da cuando una clase hija hereda de solo una clase llamada padre o súper clase, como resultado la clase hija hereda los atributos y métodos de su padre ( este tipo de herencia es el soportado en java). 

Sabiendo cómo se da la herencia simple es fácil imaginar cómo funciona la herencia múltiple, básicamente consiste en que una clase herede de más de una clase padre, aunque es mucho más natural que la herencia simple dado que en muchos casos un objeto posee caracterizas y comportamientos de otros varios y no solo de uno, hay que ser cuidadoso con su uso ya que se pueden tener resultados indeseados (soportada en C++).


Polimorfismo:


Quizá es uno de los pilares de la programación OO, más complejos de entender, sin embargo se va a tratar de explicar de forma sencilla, el polimorfismo se aplica en los métodos y se refiere a que el mismo método puede ser usado para diferentes fines según se necesite. 

Para explicar mejor este concepto vamos a echar mano de la implementación en java. En ese lenguaje se tienen dos clases de polimorfismo uno se llama sobrecarga y el otro se llama sobre escritura. Esta definición puede variar según la implementación, sin embargo el concepto de polimorfismo es el mismo. 

La sobrecarga se refiere a que un método puede implementarse para varios fines con el mismo nombre en la misma clase, el ejemplo más simple se observa con los métodos constructores que se pueden implementar con varios parámetros diferentes como el constructor vacío y el constructor lleno.

La sobre escritura se aplica cuando una clase hereda de otra u otras (en java solo existe herencia simple), en ese sentido la clase hija hereda sus atributos y métodos, sin embargo esto no implica que los métodos se tengan que utilizar estrictamente en la forma que lo hace su padre, en caso de haber cambios en la implementación de un método este se escribe de nuevo en la clase hija con sus particularidades.

No hay comentarios:

Publicar un comentario