martes, 9 de febrero de 2010

Orientación a objetos: Introducción

¿Qué es la orientación a objetos? Es una forma de modelar y desarrollar software la cual se basa en la creación de componentes reutilizables y tiene como principal característica la simulación de objetos reales.
Ok, muy bonito, pero ¿Qué es eso? Pues bien, para conocer realmente la orientación a objetos tenemos que determinar sus principios básicos.

“Un objeto es la instancia de una clase”
Este enunciado quiere decir dos cosas: 1) Todos los objetos son clasificables y 2) Todos los objetos son particulares.

Sé que estas pensando “Me dejas en las mismas, compadre”, pues trataré de redimirme ejemplificando:
Para clasificar un objeto cualquiera, determinamos su funciones (lo que hace) y definimos sus propiedades que lo caracterizan. Luego pues, mentalmente le ponemos una etiqueta, es decir, ya esté clasificado, sabemos a qué clase pertenece, pero lo estamos visualizando particularmente, es decir, tratamos con el objeto en particular; ejemplo:

Tu computadora personal, sabes que es una computadora, la clasificas como tal, sabes que tiene ciertas características (procesador, RAM, HD) y ciertas funciones,  el objeto que tratamos es particular, es “tú” computadora.

Pues allí tienes, todos los objetos son clasificables y todos los objetos son particulares, y puedes simular estos objetos en un programa computacional, uno  orientado a objetos.
Con lo anterior matamos tres pájaros de un tiro, ya que aplican y de hecho determinados a partir de ello otros dos principios:

“Una clase es una categoría de objetos” y “Una clase, y por ende, un objeto tiene estructura: atributos y operaciones”. Pero, continuemos:

“Un objeto tiene abstracción
Esto significa que objetos pueden ser “genéricos”, es decir, es posible eliminar de la estructura del objeto (atributos y acciones) aquello que nos estorbe, para concentrarnos en lo que nos sirve, creando un objeto particular abstracto de una clase.

Ejemplo: El anterior ejemplo de la computadora, es un ejemplo “genérico”, solo incluí en los atributos procesador, RAM y HD, aunque existen muchos más, como marca, modelo, peso, dimensiones, tarjeta gráfica, etc. El ejemplo de la computadora personal es una abstracción de la clase “Computadora”

”Un objeto tiene herencia
Un objeto tiene la estructura de la clase a la que pertenece, es decir, sus atributos y sus operaciones, por tanto, “hereda” la estructura de la clase.

Un objeto además, puede heredar estructura de otra clase, a la que pertenezca la clase de la cual proviene el objeto. En el ejemplo de la computadora, una  subclase sería “Laptop”, que hereda las características y operaciones de la clase “Computadora” y además tiene las suyas, por lo que los objetos de dicha clase “heredaran” la estructura de “Computadora” al igual que la de “Laptop”.

“Los objetos son capaces de efectuar encapsulamiento
Los objetos tiene la capacidad de ocultar las funciones que internamente efectúan las operaciones, es decir, pueden “encapsular” los comportamientos.

Un ejemplo: El refrigerador; mantiene fríos los alimentos y la mayoría de los mortales no sabemos como lo hace, ni nos importa, solo queremos que funcionen. Los que nos los venden nos proporcionan esa información, solo la que queremos saber (voltaje, garantía, vida útil, costo) y encapsulan el resto desde la fábrica.

“Los objetos son capaces de efectuar poliformismo
Esto significa que el funcionamiento de las operaciones es particular a cada clase, y por lo tanto, podemos utilizar las mismas palabras en diferentes clases para efectuar diferentes operaciones.

Por ejemplo: Una clase “Persona” tiene la operación de escribir(), y una clase “Computadora”, también. La Persona escribe con lápiz y papel y la Computadora en discos magnéticos. Hacen diferentes cosas, no obstante, la operación tiene el mismo nombre. A esta capacidad se le llama “poliformismo”.

“Los objetos se comunican por medio de mensajes”
Pues es muy explicito realmente, un  objeto puede enviar un mensaje a otro para activar una operación en este último.

Por ejemplo, un objeto de clase Persona puede enviar un mensaje a través de un botón al objeto Computadora para encenderla, otro para iniciar un programa en específico, por ejemplo, un bloc de notas, le envía muchos mensajes para enviarle texto y otro para que lo grabe. Los objetos se comunican por medio de mensajes.

“Los objetos son capaces de relacionarse entre sí”
Los objetos pueden relacionarse de distintas formas, por ejemplo:
Una asociación es aquella en que un objeto se une a otro a través de una interfaz común, por medio de un mensaje.

En el ejemplo de la Persona y la Computadora, la asociación de una vía es puede ser “encendido” y “apagado”. La de dos vías es la de consulta, por ejemplo a una base de datos, ya que la Persona consulta y la Computadora responde con algo que la Persona puede interpretar.
Y pueden existir objetos con más de una asociación entre sí.

La agregación es la forma en que dos o más objetos forman otro objeto. La Computadora es un ejemplo claro, está formada por tarjeta madre, gráfica, procesador, tarjetas RAM, disco duro, gabinete, etc.

