Tecnicas De Programacion: Relaciones Entre Clases

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote RELACIONES ENTRE CLASES Un conjunto de objetos a

Views 67 Downloads 0 File size 391KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote

RELACIONES ENTRE CLASES

Un conjunto de objetos aislados tiene escasa capacidad de resolver un problema. En una aplicación útil los objetos colaboran e intercambian información, mantienen distintos tipos de relaciones entre ellos. A nivel de diseño podemos distinguir entre 5 tipos de relaciones básicas entre clases de objetos: dependencia, asociación, agregación, composición y herencia. La dependencia es la relación menos importante, simplemente refleja que entre dos clases de objetos existe una posible colaboración temporal con algún propósito. Una dependencia puede indicar la utilización de un objeto de una clase como argumento de una operación o en su implementación.

Docente: Ing. Martín Salcedo Quiñones

Pagina: 1

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote En cambio, la asociación es la relación más importante y más común. Refleja una relación entre dos clases independientes que se mantiene durante la vidade los objetos de dichas clases o al menos durante un tiempo prolongado. En UML suele indicarse el nombre de la relación, el sentido de dicha relación y las cardinalidades en los dos extremos. Veamos el siguiente diagrama de clases:

Diagrama de clases Nº 1

Se observa la clase Pedido que tiene como atributos a numero (de tipo entero), fecha (de tipo cadena) y cliente (de tipo cadena). Tiene como operaciones o métodos a Pedido(), adicionarDetalle(), obtenerDetalle() y calcularTotalPedido(). La segunda clase llamada DetallePedido tiene como atributos a cantidad (de tipo entero) y precio (de tipo flotante), como único método tiene a DetallePedido(). Existe una relación entre la clase de Pedido y DetallePedido que consiste que cada Pedido debe estar compuesto de uno a muchos Detalle de Pedidos. Veamos otro diagrama de clases:

Docente: Ing. Martín Salcedo Quiñones

Pagina: 2

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote

Diagrama de clases Nº 2

Se observa la clase Almacen que tiene como único atributo nombre (de tipo cadena) y sus métodos son: Almacen(), adiconarProducto(), obtenerProducto(), adicionarEmpleado() y obtenerEmpleado(). La segunda clase llamada Producto tiene como atributos a nombre (de tipo cadena), stock (de tipo entero) y precio (de tipo flotante) y como único método Producto(). Existe una relación entre la clase mAlmacen y la clase Producto que consiste que cada Almacen puede tener uno o muchos productos. Una asociación se implementa en Java introduciendo referencias a objetos de la clase destino de la relación como atributos de la clase origen. Si la relación tiene una cardinalidad superior a uno entonces será necesario utilizar un arreglo o una estructura de datos. Normalmente la conexión entre los objetos se realiza recibiendo la referencia de uno de ellos en el constructor u otro operación similar del otro. Veamos el siguiente código escrito en Java:

Docente: Ing. Martín Salcedo Quiñones

Pagina: 3

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote

1

2

3

4

Se tiene la clase Cliente con los atributos nombre, apellidos, direccion, localidad y fNacimiento (ver en la llave correpondiente a 1). Tenemos como métodos a Cliente(), nombreCompleto() y direccionCompleta() (ver en 2). Se tiene la clase Cuenta que tiene como atributos a numero, titular (de tipo Cliente – ver flecha anaranjada), saldo e interesAnual (ver en la llave correpondiente a 3) . Como métodos tiene a Cuenta y a leerTitular() (ver en 4). La mayor novedad en este ejemplo es que la Clase Cuenta tiene un atributo llamado titular que es de tipo Cliente, es decir, que este atributo titular es un objeto de la Clase Cliente y por lo

Docente: Ing. Martín Salcedo Quiñones

