Introducción a la Programación Orientada a Objetos
La programación orientada a objetos como paradigma de programación intenta modelar los objetos del mundo real para resolver problemas que puedan ser representados en un programa informático.
Cada objeto del mundo real posee propiedades inherentes a sí mismo (estado), por ejemplo, una pelota de baloncesto tiene propiedades como radio, peso y color. También es sencillo ver en cada objeto un grupo de acciones que puede realizar (comportamiento); siguiendo el mismo ejemplo de nuestra pelota, ella puede rebotar, rodar y girar; nótese que las acciones que realiza un objeto son verbos. A las propiedades mencionadas anteriormente se les suele llamar atributos, a las acciones métodos, y a este conjunto características.
Además de poder representar las características de cada objeto, podemos definir un modelo general para representar objetos del mismo tipo, a este modelo lo llamaremos clase. Así mismo como una pelota de baloncesto pertenece a la clase "pelotas de baloncesto" podemos identificar cualquier objeto con una clase. Las clases observadas desde este punto de vista son fábricas de objetos, que nos ayudan a abstraer el concepto del objeto para poder tener una representación informática del mundo real. Con las clases podemos crear objetos eficazmente seleccionando los atributos deseados.
Dentro del paradigma de programación orientado a objetos encontramos conceptos fundamentales como abstracción, herencia, polimorfismo, modularidad y encapsulamiento. Enseguida veremos qué significa cada uno de ellos.
Abstracción
La abstracción es tomar de un objeto las características más importantes para formar un modelo. Este concepto de la programación orientada a objetos está muy ligado con el concepto de clase, pues son precisamente las clases las que permiten representar los objetos con aquellas características que hemos definido y que nos interesan. Podemos por ejemplo abstraer el concepto de laptop, como el de un objeto que posee propiedades como marca, modelo, memoria, y S.O, y acciones como encender, ejecutar programas y apagar.
Por ahora, basta saber que existe una notación estándar para el modelado orientado a objetos y se llama UML (Lenguaje unificado de modelado). La anterior imagen representa el diagrama de clase para la clase Laptop.
Herencia
Un objeto obtiene por defecto los atributos y métodos de la clase que lo ha creado. Sin embargo, una clase puede puede tomar estas mismas características de otra clase ya definida, a esto esto es lo que llamaremos herencia. Por ejemplo, imaginémonos la clase Electrodomésticos que engloba a otra clase llamada Lavadoras. La clase Electrodomésticos la llamaremos superclase ya que posee atributos mucho más generales que la clase Lavadoras, a su vez se dice que Lavadoras es subclase de Electrodomésticos. Un objeto de la clase Lavadoras heredará todas características de su clase y las de su clase padre, en este caso Electrodomésticos. Nótese que una o más clases pueden heredar de la clase Electrodomésticos, por ejemplo una clase Televisores.
Polimorfismo
Varios objetos pueden ejecutar acciones similares de distinta forma. Imaginémonos varias pelotas de distinto deporte que realizan la acción rebotar. Es evidente, que una pelota de baloncesto rebotará de distinta forma que una pelota de fútbol, o una pelota de tenis. Esto nos muestra que distintos objetos pueden tener los mismos métodos pero implementados de manera distinta, esto es lo que se conoce como polimorfismo.
Encapsulamiento
Pensemos en algunos objetos del mundo real como un televisor o un teléfono celular. Estos dos dispositivos electrónicos implementan su funcionalidad internamente en complejos circuitos electrónicos, ¿pero realmente es necesario para el usuario entender cómo funcionar todo esto?, la respuesta es NO!. Tanto un dispositivo móvil como un televisor utilizan principios electrónicos para crear interfaces amigables con el usuario y mostrar rápidamente la información, el cómo se realiza esto dentro del dispositivo no interesa más que para el desarrollador, se dice entonces que estos objetos poseen características ocultas y a esto se le conoce como encapsulamiento (ocultar la información). Sin embargo, muchas otras características deben estar presentes para el usuario, como por ejemplo, la que nos dice ¿cómo encender el dispositivo?, para esto el usuario debe disponer de interruptores, controles de volumen, entre otros, a esto lo llamaremos interfaces.
Modularidad
La modularidad hace referencia a subdividir una aplicación en partes más pequeñas denominadas módulos. Cada módulo puede entenderse como una parte del programa que realiza una función perfectamente diferenciada de las demás; por ejemplo, en un software que controle las finanzas de un pequeña empresa, seguramente habrá un módulo de facturación, uno de clientes, inventario, entre otros.