Inicio > Java > Certamen 1 Parte Practica [PEF2501]

Certamen 1 Parte Practica [PEF2501]

Aquí dejo el Certamen de la seccion PEF2501 de Programacion Orientada A Objetos

Enunciado:

Considerando el siguiente diagrama de clases:
ModeloClasesCertamen

El método masBreve DEBERÁ DEVOLVER, entre dos productos, aquella que sea
menor. El criterio para escoger el menor DEPENDE del tipo de producto. Cuando
se trata de DVDs, se deberá comparar a través de la duración y cuando se
trata de libros se deberá comparar a través del número de páginas. El método
esMasBreve DEBERÁ devolver un valor lógico que indique si un producto es más
que otro.

Se pide que usted:

· Implemente el diagrama de clases anterior
(15 PUNTOS)

NOTA. Se valora el hecho de que aplique la mayor cantidad de conceptos
de OO que se han revisado en clases.

· Construya una aplicación en Java que permita cumplir con la siguiente
funcionalidad:

· R01 – Crear una lista de productos (DVDs y libros). El usuario debe
ingresar el total de productos que desea ingresar.
(5 PUNTOS)

· R02 – Imprimir un informe que responda a la siguiente estructura

NOMBRE PRODUCTO TIPO DURACIÓN/PÁGINAS
————— —- —————-

En la lista DEBEN aparecer primero los DVD y luego los libros.

(15 PUNTOS)

· R03 – A partir de un nombre, obtenido desde la entrada estándar,
mostrar la TODA información relacionada con el producto, indicando
además el tipo de producto del que se trata.

(5 PUNTOS)

· R04 – Pedir al usuario que ingrese dos números enteros, x e y,
comparar la especie que se encuentra en la posición x de la lista con
la especie que está en la posición y de la lista para luego mostrar,
en la salida estándar, EL OBJETO más extenso (libro con mayor número
de páginas o DVD de mayor duración).

(15 PUNTOS)

 

IOrden.java

/*
 *	Interfaz IOrden 
 */
interface IOrden {
	/* metodo "masBreve" , Recibe un "Object" y retorna un "Object" */
	Object masBreve(Object o);
	/* metodo "esMasBreve" , Recibe un "Producto" y retorna un "boolean" */
	boolean esMasBreve(Producto o);
}

Producto.java

/*
 *	Clase Producto Definida como abstract Para que las clases hijas 
 *	implementen los metodos de la interfaz IOrden
 */
public abstract class Producto implements IOrden {

	public String nombre;
	
	/* Constructor por defecto */
	public Producto() {
	}
	/* Accesador */
	public String getNombre() {
		return nombre;
	}
	/* Mutador */
	public void setNombre(String val) {
		this.nombre = val;
	}
	/*
	 *	Solo declaro los metodos de la interfaz, los declaro 
	 *	como abstract para que los implementen las clases hijas
	 */
	public abstract Object masBreve(Object o);
	public abstract boolean esMasBreve(Producto o);
	
	/*
	 *	Sobre escribo el metodo "toString"
	 */
	public String toString() {
		return "Nombre: "+this.getNombre();
	}
	
}

Libro.java

/*
 *	Clase Libro extiende de Producto, 
 *	Implementa los metodos que la clase padre no implemento
 */
 
public class Libro extends Producto {
	
	/* Atributos */
	public int paginas;
	
	/* Constructor por defecto */
	public Libro() {}
	
	/* Accesador */
	public int getPaginas() {
		return paginas;
	}
	/* Mutadores */
	public void setPaginas(int val) {
		this.paginas = val;
	}
	
	/*
	 *	Implementacion del metodo "esMasBreve" definido en la interfaz "IOrden"
	 *	recibe como parametro un Producto y retorna un boolean (true o false)
	 */
	public boolean esMasBreve(Producto o) {
		/* 
		 *	Al producto que le paso por parametro 
		 *	le hago un Cast, una conversion implícita de Producto a Libro 
		 *	para poder acceder a los metodos de Libro
		 */
		Libro producto = (Libro)o;
		/*
		 *	Comparo las paginas de éste (this) objeto con las 
		 *	del libro que pase por parametro
		 */
		if(this.getPaginas() < producto.getPaginas()) {
			/* 	
			 *	Si las paginas de éste Libro son menores a las paginas del 
			 *	libro pasado por el parametro retorno true 
			 */
			return true;
			/* Osino retorno false */
		} else {
			return false;
		}
	}
	
