Monday, July 28, 2008

Fundamentos o características de la programación orientada a objetos

Las características de la programación orientada a objetos pueden variar según el autor, las más importantes son:

Abstracción:
Es la característica que permite usar objetos sin preocuparse por el modo en que funcionan internamente, tomemos el ejemplo clásico del Auto (ahora quiero comprar un auto), uno puede tener un auto y utilizarlo sin saber ni preocuparse por el modo en que funciona (esto es aplicable en especial a las mujeres jejeje), en eso precisamente consiste la abstracción, el objeto puede cambiar los valores de sus propiedades, ejecutar algún tipo de trabajo o método y/o comunicarse con otros objetos sin revelar el modo en que internamente lo hace, de este modo el programador que lo utiliza conoce de modo “abstracto” las propiedades y métodos que puede realizar un objeto, pero no necesita preocuparse entender el funcionamiento real del objeto (para que vean que muchas personas utilizan este principio con sus autos).

Encapsulamiento:
Es común confundir esta característica con el “Principio de ocultación” (eso dicen en algunos lados y reconozco que tienen razón ya que soy uno de esos “confundidos”), el encapsulamiento consiste en colocar dentro de un objeto todas sus características y funcionalidad correspondiente, el objeto agrupa o “encapsula” esas características, a nuestro famoso objeto Auto no debemos ponerle un método que se llame “volar” puesto que los autos no vuelan (eso creo), el encapsulamiento nos permite mantener una “alta cohesión”, esto significa que toda la información del objeto se encuentra precisamente en el objeto puesto que es información que está relacionada y en conjunto define al objeto.

Principio de ocultación:
Esta característica permite que el objeto defina que características o métodos pueden ser vistos y ejecutados desde el exterior por otros objetos, y “oculta” a los objetos externos las características y métodos que sean necesarios solamente para uso interno, por ejemplo el auto (sigo pensando en el financiamiento para comprarlo) tiene un método llamado “arrancar” que puede ser ejecutado por un objeto externo (el chofer) sin embargo puede tener u método llamado “inyectar combustible” que puede ser invocado solo por el mismo objeto, en este último caso el método puede ser establecido con acceso privado y de este modo nadie más podrá ejecutarlo.

Polimorfismo:
Hace algunos días le pregunte a alguien sobre el polimorfismo en orientación a objetos y me respondió “es hacer algo de diferentes formas”, es una forma muy sencilla de explicarlo, el polimorfismo permite tener comportamientos diferentes con el mismo nombre en objetos distintos, tratare de ser más claro, podemos tener el objeto “Auto eléctrico” y el objeto “Auto de combustión” (ahí están los objetos distintos), ambos cuentan con un método llamado “arrancar” (ahí está el método con el mismo nombre en ambos objetos), sin embargo el método “arrancar” del “Auto eléctrico” provoca que inicie el funcionamiento de un motor eléctrico, y el método “arrancar” del “Auto de combustión” provoca la inyección de gasolina, pone a girar el motor e inicia la combustión para dejarlo funcionando (finalmente ahí están los comportamientos diferentes), hay un tipo especial de polimorfismo llamado sobrecarga de operadores que detallaré posteriormente en otro post.

Herencia:

La herencia permite definir objetos generales y posteriormente crear otros objetos que desciendan de ellos por lo tanto contienen sus características y definen algunas otras que los diferencian de los demás objetos descendientes del mismo objeto padre de este modo los objetos forman una jerarquía de clasificación en la cual conforme descendemos encontramos objetos cada vez más detallados, por ejemplo volviendo al clásico ejemplo del Auto, dicho objeto puede contener las características y comportamiento comunes de todos los autos y posteriormente crear otros objetos que hereden de Auto como serian “Auto eléctrico” y “Auto de combustión”, cada uno de ellos heredara las propiedades y comportamientos comunes de un auto y a su vez agregaran las características que los hacen especiales a cada uno de ellos.

Friday, July 25, 2008

¿Qué es la Programación Orientada a Objetos?

