Anda di halaman 1dari 35

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java

DIAGRAMA DE CLASES
Un diagrama de clases sirve para visualizar las relaciones entre las clases que involucran el sistema, las cuales pueden ser asociativas, de herencia, de uso y de contenimiento. Un diagrama de clases esta compuesto por los siguientes elementos: Clase: atributos, mtodos y visibilidad. Relaciones: Herencia, Composicin, Agregacin, Asociacin y Uso.

Elementos Clase Es la unidad bsica que encapsula toda la informacin de un Objeto (un objeto es una instancia de una clase). A travs de ella podemos modelar el entorno en estudio (una Casa, un Auto, una Cuenta Corriente, etc.). En UML, una clase es representada por un rectngulo que posee tres divisiones: Nombre de la Clase Atributos Operaciones

En donde: Superior: Contiene el nombre de la Clase Intermedio: Contiene los atributos (o variables de instancia) que caracterizan a la Clase (pueden ser private, protected o public). Inferior: Contiene los mtodos u operaciones, los cuales son la forma como interacta el objeto con su entorno (dependiendo de la visibilidad: private, protected o public).

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java

La relacin entre clases conocida como Asociacin, permite asociar objetos que colaboran entre si. Cabe destacar que no es una relacin fuerte, es decir, el tiempo de vida de un objeto no depende del otro.

Fundamentos de la Asociacin

Ejemplo de Asociacin unidireccional 1 a 1 navegable desde Persona hacia Domicilio Una persona tiene un domicilio
Especifica la navegacin de la relacin 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. Una persona tiene 1 slo domicilio

clase Persona
public class Persona { // declaracin de los atributos private String nombre; private String apellido; // declaracin de la variable de referencia del tipo Domicilio // gracias a ella podremos navegar hacia la clase Domicilio private Domicilio mDomicilio; // Constructor vaco de la clase public Persona () { } public Persona (String pnombre, String papellido) { nombre= pnombre;

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java apellido = papellido; } public Persona (String pnombre, String papellido, Domicilio pdomi ) { nombre= pnombre; apellido = papellido; mDomicilio= pdomi; } // Declaracin de los mtodos get y set para cada atributo de la clase public String getApellido () { return apellido; } public void setApellido (String val) { this.apellido = val; } public Domicilio getDomicilio () { return mDomicilio; } public void setDomicilio (Domicilio val) { this.mDomicilio = val; } public String getNombre () { return nombre; } public void setNombre (String val) { this.nombre = val; }