	/*
	 *	Implementacion del metodo "masBreve" definido en la interfaz "IOrden"
	 *	Recibe como parametro un "Object" y retorna el Objeto mas breve (menor)
	 */
	public Object masBreve(Object o) {
		/* 
		 *	uso el metodo esMasBreve definido arriba y
		 *	Pregunto si éste (this) "objeto" es mas breve que el que pase por parametro
		 */
		if(this.esMasBreve((Producto)o)) {
			/*
			 *	Retorno todo este objeto (this)
			 */
			return this;
		} else {
			return o;
		}
	}
	
	/*
	 *	Sobre escribo el metodo "toString"
	 */
	public String toString() {
		return "Tipo: Libro "+super.toString()+" Paginas: "+this.getPaginas();
	}
	
}

DVD.java

/*
 *	Clase DVD extiende de Producto, 
 *	Implementa los metodos que la clase padre no implemento.
 */
 
 public class DVD extends Producto {
	
	/* Atributos */
	private byte duracion;
	
	/* Constructor por defecto */
	public DVD() {
	}
	
	/* Accesador */
	public byte getDuracion() {
		return this.duracion;
	}
	
	/* Mutadores */
	public void setDuracion(byte val) {
		this.duracion = val;
	}
	
	/*
	 *	Implementacion del metodo "esMasBreve" definido en la interfaz "IOrden"
	 *	recibe como parametro un Producto y retorna un boolean (true o false)
	 */
	public boolean esMasBreve(Producto o) {
		/* 
		 *	Al producto que le paso por parametro 
		 *	le hago un Cast, una conversion implícita de Producto a DVD 
		 *	para poder acceder a los metodos de DVD
		 */
		DVD producto = (DVD) o;
		/*
		 *	Comparo el valor de la duracion de éste (this) objeto con las 
		 *	del dvd que pase por parametro
		 */
		if(this.getDuracion() < producto.getDuracion()) {
			/* 	
			 *	Si la duracion de éste DVD es menor a la duracion del 
			 *	DVD pasado por parametro retorno true 
			 */
			return true;
			/* Osino retorno false */
		} else {
			return false;
		}
	}
	
	/*
	 *	Implementacion del metodo "masBreve" definido en la interfaz "IOrden"
	 *	Recibe como parametro un "Object" y retorna el Objeto mas breve (menor)
	 */
	public Object masBreve(Object o) {
		if(this.esMasBreve((Producto)o)) {
			return this;
		} else {
			return o;
		}
	}
	
	/*
	 *	Sobre escribo el metodo "toString"
	 */
	public String toString() {
		return "Tipo: DVD "+super.toString()+" Duración: "+this.getDuracion();
	}
}

CertamenA.java

/**
 * @(#)CertamenA.java
 *
 * CertamenA application
 *
 * @author 	Esteban Fuentealba
 * @version 1.00 2009/10/28
 */

/* 
 *	Hago el Import para usar la clase Scanner
 *	que me permite leer datos desde teclado
 */
import java.util.Scanner;
 
public class CertamenA {
    
