Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Relacionesv 3.0
Relacionesv 3.0
Ingeniera Directa
Ingeniera Directa...............................................................................................2
Diagrama de clases.............................................................................................2
Clase...................................................................................................................2
Relaciones...........................................................................................................5
Generalizacin. ..............................................................................................5
......................................................................................................................7
Clases Abstractas.............................................................................................9
Realizacin.....................................................................................................11
Asociacin......................................................................................................13
Unidireccional............................................................................................14
Bidireccional:..............................................................................................16
Agregacin...................................................................................................20
Composicin.................................................................................................20
Dependencia..................................................................................................22
Ejemplo Facturar..............................................................................................23
Diagrama de Clase.........................................................................................23
Cdigo Java....................................................................................................24
Clase ExpertoFacturacion..........................................................................24
Clase Cliente...............................................................................................25
Clase Producto............................................................................................26
Clase Fiscalizable.......................................................................................27
Clase Comprobante....................................................................................27
Clase Factura..............................................................................................28
Clase DetalleFactura..................................................................................29
Clase ImpresorFiscal..................................................................................30
Clase ImpresoraFiscal................................................................................30
1 de 30
Ingeniera Directa
Debido a que UML es un lenguaje de modelado, existe un mapeo significativo cuando se
convierten los modelos en UML a un lenguaje de programacin.
Al proceso de comenzar a generar cdigo a travs de modelos se le conoce como
ingeniera directa.
El propsito de este documento es establecer correspondencias entre los diferentes
diagramas UML y el lenguaje de programacin Java
Diagrama de clases
Un diagrama de clases muestra la existencia de clases y cmo estn relacionadas entre
s.
Los diagramas de clases tienen los siguientes elementos:
Clase
En UML una clase se representa como un rectngulo con tres compartimientos, en el
primer compartimento va el nombre de la clase; el segundo compartimento corresponde a
los atributos de la clase, los cuales equivalen a variables de instancia en Java; y en el
tercero, las operaciones de la clase, estas en Java se mapean a mtodos de clase.
Cada clase UML se corresponde con un fichero de extensin .java que contiene el
cdigo fuente de la definicin de propiedades y mtodos de clase. La estructura sencilla
sera la siguiente:
2 de 30
}
1- Visibilidad
+ : public
# : protected
- : private
2- Tipo de dato Java. Puede ser simple (char,int,etc..), perteneciente a una clase java
(Vector,Hanstable,etc.) o definido por el programador.
3- Tipo de datos Java de retorno del mtodo de clase. En caso de que el mtodo no
devuelva ningn tipo de datos se debe utilizar void.
4- Tipo de datos y nombre de los parmetros del mtodo de clase separados por comas.
Ejemplo de Clase Java:
Se trata de una clase Contador.java definida de la siguiente forma:
3 de 30
return cnt;
4 de 30
Relaciones
Una relacin es una conexin entre elementos. En las relaciones se habla de una clase
destino y de una clase origen. La clase origen es desde la que se realiza la accin de
relacionar. Es decir desde la que parte la flecha, la clase destino es la que recibe la
flecha. Las relaciones se pueden modificar con estereotipos o con restricciones.
Comprender el significado de las relaciones en un modelo es el primer paso para
entender como se implementarn en cdigo Java.
Los tipos de relaciones son los siguientes:
Generalizacin.
Es un tipo de relacin entre una clase general conocida como superclase o clase padre y
una clase ms especfica de ese elemento llamada subclase o clase hija.
La forma de codificar esta relacin en Java es acompaar a la cabecera de la definicin
de la subclase con la palabra extends:
public class NombreSubClase extends NombreSuperclase
Una de las caractersticas importantes de Java es que no permite herencia mltiple,
aunque UML si lo permite. Como solucin a este problema existen el concepto de
Interface.
5 de 30
Ejemplo de Generalizacin:
6 de 30
7 de 30
int numero;
String tipo_id_tributaria;
int id_tributaria;
String Tipo_de_Persona;
public Cliente () { };
public void setNumero ( int newVar ) {
numero = newVar;
}
public int getNumero ( ) {
return numero;
}
public void setTipo_id_tributaria ( String newVar ) {
tipo_id_tributaria = newVar;
}
public String getTipo_id_tributaria ( ) {
return tipo_id_tributaria;
}
public void setId_tributaria ( int newVar ) {
id_tributaria = newVar;
}
public int getId_tributaria ( ) {
return id_tributaria;
}
public void setTipo_de_Persona ( String newVar ) {
Tipo_de_Persona = newVar;
}
public String getTipo_de_Persona ( ) {
return Tipo_de_Persona;
}
}
public class Empleado extends Persona {
private
private
private
private
int legajo;
String lugar_de_trabajo;
String tipo_documento;
int numero_documento;
public Empleado () { };
public void setLegajo ( int newVar ) {
legajo = newVar;
}
public int getLegajo ( ) {
return legajo;
}
public void setLugar_de_trabajo ( String newVar ) {
lugar_de_trabajo = newVar;
}
public String getLugar_de_trabajo ( ) {
return lugar_de_trabajo;
8 de 30
}
public void setTipo_documento ( String newVar ) {
tipo_documento = newVar;
}
public String getTipo_documento ( ) {
return tipo_documento;
}
public void setNumero_documento ( int newVar ) {
numero_documento = newVar;
}
public int getNumero_documento ( ) {
return numero_documento;
}
}
Clases Abstractas
Cuando se construye una jerarqua es posible que existan clases de las cuales no se
desea que hayan objetos. Estas clases se llaman abstractas. En UML se puede
especificar que una clase es abstracta escribiendo su nombre en cursiva. Esta convencin
se aplica a las operaciones y significa que dicha operacin proporciona una signatura,
pero por lo dems esta incompleta y por tanto debe ser implementada por algn mtodo a
un nivel mas bajo de abstraccin.
La clase abstracta se declara simplemente con el modificador abstract en su
declaracin. Los mtodos abstractos se declaran tambin con el mismo modificador,
declarando el mtodo pero sin implementarlo (sin el bloque de cdigo encerrado entre {}).
La clase derivada se declara e implementa de forma normal, como cualquier otra. Sin
embargo si no declara e implementa los mtodos abstractos de la clase base (en el
ejemplo el mtodo dibujar) el compilador genera un error indicando que no se han
implementado todos los mtodos abstractos y que, o bien, se implementan, o bien se
declara la clase abstracta.
9 de 30
. . .
);
}
public class DetalleFacturaProducto extends DetalleFactura {
private int cantidad;
private Producto producto
10 de 30
public DetalleFacturaProducto () { };
private void setCantidad ( int pcantidad ) {
cantidad = pcantidad;
}
private int getCantidad ( ) {
return cantidad;
}
public void setProducto(Producto pproducto){
producto=pproducto;
}
public Producto getProducto(){
return producto;
}
Realizacin
Es la relacin entre 2 objetos en donde uno de los objetos es completamente abstracto y
11 de 30
representa una interfase que otro objeto debe implementar. La realizacin se representa
por una lnea punteada con una flecha vaca apuntando al objeto abstracto.
Para crear una interface en Java, se utiliza la palabra clave interface en lugar de class.
La interface puede definirse public o sin modificador de acceso, y tiene el mismo
significado que para las clases. Todos los mtodos que declara una interface son siempre
public.
Una interface puede tambin contener datos miembro, pero estos son siempre static y
final.
Para indicar que una clase implementa los mtodos de una interface se utiliza la palabra
clave implements seguido de una lista separada por comas de los nombres de las
interfaces que implementa.
);
}
public interface Imprimible {
public void imprimir(
);
}
public class rectangulo implements Imprimible, Dibujable
public rectangulo () { };
public void imprimir( )
{
........
}
public void dibujar( )
{
........
12 de 30
public DescuentoMayorista () { };
public double descuento( double precio )
{
return precio * 0.5
}
}
public class DescuentosVip implements Descuento
public DescuentosVip () { };
public double descuento( double precio )
{
return precio * 0.15
}
}
Asociacin
Especifica que los objetos de una clase estn relacionados con los elementos de otra
clase. Se representa mediante una lnea continua, que une las dos clases. Podemos
indicar el nombre, multiplicidad en los extremos, su rol o papel que desempea cada una
de ellas y sentido de la navegacin.
En UML se representa del siguiente modo:
13 de 30
14 de 30
}
}
public class ClaseB {
private int Atributo2;
public ClaseB () { };
private void setAtributo2 ( int newVar ) {
Atributo2 = newVar;
}
private int getAtributo2 ( ) {
return Atributo2;
}
public void operacion2( )
{
}
15 de 30
return apellido;
}
/* Otros mtodos
...
*/
}
public class Factura {
private Cliente cliente;
private String tipofactura;
/* Otros atributos
........
*/
public Factura () { };
public void setCliente( Cliente pcliente )
{
cliente = pcliente;
}
public Cliente getCliente()
{
return cliente;
}
/* Otros mtodos
.....
*/
}
16 de 30
}
private void setRol2 ( ClaseB newVar ) {
rol2 = newVar;
}
private ClaseB getRol2 ( ) {
return rol2;
}
public void operacion1(
{
}
}
public class ClaseB {
private int Atributo2;
private ClaseA rol1;
public ClaseB () { };
private void setAtributo2 ( int newVar ) {
Atributo2 = newVar;
}
private int getAtributo2 ( ) {
return Atributo2;
}
private void setRol1 ( ClaseA newVar ) {
rol1 = newVar;
}
private ClaseA getRol1 ( ) {
return rol1;
}
public void operacion2(
{
}
Cardinalidades
Hasta ahora hemos mostrado la correspondencias de relaciones uno a uno a cdigo
java, pero adems debemos ver que hacer con las asociaciones de cardinalidad n y las
relaciones con un mnimo y mximo fijo
Para representar la cardinalidad n en en el cdigo Java es necesario usar un atributo
de tipo lista que contenga los objetos de la clase correspondiente:
private Nombre_Clase2 rol1[];
17 de 30
Adems de las cardinalidades mximas en extremo 1:n, 1:1 n:n podemos encontrar
otros tipos de cardinalidades mximas en una asociacin como es X:Y donde X e Y
representan un nmero entero definido de antemano. En ese caso tendremos la siguiente
definicin de atributo.
public class ClaseAsociada1
{
private ClaseAsociada2 rol1[]= new ClaseAsociada2[X1]
......
}
public class ClaseAsociada2
{
private ClaseAsociada1 rol2[]= new ClaseAsociada1[Y1]
......
}
18 de 30
}
}
public class ClaseB {
private int Atributo2;
private ClaseA rol1;
public ClaseB () { };
private void setAtributo2 ( int newVar ) {
Atributo2 = newVar;
}
private int getAtributo2 ( ) {
return Atributo2;
}
private void setRol1 ( ClaseA newVar ) {
rol1 = newVar;
}
private ClaseA getRol1 ( ) {
return rol1;
}
public void operacion2(
{
}
19 de 30
Agregacin
Es una forma de asociacin que representa una relacin es parte de entre dos clases,
donde una clase es el todo y otra la parte. No tiene significado adicional en el lenguaje
Java, por lo que al codificar es igual que una asociacin unidireccional.
Composicin
Las composiciones son asociaciones que representan asociaciones muy fuertes. Dichas
relaciones son tan fuertes que las partes no pueden existir por s mismas. nicamente
20 de 30
existen como parte del conjunto, y si este es destruido las partes tambin lo son.
Implementar una composicin en Java es equivalente a una asociacin unidireccional,
con la diferencia de que la creacin de la clase pieza debera realizarse dentro del cdigo
de la clase contenedora. Por ejemplo:
21 de 30
Dependencia
Es una relacin que traduce algn tipo de referencia una clase u objeto que no existe
dentro del contexto. No hay que confundirlo con las asociaciones, estos objetos no tienen
una relacin permanente, si no que son usados por ella ocasionalmente.
Recordemos que una dependencia especifica una ruta por la cual un objeto puede enviar
un mensaje a otro. Por tanto si hay una relacin de dependencia entre una clase B y una
clase A debe existir una referencia de A en el cdigo de la clase B.
Suponiendo que operacin es el mtodo que hace referencia a la clase A
public class A {
public A () { };
public void operacion1(
{
}
}
public class B {
public B () { };
public void operacion2(
{
A variable = new A();
A.operacion1();
}
22 de 30
Ejemplo Facturar
El siguiente ejemplo trata de la implementacin de una versin simplificada
de facturacin.
Diagrama de Clase
23 de 30
Cdigo Java
Clase ExpertoFacturacion
package ejemplo;
public class ExpertoFacturacion {
24 de 30
public ExpertoFacturacion ()
{
};
public void facturar(){
Cliente cliente= new Cliente();
Producto producto1 = new Producto();
String fnumero;
String ffecha;
String ftfactura;
.....
.....
.....
.....
Factura factura = new Factura();
factura.setNumero(fnumero);
factura.setFecha(ffecha);
factura.setTipofactura(ftfactura);
factura.setCliente(cliente);
factura.setDetalle(producto1,cantidad1);
ImpresorFiscal impresor = new ImpresorFiscal();
impresor.imprimir(factura);
}
Clase Cliente
package ejemplo;
public class Cliente {
private
private
private
private
private
String apellido;
int documento;
String direccion;
int telefono;
String nombre;
public Cliente () { };
public void setApellido ( String newVar ) {
apellido = newVar;
}
public String getApellido ( ) {
return apellido;
}
public void setDocumento ( int newVar ) {
documento = newVar;
}
public int getDocumento ( ) {
return documento;
}
25 de 30
Clase Producto
package ejemplo;
import java.util.*;
26 de 30
Clase Fiscalizable
package ejemplo;
public interface Fiscalizable {
public double getTotal(
public int getNumero(
);
);
);
);
);
Clase Comprobante
package ejemplo;
public abstract class Comprobante implements
Fiscalizable
27 de 30
);
);
);
Clase Factura
package ejemplo;
import java.util.*;
public class Factura extends Comprobante
28 de 30
Clase DetalleFactura
package ejemplo;
import java.util.*;
public class DetalleFactura {
private Producto producto;
private int cantidad;
public DetalleFactura () { };
public void setCantidad ( int newVar ) {
cantidad = newVar;
}
public int getCantidad ( ) {
return cantidad;
}
public double getSubtotal( )
{
return producto.getPrecio() * cantidad;
}
public void setProducto( Producto pproducto )
{
producto=pproducto;
}
29 de 30
Clase ImpresorFiscal
package ejemplo;
public class ImpresorFiscal {
public ImpresorFiscal () { };
public void imprimir( Fiscalizable pobjeto )
{
String parametro;
Integer numero = new Integer(pobjeto.getNumero());
parametro = numero.toString() + ';' + pobjeto.getFecha() + ';' +
pobjeto.getTipoComprobante() + ';' + pobjeto.getTitular()
+';'+pobjeto.getTotal();
ImpresoraFiscal impresora = new ImpresoraFiscal();
impresora.Imprime(parametro);
}
}
Clase ImpresoraFiscal
package ejemplo;
public class ImpresoraFiscal {
public ImpresoraFiscal () { };
public void Imprime( String parametro )
{
//Envia los datos al dispositivo
System.out.println("Imprimiendo....");
System.out.println(parametro);
}
}
30 de 30