Principios de la POO

La POO -Programación Orientada a Objetos tiene 4 principios fundamentales, a continuación se detallan:


  1. Encapsulación o encapsulamiento
  2. Abstracción
  3. Herencia
  4. Polimorfismo

La encapsulación es la característica de un lenguaje POO que permite que todo lo referente a un objeto quede aislado dentro de éste. Es decir, que todos los datos referentes a un objeto queden "encerrados" dentro de éste y sólo se puede acceder a ellos a través de los miembros que la clase proporcione (propiedades y métodos).



Por ejemplo, en el caso de las personas que estábamos viendo, toda la información sobre éstas (nombre, apellidos, edad... y cualquier otro dato interno que se utilice y que no necesariamente se ve desde el exterior del objeto) está circunscrito al ámbito de dicha persona. Gracias a la encapsulación, toda la información de un objeto está contenida dentro del propio objeto.

El principio de abstracción lo que implica es que la clase debe representar las características de la entidad hacia el mundo exterior, pero ocultando su complejidad. Esto es que podemos utilizar propiedades y funciones que podemos usar sin preocuparnos de qué pasa por dentro cuando lo hagamos.

Así, una clase (y por lo tanto todos los objetos que se crean a partir de ella) debe exponer para su uso solo lo que sea necesario. Cómo se haga "por dentro" es irrelevante para los programas que hagan uso de los objetos de esa clase.


Un ejemplo muy claro de este principio es el siguiente: pensemos en la acción Hablar(). Se puede suponer que se genere una voz sintética a partir de un texto que se le indica como parámetro de la acción para lo cual quizá ocurran varias cosas: 
  • se llama a un componente para síntesis de voz que está en la nube, 
  • se lanza la síntesis de voz en el dispositivo local de audio y se anota en una base de datos la frase que se ha pronunciado para guardar un histórico 
  • entre otras cosas. 
Pero todo esto es indiferente para el programa que hace uso de esta funcionalidad. El programa simplemente tiene acceso a un objeto llamado Cristina y este llama al método Hablar(). No tiene ni idea de toda la complejidad interna que puede suponer. Si mañana cambiamos el modo de sintetizar la voz o cualquier otra acción interna, es indiferente para el programa que usa nuestros objetos de tipo Persona. 
La abstracción está muy relacionada con la encapsulación, pero va un paso más allá pues no sólo controla el acceso a la información, sino también oculta la complejidad de los procesos que estemos implementando.

Tercer principio -Herencia-. En POO cuando una clase hereda de otra obtiene todos los rasgos que tuviese la primera. Dado que una clase es un patrón que define cómo es y cómo se comporta una cierta entidad, una clase que hereda de otra obtiene todos los rasgos de la primera y añade otros nuevos y además también puede modificar algunos de los que ha heredado.

A la clase de la que se hereda se le llama clase base, y a la clase que hereda de ésta se le llama clase derivada.

Pensemos en un juego que involucra varios roles podemos tener clases de personas más especializadas para representar personajes especiales del juego. Por ejemplo, podríamos definir clases como Pirata, Piloto o Estratega que heredan de la clase Persona. Todos los objetos de estas clases heredan las propiedades y los métodos de Persona, pero pueden particularizar algunos de ellos y además añadir sus  propias particularidades.


La herencia es una de las características más potentes de la POO ya que fomenta la reutilización del código permitiendo al mismo tiempo la particularización o especialización del mismo.

Finalmente el 4to principio se llama -Polomorfismo- Así es que tiene muchas formas. El concepto de polimorfismo se refiere al hecho de que varios objetos de diferentes clases, pero con una base común, se pueden usar de manera indistinta, sin tener que saber de qué clase exacta son para poder hacerlo.

Supongamos un juego en el que se tienen muchos personajes que están juntos en un mismo escenario. Hay varios piratas, algunos estrategas y otros tipos de personas. En un momento dado necesitamos que todos se pongan a hablar. Cada uno lo hace de una forma diferente, ya que son tipos de personajes distintos. Sería algo bastante tedioso tener que localizar primero a los de un tipo y hacerlos hablar, lo luego a los de otro y así sucesivamente. La idea es que puedas tratarlos a todos como personas, independientemente del tipo específico de persona que sean y simplemente decirles que hablen.

Al derivar todos de la clase Persona todos pueden hablar, y al llamar al método Hablar() de cada uno de ellos se utilizará el proceso adecuado según el tipo (los piratas meterán sus expresiones adicionales que hemos visto, los pilotos dirán "Entrando en pista" u otro mensaje, y los estrategas añadirán a todo "Déjame que lo piense bien". Todo esto de manera transparente para el programador. Esto es el polimorfismo. 

El polimorfismo nos permite utilizar a los objetos de manera genérica, aunque internamente se comporten según su variedad específica.




Fuente: Los conceptos fundamentales sobre Programación Orientada Objetos explicados de manera simple

Si eres muy visual y te gusta revisar videos, aquí les comparto este interesante recurso, del mismo autor.





No hay comentarios:

Publicar un comentario

Gracias por leer mi blog.

Uso del UML para el diseño de POO

Modelo UML Antes de comenzar, con tu equipo responde los siguientes planteamientos ¿Qué es un diagrama de flujo y para que se utiliza? ¿Qué ...