martes, 3 de noviembre de 2015

Diagrama de Objetos

Objeto

Un objeto es cualquier cosa que podamos ver, tocar, medir, etc. en otras palabras un objeto

es todo lo que existe en el universo (esto es en la vida real). Todo objeto tiene características

esenciales, que lo distinguen de otros independientemente por su clasificación, por ejemplo:

un celular Nokia tiene cámara, bluetooh, infrarrojo, color rojo, etc. Es como si tuviéramos

otro celular Sony sabemos que es celular, pero aquí es donde se identifican las dos clases.

Dos clases de celulares: Nokia y Sony.

Encapsulación

 La Encapsulación ayuda a esconder la implementación tras una interface (o API).

 El código encapsulado tiene 2 características:

 Las variables de instancia se mantienen privadas (Normalmente con el modificador

private).

 Los métodos getter y setter proveen acceso a estas variables de instancia.

 ES-UN o IS-A se refiere a herencia o implementación.

 ES-UN o IS-A es expresado con la palabra clave extends

 ES-UN o IS-A es equivalente a las expresiones “hereda de”, y “es un subtipo de”.

 TIENE-UN o HAS-A significa que una instancia de una clase “tiene una” referencia a la

instancia de otra clase u otra instancia de la misma clase.

Herencia

 La herencia permite a una clase ser subclase o superclase, y así heredar variables y

métodos que sean publi o protected.

 La herencia es un concepto clave que subyace a IS-A o ES-UN, polimorfismo,

sustitución (Override), sobrecarga (Overload), y cast.

 Todas las clases (excepto la clase Object), son subclases del tipo Object y por lo tanto

heredan los métodos de Object.

Polimorfismo

 Polimorfismo significa “Múltiples formas”.

 Una variable de referencia es siempre única, de tipo inmutable, pero puede referirse a

un objeto de un subtipo.

 Un objeto individual puede ser referido por una variable de referencia de otro tipo

diferente (Siempre que ellos sean del mismo tipo o supertipo).

 El tipo de la variable de referencia (no el tipo del objeto), determina cual métodos

pueden ser llamados.

 Las invocaciones de métodos polimorfos se aplican solo a métodos de instancia

sustituidos.

Abstracción

 Por un lado nos permite referirnos a objetos para representar la realidad, describiendo

el problema en términos del problema en lugar de en términos de la solución. En un

programa de gestión comercial, tendremos el objeto cliente o el objeto factura, que no

son más que representaciones de otros objetos en el espacio del problema.

 La clave de la programación orientada a objetos está en abstraer los métodos y los

datos comunes a un conjunto de objetos y agruparlos en una clase. Gracias a este nivel

de abstracción, añadir o eliminar un objeto nuevo supondrá muy poco esfuerzo.

Modularidad.

 Es la capacidad que tiene un sistema para interactuar con varios módulos que se

controlan de una manera ordenada y precisa para alcanzar el objetivo esencial, cada

módulo es independientemente del otro pero pueden recibir información de todos

para cumplir las condiciones de la caja negra. Como por ejemplo la escuela es un

sistema, pero para que el alumno sea más rápido su inscripción se crean módulos,

servicios escolares, financieros, etc. Y trabajando en conjunto logran el objetivo que

en este caso es que el alumno pueda inscribirse.

Instanciación 

 La instanciación es un objeto construido respetando los planos de construcción de

una clase. En la instanciación no hay copia de métodos. Hay una copia parcial de los

campos: la lista queda en la clase y el objeto es quien posee los valores.


Diagrama de clases

Es una estructura estática que muestran las clases del sistema y sus interrelaciones (incluyendo herencia, agregación, asociación, etc.), son un  pilar básico del modelado UML, siendo utilizados tanto para mostrar el análisis y el diseño.  Las clases se documentan con una descripción de lo que hacen, sus métodos y sus atributos. Las relaciones entre clases se documentan con una descripción de su propósito, sus objetos que intervienen en la relación y su objeto.