Pagina: 4

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote tanto contiene a su vez a los atributos de Cliente y con la posibilidad de usar sus métodos. PROGRAMAS RESUELTOS 1) Crear la clase Facultad con los atributos codigofac y nombre y luego la clase EscuelaPropfesional con los atributos codigoesc, nombre, facultad. Luego procede a ingresar los datos de dos escuelas profesionales. import java.io.*; class Facultad { String codigofac; String nombre; public Facultad(String cod, String nom) { codigofac=cod; nombre=nom; } } class EscuelaProfesional { String codigoesc; String nombre; Facultad facultad; public EscuelaProfesional(String cod, String nom, Facultad f) { codigoesc=cod; nombre=nom; facultad=f; }

Docente: Ing. Martín Salcedo Quiñones

Pagina: 5

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote

public String toString() { return "La escuela profesional "+nombre+" pertenece a la facultad de "+facultad.nombre; } } public class RelacionClases01 { public static void main(String[] args)throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String codesc, nomesc, codfac, nomfac; int i; System.out.println("DATOS DE LA PRIMERA ESCUELA PROFESIONAL"); System.out.print("Ingrese el codigo de la escuela profesional : "); codesc=br.readLine(); System.out.print("Ingrese el nombre de la escuela profesional : "); nomesc=br.readLine(); System.out.print("Ingrese el codigo de facultad : "); codfac=br.readLine(); System.out.print("Ingrese el nombre de facultad : "); nomfac=br.readLine(); Facultad F1=new Facultad(codfac,nomfac); EscuelaProfesional EP1=new EscuelaProfesional(codesc,nomesc,F1); System.out.println(""); System.out.println("DATOS DE LA SEGUNDA ESCUELA PROFESIONAL"); System.out.print("Ingrese el codigo de la escuela profesional : "); codesc=br.readLine(); System.out.print("Ingrese el nombre de la escuela profesional : "); nomesc=br.readLine(); System.out.print("Ingrese el codigo de facultad : "); codfac=br.readLine(); System.out.print("Ingrese el nombre de facultad : "); nomfac=br.readLine(); Facultad F2=new Facultad(codfac,nomfac);

Docente: Ing. Martín Salcedo Quiñones

Pagina: 6

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote EscuelaProfesional EP2=new EscuelaProfesional(codesc,nomesc,F2); System.out.println(""); System.out.println(EP1); System.out.println(EP2); } } 2) Tomando el diagrama de clases Nº 2 proceder a ingresar datos de productos. Hacer uso de arreglos o vectores. Crear un archivo Almacen.java y colocar el siguiente código: public class Almacen { //Atributos propios de la clase private String nombre; //Atributos resultado de la relacion con la clase Producto private int nproductos; private Producto[] productos; public Almacen(String nom) { nombre=nom; //Creacion del arreglo de objetos producto nproductos = 0; productos = new Producto[100]; } public String adicionarProducto(Producto prod) { //Variable que nos mostrará si realmente se registró el producto String rpta; //Consulta si el arreglo tiene menos de 100 items if (nproductos < 100) { //Si tiene menos de 100 items lo agrega al arreglo productos[nproductos] = prod;

Docente: Ing. Martín Salcedo Quiñones

Pagina: 7

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote //Incremente la cantidad de elementos que tiene el arreglo nproductos++; //Un mensaje diciendo que se registro el producto rpta = "Se registro el producto"; } else { //Un mensaje diciendo que no se pudo registrar rpta = "No se registro el producto"; } return rpta; } public Producto obtenerProducto(int indice) { //El indice tiene que ser menor a la cantidad de elementos que tenemos en el arreglo

if (indice < 0 || indice >= nproductos) { //Si el indice esta fuera del rango return null; } else { //Retorma el elemento en la posicion que deseamos return productos[indice]; } } public int getNproductos() { return nproductos; } public String getNombre() { return nombre; } } Crear un archivo Producto.java y colocar el siguiente código: public class Producto { //Atributos de la clase private String nombre;

Docente: Ing. Martín Salcedo Quiñones

Pagina: 8

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote private float precio; private int stock; public Producto(String nom, int cant,float pre ) { nombre = nom; precio = pre; stock = cant; } //Metodos Set y Get public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public int getStock() { return stock; } public void setStock(int s) { stock = s; } public float getPrecio() { return precio; } public void setPrecio(float p) { precio = p; } public String toString() {

Docente: Ing. Martín Salcedo Quiñones

Pagina: 9

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote return "Producto{" + "Nombre=" + nombre + ", Precio=" + precio + ", Stock=" + stock + '}'; } } Crear el archivo OperacionesProductos.java y colocar el siguiente código: import java.io.*; public class OperacionesProductos { public static void main(String args[])throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String nomalmacen, nompro; int rpta=1, cant; float pre; Almacen oA= null; System.out.print("Ingrese el nombre del almacen: "); nomalmacen=br.readLine(); oA= new Almacen(nomalmacen); Producto p; if(oA!=null) System.out.println("Almacen creado ..."); System.out.println(""); System.out.println("INGRESO DE PRODUCTOS"); do { System.out.print("NOMBRE: "); nompro=br.readLine(); System.out.print("STOCK: "); cant=Integer.parseInt(br.readLine()); System.out.print("PRECIO: "); pre=Float.parseFloat(br.readLine()); System.out.print("¿Desea ingresar los datos de otro producto? (Si=1, No=0): "); rpta=Integer.parseInt(br.readLine()); System.out.println("");

Docente: Ing. Martín Salcedo Quiñones

Pagina: 10

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote //Creacion del Objeto p=new Producto(nompro, cant, pre); //Adiciona el Obj al Arreglo de Productos //Nota: Para acceder a los metodos del Arreglo de Objs que esta en Almacen //se realiza mediante la Variable de Clase que se encuentra en IUAlmacen oA.adicionarProducto(p); }while(rpta==1); System.out.println("LISTA DE PRODUCTOS"); int total,i; total=oA.getNproductos(); if (total>0) for(i=0;i