diumenge, 23 de novembre del 2008

Análisis orientado a objetos

Manteniendo la línea de las dos publicaciones anteriores, hoy os voy a hacer otra incisión a conceptos relacionados con Ingeniería del Software. Concretamente, voy a hacer una pequeña introducción al análisis orientado a objetos.

Como es costumbre, lo primero que haré será definir unos primeros conceptos básicos. Esta vez, sobre Orientación a Objeto (OO) ...

Características básicas de OO
  • Abstracción: denota las características esenciales de un objeto que permiten diferenciarlo de otros tipos de objetos, definiendo así los límites conceptuales desde el punto de vista del usuario.
  • Modularidad: es la propiedad que permite descomponer un sistema complejo en partes más manejables e independientes.
  • Encapsulamiento: permite ocultar la implementación. Complementa a la abstracción, ya que la abstracción se preocupa de la visión externa de un objeto y el encapsulamiento evita que los clientes vean los detalles internos.
  • Jerarquía: se ordenan las abstracciones jerárquicamente. Se definen objetos generales y subcategorias de éstos. Generalización (herencia) y Agregación/Composición (ser parte o estar compuesto de algo).


Conceptos Básicos de OO
  1. Objeto: entidad que existe en el mundo real y que tienen un comportamiento.
  2. Clase de Objetos: describe un conjunto de objetos con las mismas propiedades (atributos), comportamiento (operaciones), relaciones entre ellos y semántica.Implementa el principio de Abstracción y sirve como patrón para crear objetos.
  3. Atributos: son las propiedades compartidas por los objetos de una clase y tienen valor dependiendo de la instancia del objeto. Pueden ser básicos o derivados (de datos que aparecen de otra información)
  4. Operaciones: funciones que se pueden aplicar a objetos de una clase. Se deben reconocer los argumentos y los resultados.
    • Métodos. implementación de una operación dentro de una clase.
    • Polimorfismo. permite que una misma operación se pueda aplicar en diferentes clases, por lo que su implementación dependerá de cada clase.
  5. Relaciones:
    • Asociaciones. definen la manera de conectar los objetos de diferentes clases. Podemos ir de un objeto a otro siguiendo la relación.
    • Agregación. modela una relación “todo-parte”.
    • Composición. es un tipo de agregación, con la diferencia de que la parte no existe sin el todo.
    • Generalización. representa una relación “ser tipo de”. Define jerarquía de abstracciones.
      • Herencia. permite que las estructuras de datos y las operaciones de una clase sean accesibles para sus subclases.
- Multiplicidad: define cuantos objetos participan en la relación. “Cuantos de estos objetos se relacionan con tantos de estos

- Navegación: las asociaciones y las agregaciones son bidireccionales por defecto, pero hay veces que necesitamos restringir el sentido y utilizaremos flechas para indicar la dirección de navegación.


UML:Unified Modeling Language
Es un lenguaje visual de modelado orientado a objetos. Nos ayuda para entender el sistema ya que especifica las funciones que debe tener, y nos muestra los modelos del sistema para poder tener una perspectiva global sobre él.

Los lenguajes de modelado empiezan a surgir entre la década de los '70 y finales de los '80, y llegan a crearse varios tipos diferentes -lo que crea insatisfacción por parte de los usuarios-. De todos los existentes se escogen tres y en 1994 comienza la unificación entre ellos: Booch, OMT i OOSE. La primera versión UML (1.1) aprobada para su estandarización no aparece hasta 1997.
La aparición del UML tenía como objetivos, principalmente, el modelado de sistemas sin importar el tamaño de estos, desde el principio hasta el final, de una manera sencilla y capaz de utilizarse tanto por personas como por máquinas

Definición UML. Es un lenguaje para visualizar, especificar, construir, documentar los elementos de un sistema complejo, desde una visión orientada a objetos. No se trata de un proceso, no nos indica cómo hacer las cosas, simplemente es una notación (escrita, reglada y gráfica) con una semántica bien definida.
Se necesitan múltiples modelos para cubrir las diferentes vistas de la arquitectura del sistema.

Características
  • especifica todas las decisiones de análisis, diseño e implementación construyendo modelos precisos, claros y completos.
  • puede utilizarse en cualquier lenguaje de programación. Podemos para del diseño UML al código gracias a la ingeniería directa , y viceversa mediante la ingeniería inversa.
  • permite documentar todos los elementos de un proceso de desarrollo.