java intro
TRANSCRIPT
Nota: Este programa esta hecho para la versión 6 de NetBeans.
Nota: antes de seguir adelante es conveniente que hagamos un repaso sobre la convención en Java respecto a la utilización de las letras mayúsculas y
minúsculas en los nombres en el Apéndice - Convenciones Java y UML - Mayúsculas y minúsculas (I)
El IDE NetBeans es un entorno de desarrollo Open Source escrito en Java. Como este será el entorno de desarrollo utilizado durante el curso, es
conveniente realizar un programa donde veamos todos los temas que vemos en la parte inferior, que será la impresión de nuestro nombre
crear un nuevo proyecto crear un nuevo paquete crear una nueva Clase
compilar una Clase ejecutar una Clase
MBA.RAFAEL ADONAHI AGUILERA ALFARO
PROGRAMACION III
UPSUM
Convenciones Java y UMLMayúsculas y minúsculas (I)
En Java existen una serie de convenciones con lo que respecta a la escritura de los Paquetes, Clases, Métodos y Variables.
Paquete todas las letras en minúsculas
esteesunpaquete Clases
la primera letra de la primera palabra compuesta en mayúsculas la primera letra de la segunda y restantes palabras compuesta en mayúsculas
EstaEsUnaClase Métodos
la primera letra de la primera palabra compuesta en minúsculas la primera letra de la segunda y restantes palabras compuesta en mayúsculas
esteEsUnMetodo() Variables
igual que los métodos estaEsUnaVariable
MBA.RAFAEL ADONAHI AGUILERA ALFARO
PROGRAMACION III
UNIVERSIDAD PRIVADA DEL SUR DE MÉXICO
Crear un nuevo proyecto
NetBeans al igual que la mayoría de los entornos de desarrollo, aloja sus aplicaciones en proyectosestos proyectos sólo tienen sentido cuando estamos desarrollando
cuando una aplicación pasa a producción, el concepto de proyecto del entorno de desarrollo se pierde En nuestro caso, crearemos un proyecto llamado rafaelaguilera siguiendo los siguientes pasoselegimos Archivo | Nuevo Proyecto...
MBA.RAFAEL ADONAHI AGUILERA ALFARO
PROGRAMACION III
UNIVERSIDAD PRIVADA DEL SUR DE MÉXICO
en el cuadro de dialogo New Project elegimos Java y Java Application y seguidamente hacemos clic sobre el botón
MBA.RAFAEL ADONAHI AGUILERA ALFARO
PROGRAMACION III
UNIVERSIDAD PRIVADA DEL SUR DE MÉXICO
en el cuadro de diálogo Nuevo aplicación javao tenemos que rellenar los siguientes camposNuevo proyecto: prorafaelaguilera
durante el curso seguiremos una convención a nivel didáctico que va a consistir en poner el prefijo pro a todos los nombres de los proyectos que crearemos
Ubicación del proyecto: C:\isg\j2se\prorafaelaguilera
vamos a hacer clic sobre el botón EXAMINAR para indicar que queremos que nuestro proyecto se aloje en tal directorio, o para cambiar la ruta.
Crear clase principal: no lo marcamos
Configurar como proyecto principal: Lo marcamos
MBA.RAFAEL ADONAHI AGUILERA ALFARO
PROGRAMACION III
UNIVERSIDAD PRIVADA DEL SUR DE MÉXICO
Crear un nuevo paquete
Cuando estamos realizando aplicaciones , tenemos que incluir las Clases de nuestra aplicación en paquetes (packages) para poder obtener una serie de ventajas que ya veremos más adelanteestos paquetes tienen sentido tanto en el proceso de desarrollo como en el de producción los paquetes no están ligados a un entrono de desarrollo, sino que es una parte integral y esencial del lenguaje Java En nuestro caso, crearemos un paquete llamado paqrafaelaguilera siguiendo los siguientes pasosnos situamos en la ventana Proyectos y con el botón derecho del ratón seleccionamos la carpeta Paquete Java correspondiente al proyecto prorafaelaguilera que acabamos de crear. elegimos Nuevo | Paquete Java...
MBA.RAFAEL ADONAHI AGUILERA ALFARO
PROGRAMACION III
UNIVERSIDAD PRIVADA DEL SUR DE MÉXICO
MBA.RAFAEL ADONAHI AGUILERA ALFARO
PROGRAMACION III
UNIVERSIDAD PRIVADA DEL SUR DE MÉXICO
y en el cuadro de diálogo Nuevo Paquete de Java introducimos el nombre del paquete paqrafaelaguilera y hacemos clic sobre el botón
MBA.RAFAEL ADONAHI AGUILERA ALFARO
PROGRAMACION III
UNIVERSIDAD PRIVADA DEL SUR DE MÉXICO
Crear una nueva Clase
En Java los programas o aplicaciones se escriben en ficheros que tienen la extensión .java
una aplicación puede tener uno o más ficheros con extensión .java
cada uno de estos ficheros .java contiene una Clase
cada vez que se crea una nueva Clase, se crea su correspondiente fichero con el nombre de la Clase y con extensión .java
En nuestro caso, vamos a crear una Clase que la vamos a llamar Rafaelaguilera siguiendo los siguientes pasos nos situamos en la ventana Proyecto y con el botón derecho del ratón seleccionamos el paquete paqrafaelaguilera elegimos nuevo | Otros...
MBA.RAFAEL ADONAHI AGUILERA ALFARO
PROGRAMACION III
UNIVERSIDAD PRIVADA DEL SUR DE MÉXICO
en el cuadro de diálogo Archivo Nuevo elegimos la categoría Java y el tipo de fichero Clase main Java y hacemos clic sobre el botón
MBA.RAFAEL ADONAHI AGUILERA ALFARO
PROGRAMACION III
UNIVERSIDAD PRIVADA DEL SUR DE MÉXICO
el campo de Texto Nombre de la clase indicamos que la Clase se va a llamar Rafaelaguilera y hacemos clic sobre el botón
MBA.RAFAEL ADONAHI AGUILERA ALFARO
PROGRAMACION III
UNIVERSIDAD PRIVADA DEL SUR DE MÉXICO
MBA.RAFAEL ADONAHI AGUILERA ALFARO
PROGRAMACION III
UNIVERSIDAD PRIVADA DEL SUR DE MÉXICO
package paqrafaelaguilera; oen esta primera línea de código, estamos indicando que la clase Rafaelaguilera pertenece al paquete paqrafaelaguilera
public class Rafaelaguilera { } oaquí estamos declarando el nombre de la Clase oes muy importante mencionar que todo código Java que se escriba tiene que estar obligatoriamente incluido dentro de una Clase
es decir el código java siempre estará dentro del bloque (indicado entre llaves {}) de esa Clase
public static void main(String[] args) { } oaquí estamos declarando el método main(...) ode momento saber que la MVJ (Máquina virtual Java) cuando tiene que ejecutar la aplicación Rafaelaguilera, lo primero que hace es buscar este método como punto de entrada a la aplicación
Y para que nos muestre el mensaje ISC.MBA.RAFAEL ADONAHI AGUILERA ALFARO..., tenemos que añadir el siguiente código al método main(...)
Nota: Podemos ahorrarnos toda la escritura de la línea System.out.println(""); escribiendo sout y seguidamente presionando la tecla tabulador
Este es el código generado por el Asistente de NetBeans package paqrafaelaguilera; public class Rafaelaguilera {
public static void main(String[] args) { // TODO code application logic here
}}
MBA.RAFAEL ADONAHI AGUILERA ALFARO
PROGRAMACION III
UNIVERSIDAD PRIVADA DEL SUR DE MÉXICO
public static void main(String[] args) { System.out.println(“ISC.MBA.RAFAEL ADONAHI AGUILERA
ALFARO"); }
System.out.prinln(“ISC.MBA.RAFAEL ADONAHI AGUILERA ALFARO");
ode momento sólo saber que “ISC.MBA.RAFAEL ADONAHI AGUILERA ALFARO" es un String que se muestra como mensaje de salida
MBA.RAFAEL ADONAHI AGUILERA ALFARO
PROGRAMACION III
UNIVERSIDAD PRIVADA DEL SUR DE MÉXICO
Compilar una Clase
En Java, las Clases compiladas se encuentran en ficheros que tienen la extensión .classal contenido de estas clases se le denomina código byte si no tuviéramos un IDE como NetBeans tendríamos que ejecutar el comando javac En nuestro caso, compilaremos la Clase Rafaelaguilera situándonos en la ventana Proyectos. Seguidamente seleccionamos con el botón derecho del ratón la Clase Rafaelaguilera.java y elegimos CompilareArchivo F9. Esta acción hace que Netbeans ejecute de forma transparente para nosotros el comando javac
MBA.RAFAEL ADONAHI AGUILERA ALFARO
PROGRAMACION III
UNIVERSIDAD PRIVADA DEL SUR DE MÉXICO
Ejecutar una Clase
A diferencia de los lenguajes compilados que ejecutamos ficheros con la extensión .exe, en java se ejecutan los ficheros con extensión .classsi no tuviéramos un IDE como NetBeans tendríamos que ejecutar el comando java, cuya utilización ya veremos más adelante
Para ejecutar la Clase Rafaelaguilera nos vamos a situar en la ventana Proyectos. Seguidamente seleccionamos con el botón derecho del ratón la Clase Rafaelaguilera.java y elegimos Ejecutar Archivo Mayúsculas+F6
MBA.RAFAEL ADONAHI AGUILERA ALFARO
PROGRAMACION III
UNIVERSIDAD PRIVADA DEL SUR DE MÉXICO
finalmente ya vemos el mensaje “ISC.MBA. Rafael Adonahi Aguilera" en la ventana Output
MBA.RAFAEL ADONAHI AGUILERA ALFARO
PROGRAMACION III
UNIVERSIDAD PRIVADA DEL SUR DE MÉXICO
JAVA Y UML
Consideraciones sobre UML
UML (Unified Modeling Language) es un lenguaje estándar para escribir planos de software. UML permite modelar desde sistemas de información
empresariales hasta aplicaciones distribuidas basadas en web.
Alguien que pretenda desarrollar software con exito debe crear software de calidad que satisfaga las
necesidades cambiantes de sus cLientes. El desarrollo debe ser predecible, con un uso eficiente de recursos. El software debe tener una sólida base
arquitectónica que sea flexible al cambio. Esto generará un negocio sostenible. El modelado es la
parte medular de todas las actividades que conducen a la creación de software de calidad.
MBA.RAFAEL ADONAHI AGUILERA ALFARO
PROGRAMACION III
UNIVERSIDAD PRIVADA DEL SUR DE MÉXICO
Para qué se construyen modelos?Algunas de las respuestas posibles son
Para comprender mejor el sistema que está bajo desarrollo Para descubrir posibilidades de simplificación y reutilización
Para minimizar los posibles riesgos UML es un lenguaje para visualizar, especificar, construir y documentar.
Siendo lo suficientemente expresivo, permite modelar sistemas que no son software
. Se ha usado en dominios tales como:Sistemas de información corporativos
Entidades financieras Telecomunicaciones
Transporte Defensa
Desarrollos aeroespaciales Ciencias
Servicios distribuidos basados en web
Java es, entre otras cosas:
Orientado a objetos Portable
Open source Sin costo Eficiente Seguro
Amplia integración a la web Robusto
Identificar y plantear el problema
Para producir software que cumpla su propósito hay que obtener los requisitos del sistema, esto se consigue conociendo de una forma disciplinada a los usuarios y haciéndolos participar de manera activa para que no
queden “cabos sueltos”. Para conseguir un software de calidad, que sea duradero y fácil de mantener hay que idear una sólida base arquitectónica que sea flexible al cambio. Para desarrollar software rápida y eficientemente;
minimizando el trabajo de recodificación y evitando crear miles de líneas de código inútil hay que disponer, además de la gente y las herramientas necesarias, de un enfoque apropiado.
Para conseguir que a la hora de desarrollar software de manera industrial se obtenga un producto de calidad, es completamente necesario seguir cierta pautas y no abordar los problemas sin pensarlo, con el fin de obtener un modelo que represente lo suficientemente bien el problema que hacemos de abordar. El modelado es la espina dorsal del desarrollo de software de calidad. Se construyeron modelos para poder comunicarnos con otros, para explicar el comportamiento del sistema a desarrollar, para comprender nosotros mismos, mejor ese sistema, para controlar el riesgo y en definitiva para poder atacar problemas que sin el modelado su resolución seria imposible, tanto desde el punto de vista de los desarrolladores(no se pueden cumplir los plazos estimado, no se consigue
ajustar los presupuestos) como desde el punto de vista del cliente, desde que no se cumplen las especificaciones hasta fallos que dejan inutilizando el sistema.
Cuando nos referimos al desarrollo de software en el ámbito industrial, no se pretende que la capacidad de modelar se reduzca a empresas que disponen de gran numero de empleados o empresas que han de abordar
proyectos eminentemente grandiosos, si no que nos referimos, si no que nos referimos a la capacidad de obtener un producto comercial(sea cual sea su costo o tamaño) que cumpla lo que en la industria se suele denominar como calidad total y que además pueda reportar beneficios a corto o mediano plazo, evitando, por ejemplo,
implantaciones casi eternas debido a las falta de previsión o al haber abordado los problemas muy a la ligera.Por todas estas razones es inevitable el uso de modelos. Un modelo es una simplificación de la realidad. El
modelo nos proporciona los planos de un sistema, desde los más generales, que proporcionan una visión general del sistema, hasta los mas detallados. En un modelo se han de incluir los elementos que tengan más relevancia y
omitir los que no son interesantes para el nivel de abstracción que se ha elegido.
. A través del modelado conseguimos cuatro objetivos
Los modelos ayudan a visualizar como es o queremos que sea un sistemaLos modelos nos permiten especificar la estructura o el comportamiento de un sistema
Los modelos nos proporcionan plantilla que nos guían en las construcciones de un sistema.Los modelos documentan decisiones que hemos adoptado
En la realidad, no siempre se hace un modelado formal, la probabilidad de que exista un modelado formal para abordar un sistema es inversamente proporcional a la complejidad del mismo, esto es,
cuanto mas fácil es un problema, menos tiempo se pasa modelando y esto es por que cuando hay que aportar unas solución a un problema complejo el uso del modelado nos ayuda a comprenderlo, mientras que cuando tenemos un problema fácil el uso del modelado que hacemos se reduce a
representar mentalmente el problema o como mucho a escribir unos cuantos garabatos sobre un papel.
Hay cuatro principios básicos, estos son fruto de la experiencia de las ramas de la ingeniería:
a) la elección de que modelos se creen influye directamente sobre como se acomete el problema. Hay que seleccionar el modelo adecuado para cada momento y dependiendo de que modelo se elija se obtendrán diferentes beneficios y diferentes costos.En la industria de software
se ha comprobado que un modelado orientado a objetos proporciona una arquitectura mas flexible y readaptable que otros por ejemplo orientados ala funcionalidad o a los datos.
b)Todo modelo puede ser expresado a diferentes niveles de precision.Esto es, necesario poder selecciona el nivel de detalle que se desea ya que en diferentes partes de un proyecto y en
diferentes etapas se tendrán determinadas necesidades.
c) Los mejores modelos están ligados a la realidad. Lo principal es tener modelos que nos permitan representar la realidad mas claramente posible, pero no sólo esto, tenemos que saber, exactamente cuando se apartan de la realidad para no caer en la ocultación de ningún detalle
importante.
d) Un único modelo no es suficiente. Cualquier sistema que no se trivial se afronta mejor desde pequeños modelos casi independientes, que los podamos construir y estudiar
independientemente y que nos representen las parte mas diferenciados del sistemas y sus interrelaciones.
Para poner un poco de orden sobre todo lo que respecta a la modelizacion de sistemas de software, aparece UML (unified
modeling lenguaje, Lenguaje unificado de modelado) que pretende unificar las 3 metodologías difundidas (OMT, Bootch y OOSE) e
intentar que la industria de software termine su maduración como ingeniería. Y lo consigue en tal manera que lo que UML
proporciona son las herramientas necesarias para poder obtener los planos de software equivalente a los que se utilizan en la
construcción, la mecánica o la industria aeroespacial. UML abarca todas la fases del ciclo de vida de un proyecto, soporta diferente
maneras de visualización dependiendo de quien tenga que interpretar los planos en que fase del proyecto se encuentre.
Aquí vuelvo a poner la definición de modelo, para que quede mas claro el concepto.
¿Que es un modelo?Es una simplificación de la realidad. El modelo nos proporciona los planos de un sistema, desde los mas generales, que proporcionan
una visión general del sistema, hasta lo mas detallado. En un modelo de tienen que incluir los elemento que tengan mas
reelevancia y omitir los que no son interesante para el nivel de abstracción que se ha elegido.
Modelar sus clasesVas a ver un ejemplo de un modelado de clases en UML, repetiremos algunos
conceptos como clases, una clases es una descripción de un conjunto de objetos que comparten los mismos atributos, operaciones, relaciones y
semántica. Hay que hacer una especial diferenciación para no confundir el concepto de clases con el objeto.Un objeto es una instancia individual de una clase, así podríamos tener una clase que fuera de monitores y un objeto de la
clase de monitores que fuera un monitor marca “A” de 17 pulgadas, con la pantalla plana.En UML se usa un rectángulo para representar las classes, con
distintos compartimientos para indicar sus atributos y sus operaciones.
Una clase se identifica por un nombre que la distingue del resto, el nombre es una cadena de texto. Ese nombre sólo se denomina nombre simple, un
nombre de camino consta del nombre de la clase precedido del nombre del paquete en el que se encuentra incluida. En las figuras posteriores podemos
ver la estructura de una clases y distintos nombre de camino y nombres simples
MONITOR
MARCAMODELO
ENCENDER ()
Nombre
Atributos
Operaciones
Un atributo es una propiedad de una clase identificada con un nombre, describe un rango de valores que pueden tomas las instancias de la propiedad.
Los atributos representan propiedades comunes a todos los objetos de una determinada clase, por ejemplo todos los monitores tienen la propiedad dimensión, que se suele medir en pulgadas. Un cliente tiene las propiedades nombre, apellidos, dirección, teléfono. Los atributos son propiedades interesantes de las clases. Una instancia de una determinada clase tendrá valores concretos para sus atributos, mientras que las clases tienen rangos
de valores que pueden admitir sus atributos.
El nombre de los atributos es un texto que normalmente se escribe en minúsculas si solo es una palabra o la primera palabra del nombre del atributo en minúsculas y el
resto de las palabras con la primera letra en mayúsculas, por ejemplo, nombrePropietario.
Una operación es una implementación de un servicio que puede ser requerido a cualquier objeto de la clase para que muestre su comportamiento. Una operación
representa algo que el objeto puede hacer, por ejemplo, un comportamiento esperado por cualquier usuario de un monitor es que este pueda encender y apagar.El nombre de las
operaciones sigue las mismas reglas de notación que los atributos pero suelen ser verbos que indican una acción o comportamiento de clase.
Modelar relaciones entre clases
Las relaciones son la manera de representa las interacciones entre clases, ejemplo, un teclado el cual sin estar conectado a un CPU es totalmente inútil,
además si la CPU cambiase su conector de teclado este ya no se podría conectar a no ser que cambiase el también.
Para representar con UML como se conectan las cosas entres si, ya sea logia o ficiscamente, utilizamos las relaciones. Existen 3 tipos de relaciones importantes:
Dependencias, generalizaciones y asociaciones.
Dependencia:Es la relación de uso entre dos elementos de manera que un cambio en la especificación del elemento independiente puede afectar a otro elemento
implicado en la relación..Ejemplo:
Supongamos que tenemos una clase que representa un aparato reproductor de video, dependemos directamente de la clase de canal ya que grabaremos un canal u otro dependiendo de cual tenga seleccionando aparato de video. A su
vez clase televisión también depende de la clase canal para poder visualizar un determinado canal por la televisión.
Video
CabezalesTipo Reproducción
poner ()pasar()
rebobinar()parar()grabar(c:canal)
Televisión
Pulgadasnum Canales
encender ()apagar()
cambiar(c:Canal)
canal
Frecuencia
buscar()fijar()
En esta figura podemos observar un ejemplo de relación de dependencia. Si en algún momento la clase canal cambiara (se modificara o añadiera la nueva funcionalidad) las clases video y televisión (que dependen de ella) podrían verse afectadas por el cambio y dejar de funcionar. Como podemos observar en esta figura tanto el método grabar () de la clase video, como al método cambiar() de la clase televisión se le ha añadido mas semántica representando el parámetro c del tipo canal. Este es un mecanismo común en UML de diseño avanzado de clases. Cuando queremos aportar mas información sobre una clase y sus métodos existe una nomenclatura bien definida para determinar mas los atributos y métodos de la clase indicando si son ocultos o públicos, tipo de datos, parámetros y que datos retornan.
Generalización:Una relación entre un elemento general (llamado súper clase o padre) y un
caso mas especifico de ese elemento (llamado subclase o hijo).La generalización implica que los objetos hijo se pueden utilizar en cualquier lugar donde aparece el padre, pero no a la inversa. La clase hijo siempre
hereda todos los atributos y métodos de sus clases padres y a menudo (no siempre) el hijo extiende los atributos y operaciones del padre.
Una operación de un hijo puede tener la misma signatura que en el padre pero la operación puede ser definida por el hijo, esto se le conoce como
polimorfismo.La generalización se representa mediante una flecha dirigida con la punta hueca. Una clase puede tener ninguno, uno o varios padres. Una clase sin padre y uno o mas hijos se denomina clase raíz o clase base. Una
clase sin hijos se denomina clase hoja. Una clase con un único padre se dice que utiliza herencia simple y una clase con varios padres se dice que utiliza
múltiple. UML utiliza relaciones de generalización para el modelado de clases e interfaces, pero también se utilizan para establecer generalizaciones entre
otros elementos.
Figura
Origen
Mover() Cambiar tamaño() dibujar()
Rectangulo Circulo Polígono
Esquina:Punto Radio:Float
Puntos:lista
dibujar()
Cuadrado
Mediante las relaciones de generalización podemos ver que un cuadrado es un tipo de rectángulo que a su vez es un tipo de figura. Con esta relación podemos representar la herencia, de este modo, la clase cuadrado,
simplemente por herencia sabemos que tiene dos atributos, esquina (heredado de su padre rectángulo)y origen(heredado del padre rectángulo, la clase figura, que se puede decir que es su abuelo). Lo mismo ocurre con las operaciones, la clase cuadrado dispone de las operaciones mover (), cambiar tamaño () y dibujar () heredadas
todas desde figura.Normalmente la herencia simple es suficiente para modelar los problemas a los que enfrentamos pero en ciertas
ocasiones conviene modelar mediante herencia múltiple aunque vistos en esta situación se ha de ser extremadamente cuidadoso en no realizar herencia múltiple desde padres que solapen la estructura o
comportamiento:
Ejemplo de herencia múltiple
Vehiculo
Vehiculo Terrestre
Vehiculo Acuatico
Vehiculo Aereo
Coche Moto Tanque Barco SubmarinoVehiculo Anfibio
Avión Globo
Asociación:Es una relación estructural que específica que los objetos de un elemento esta conectados con los objetos de
otro. Dad una asociación entre dos clases, se puede navegar desde un objeto de una de ellas hasta uno de los objetos de la otra, y vicervera Es posible que la asociación se de de manera recursiva en un objeto, esto significa
que dado un objeto de la clase se puede conectar con otros objetos de la misma clase. También es posible, auque menos frecuente, que se conecten mas de dos clases, esta se suellen llamar asociaciones n-arias. Las
relaciones de asociaciones se utilizan cuando se quieren representar relaciones estructurales.A parte de la forma básica de representar las asociaciones, mediante una linea continua entre las clases
involucradas en la relacion, existe cuatro adornos que se aplican a las asociaciones para facilitar su comprensión:Nombre:
Se utiliza para describir la naturaleza de la relación. Para que no existe ambigüedad en su significado se le puede dar una dirección al nombre por medio de una flecha que apunte en la dirección que se pretende que el nombre
sea leído.Rol:
Cuando una clase participa en una asociación esta tiene un rol especifico que juega en dicha asociación. El rol es la cara que dicha clase presenta a la clase que se encuentra en el otro extremo. Las clases pueden jugar el
mismo o diferentes toles en otras asociaciones.
Multiplicidad:En muchas situaciones del modelado es conveniente señalar cuantos objetos se pueden conectar a través de una instancia de la asociación. Este cuantos se denomina multiplicidad del rol en la asociación y se expresa con un rango de valores o un valor explicito. Cuando se indica multiplicidad en un extremo de una asociación se esta indicando que, para cada objeto de la clase en el extremo opuesto debe haber tantos objetos en este extremo.Se puede indicar la multiplicidad de exactamente uno, cero o uno (0…1), muchos (0,,,*), uno o mas(1,,,,*) e incluso un numero exacto (por ejemplo,5)Agregación:Una asociación normal entres dos clases representa una relación estructural entre iguales, es decir, ambas clases están conceptualmente al mismo nivel. A veces interesa representar relaciones del tipo “todo/parte” en las cuales una cosa representa la cosa grande (el todo) que consta de elementos mas pequeños (las partes).este tipo de relación se denomina agregación la cual representa una relación del tipo “tiene-un”.Una agregación es solo un tipo especial de asociación, esta se especifica añadiendo simplemente un rombo vació en la parte del todo.Composición:Es una variación de la agregación simple que añade una semántica importante. La composición es una forma de agregación, con una fuerte relación de pertenencia y vidad coincidentes de la parte del todo. Las partes con una multiplicidad no fijada puede crearse después de la parte que representa el todo (la parte compuesta) una vez creadas pertenecen a ella de manera que viven y mueren con ella. Las partes pueden ser eliminadas antes que el todo sea destruido pero una vez que este se elimine todas sus partes serán destruidas.El todo, se ha de encargar de toda la gestión de sus partes, creación, mantenimiento, disposición veamos el ejemplo de composición donde un marco pertenece a una ventana, pero ese marco no es compartido por ninguna otra ventana, esto contrasta con la agregación simple en la que una parte puede ser compartida por varios objetos agregados, ejemplo una pared puede ser compartida por varias habitaciones.
Persona 1.. * Trabaja Para * Empresa
Multiplicidadnombre
Empleado patrón
Nombre del rol
Ejemplo de asociación y sus partes
Ejemplo de agregación
Empresa1 *
Departamento
todo parte
Ejemplo de Composición
Ventana Marco
todo Composiciónparte
1 *