He encontrado varias definiciones de programación orientada a objetos, la que más me agrado es la siguiente:

“Paradigma de programación que usa objetos y sus interacciones para diseñar aplicaciones y programas de computadora. Está basado en varias técnicas, incluyendo herencia, modularidad, polimorfismo, y encapsulamiento.”

La programación orientada a objetos es un “modo de ver las cosas”, por supuesto que se puede desarrollar alguna aplicación para resolver un problema sin utilizar POO, sin embargo se ha demostrado que la POO aporta grandes beneficios al proceso de desarrollo y mantenimiento de software.

Si utilizamos POO en realidad lo que hacemos es representar objetos de mundo real mediante código, para no complicarlo más mencionare un ejemplo:
Supongamos que tenemos un cliente que es distribuidor de teléfonos celulares (me vino a la mente porque quiero comprar un celular nuevo :)), nuestro cliente desea tener control de los celulares que tiene en existencia. Identificando los objetos del mundo real seguramente tendremos entre ellos el objeto “Teléfono Celular”, y debemos representarlo en la aplicación (mediante código) con las características que vayamos a utilizar en la aplicación por ejemplo:

Marca
Modelo
Color

Los objetos representados en la aplicación pueden tener propiedades (también llamadas atributos) y/o métodos (también llamados funciones u operaciones), de modo sencillo las propiedades son las características del objeto y los métodos son las acciones que este puede realizar, en nuestro ejemplo del objeto “Teléfono Celular” los datos marca, modelo, color y precio son propiedades y cada teléfono tiene un valor determinado para ellas, hasta aquí se preguntaran ¿y cuáles las acciones?... pues bien, algunas de las acciones que puede realizar un teléfono celular son:

Agregar un contacto a la agenda
Enviar mensaje SMS
Activar bluetooth
Desactivar bluetooth

Sin embargo aquí hay un detalle, dichas acciones que el objeto real tiene no son necesarias para nuestra aplicación de control de inventarios, por lo cual no es necesario representarlas, si a alguien le parece que escogí un ejemplo incompleto les comento que después de pensarlo un rato decidí hacerlo intencionalmente para mostrar que no todas las propiedades o métodos del objeto real deben ser forzosamente incluidos en la aplicación, por otra parte así como quitamos también podemos agregar algunas cosas, seguramente a nuestro cliente le interesara saber la fecha de entrada del objeto al inventario, el precio en que lo adquirió y por sobre todas las cosas ¡poder establecer el precio de venta!, podemos agregar alguna acción como “Eliminar el teléfono celular del inventario” (para aquellos que les parezca que el objeto estaba incompleto por no tener acciones), personalmente no agregaría dicha acción por el modo en que organizo las clases de los proyectos en que participo, sin embargo funciona para fines ilustrativos.

¡Hey! ¿Y dónde están las características o fundamentos de la programación orientada a objetos?

Tranquilos, las definiciones de Herencia, polimorfismo, modularidad y encapsulacion vendrán en el siguiente post.

Introducción

Hola a todos, antes que cualquier cosa relacionada a la programación quise publicar un post donde se explique la razón de ser de este blog y aquí lo tienen.

Dentro de las funciones que tengo asignadas en el trabajo se encuentra la asegurar que los desarrolladores del área de .NET cuenten con los conocimientos necesarios para desempeñar correctamente su trabajo, además nos encontramos estableciendo vínculos con una institución educativa con la finalidad de obtener desarrolladores con los conocimientos requeridos por la consultoría, esta última razón va por el camino de realizar visitas periódicas a dicha institución para impartir un curso extra clase donde se proporcionen a los alumnos los conocimientos necesarios para integrarse en determinado momento al mundo laboral sin problema, naturalmente que tenemos la intención de contratar algunos de esos alumnos para nuestra área de desarrollo. Considerando eso publicare en este blog notas importantes de ambos procesos, empezare desde el nivel más básico con algunos fundamentos de PROGRAMACIÓN ORIENTADA A OBJETOS (OOP por sus siglas en ingles), para posteriormente ir subiendo de nivel.