viernes, 29 de agosto de 2014

1.- ¿Que es la Programación Orientada a Objetos (POO o OOP, Object Oriented Programming)?

Este es mi primer post en codewaki y como no, voy a dedicarlo a lo que creo que es más importante para aprender a programar, la Programación Orientada a Objetos.
Como para cualquier situación en la vida en la que debemos realizar un trabajo, proceso, tarea, etc. necesitamos de unos conocimientos previos para poder realizarlos; por ejemplo, si jamás hemos conducido un coche, al sentarnos solos por primera vez delante del volante es como si nos sentáramos en una cabina de un avión; si no hay conocimientos, no hay conducción o sin embargo si la hubiera porque hemos visto a alguien conducir, lo haríamos mal o aprenderíamos con defectos que costarían mucho luego corregir. Para aprender a programar, es necesario conocer obligatoriamente los conceptos de POO, ya que sin ellos, puede que hagamos pinitos en programación, pero jamás llegaremos a poder afrontar aplicaciones claras y limpias en las que poder corregir, reutilizar o compartir. Si aprendéis bien estos conceptos, aprenderéis a programar, si aplicáis correctamente los conceptos de POO, estos cumplirán su promesa
¿Qué es un objeto en programación? Pues es como en la vida real, un algo que tiene unas características concretas y que puede hacer cosas o no. Un ejemplo. Una radio es un objeto que tiene las siguientes características:
  • Onda media
  • Frecuencia modulada
  • Onda corta
  • Puede variar el volumen
  • Puede buscar frecuencias
  • Puede cambiar entre onda corta, onda media y frecuencia modulada
  • Tiene dos altavoces
  • Tiene un indicador de estéreo
  • etc...
en líneas generales hemos detallado un objeto con unas características y que además tiene funciones como cambiar a FM, variar volumen, variar frecuencia, etc.. grosso modo, si quisiera en programación crear una radio, tendría un objeto radio que he creado antes y simplemente instanciaría una nueva radio cuantas veces quisiera. Vamos a detallar los principios de la POO y luego pasaremos a un ejemplo.
La POO tiene unos conceptos básicos y fundamentales y son encapsulación, herencia y polimorfismo.

La encapsulación (arte de ocultar) es la capacidad de ocultar los procesos internos de un objeto y proporcionar los que si queremos que usen los usuarios. En el caso de la radio, el usuario no tiene porqué saber como desmodula la radio la señal de frecuencia modulada en señal de audio, es decir la señal que recibe la antena y que se convierte en música por el altavoz. El usuario ENCIENDE o APAGA, CAMBIA de frecuencia, VARIA el volumen, etc. pero no tiene porqué conocer que hace interiormente. Cada vez que instanciemos una nueva radio, el usuario solo podrá ver y usar estas funciones.

La herencia es la relación que tiene un objeto de otro objeto. Yo tengo una herencia de mi padre y de mi madre, porque he heredado y valga la redundancia genéticamente características propias de ellos. Además con el tiempo, yo he adquirido nuevas características que me hacen único como cualquier ser humano, bueno pues en programación es la parte más significativa del diseño de un sistema; sin herencia tendríamos que repetir y cambiar código continuamente cada vez que hiciéramos una corrección. En definitiva es aprovechar objetos con características concretas y heredarlas a nuestro objeto. Un ejemplo.
Creamos un objeto vehículo, el cual solo le vamos a dar la funcionalidad de arrancar, parar y avanzar y como características un motor con la posibilidad de cambiar su potencia, matrícula, número de bastidor.

Creamos otro objeto al que llamaremos vehículo con marcha atrás, este objeto va a heredar de vehículo pero le damos un nuevo desempeño, marchar hacia atrás.Creamos ahora un objeto camión, que hereda las funcionalidades de vehículo con marcha atrás; a este objeto camión, le añadimos una caja y a esta caja le damos la posibilidad de cambiar su volumen para en un futuro poder crear camiones con diferentes capacidades. Creamos otro objeto turismo que hereda de igual modo de vehículo con marcha atrás y a este se me ocurre ponerle una característica como número de puertas y la posibilidad de hacerlo descapotable y por último creamos un objeto motocicleta el cual va a heredar de vehículo y le damos una característica concreta de tipo (carretera, trial, trail, scooter, enduro,….).

Si quisiera crear un camión con caja de 10 metros cúbicos, simplemente instanciaría un objeto camión, le asignaríamos el volumen y como hereda de vehículo marcha atrás y este de vehículo, podrá arrancar, parar, avanzar, ir hacia atrás y además con las características propias de un vehículo, matrícula, potencia y número de bastidor.

Supongamos que en un futuro le añadimos nuevas características a los vehículos como por ejemplo aparcar solo, pues agregamos al objeto vehículo con marcha atrás la posibilidad de aparcar, mientras que las motocicletas no podrían. Las funciones internas que deba realizar el objeto en sus entrañas para poder aparcar solo es a lo que nos referíamos antes con el concepto de encapsulación, el usuario no tiene porqué conocer que hace para aparcar solo.

El polimorfismo es la funcionalidad de invocar nuevo código con código antiguo. Expliquemos esto. El vehículo puede avanzar, pero en el caso del camión le podemos añadir la posibilidad de avanzar con reductora, es decir le damos esa posibilidad pero bajando la velocidad en beneficio de potencia para llevar más peso. Esto implica que dentro del objeto camión creamos una función avanzar pero propia del camión. Esto nos proporciona dos beneficios, uno es poder agrupar objetos que tienen una base común y tratarlos consistentemente y otra es que el código antiguo puede utilizar un código nuevo.
Esto es solo un pequeño resumen de la POO que espero hayáis entendido, sin estos conceptos, los programas que desarrolléis en un futuro podrían convertirse en una pesadilla con su consecuente pérdida de tiempo.
Saludos “der Waki”

No hay comentarios:

Publicar un comentario