    public static void main(String[] args) {
    	
    	
    	/* 
    	 *	Creo una instancia de Scanner
    	 *	le paso como parametro "System.in" (Entrada por Teclado)
    	 */
    	Scanner scan = new Scanner(System.in);
    	
    	
    	/* 	#########################
    	 *	#	R01					#
    	 *	#########################
    	 *
    	 *	Pido al usuario que ingrese la cantidad de Productos 
    	 */
    	System.out.println("Ingresa la cantidad de productos");
    	
    	/* 
    	 *	Espero que el usuario ingrese por teclado el numero del largo del array
    	 */
    	 
    	String lecturaDeTeclado = scan.nextLine();
    	int numero = Integer.parseInt(lecturaDeTeclado);
    	Producto[] productos = new Producto[numero];
    	/* 
    	 *	Creo una variable "contador" inicializado en 0 que sera el indice del array
    	 */
    	int contador = 0;
    	
    	
    	
		/*
    	 *	Pido al Usuario que ingrese Libros o DVDs
    	 */
    	for(int j=0; j< productos.length; j++) {
    	 	System.out.println("¿ Que Quieres Ingresar? ");
    	 	System.out.println("1.- Libro");
    	 	System.out.println("2.- DVD");
    	 	/*
    	 	 *	Espero que el usuario ingrese una opción
    	 	 */
    	 	int opcion = Integer.parseInt(scan.nextLine());
    	 	
    	 	/*
    	 	 *	Si el texto ingresado por teclado es un 1 
    	 	 *	Crearé un objeto de la clase Libro 
    	 	 */
    	 	if(opcion == 1) {
    	 		Libro l = new Libro();
    	 		System.out.println("Ingresa el Nombre del Libro");
		    	l.setNombre(scan.nextLine());
		    	System.out.println("Ingresa el numero de páginas del Libro");
		    	l.paginas = Integer.parseInt(scan.nextLine());
		    	
		    	/*
		    	 * 	Agrego el Objeto de Libro al arreglo de Productos
		    	 *	lo agrego en la posicion "contador", variable que cree mas arriba
		    	 */
		    	productos[contador] = l;
		    	/*
		    	 *	Incremento el contador de Productos
		    	 */
		    	contador++;
    	 	} 
    	 	/*
    	 	 *	Si el texto ingresado por teclado es un 2
    	 	 *	Crearé un objeto de la clase DVD y lo agregaré al arreglo de Productos
    	 	 */
    	 	 else if(opcion == 2) {
    	 		DVD d = new DVD();
    	 		System.out.println("Ingresa el Nombre del DVD");
		    	d.setNombre(scan.nextLine());
		    	System.out.println("Ingresa la Duración del DVD");
		    	d.setDuracion(Byte.parseByte(scan.nextLine()));
		    	
		    	/*
		    	 * 	Agrego el Objeto de DVD al arreglo de Productos
		    	 *	lo agrego en la posicion "contador", variable que cree mas arriba
		    	 */
		    	productos[contador] = d;
		    	/*
		    	 *	Incremento el contador de Productos
		    	 */
		    	contador++;
    	 	}
    	}

    	/* 	#########################
    	 *	#	R02					#
    	 *	#########################
		*/
		
    	System.out.println("Nombre\t\t\t\tTipo\t\t\t\tPaginas");
    	/* Recorro el arreglo de productos para mostrar todos los DVDs */
    	for(int indice=0; indice < productos.length; indice++) {
    		/* Del arreglo saco el producto en la posicion "indice" */
    		Producto producto = productos[indice];
    		/* Pregunto si el producto sacado es una instancia de la clase DVD*/
    		if(producto instanceof DVD) {
    			DVD unObjeto = (DVD)producto; 
    			System.out.println(producto.getNombre()+"\t\t\t\tDVD\t\t\t\t"+unObjeto.getDuracion());
    		} 
    	}
    	/* Recorro el arreglo de productos para mostrar todos los Libros */
    	for(int indice=0; indice < productos.length; indice++) {
    		/* Del arreglo saco el producto en la posicion "indice" */
    		Producto producto = productos[indice];
    		/* Pregunto si el producto sacado es una instancia de la clase Libro */
    		if(producto instanceof Libro) {
    			Libro a = (Libro)producto;
    			System.out.println(producto.getNombre()+"\t\t\t\tLibro\t\t\t\t"+a.getPaginas());
    		}
    	}
    	
    	/* 	#########################
    	*	#	R03					#
    	*	#########################
		*/
		
    	System.out.println("Ingresa el nombre a Busca");
    	String nombreABuscar = scan.nextLine();
    	/* 	
    	 *	Recorro el arreglo de productos para buscar en 
    	 *	todos los productos la palabra ingresada
    	 */
    	for(int indice=0; indice < productos.length; indice++) {
    		/* Del arreglo saco el producto en la posicion "indice" */
    		Producto p = productos[indice];
    		/* 
    		 *	Del producto llamo al metodo "getNombre" para que me 
    		 *	devuelva el nombre del producto , ese nombre lo dejo en minusculas (La Busquueda es sensible a Mayusculas y Minusculas)
    		 *	y pregunto si el nombre del producto contiene la palabra ingresada (Tambien en Minuscula)
    		 */
			if(p.getNombre().toLowerCase().contains(nombreABuscar.toLowerCase())) {
				/* 
				 *	Si la condicion se cumple imprimo el objeto
				 *	Como notarán no llamo a ningun metodo del objeto "p", esto es porque 
				 *	en las clases está Sobre escrito el metodo "toString"
				 */
				System.out.println(p);
			}	
    	}
    	
    	/* 	#########################
    	*	#	R04					#
    	*	#########################
		*/
    	System.out.println("Ingresa Numero x");
    	int numeroX = Integer.parseInt(scan.nextLine());
    	
    	System.out.println("Ingresa Numero Y");
    	int numeroY = Integer.parseInt(scan.nextLine());
    	
    	Producto primero = productos[numeroX];
    	Producto segundo = productos[numeroY];
    	
    
    	Object esMenor = primero.masBreve(segundo);
    	System.out.println("Objeto Menor:");
    	System.out.println(esMenor);
    }
}

Descargar Codigo de Fuente:
http://estebanfuentealba.net/ayudantia/Certamen1-PEF2501.rar

Saludos!.

Categorías:Java Etiquetas: , , ,
  1. julio 17, 2010 a las 9:47 pm

    hola¡¡¿

    • estebanfuentealba
      julio 18, 2010 a las 1:14 am

      Hola xD

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: