ARTÍCULO - Los pilares de la programación orientada a objetos

En este artículo vamos a tratar de explicar brevemente qué es la programación orientada a objetos (POO) y por qué se ha convertido en la más popular, relegando a las antiguas formas de programar a un segundo plano. Cabe destacar que la POO no es un lenguaje de programación en si, sino una forma de afrontar la programación. Hoy en día existen muchos lenguajes que soportan este tipo de programación y algunos han sido creados especialmente para ello, pero remarco que, este método de programación no es una obligación, es una elección: la elección acertada.

"Lo que vemos en el mundo real son objetos, cosas. Así que, sin duda, la mejor manera de programar es partiendo de esa simple base"








Artículo escrito por: Asensio López Fernández

    La programación orientada a objetos se ha convertido en la más popular debido a sus grandes capacidades y ventajas respecto a las antiguas formas de programar. Básicamente, este tipo de programación nos permite crear auténticos objetos, que pueden ser cosas que aparecen en la pantalla, como botones o ventanas, o bien pueden ser objetos de la vida real, como una persona o un lápiz. 

Estos objetos poseen características que es lo que llamamos propiedades o atributos, como pueden ser: edad, velocidad, temperatura, color, altura, etc... 
También tienen capacidades, cosas que pueden hacer, a esto lo llamamos funciones o métodos, como pueden ser: andar, golpear, acelerar, envejecer…
Y pueden pertenecer a clases. Una clase es la definición de los elementos de los que está compuesto uno o varios objetos de un mismo tipo. Por ejemplo, mi padre tiene tiene una serie de características como son: ojos, nariz, boca, brazos, piernas, lo cual nos dice que pertenece a la "clase persona". La función de una clase en POO es la de definir las características y funciones de los que están compuestos los objetos de un mismo tipo.

A varios objetos de una misma clase de les llama instancias de esa clase. Por ejemplo, imaginemos que tenemos una clase que se llama coche, los objetos Ferrari F40 y Toyota Corolla serían instancias de esa clase. La clase coche marcará las características principales que tiene cualquier coche, y que compartirán todos los objetos/instancias que pertenezcan a esa clase.

 Los tres pilares del desarrollo orientado a objetos son la encapsulación, la herencia y el polimorfismo. Si... ya veo que en la imagen aparece también abstracción... no seas cansino.
La abstracción: 

Mucha gente considera que la abstracción en si no es más que una parte del proceso de la encapsulación, y por tanto no la tienen como  pilar independiente de la POO.

La abstracción es la capacidad de obtener y aislar toda la información y cualidades de un objeto que no nos parezcan relevantes, para poder encapsularlos. Para ello separamos "mentalmente" los objetos y nos centramos en su comportamiento fundamental. 
Gracias a ello, podemos representar las características esenciales de un objeto sin preocuparnos de las restantes.
Pongamos el ejemplo de un objeto llamado gato. El gato tiene propiedades o características (nombre, color, peso, precio, edad..) y métodos o comportamientos (andar, maullar, lamerse las pelotas...)
Gracias a la abstracción, otro objeto, por ejemplo el "objeto vendedor" puede manipular el "objeto gato" sin tener en cuenta algunas de sus propiedades y métodos, ya que solo le interesan  algunas, como el precio.

Poniendo un ejemplo de videojuegos. Si creamos un juego de coches tipo Arcade, lo único que necesitamos abstraer de un coche real serán cosas como, la forma, el color y la velocidad, por ejemplo. Pero, si queremos crear un juego de coches tipo simulador, deberemos abstraer muchas más cosas, como el peso, la potencia, el tipo de tracción, tipo de combustible, tipo de ruedas, etc...

La encapsulación: 

La encapsulación es la capacidad de ocultar los datos abstraídos,  aislarlos o protegerlos de quién no desees que tenga acceso a ellos; otro objeto o función por ejemplo. 
Cada objeto puede tener muchas cosas encapsuladas en su interior, propiedades, funciones o incluso otros objetos. 
Muchas veces no se necesita entender el funcionamiento interno de un objeto, sino tan solo sus funcionalidades: para que sirve o qué puede hacer. Por tanto un objeto puede ser cambiado por otro siempre que cumpla con la misma función.

Veamos un ejemplo del mundo real. Imaginemos que tenemos un objeto: una tarjeta de sonido. No sabemos cuál es el funcionamiento interno de la misma, sus propiedades se podría decir que están encapsuladas dentro. Lo que si sabemos es que cumple con la función de proporcionar el sonido a nuestro ordenador.  Podemos cambiar una tarjeta de sonido por otra, ya que cumplen la misma función, y no necesitamos saber nada más, a no ser que queramos trabajar para creative.

Para dejarlo aún más claro; el usuario no necesita saber cómo funciona internamente un coche, solo necesita saber que al pisar el acelerador (aplicar el método) el coche anda. 

Herencia y reutilización:


La Herencia lo que nos dice es que puede crearse una clase a partir de otra clase ya existente, heredando todas las cualidades de la clase de la que deriva y además pudiendo añadir nuevas funcionalidades o modificar las ya existentes.

Imaginemos que tenemos un ordenador con sus planos y queremos fabricar otro ordenador. En vez de crear uno de cero, sería mucho más sencillo basarnos en el ordenador que ya tenemos y añadirle o modificarle ciertas funcionalidades como podrían ser: aumentar su capacidad, su velocidad de procesamiento, etc…
Podríamos ejemplificarlo también con una clase llamada Vehículo y varias clases que heredan de ella, llamadas, moto, coche, barco, etc... Estas clases heredarían las propiedades y funciones de un vehículo, y podrían modificarlas o crear nuevas.

A la clase que se crea a partir de otra clase se le conoce como subclase o clase derivada.
En un último ejemplo, podríamos pensar en crear una clase persona, y una clase mujer que hereda todas las propiedades de la clase persona y que añade otras nuevas como las tetas, y podemos crear varios objetos de la clase mujer, como podrían ser Ana o Bernarda...

Polimorfismo:


 El polimorfismo es la capacidad para que varias clases u objetos derivados de otros, reaccionen de manera diferente ante los mismos métodos. El polimorfismo se puede aplicar tanto a objetos como a funciones, por lo que podemos hablar de objetos polimórficos y de funciones polimórficas.
Por ejemplo, cuando apretamos el acelerador de un coche no va a responder igual el que posee un motor diésel que el que tiene un motor de gasolina.

26 comentarios:

  1. Interesante esto compadre, si señor!...

    Saludos :-)

    ResponderEliminar
  2. Gracias Antonio,
    poco a poco a ver si vamos añadiendo más contenido de este tipo, que no s permita aprender y enseñar. Gracias por seguirme.

    ResponderEliminar
  3. De esta manera podemos entender mejor las personas que estamos empezando en este mundo de la programación.

    Muchas gracias por compartir su conocimiento,
    que bueno seria ver una explicación como la acabas de hacer, en el tema
    de persistencia sobre archivos de texto.

    ResponderEliminar
  4. Me agrada mucho que te haya gustado el artículo. Yo también estoy empezando en esto y quizás eso es lo que me ha permitido darle un enfoque un poco menos técnico y más entendible, ya que las dificultades que yo estoy encontrando son, con casi toda seguridad, las que vais a encontrar los que vengáis por detrás en este complicado pero emocionante camino.
    Como dijo Cicerón: Si quieres aprender enseña

    Me apunto tu petición del articulo sobre persistencia sobre archivos. Cuanto tenga tiempo trataré de hacerlo. Un saludo y gracias por visitarme.

    ResponderEliminar
  5. Conciso, sencillo & buena información. Buen Trabajo :)

    ResponderEliminar
  6. Muchas gracias,
    no soy ningún experto en el tema, pero quizás el tener que comprenderlo yo mismo me ha hecho poder trasmitirlo con un lenguaje más llano. Me alegro que resulte útil.
    Saludos

    ResponderEliminar
  7. Muy practico con cada uno de los ejemplos, Gracias :) !

    ResponderEliminar
  8. http://www.desarrolloweb.com/articulos/499.php

    ResponderEliminar
  9. Me ayodo muchisimo un millo de grax

    ResponderEliminar
  10. gracias me ayudo muchisimo te quiero besar

    ResponderEliminar
  11. Muy buen aporte sencillo pero practico

    ResponderEliminar
  12. Como las tetas jaja Buen aporte hermano!

    ResponderEliminar
    Respuestas
    1. Se me ocurrió que era una propiedad bastante característica

      Eliminar
  13. Buen artículo... Me aclaro algunas dudas con las propiedades de la programación orientada a objetos. Muchas gracias. Saludos.

    ResponderEliminar
  14. Me sirvio para la clase de Ianello

    ResponderEliminar
  15. Feliz Cumple Pancho!!!!

    ResponderEliminar
  16. MONTALTORSO ENFERMOPECHASO

    ResponderEliminar
  17. Mathieu viejo Pochi peluca

    ResponderEliminar
  18. Creo que existe un error de concepto a la hora de explicar. La herencia no explica que se puede crear un objeto a partir de otro objeto ya existente. Un objeto no es mas que una instancia de una clase, la cual es la representacion semantica y sintactica de un objeto. Por lo tanto la herencia es la reutilizacion de una clase dada, de sus caracteristicas y metodos por una clase nueva la cual incorporara nuevas caracteristicas, nuevos metodos o solo extendera las funcionalidas de los metodos existentes. Nunca sera la creacion de un objeto a partir de un objeto ya existente.

    ResponderEliminar
    Respuestas
    1. Agradezco la corrección, he modificado esa parte en el artículo. Más vale tarde que... ciento volando. Muchas gracias!

      Eliminar
  19. que buen aporte me hizo repasar lo aprendido hace unos años en la universidad rápidamente

    ResponderEliminar