Programación Orientada a Objetos – Características de la POO

Este post es parte de una serie de artículos sobre POO y viene a continuación de ¿Qué es P.O.O.?

Características de la P.O.O.:

No hay un acuerdo aceptado por todo el mundo respecto a cuáles son las características que definen la POO, pero al menos todos concuerdan en estas tres:

  1. Abstracción.
  2. Encapsulación.
  3. Herencia.

Abstracción:

Cada vez que pronunciamos una palabra, realmente lo que hacemos es asociar ese sonido (o ese conjunto de garabatos al escribir) con una serie de cosas. Decimos que una ave es tal cosa, que una silla es tal otra, etc.

Cuando vamos a aplicar la POO, lo primero que debemos hacer es cumplir con una vieja máxima de guerra: Divide y Vencerás. Es decir, lo que hacemos es seccionar nuestro código en grupos de código más pequeño que, al unirlos, hacen el trabajo. Un buen ejemplo de abstracción es el cuerpo humano, aunque el cuerpo es una unidad, está dividido en lo que conocemos por sistemas (el sistema respiratorio, el sistema linfático, cardiovascular, etc., etc.). Estos sistemas, a su vez están compuestos por otros más pequeños: los órganos, y así sucesivamente. La abstracción nos permite dividir nuestro programa en distintos objetos que se agrupan para formar cosas más complejas.

Pero ¿qué demonios es realmente la abstracción? Básicamente es la capacidad de separar los elementos (al menos mentalmente) para poder verlos de forma singular. Como cuando describimos el cuerpo humano y decimos cabeza, brazo(s), pierna(s), etc.

Encapsulación:

También conocida como ocultamiento. Cuando me acuesto a ver televisión no me preocupo del modo como éste funciona, o lo que hace para cambiar de canal o aumentar el volumen. A menos que seas experto en electrónica o técnico en televisores, te pasará lo mismo: no lo sabes y no te importa; sólo sabes que al presionar un botón ocurre la magia.

La encapsulación se encarga de mantener ocultos los procesos internos que necesita para hacer lo que sea que haga, dándole al programador acceso sólo a lo que necesita. Esto da dos ventajas iniciales: Lo que hace el usuario puede ser controlado internamente (incluso sus errores), evitando que todo colapse por una intervención indeseada (tú no quieres que tu mamá, que no tiene ni idea de electrónica, abra tu televisor y empiece a jugar con los circuitos para cambiar los canales manualmente ¿verdad?). La segunda ventaja es que, al hacer que la mayor parte del código esté oculto, puedes hacer cambios y/o mejoras sin que eso afecte el modo como los usuarios van a utilizar tu código. Sólo tienes que mantener igual la forma de acceder a él (en el caso del control de la tele, que los botones sigan siendo los mismos y que el botón de “apagado” no cambie el volumen). Por cierto, estas puertas de acceso que das a los usuarios son lo que se conoce como interfaz.

Herencia:

Uno de los elementos (a mi modo de ver) más interesantes de la P.O.O. La herencia es la capacidad que tiene una clase de derivar las propiedades y métodos de otra (suena a chino ¿no? Calma, lo veremos luego con paciencia ;) ). Tratemos de explicarlo con un ejemplo:

Decimos que una gallina es un ave; esto quiere decir que las gallinas tienen características comunes con otras aves (pico, plumas, etc.), es decir que la gallina hereda las características comunes de todas las aves. Pero además, resulta que un ave es un animal, lo que significa que también comparte características comunes al caballo, el perro, el hombre (seeee, somos animales) y cualquier otra cosa que pueda ser clasificada como animal.

La herencia nos permite, entre otras cosas, evitar tener que escribir el mismo código una y otra vez, puesto que al definir que una categoría (que en programación llamaremos clase) pertenece a otra, automáticamente estamos atribuyéndoles las características generales de la primera, sin tener que definirlas de nuevo.

Una vez establecidas las características de la P.O.O., veamos sus elementos básicos: Clase e Instancia

Technorati Tags: , ,

36 pensamientos en “Programación Orientada a Objetos – Características de la POO

  1. gracias por la explicacion..ojala que nos des mas y mas explicaciones interesantes y bien ejemplificadas..recordá que siempre ayudas a alguien ..gracias

  2. Pingback: Caracteristicas de la poo « Programacion Avanzada

  3. Pingback: http://thefricky.wordpress.com/2007/12/28/programacion-orientada-a-objetos-caracteristicas-de-la-poo/ http://www.mawape.com.ar/blog/2009/09/14/programacion-orientada-a-objetos-%e2%80%93-%c2%bfque-es-poo/ | mawape

  4. Pingback: Características de la Programación Orientada a Objetos | MAWAPE Sistermas, software, flash, flex, air, ria, flas lite, android, iphone, nokia, windows, mac, apple, webos, symbian, windows mobile, tutoriales, videos, realidad aumentada, software develope

  5. sencillamente espectacular la forma en que te explicas, me viene de diez, ya que este año empiezo con programacion orientada a objetos y estos conceptos son muy buenos para comenzar a entender este nuevo paradigma..

    • Mmmm, creo que te has confundido un poco. No existe un objeto Abstracción. La Abstracción es un proceso mental.

      Imagino que a lo que te refieres es a una Clase Abstracta. Si es ése el caso, la explicación es relativamente simple: Una Clase Abstracta es una clase que no ha sido pensada para ser instanciada sino para crear sub-clases. Puede tener sólo la declaración de las propiedades/métodos/eventos o puede también tener implementaciones, es decir, que estos tengan código. En cualquier caso, lo más importante de una clase abtracta es que no está pensada para crear objetos de ella sino otras clases que se deriven de ella.

      Sobre el tema de public, private y demás, puedes verlo en el post Ámbito, Public, Private, Protected, Local, que es parte de este mismo curso.

  6. Está muy bien explicado, gracias por darte el tiempo.

    Sólo una duda, en wikipedia dice que encapsulación y ocultamiento no son lo mismo y lo separan como conceptos diferentes.

    • Pues, es un buena pregunta. En este caso (como en otros) volvemos a las diferencias de opiniones entre distintos autores. Para algunos la encapsulación (o encapsulamiento) sólo implica reunir los elementos que están al mismo nivel de abstracción, otros van más allá, diciendo que también implica mantener estos elementos fuera del alcance real de quien usa la clase, he ahí la diferencia.
      Al final, es cosa de tomar partido en favor de una de las dos perspectivas. Evidentemente, en este curso tomamos partido por la segunda.

  7. Soy más q novato en esto, quisiera saber porq no tomas en cuenta Polimorfismo ya q he estado investigando esto y hay partes en q lo nombran y otras no. Agradecería tu respuesta.

    • Pues, tienes razón, he dejado el polimorfismo de lado. La razón principal es porque no todos los autores están de acuerdo en él como una característica esencial de la POO. Tal es así que no es extraño encontrar lenguajes que no aplican el polimorfismo, sin embargo tienes razón, voy a revisarlo e inlcuir polimorfismo.
      Gracias por la observación

  8. Sonya

    Es muy interesante este tema de POO, me gustaria profundizar mas acerca de este tema ya q yo recibi en la U, ahora me toca aplicarlo y me cuesta un poco volver a recordarlo.

  9. Pingback: Programación Orientada a objetos (Poo) « antonionll

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s