Clase

Una clase define los atributos y los métodos de una serie de objetos. Todos los objetos de esta clase (instancias de esa clase) tienen el mismo comportamiento y el mismo conjunto de atributos (cada objetos tiene el suyo propio). 
En las clases están representadas por rectángulos, con el nombre de la clase, y también pueden mostrar atributos y operaciones de la clase en otros dos «compartimentos» dentro del rectángulo.




Atributos
En UML, los atributos se muestran al menos con su nombre, y también pueden mostrar su tipo, valor inicial y otras propiedades. Los atributos también pueden ser mostrados visualmente:
  • + Indica atributos públicos
  • # Indica atributos protegidos
  • - Indica atributos privados
Operaciones
Las operaciones (métodos) también se muestran al menos con su nombre, y pueden mostrar sus parámetros y valores de retorno. Las operaciones, al igual que los atributos, se pueden mostrar visualmente:
  • + Indica operaciones públicas
  • # Indica operaciones protegidas
  • - Indica operaciones privadas
Plantillas
Las clases pueden tener plantillas, un valor usado para una clase no especificada o un tipo. El tipo de plantilla se especifica cuando se inicia una clase (es decir cuando se crea un objeto). Las plantillas existen en C++ y se introducirán en Java 1.5 con el nombre de Genéricos.

Asociaciones de clases

Las clases se puede relacionar o asociarse  de diferentes maneras:

Herencia (Especialización/Generalización)
Indica que una subclase hereda los métodos y atributos especificados por una Clase, por ende la Subclase además de poseer sus propios métodos y atributos, poseerá las características y atributos visibles de la Clase (public y protected).


Agregación
Para modelar objetos complejos, n bastan los tipos de datos básicos que proveen los lenguajes: enteros, reales y secuencias de caracteres. Cuando se requiere componer objetos que son instancias de clases definidas por el desarrollador de la aplicación, tenemos dos posibilidades:
    • Por Valor: Es un tipo de relación estática, en donde el tiempo de vida del objeto incluido esta condicionado por el tiempo de vida del que lo incluye. Este tipo de relación es comúnmente llamada Composición (el Objeto base se construye a partir del objeto incluido, es decir, es "parte/todo").
    • Por Referencia: Es un tipo de relación dinámica, en donde el tiempo de vida del objeto incluido es independiente del que lo incluye. Este tipo de relación es comúnmente llamada Agregación (el objeto base utiliza al incluido para su funcionamiento).

Asociación
La relación entre clases conocida como Asociación, permite asociar objetos que colaboran entre sí. Cabe destacar que no es una relación fuerte, es decir, el tiempo de vida de un objeto no depende del otro.

Dependencia o Instanciación (uso)
Representa un tipo de relación muy particular, en la que una clase es instanciada (su instanciación es dependiente de otro objeto/clase). Se denota por una flecha punteada.
El uso más particular de este tipo de relación es para denotar la dependencia que tiene una clase de otra.


Interfaces
Las interfaces son clases abstractas, lo que significa que no es posible crear instancias directamente a partir de ellas. Pueden contener operaciones, pero no atributos. Las clases pueden heredar de las interfaces (a través de una asociación de realización) y de estos diagramas sí es posible crear instancias.

Tipo de datos
Los tipos de datos son primitivas construidas normalmente en algunos lenguajes de programación. Algunos ejemplos comunes son los enteros y los booleanos. No pueden tener relación con clases, pero las clases sí pueden relacionarse con ellos.

Enumeraciones
Las enumeraciones son simples listas de valores. Un ejemplo típico de esto sería una enumeración de los días de la semana. Las opciones de una enumeración se llaman «literales de enumeración». Al igual que los tipos de datos, no pueden relacionarse con las clases, pero las clases sí pueden hacerlo con ellos.

Paquetes
Los paquetes, en lenguajes de programación, representan un espacio de nombres en un diagrama se emplean para representar partes del sistema que contienen más de una clase, incluso cientos de ellas.