clase Domicilio
package aso_unidireccional; public class Domicilio { // declaracin de los atributos private String nombreCalle; private int numero; // Constructor vaco de la clase public Domicilio () { } // Constructor sobrecargado de la clase

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java public Domicilio (String pnombreCalle, int pnumero) { nombreCalle= pnombreCalle; numero=pnumero; } public String getNombreCalle () { return nombreCalle; } public void setNombreCalle (String val) { this.nombreCalle = val; } public int getNumero () { return numero; } public void setNumero (int val) { this.numero = val; }

MAIN
package aso_unidireccional; /** * * @author ACortes */ public class Main { /** * @param args the command line arguments */ public static void main(String[] args) { // PRIMERA ESTRATEGIA // Creo un objeto de tipo persona y utilizo un constructor sobrecargado Persona per1 = new Persona("Rod ","Gonzales"); // Creo un objeto de tipo domiilio usando el constructor vac o Domicilio dom1 = new Domicilio(); // Asigno los valores del domicilio a la varible creada dom1.setNumero(239); dom1.setNombreCalle("Suipacha"); // La variable per1 del tipo Persona y la variable dom1 del tipo DOmicilio // todava NO ESTAN RELACIONADAS con datos (Gonzales no vive todavia en la calle suipacha) // La asignacin del domicilio completo a la varible per1 la ralizaremos // envindo la varible dom1 como parmetro, porque la seteamos previamente con nmero y calle

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java // EN ESTE MOMENTO ESTAMOS RELACIONANDO la variable dom1 a per1 per1.setDomicilio(dom1); // Una vez cargados los contenidos podemos imprimr por consola System.out.println("La siguiente persona "+per1.getNombre()+" "+per1.getApellido()+ " vive en "+per1.getDomicilio().getNombreCalle()+ " " + per1.getDomicilio().getNumero()); // Debemos observar que la NAVEGABILIDAD LA REALIZAMOS DE LA SIGUIENTE FORMA // per1.getDomicilio() esto significa que puedo llegar a la variable referenciada y una vez // ah con er1.getDomicilio().getNombreCalle() obtengo la calle de la variavle per1 // Hagamos el siguiente experimento: Destruyamos referencias esto s elogra haciendo las //variables = null per1 = null; // Con esto perdemos los datos de la variable per1 del tipo Persona pero sigue viva la // variable dom1 de tipo Domicilio. // Veamos como lo podemos verificar, imprimamos las varibles per1 y valores de la variable domicilio // independiente, ya no sabe que la calle suipacha es de la per1. System.out.println("Nombre de la persona "+per1.getNombre()); // Nota para que funcione el programa debe comentar la instruccin de arriba // Nos dar este mensaje de error porque se perdi la referencia a per1 gracias a per1=null // Exception in thread "main" java.lang.NullPointerException // at javaapplication11.Main.main(Main.java:51) // Java Result: 1 // BUILD SUCCESSFUL (total time: 2 seconds) System.out.println("Los datos de la variable domicilio"+ dom1.getNombreCalle()); // Vemos como S se puede imprimir la calle porque estamos llegando a su nombre a travs de dom1 y no de per1 } }

Resultado de la aplicacin unidireccional NEVEGABLE desde Persona a Domicilio


run: La siguiente persona Rod Gonzales vive en Suipacha 239 BUILD SUCCESSFUL (total time: 2 seconds)

CONCLUSIONES SOBRE LA RELACION 1 A 1 NAVEGABLE DESDE LA CLASE PERSONA A DOMICILIO Un aspecto muy importante a tener en cuenta es que debemos realizar el modelado y el proceso abstraccin los ms aproximado a la realidad posible. Esto quiere decir que una persona S o S vive en un domicilio, esto lo podemos demostrar en el ejercicio visto si en vez de

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java

hacer per1= null, hubiramos hecho dom1=null, realizando esta segunda accin llevara a la destruccin del objeto de tipo Domicilio y esto llevara a advertir que la Persona en cuestin no tienen domicilio asignado. Por eso cuando modelamos es muy importante advertir la relacin fuerte que existe entre alguna clases, en este caso particular de la relacin entre la persona y el domicilio a mi criterio lo ms acertado es usar otro tipo de relacin que se llama composicin. Composicin significa que la vida de una variable depende de la otra y lo observamos en el ejemplo que si destruyo la variable de tipo persona, todava puedo mostrar datos del domicilio aunque no est relacionado con la persona en cuestin. Vuelvo a insistir lo ms acorde hubiese sido representar la relacin entre la clase persona y domicilio a travs de una COMPOSICION, esto quiere decir que si se destruye el objeto persona con null, automticamente se destruye el objeto asociado a esa variable del tipo domicilio. Y para que esto suceda e hay un proceso previo que debe entenderse en la composicin y es que en la clase asociada o compuesta debe tener dentro de su mtodo constructor la creacin de la clase componente a travs de la sentencia new(). Lo veremos en el siguiente ejemplo. Fundamentos de la COMPOSICION

Ejemplo de Asociacin unidireccional COMPOSICION de 1 a 1 navegable desde Persona hacia Domicilio Una persona esta compuesta de un domicilio
Veremos un ejemplo similar al ejercicio anterior pero con la variante de representarlo a travs de la asociacin de Composicin. Se reprenda en UMl con un rombo relleno en el objeto compuesto

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java

CLASE PERSONA
package javaapplication11; public class Persona { // declaracin de los atributos private String nombre; private String apellido; // declaracin de la variable de referencia del tipo Domicilio // gracias a ella podremos navegar hacia la clase Domicilio private Domicilio mDomicilio; // Constructor vaco de la clase public Persona () { System.out.println("Pas por el constructor de persona y desde aqu cre un domicilio relacionado"); mDomicilio = new Domicilio(); } public Persona (String pnombre, String papellido) { System.out.println("Pas por el constructor de persona y desde aqu cre un domicilio relacionado"); nombre= pnombre; apellido = papellido; mDomicilio = new Domicilio(); }

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java public Persona (String pnombre, String papellido, Domicilio pdomi ) { System.out.println("Pas por el constructor de persona y desde aqu cre un domicilio relacionado"); nombre= pnombre; apellido = papellido; mDomicilio= pdomi; } // Declaracin de los mtodos get y set para cada atributo de la clase public String getApellido () { return apellido; } public void setApellido (String val) { this.apellido = val; } public Domicilio getDomicilio () { return mDomicilio; } public void setDomicilio (Domicilio val) { this.mDomicilio = val; } public String getNombre () { return nombre; } public void setNombre (String val) { this.nombre = val; }

DOMICILIO
package javaapplication11;

public class Domicilio { // declaracin de los atributos private String nombreCalle; private int numero; // Constructor vaco de la clase public Domicilio () { }
Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java

// Constructor sobrecargado de la clase public Domicilio (String pnombreCalle, int pnumero) { nombreCalle= pnombreCalle; numero=pnumero; } public String getNombreCalle () { return nombreCalle; } public void setNombreCalle (String val) { this.nombreCalle = val; } public int getNumero () { return numero; } public void setNumero (int val) { this.numero = val; }

MAIN
package javaapplication11; /** * * @author Administrador */ public class Main { /** * @param args the command line arguments */ public static void main(String[] args) { // PRIMERA ESTRATEGIA // Creo un objeto de tipo persona y utilizo un constructor sobrecargado, automticamente se cre // un objeto del tipo domicilio Persona per1 = new Persona("Rod ","Gonzales"); // El new del constructor del objeto domicilio se realiz dentro del costructor de la clase Persona. // Como ya se creo un espacio de memoria que representa al domicilio de la variable per1 // puedo invocando al objeto per1, luego al mtodo que me referencia a la variable domicilio // y luego utilizando el correspondiente mtodo set asignar los datos al domicilio. // Debemos observar que la NAVEGABILIDAD LA REALIZAMOS DE LA SIGUIENTE FORMA // per1.getDomicilio() esto significa que puedo llegar a la variable referenciada y una vez // ah con per1.getDomicilio().setNombreCalle() para setear los datos del domicilio de la variable per1 per1.getDomicilio().setNumero(239); per1.getDomicilio().setNombreCalle("Suipacha");

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java

// La variable de tipo Persona ya tiene todos los datos almacenado // Una vez cargados los contenidos podemos imprimr por consola System.out.println("La siguiente persona "+per1.getNombre()+" "+per1.getApellido()+ " vive en "+per1.getDomicilio().getNombreCalle()+ " " + per1.getDomicilio().getNumero()); // Debemos observar que la NAVEGABILIDAD LA REALIZAMOS DE LA SIGUIENTE FORMA // per1.getDomicilio() esto significa que puedo llegar a la variable referenciada y una vez // ah con er1.getDomicilio().getNombreCalle() obtengo la calle de la variavle per1 // Hagamos el siguiente experimento: Destruyamos referencias esto se logra haciendo las variables = null per1 = null; // Con esto perdemos los datos de la variable per1 del tipo Persona y en consecuencia MUERA LA // variable REFERENCIA DE de tipo Domicilio. // Veamos como lo podemos verificar, imprimamos las varibles per1 y valores de la variable domicilio // COMO DESTRUIMOS LA VARIABLE COMPUESTA DESTRUIMOS TODOS LOS COMPONENTES // Intentemos imprimir a travs de per1 los datos del domicilio // Aqu es totalmente distinto al ejercicio anterior que exist por sus propos medios una variable del tipo domicilio System.out.println("Los datos de la variable domicilio"+ per1.getDomicilio().getNombreCalle()); // PARA QUE FUNCIONE EL PROGRAMA COMENTE LA INSTRUCCION ANTERIOR // run: // Pas por el constructor de persona y desde aqu cre un domicilio relacionado // La siguiente persona Rod Gonzales vive en Suipacha 239 // Exception in thread "main" java.lang.NullPointerException // at javaapplication11.Main.main(Main.java:54) // Java Result: 1 } }

Fundamentos de la Agregacin
Relacin de Agregacin: (TODO/PARTE)
Es un tipo de relacin dinmica, en donde el tiempo de vida del objeto incluido es independiente del que lo incluye. Ac debemos tener en cuenta que ambas variables pueden existir por s misma. Veremos que la destruccin de la variable de tipo computadora no interfiere en la vida en memoria de una varible de tipo MODEM. La agregacin la representamos a travs de un mtodo que tiene la clase computadora llamado AgregarModem que recibe en sus parmetros un objeto de tipo MODEM.

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java

Ejemplo de Agregacin unidireccional de 1 a 1 navegable desde Computadora hacia Modem Un modem es parte de una computadora
Se representa en UMl con un rombo sin relleno en el objeto que agrega

clase Computadora
package aso_agregacion; public class Computadora { // Declaracin de atributos private String modelo; private String tipo; // declaracin de la variable que relaciona a la Clase modem private Modem mModem; // Construntor vaco public Computadora () { } public Computadora (String pmodelo,String ptipo) { modelo = pmodelo; tipo = ptipo;

// Mtodo que pasa como parmetro un objeto modem cuando se lo quiere agregar public void AgregarModemAlaComputadora (Modem unmodem) {

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java mModem= unmodem; } // Declaracin de los mtodos set y get de los atributos public Modem getModem () { return mModem; } public void setModem (Modem val) { this.mModem = val; } public String getModelo () { return modelo; } public void setModelo (String val) { this.modelo = val; } public String getTipo () { return tipo; } public void setTipo (String val) { this.tipo = val; } }

Clase Modem
package aso_agregacion; public class Modem { private String marca; public Modem () { } public Modem (String pmarca) { marca = pmarca; } public String getMarca () { return marca; } public void setMarca (String val) { this.marca = val; } }

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java

MAIN
package aso_agregacion; /** * * @author ACortes public static void main(String[] args) { // Creo un objeto independiente del Tipo Modem llamado modem1 Modem modem1 = new Modem("Motorola"); // Creo un objeto independiente del Tipo Computadora llamado compu1 Computadora compu1 = new Computadora("HP TX1030LA","Notebook"); // Hasta ahora los objetos no s econocen entre s // Le paso como parmetros el objeto modem1 al metodo correspondiente de la Clase computadora compu1.AgregarModemAlaComputadora(modem1);// aqu se plantea la asociacion // Accedo a mostrar los datos de la variable compu1 a travs de los mtodos // puedo llegar a conocer la marca del modem porque lo agregu pasndolo como parmetro System.out.println("Computadora: " + compu1.getModelo() + "TIPO: " + compu1.getTipo()); // vemos como puedo acceder a conocer la marca del modem d ela computadora porque se plante la asocicin previamente System.out.println("MODEM: " + compu1.getModem().getMarca()); // si destuimos la variable computadora perdemos la referncia a la marca // del modem que tiene esta computadora , pero los modem siguen exisiendo en forma independiente compu1=null; // observemos como accedemos a la variable de tipo modem a traves de su propia variable System.out.println("la compu no existe ms slo existen los modem " + modem1.getMarca() ); } }

Resultado de la aplicacin Agregacion entre la computadora y el modem


run: Computadora: HP TX1030LATIPO: Notebook MODEM: Motorola la compu no existe ms slo existen los modem Motorola BUILD SUCCESSFUL (total time: 0 seconds)

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java

Otro Ejemplo de Asociacin unidireccional COMPOSICION de 1 a 1 navegable desde Auto hacia Motor Un auto est compuesto de un motor Vemos que es una relacin de Composicin ya que un auto sin motor no funciona!!! Ahora una computadora sin MODEM puede funcionar tranquilamente!!!
Es un tipo de relacin esttica, en donde el tiempo de vida del objeto incluido esta condicionado por el tiempo de vida del que lo incluye (el Objeto base se construye a partir del objeto incluido, es decir, es "parte/todo").

Clase Auto
package aso_composicion; public class Auto { // Declaracion de atributos private String marca; private String patente; // Declaracion de la variable que hace referencia a otra clase private Motor mMotor; // Declaracion del constructor vacio // Dentro de este constructor se debe CREAR EL OBJETO REFENCIADO. // el objeto de referencia se crea en el mismo momento que se // CREA el objeto compuesto public Auto () { // creo el objeto componente Motor motor = new Motor(); // Le asigno los valores a travs de los mtodos set del motor

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java

} public Auto (String pmarca,String ppatente) { // creo el objeto componente marca = pmarca; patente = ppatente; mMotor = new Motor(); // Le asigno los valores a travs de los mtodos set del motor } public Auto (String pmarca,String ppatente,String pcilindrada,String pcarburador,String pbujias) { // creo el objeto componente marca = pmarca; patente = ppatente; mMotor = new Motor(pcilindrada,pcarburador,pbujias); // Le asigno los valores a travs de los mtodos set del motor } public Motor getMotor () { return mMotor; } public void setMotor (Motor val) { this.mMotor = val; } public String getMarca () { return marca; } public void setMarca (String val) { this.marca = val; } public String getPatente () { return patente; } public void setPatente (String val) { this.patente = val; } }

Clase Motor

package aso_composicion; public class Motor { private String cilindrada; private String carburador;

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java

private String bujias; public Motor () { } public Motor (String pcilindrada,String pcarburador,String pbujias) { cilindrada = pcilindrada; carburador = pcarburador; bujias = pbujias; } public String getBujias () { return bujias; } public void setBujias (String val) { this.bujias = val; } public String getCarburador () { return carburador; } public void setCarburador (String val) { this.carburador = val; } public String getCilindrada () { return cilindrada; } public void setCilindrada (String val) { this.cilindrada = val; } }

MAIN

/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package aso_composicion; /** * * @author ACortes */ public class Main { /** * @param args the command line arguments */ public static void main(String[] args) { // ###### ESTRATEGIA NRO 1 // Creo un objeto del Tipo Auto y como en el constructor del mismo

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java // est la construccion del motor se crea tambin el motor en la misma accin Auto auto1 = new Auto("RENAULT", "CRQ656");// creo tambien la variable de tipo Motor // Le asigno los valores a los atributos de auto1 // Ac vemos como gracias a la referencia puedo a travs d eauto cargar los datos del motor para ese auto auto1.getMotor().setCilindrada("1.6 cm3"); auto1.getMotor().setCarburador("SOLEX 32 P DIS"); auto1.getMotor().setBujias("fg 455"); // Accedo a los datos a travs del objeto auto1 y como hice una //referencia puedo acceder // a la clase motor System.out.println("Auto: " + auto1.getMarca() + " PATENTE: " + auto1.getPatente()); System.out.println("MOTOR DEL AUTO: " + " CARBURADOR: " + auto1.getMotor().getCarburador() + " CILINDRADA: " + auto1.getMotor().getCilindrada() + " BUJIAS: " + auto1.getMotor().getBujias()); // ##### NUEVA ESTRATEGIA NRO 2 // Preferimos crear un objeto deL tipo auto y pasAr todos sus datos por parmetros // As vemos un cdigo disciplinado y ordenado (Ms compacto) que la Estrategia 1 Auto auto2 = new Auto("BMW", "MDZ", "2.2 cm3", "SOLEX 420 P BM", "fg 45"); System.out.println("Auto: " + auto2.getMarca() + " PATENTE: " + auto2.getPatente()); System.out.println("MOTOR DEL AUTO: " + " CARBURADOR: " + auto2.getMotor().getCarburador() + " CILINDRADA: " + auto2.getMotor().getCilindrada() + " BUJIAS: " + auto2.getMotor().getBujias()); } }

Resultado de la aplicacin Composicin de la Clase Auto y Motor


run: Auto: RENAULT PATENTE: CRQ656 MOTOR DEL AUTO: CARBURADOR: SOLEX 32 P DIS CILINDRADA: 1.6 cm3 BUJIAS: fg 455 Auto: BMW PATENTE: MDZ MOTOR DEL AUTO: CARBURADOR: SOLEX 420 P BM CILINDRADA: 2.2 cm3 BUJIAS: fg 45 BUILD SUCCESSFUL (total time: 0 seconds)

Asociacin Bidireccional:
Implica la navegacin en ambos sentidos entre las clases. Supongamos el caso de un modelo del Sistema Bancario un gerente quiere acceder desde una informacin de Persona a la cuenta que tiene asociada, pero tambin si desea desde una cuenta conocer la persona que es titular tambin lo pueda hacer.

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java Esto significa que ambas clases deben referenciarse, esto quiere decir que por ejemplo la clase Persona debe tener un tipo de dato de la clase cuenta como un atributo , para que desde all se pueda acceder a la cuenta de la persona. Por el otro lado en la clase Cuenta debe existir como atributo de la misma un tipo de dato de la clase Persona para que desde all pueda accederse a los datos de un cliente conociendo su cuenta.

clase Persona

package relaciones; public class Persona { private int dni; private String nombre; private String apellido;

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java private Cuenta mCuenta; public Persona () { } public Persona (int pdni,String pnombre,String papellido) { dni=pdni; nombre=pnombre; apellido=papellido; } public Persona (int pdni,String pnombre,String papellido, int pid, String ptipo,double pbalance) { dni=pdni; nombre=pnombre; apellido=papellido; mCuenta= new Cuenta(pid,ptipo,pbalance); } public String getApellido () { return apellido; } public void setApellido (String val) { this.apellido = val; } public int getDni () { return dni; } public void setDni (int val) { this.dni = val; } public Cuenta getCuenta () { return mCuenta; } public void setCuenta (Cuenta val) { this.mCuenta = val; } public String getNombre () { return nombre; } public void setNombre (String val) { this.nombre = val; } }

Clase Cuenta
package relaciones; public class Cuenta {

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java private int id; private String tipo; private double balance; private Persona mPersona; public Cuenta () { } public Cuenta (int pid, String ptipo,double pbalance) { id=pid; tipo=ptipo; balance=pbalance; } public double getBalance () { return balance; } public void setBalance (double val) { this.balance = val; } public int getId () { return id; } public void setId (int val) { this.id = val; } public Persona getPersona () { return mPersona; } public void setPersona (Persona val) { this.mPersona = val; } public String getTipo () { return tipo; } public void setTipo (String val) { this.tipo = val; } }

MAIN
package relaciones; public class Main { /**

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java * @param args the command line arguments */ public static void main(String[] args) { // Una persona quiere abrir una cuenta en un banco (Se crear su lejago y su cuenta simultneamente) // Deber proveer toda su informacin personal y el tipo de cuenta y el saldo inicial Persona per1 = new Persona(17456879,"Juan","Perez"); Cuenta cue1 = new Cuenta(2345,"CA",3456); per1.setCuenta(cue1);// asocio la cuenta a la persona cue1.setPersona(per1);// asocio la persona a la cuenta System.out.println("Cliente: " + per1.getApellido() + " DNI: " + per1.getDni()); System.out.println("Nro de Cuenta : " + per1.getCuenta().getId() + " Balance: " + per1.getCuenta().getBalance());

System.out.println("----------------------------------"); System.out.println("Cuenta: " + cue1.getId() + " Tipo: " + cue1.getTipo()); System.out.println("Pertenece a : " + cue1.getPersona().getApellido()); } }

RESULTADO DE LA APLICACIN: Relaciones Bidireccionales. Accediendo desde la clase Persona a su cuenta. Y conocida una cuenta saber a quen pertenece run: Cliente: Perez DNI: 17456879 Nro de Cuenta : 2345 Balance: 3456.0 ---------------------------------Cuenta: 2345 Tipo: CA Pertenece a : Perez BUILD SUCCESSFUL (total time: 0 seconds)

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java

Ejemplo de Asociacin navegable en una direccin 1 a * (Muchos) Utilizando ArrayList En este caso determinamos que una persona puede tener varios autos, no conocemos la cantidad fija por eso lo representamos con una estructura dinmica llamada Arraylist. Es un contenedor de datos

Clase Auto
public class Auto { private String marca; private String patente; public Auto () { } public Auto ( String pmarca,String ppatente ) { marca = pmarca; patente = ppatente; } public String getMarca () { return marca; } public void setMarca (String val) {

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java this.marca = val; } public String getPatente () { return patente; } public void setPatente (String val) { this.patente = val; } }

Clase Persona
import java.util.ArrayList; public class Persona { // Declaro los atributos private String nombre; private String apellido; // Declaro la variable de refeerncia del tipo contenedor dinmico que la vincula con // la Clase Auto. private ArrayList<Auto> mAuto; // Constructor vacio public Persona () { // Creo el contenedor de autos para una persona determinada mAuto= new ArrayList<Auto>(); } // Constructor vacio public Persona (String pnombre, String papellido) { nombre = pnombre; apellido = papellido; // Creo el contenedor de autos para una persona determinada mAuto= new ArrayList<Auto>(); } // Agregar un auto a una persona // Utilizando el mtodo ADD de la clase ArrayList de las colecciones public void AgregarUnAuto(Auto auto){ mAuto.add(auto); } // Declaracion de los mtodos set y get de los atributos public String getApellido () { return apellido; } public void setApellido (String val) { this.apellido = val; } public ArrayList<Auto> getAuto () {

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java return mAuto; } public void setAuto (ArrayList<Auto> val) { this.mAuto = val; } public String getNombre () { return nombre; } public void setNombre (String val) { this.nombre = val; } }

MAIN
public class Main { /** * @param args the command line arguments */ public static void main(String[] args) { // Creo una variable del tipo Persona llamada p Persona p = new Persona("PEREZ","JUAN"); // Asigno el nombre y el appelido d ela persona creada // creo en Auto auto1 Auto auto2 Auto auto3 forma = new = new = new independiente 3 autos Auto("FORD","CRQ234"); Auto("RENAULT","FGH456"); Auto("CHEVROLET","UYT498");

// Agrego al contenedor ArrayList correspondiente de la clase persona, // pasndole como parmetros al mtodo los autos creados, para asocialos con la persona p.AgregarUnAuto(auto1); p.AgregarUnAuto(auto2); p.AgregarUnAuto(auto3); // System.out.println("NOMBRE COMPLETO: " + p.getNombre() + " " + p.getApellido()); // Ac vemos como funciona la navegabilidad, llegamos a travs del objeto persona a su contenedor a travs // de la variable y luego dentro del contenedor accedemos a la posicin determinada por el subindice y desde ah // al atributo deseado, patente, marca, etc System.out.println("AUTO1: " + p.getAuto().get(0).getMarca() + " " + p.getAuto().get(0).getPatente()); System.out.println("AUTO2: " + p.getAuto().get(1).getMarca() + " " + p.getAuto().get(1).getPatente()); System.out.println("AUTO3: " + p.getAuto().get(2).getMarca() + " " + p.getAuto().get(2).getPatente()); }

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java }

Resultado de la aplicacin relacin 1 a muchos con ArrayList


run: NOMBRE COMPLETO: PEREZ JUAN AUTO1: FORD CRQ234 AUTO2: RENAULT FGH456 AUTO3: CHEVROLET UYT498 BUILD SUCCESSFUL (total time: 0 seconds)

Ejemplo de Asociacin 1 a * Utilizando el contenedor Vector Un profesor dicta varias ctedras

Cdigo Fuente de la Clase Profesor


package unoamuchos2; import java.util.Vector; public class Profesor { private String nombre; // Declaracion de la variable de contenedor de referencia del Tipo Vector private Vector<Catedras> mCatedras; // Constructor vaco public Profesor () { // Creacin del contenedor Vector en el momento de la cracion del profesor mCatedras = new Vector<Catedras>(); } // Mtodo agregar Materias al profesor, recibe las ctedras por parmetros // utiliza el mtodo ADD de la coleccin para agregar al objeto profesor public void AgregarMateriasAlProfesor(Catedras catedra){ mCatedras.add(catedra);

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java } public Vector<Catedras> getCatedras () { return mCatedras; } public void setCatedras (Vector<Catedras> val) { this.mCatedras = val; } public String getNombre () { return nombre; } public void setNombre (String val) { this.nombre = val; } }

Clase Catedras
package unoamuchos2; public class Catedras { private String nombre; private int anio; public Catedras () { } public int getAnio () { return anio; } public void setAnio (int val) { this.anio = val; } public String getNombre () { return nombre; } public void setNombre (String val) { this.nombre = val; } }

MAIN

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java

/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package unoamuchos2; /** * * @author ACortes */ public class Main { /** * @param args the command line arguments */ public static void main(String[] args) { // Creo un objeto del tipo profesor Profesor profe = new Profesor(); // Asignamos su nombre profe .setNombre("Facundo Cortez"); // Creamos materias de nuestro plan de estudio y les asignamos el nombre y anio Catedras c = new Catedras(); c.setNombre("PROGRAMACION"); c.setAnio(2); Catedras c2 = new Catedras(); c2.setNombre("PROGRAMACION II"); c2.setAnio(2); Catedras c3 = new Catedras(); c3.setNombre("PROGRAMACION III"); c3.setAnio(3); Catedras c4 = new Catedras(); c4.setNombre("LABORATORIO II"); c4.setAnio(2); Catedras c5 = new Catedras(); c5.setNombre("LABORATORIO III"); c5.setAnio(3); // Asignamos las ctedras al profesor creado // vemos que slamente 2 profe .AgregarMateriasAlProfesor(c); profe .AgregarMateriasAlProfesor(c5); // Muestro por pantalla las ctedras que ses profe dicta // Utilizamos la nueva instruccion FOR que recorre secuencialmente la coleccin System.out.println("NOMBRE PROFESOR: " + profe.getNombre()); for(Catedras catedra : profe.getCatedras()){ System.out.println("Catedras que Dicta: " + catedra.getNombre() + " AO: " + catedra.getAnio()); }

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java } }

Resultado de la aplicacin relacin 1 a muchos con Vector


run: NOMBRE PROFESOR: Facundo Perez Catedras que Dicta: PROGRAMACION AO: 2 Catedras que Dicta: LABORATORIO III AO: 3 BUILD SUCCESSFUL (total time: 0 seconds)

Ejemplo de Asociacin 1 a * Utilizando el contenedor ArrayList Un Alumno cursa varias materias

CLASE ALUMNO package optimizacion; import java.util.ArrayList; public class Alumno {

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java

private int legajo; private String nombre; private String apellido; private ArrayList<Materias> mMaterias; public Alumno () { // Se debe crear un contenedor de materias // para cada alumno // esto es una composicin para el alumno mMaterias = new ArrayList<Materias>(); } // COnstructor sobrecargadp para evitar el uso de set public Alumno(int plegajo, String pnombre, String papellido) { mMaterias = new ArrayList<Materias>(); legajo = plegajo; nombre = pnombre; apellido = papellido; } public void setMateriasCursa (Materias val) { mMaterias .add(val); } public String getApellido () { return apellido; } public void setApellido (String val) { this.apellido = val; } public int getLegajo () { return legajo; } public void setLegajo (int val) { this.legajo = val; } public ArrayList<Materias> getMaterias () { return mMaterias; } public void setMaterias (ArrayList<Materias> val) { this.mMaterias = val; } public String getNombre () { return nombre; }

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java public void setNombre (String val) { this.nombre = val; }

}
CLASE MATERIAS package optimizacion; public class Materias { private int id; private String nombre; private int horasCursado; // Constructor vaco public Materias () { } // COnstructor sobrecargado public Materias(int pid, String pnombre, Integer phorasCursado){ id = pid; nombre = pnombre; horasCursado = phorasCursado; } public int getId () { return id; } public void setId (int val) { this.id = val; } public String getNombre () { return nombre; } public void setNombre (String val) { this.nombre = val; } /** * @return the horasCursado */ public int getHorasCursado() { return horasCursado; } /** * @param horasCursado the horasCursado to set */ public void setHorasCursado(int horasCursado) {

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java this.horasCursado = horasCursado; } }

Resultado de la aplicacin relacin 1 a muchos con ARRAYLIST


run: NOMBRE ALUMNO: Alberto MATERIA 1: Diagramacion Logica HORAS :4 MATERIA 2: Programacion I HORAS :5 MATERIA 3: Sistemas I HORAS :3 ---------------------NOMBRE ALUMNO: juan MATERIA 1: Diagramacion Logica HORAS :4 MATERIA 2: Programacion I HORAS :5 ---------------------NOMBRE ALUMNO: Jos MATERIA Diagramacion Logica HORAS :4 MATERIA Sistemas I HORAS :3 BUILD SUCCESSFUL (total time: 2 seconds)

Relacin de Herencia:
Indica que una subclase hereda los mtodos y atributos especificados por una Super Clase, por ende la Subclase adems de poseer sus propios mtodos y atributos, poseer las caractersticas y atributos visibles de la Super Clase (public y protected). La forma de implementar esta relacin es acompaar a la cabecera de la definicin de la subclase con la palabra extends.

FUNDAMENTOS - Relacin de Herencia: Ejemplo de la creacin de los constructores.

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java

Clase Abuelo
package herencia1; public class Abuelo { public Abuelo () { System.out.println("Se crea un abuelo"); } }

Clase Padre
package herencia1; public class Padre extends Abuelo { public Padre () { System.out.println("Se crea un padre"); } }

Clase Hijo
package herencia1; public class Hijo extends Padre { public Hijo () { System.out.println("Se crea un hijo"); } }

Resultado de la aplicacin de Herencia de constructores


Se crea un abuelo Se crea un padre Se crea un hijo

Ejemplo de HERENCIA ENTRE 2 CLASES Un PROFESOR ES PERSONA

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java

Clase Persona

package herencia; public class Persona { private String Nombre; private String apellido; private long dni; public Persona () { } public String getNombre () { return Nombre; }

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java

public void setNombre (String val) { this.Nombre = val; } public String getApellido () { return apellido; } public void setApellido (String val) { this.apellido = val; } public long getDni () { return dni; } public void setDni (long val) { this.dni = val; } }

Clase Profesor
package herencia; public class Profesor extends Persona { private int legajo; public Profesor () { } public int getLegajo () { return legajo; } public void setLegajo (int val) { this.legajo = val; } }

MAIN
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package herencia; /** * * @author ACortes */

Cortez Alberto

Programacion II -Ingeniera Directa Diagrama de Clases Aplicacin en Java public class Main { /** * @param args the command line arguments */ public static void main(String[] args) { // Creo un objeto del Tipo profesor y como se produce la herencia de una clase Persona // primero se activa el constructor de persona crendome las variables correspondientes a dicha Clase // es por eso que creando un objeto profesor podemos acceder // a los atributos y mtodos de la clase Persona. // recordemos que los atributos de la superclase los podemos declarar como protected Profesor profe = new Profesor(); // Accedo a los mtodos que heredarn de persona todos los objetos del tipo Profesor profe.setApellido("Cortez"); profe.setNombre("GOnzalo"); profe.setDni(29112619); // Solamente este mtodo lo especifico de profesor profe.setLegajo(233988); // Impimo el legajo correspondiente System.out.println("Profesor: Apellido: " + profe.getApellido() + " Nombre: " + profe.getNombre() + " DNI: " + profe.getDni() + " LEGAJO: " + profe.getLegajo()); } }

Resultado de la aplicacin de Herencia


Profesor: Apellido: Cortez Nombre: GOnzalo DNI: 29112619 LEGAJO: 233988

Cortez Alberto

Anda mungkin juga menyukai