La composición es un tipo especial de agregación, en la cual, los componentes no pueden existir sin el objeto al cual forman parte, por ejemplo: una Silla, se compone de asiento, respaldo, patas, etc. Si eliminas la silla, el respaldo por sí solo no tiene utilidad significativa.

La multiplicidad: Se refiere a la cantidad de objetos de cierta clase que se relacionan con otro objeto de otra clase en particular, tal y como en los diagramas de entidad relación, el ejemplo clásico es el de la escuela, un maestro tiene muchos alumnos y los alumnos solo un maestro, la relación es de 1 a n para el maestro y de n a 1 para los alumnos.

Aprendiendo estos básicos principios y practicándolos regularmente, serás capaz de modelar correctamente sistemas de la vida real en sistemas informáticos. Por ahora es todo, nos leeremos pronto.

Diagrama de clases: Introducción

¿Qué es una clase? Estrictamente hablando, es una abstracción de una entidad, pero más sencillamente, podemos pensar en una clase como una plantilla, utilizada para categorizar o clasificar (de allí su nombre) alguna cosa en particular.

Vale, pero ¿Cómo hago esto? Pues simplemente como lo harías con cualquier cosa, ¿Cómo clasificarías un auto? Veamos:

Me imagino un Ford (marca) Mustang (modelo) rojo (color), con motor de seis cilindros, transmisión manual, frenos hidráulicos, que acelera (acción) a más de 200Kph.

Si, lo sé, me estoy alucinando, pero el ejemplo vale. El auto tiene ciertas características (marca, modelo, motor, color, trasmisión), ejecuta acciones (enciende, acelera, frena) y tiene una función (sirve para trasladarme de un lugar a otro… y para apantallar en el caso del Mustang).

Pues así es como formamos las clases, a partir de un Nombre, atributos (características) y acciones u operaciones. Toda clase tiene un propósito o función, es decir, para algo tiene que servir - ¿sino pues para que existe, verdad?-.

Ahora, para formar la clase en el diagrama, la forma básica es un rectángulo dividido en tres partes, en la parte superior tenemos el nombre de la clase, a continuación tenemos la lista de atributos y finalmente las acciones. En el ejemplo del auto:


Ahora, existen ciertas reglas básicas a seguir para representar los diagramas de las clases, estas son:

  • Para el nombre
    • Debe ir centrado.
    • La primera letra debe ser mayúscula.
    • Si se compone de dos o más palabras, deben unirse en una sola, eliminando los espacios y con la inicial en mayúsculas; ejemplo: HornoDeMicroondas.
  • Para los atributos
    • Alineación izquierda.
    • Si se componen de una palabra, debe ir en minúsculas.
    • Si se componen de dos o más palabras, deben unirse en una sola, eliminando los espacios y con la inicia en mayúsculas, a excepción de la primera palabra, que permanecerá en minúsuclas; ejemplo: dispositivoDeEncendido.
  • Para las operaciones
    • Deben estar seguidas de paréntesis.
    • Alineación izquierda.
    • Si se componen de una palabra, debe ir en minúsculas.
    • Si se componen de dos o más palabras, deben unirse en una sola, eliminando los espacios y con la inicia en mayúsculas, a excepción de la primera palabra, que permanecerá en minúsuclas; ejemplo: arrancarMotor().
  • Para todos
    • Es recomendable no utilizar acentos, tildes, otros elementos de puntuación ni la letra “ñ”, y en caso de tener que utilizarla, cambiarla por “ni”; ejemplo: “Anio”.
Este es un ejemplo:



Por el momento es suficiente como introducción a los diagramas de clases, nos leeremos la próxima ocasión.

Los diagramas del UML

El UML consta de diagramas especificados para modelar los sistemas, efectuando un diseño fácil de interpretar, tanto para diseñadores como para clientes. Existen diversos tipos de diagramas, entre los que podemos enumerar:

De clases  Representan la clasificación de las entidades del entorno de trabajo, a través de su estructuración. Su aprendizaje es elemental.
De casos de uso  Representan los posibles escenarios que se pueden presentar a los usuarios de los sistemas, ó, en otras palabras, el conjunto de actividades que serán capaces de realizar. Este tipo de diagramas son especialmente útiles en el diseño de la interfaz del usuario.
De estados Representan los estados o fases en las que pueden encontrarse los objetos.
De secuencias  Representan la interacción entre objetos a través del tiempo, de manera dinámica.
De colaboraciones Representan la forma en que los objetos funcionan en conjunto para llevar a cabo las actividades del sistema.
De actividades  Representan el flujo de actividades que pueden presentarse dentro de los objetos, otras actividades o casos de uso.
De distribución Representan la arquitectura de un sistema informático.
De componentes  Representan el conjunto de componentes de software de un sistema.

Cada diagrama tiene su nomenclatura y reglas específicas para su uso, y su utilidad específica es flexible, por lo que cada analista puede explotarlos  de la mejor manera posible.

Es altamente recomendable un conocimiento básico de “Orientación a Objetos” antes de entrar de lleno al aprendizaje de UML.

Pues bien, la mejor manera de comenzar es efectuando los diagramas y aplicándolos directamente, y esto lo veremos en el conjunto de artículos relacionados a cada tipo de diagrama. Recomendamos comenzar con “Clases” y “Casos de Uso”.