Está en la página 1de 30

Diseo de Sistemas 2007-2009.

Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 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

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

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:

Clases: atributos, operaciones y visibilidad.


Relaciones: Herencia, Realizacin,Composicin, Agregacin, Asociacin y Uso.
Responsabilidades

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

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

public class NombreDeClase {


//Atributos
private1 int2 atributo;
// Constructor de la clase
public NombreDeClase () {
........................
}
//Operaciones
public1 void3 operacin(4)
{
........................
}

}
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:

public class Contador {


// Atributos
private int cnt;
// Constructor
public Contador() {
cnt = 0;
}
// Mtodos
public int incCuenta() {
cnt++;

// Se define la clase Contador


// Un entero para guardar el valor actual
// Un mtodo constructor
// lleva el mismo nombre que la clase
// Simplemente, inicializa

// Un mtodo para incrementar el contador


// incrementa cnt

3 de 30

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

return cnt;

Ingeniera Directa v 3.0

public int getCuenta() {


return cnt;
}

// y de paso devuelve el nuevo valor


// Este slo devuelve el valor actual
// del contador

Ahora veamos un ejemplo de clase Producto

public class Producto {


private int codigo;
private String nombre;
private double precio;
public Producto () { };
public void setCodigo ( int newVar ) {
codigo = newVar;
}
public int getCodigo ( ) {
return codigo;
}
public void setNombre ( String newVar ) {
nombre = newVar;
}
public String getNombre ( ) {
return nombre;
}
public void setPrecio ( double newVar ) {
precio = newVar;
}

4 de 30

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

public double getPrecio ( ) {


return precio;
}

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

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

Ejemplo de Generalizacin:

public class Mamifero {


private int patas;
private int colorPelo;
private String nombre;
public void imprimirPatas() {
System.out.println(nombre + " tiene " + patas + " patas\n");
}

public Mamifero(String nombre, int patas) {


this.nombre = nombre;
this.patas = patas;
}

public class Perro extends Mamifero {


private int ladridos;
public Perro(String nombre) {
super(nombre, 4);
ladridos = 0;
}
}
public class Gato extends Mamifero {
private int maullidos;
public Gato(String nombre) {
super(nombre, 4);
maullidos = 0;
}
}

6 de 30

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

public class Persona {


private String denominacion;
private String direccion;
private int telefono;
public Persona () { };
public void setDenominacion ( String newVar ) {
denominacion = newVar;
}
public String getDenominacion ( ) {
return denominacion;
}
public void setDireccion ( String newVar ) {
direccion = newVar;
}
public String getDireccion ( ) {
return direccion;
}
public void setTelefono ( int newVar ) {
telefono = newVar;
}

7 de 30

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

public int getTelefono ( ) {


return telefono;
}

public class Cliente extends Persona {


private
private
private
private

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

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

}
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.

public abstract class FiguraGeometrica {


. . .
abstract void dibujar();

9 de 30

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

. . .

public class Circulo extends FiguraGeometrica {


. . .
void dibujar() {
// codigo para dibujar Circulo
. . .
}
}
public class Cuadrado extends FiguraGeometrica {
. . .
void dibujar() {
// codigo para dibujar Cuadrado
. . .
}
}

public abstract public class DetalleFactura {


public DetalleFactura () { };
abstract public double getSubtotal(

);

}
public class DetalleFacturaProducto extends DetalleFactura {
private int cantidad;
private Producto producto

10 de 30

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

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;
}

public double getSubtotal( )


{
return producto.getPrecio() * cantidad
}

public class DetalleFacturaServicio extends DetalleFactura {


private double horas;
private Servicio servicio;
public DetalleFacturaServicio () { };
public void setHoras ( double phoras ) {
horas = phoras;
}
public void setServicio(Servicio pservicio){
servicio=pservicio;
}
public Servicio getServicio(){
return servicio;
}
public double getHoras ( ) {
return horas;
}
public double getSubtotal( )
{
return servicio.getValorHora * horas
}
}

Realizacin
Es la relacin entre 2 objetos en donde uno de los objetos es completamente abstracto y
11 de 30

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

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 Dibujable {


public void dibujar(

);

}
public interface Imprimible {
public void imprimir(

);

}
public class rectangulo implements Imprimible, Dibujable

public rectangulo () { };
public void imprimir( )
{
........
}
public void dibujar( )
{
........

12 de 30

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

public interface Descuentos {


public double descuento( double precio )
}
public class DescuentoMayorista implements Descuento

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

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

Veamos detalladamente la especificacin de la asociacin.


Nombre: Nombre de la asociacin.
Clases asociadas: Clases que intervienen en la asociacin
Rol: Cada uno de los extremos de la asociacin.
Multiplicidad: Definen cuantas instancias de la clase 1 se relacionan con la clase 2.
Navegabilidad: Es una propiedad del rol que indica que es posible navegar
unidireccionalmente a travs de la asociacin desde la clase origen a la clase
destino.
Segn la navegabilidad de la asociacin la podemos clasificar en dos grupos:
Unidireccional
Es la relacin que especifica la navegacin en un solo sentido entre las clases
conectadas. La clase hacia donde se dirige la navegacin de la relacin se convierte en
una variable de instancia de la clase que da origen a la relacin.

public class ClaseA {


private int Atributo1;
private ClaseB rol;
public ClaseA () { };
private void setAtributo1 ( int newVar ) {
Atributo1 = newVar;
}
private int getAtributo1 ( ) {
return Atributo1;
}
public void setRol ( ClaseB newVar ) {
rol = newVar;
}
public ClaseB getRol ( ) {
return rol;
}

14 de 30

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi
public void operacion1(
{

Ingeniera Directa v 3.0

}
}
public class ClaseB {
private int Atributo2;
public ClaseB () { };
private void setAtributo2 ( int newVar ) {
Atributo2 = newVar;
}
private int getAtributo2 ( ) {
return Atributo2;
}
public void operacion2( )
{
}

public class Cliente {


private String apellido;
private int documento;
private String direccion;
private int telefono;
private String nombre;
/* Otros atributos
........
*/
public Cliente () { };
public void setApellido ( String newVar ) {
apellido = newVar;
}
public String getApellido ( ) {

15 de 30

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

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
.....
*/
}

Los mtodos setCliente y getClientes se utilizan para asignar o hacer


referencia al objeto Cliente relacionado con la factura.
Bidireccional:
Es una asociacin que implica la navegacin en ambos sentidos entre las clases
conectadas. Corresponde a dos asociaciones unidireccionales en sentidos opuestos.

public class ClaseA {


private int Atributo1;
private ClaseB rol2;
public ClaseA () { };
private void setAtributo1 ( int newVar ) {
Atributo1 = newVar;
}
private int getAtributo1 ( ) {
return Atributo1;

16 de 30

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

}
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

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

No es necesario que un conjunto de elementos se defina siempre de este modo. Tambin


existen otros tipos de datos (colecciones de Java) que permiten trabajar con grupos de
objetos y que realmente representan la cardinalidad indefinida n, pero en su definicin
no ofrecen informacin acerca de los tipos de datos que va a almacenar, por ejemplo:
private Vector rol;
private List rol

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]
......
}

No obstante, como ya vimos, es posible implementar esta relacin con contenedores


del lenguaje Java.
Parta las cardinalidades mnimas no existe representacin directa en el lenguaje Java

public class ClaseA {


private int Atributo1;
public ClaseB rol;
private Vector rol2Vector = new Vector();
public ClaseA () { };
private void setAtributo1 ( int newVar ) {
Atributo1 = newVar;
}
private int getAtributo1 ( ) {
return Atributo1;
}

18 de 30

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

private void addRol2 ( ClaseB new_object ) {


rol2Vector.add(new_object);
}
private void removeRol2 ( ClaseB new_object )
{
rol2Vector.remove(new_object);
}
private List getRol2List ( ) {
return (List) rol2Vector;
}
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(
{
}

Ahora veamos un ejemplo de una asociacin bidireccional con cardinalidad


n.

19 de 30

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

public class Materia {


private Profesor profesor;
public Materia () { };
public void setProfesor ( Profesor newVar ) {
m_profesor = newVar;
}
public Profesor getProfesor ( ) {
return m_profesor;
}
}
public class Profesor {
private Vector materiasVector = new Vector();
public Profesor () { };
public void addMaterias ( Materia new_object ) {
materiasVector.add(new_object);
}
public void removeMaterias ( Materia new_object )
{
materiasVector.remove(new_object);
}
public List getMateriasList ( ) {
return (List) materiasVector;
}
}

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

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

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:

public class Coche {


private Vector partesVector = new Vector();
Public Coche(){
Parte p = new Parte();
partesVector.add(p);
Parte c = new Parte();
partesVector.add(c);
}

public class Pieza {


public Pieza () { };
}

public class Factura {


private Vector detallefactura = new Vector();
public Factura () { };
public void setDetalle( Producto pproducto, int cantidad )
{
DetalleFactura daux = new DetalleFactura();
daux.setProducto(pproducto);
daux.setCantidad(cantidad);
detallefactura.add(daux);
}
}

21 de 30

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

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

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

public class ExpertoFacturacion {


public ExpertoFacturacion ()
{
};
public void facturar(){
Cliente cliente= new Cliente();
Producto producto1 = new Producto();
String fnumero;
String ffecha;
String ftfactura;
.....
ImpresorFiscal impresor = new ImpresorFiscal();
impresor.imprimir(factura);
}
}
public class ImpresorFiscal {
public ImpresorFiscal () { };

public void imprimir( Fiscalizable pobjeto )


{
/* Codigo Imprimir */
}
public void ImpresorFiscal( )
{
}

Ejemplo Facturar
El siguiente ejemplo trata de la implementacin de una versin simplificada
de facturacin.

Diagrama de Clase

23 de 30

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

Cdigo Java
Clase ExpertoFacturacion
package ejemplo;
public class ExpertoFacturacion {

24 de 30

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

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

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

public void setDireccion ( String newVar ) {


direccion = newVar;
}
public String getDireccion ( ) {
return direccion;
}
public void setTelefono ( int newVar ) {
telefono = newVar;
}
public int getTelefono ( ) {
return telefono;
}
public void setNombre ( String newVar ) {
nombre = newVar;
}
public String getNombre ( ) {
return nombre;
}
}

Clase Producto
package ejemplo;
import java.util.*;

public class Producto {


private int codigo;
private String nombre;
private double precio;
public Producto () { };
public void setCodigo ( int newVar ) {
codigo = newVar;
}
public int getCodigo ( ) {
return codigo;
}

26 de 30

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

public void setNombre ( String newVar ) {


nombre = newVar;
}
public String getNombre ( ) {
return nombre;
}
public void setPrecio ( double newVar ) {
precio = newVar;
}
public double getPrecio ( ) {
return precio;
}
}

Clase Fiscalizable
package ejemplo;
public interface Fiscalizable {
public double getTotal(
public int getNumero(

);
);

public String getFecha(


public String getTitular(

);
);

public String getTipoComprobante(

);

Clase Comprobante
package ejemplo;
public abstract class Comprobante implements

Fiscalizable

private int numero;


private String fecha;
public Comprobante () { };
public void setNumero ( int newVar ) {
numero = newVar;
}
public int getNumero ( ) {
return numero;
}

27 de 30

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

public void setFecha ( String newVar ) {


fecha = newVar;
}
public String getFecha ( ) {
return fecha;
}
abstract public double getTotal(

);

abstract public String getTipoComprobante(


abstract public String getTitular(

);

);

Clase Factura
package ejemplo;
import java.util.*;
public class Factura extends Comprobante

private Cliente cliente;


private String tipofactura;
private Vector detallefactura = new Vector();
public Factura () { };
public void setTipofactura ( String newVar ) {
tipofactura = newVar;
}
public String getTipofactura ( ) {
return tipofactura;
}

public double getTotal( )


{
double total=0.0;
for(int i=0; i<detallefactura.size(); i++){
total +=((DetalleFactura) detallefactura.elementAt(i)).getSubtotal();
}
return total;
}
public String getTipoComprobante( )
{
return tipofactura;
}

28 de 30

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi

Ingeniera Directa v 3.0

public String getTitular( )


{
return cliente.getNombre() + ' ' + cliente.getApellido();
}
public void setDetalle( Producto pproducto, int cantidad )
{
DetalleFactura daux = new DetalleFactura();
daux.setProducto(pproducto);
daux.setCantidad(cantidad);
detallefactura.add(daux);
}
public void setCliente( Cliente pcliente )
{
cliente = pcliente;
}
public Cliente getCliente()
{
return cliente;
}
}

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

Diseo de Sistemas 2007-2009. Facultad Regional Mendoza


Ing. Cristian Ghilardi
public Producto getProducto(
{
return producto;
}

Ingeniera Directa v 3.0

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

También podría gustarte