Download Programación (Orientada a Objetos con Java) Prueba nº1 Dr. Eric
Document related concepts
no text concepts found
Transcript
Programación (Orientada a Objetos con Java) Prueba nº1 Dr. Eric Jeltsch F. Preg. Nº 1 (12 Pt.) Dadas las clases Candy, y Lollipop, que es una extensión de Candy. Además se tiene una clase testeadora PreguntaX. Todas las clases funcionan perfectamente, sin generar ninguna excepción. Se pide completar las líneas respectivas con las salidas que se generan, de acuerdo a las clases definidas. public class Candy { public int peso; public int azucar; public Candy(int p, int a) { peso = p; azucar = a; } // end constructor //formato de salida public String toString() { return "Candy " + peso + " " + azucar; } // end toString public void display(Candy c) { System.out.println("Candy: " + c.peso); } // display } // end class Candy public class Lollipop extends Candy { public String color; public Lollipop(int p, int a, String c) { super(p,a+10); color = c; } // end constructor //formato de salida public String toString() { return color + "pop " + peso + " " + azucar; } // end toString //formato de salida public void display(Lollipop lp) { System.out.println(" pop: " + lp.peso); } // end display } // end class Lollipop public class PreguntaX { public static int rating(Candy c) { return c.peso * c.azucar; } // end rating public static int rating(Lollipop lp) { int result = (lp.peso * lp.azucar) / 2; if (lp.color.equals("red")) result += 100; return result; } // end rating public static void main(String args[]) { Candy uno = new Candy(5,50); Candy dos = new Lollipop(10,30,"red"); Lollipop tres = new Lollipop(20,40,"green"); System.out.println(uno); System.out.println(dos); //Completar Candy 5 50 //Completar red pop 10 40 ___________________________________________________________________________ Escuela Ingeniería en Computación, Universidad de La Serena. 1 Programación (Orientada a Objetos con Java) System.out.println(tres); System.out.println(rating(uno)); System.out.println(rating(dos)); System.out.println(rating(tres)); uno.display(uno); uno.display(tres); tres.display(uno); tres.display(tres); Prueba nº1 Dr. Eric Jeltsch F. //Completar green pop 20 50 //Completar 250 //Completar 400 //Completar 500 //Completar Candy: 5 //Completar Candy: 20 //Completar Candy: 5 //Completar pop: 20 } // end main } // end class Preg. Nº 2 (12 Pt.) La siguiente clase Fecha, describe la fecha de un calendario genérico usando mes y día (no considera el año). static class Fecha { private int mes; // private int dia; // public int getMes() public int getDia() debe ser 1-12 debe ser 1-31 {return mes;} {return dia;} public Fecha(int m, int d) { if (m >= 1 && m <= 12) mes = m; else mes = 1; if (d >= 1 && d <= 31) dia = d; else dia = 1; } // end constructor // agregamos la impresión básica public String toString() { return mes + "-" + dia; } // end toString } // end class Fecha a) Complete la clase comparaFecha(),que compara dos fechas en el sentido usual. Esto es que para una entrada con fechas en formato (mes - día), tal como, (2-4),(1-15), la salida sea (1-15), (2-4). Para tal efecto, use la interface Comparator y el método que corresponda. static class comparaFecha implements Comparator<Fecha> { .. } // end class comparaFecha b) Complete una clase testeadora que ante una entrada de fechas : (2-4),(2-20),(1-15),(2-4), la salida se vea así. ___________________________________________________________________________ Escuela Ingeniería en Computación, Universidad de La Serena. 2 Programación (Orientada a Objetos con Java) Prueba nº1 Dr. Eric Jeltsch F. public static void main(String args[]) { // test para ordenar array de fechas ... } // end main Obs.: Para simplicidad de la solución, todo lo solicitado, incrustarlo en una sola clase llamada Pregunta. c) Más allá de la implementación, ¿Cuál es la diferencia principal entre Comparable y Comparator?. Sol: import java.util.Comparator; import java.util.Arrays; public class Pregunta { static class Fecha { private int mes; // private int dia; // public int getMes() public int getDia() debe ser 1-12 debe ser 1-31 {return mes;} {return dia;} public Fecha(int m, int d) { if (m >= 1 && m <= 12) mes = m; else mes = 1; if (d >= 1 && d <= 31) dia = d; else dia = 1; } // end constructor // agregar para ver la impresión básica public String toString() { return mes + "-" + dia; } // end toString } // end class Fecha a) static class comparaFecha implements Comparator<Fecha> { public int compare(Fecha fecha1, Fecha fecha2) { int result = fecha1.getMes() - fecha2.getMes(); if (result == 0) // meses iguales result = fecha1.getDia() - fecha2.getDia(); return result; } // end compare } // end class comparaFecha b) public static void main(String args[]) { // test comparator para ordenar array de fechas Fecha fechas[] = {new Fecha(2,4), new Fecha(1,15), new Fecha(2,4)}; Arrays.sort(fechas, new comparaFecha()); for (int i = 0; i < fechas.length; i++) System.out.println(fechas[i]); } // end main } // end new Fecha(2,20), ___________________________________________________________________________ Escuela Ingeniería en Computación, Universidad de La Serena. 3 Programación (Orientada a Objetos con Java) Prueba nº1 Dr. Eric Jeltsch F. c) Comparable es utilizado para implementar el orden natural, sin necesidad de especificar un Comparator, por ejemplo, los String son comparados alfabéticamente, mientras que usamos Comparator para cuando queramos crear otro tipo de orden que no sea el natural, como el que ahora se considera en este problema. La implementación de la interfaz Comparable es muy habitual ya que en general muchas veces vamos a desear que nuestras clases sean comparables no solo por el hecho de poder comparar objetos de dicha clase, sino por el uso de poder ordenar objetos de esa clase. Preg. Nº 3 (12 Pt.) Dada la siguiente representación UML. Se pide que codifique la representación. ¿A qué concepto de la Programación Orientada a Objetos corresponde.?. Polimorfismo.!! ___________________________________________________________________________ Escuela Ingeniería en Computación, Universidad de La Serena. 4 Programación (Orientada a Objetos con Java) Prueba nº1 Dr. Eric Jeltsch F. Preg. Nº 4 (12 Pt.) El siguiente diagrama contiene una serie de clases y elementos típicos de la Programación Orientada a Objetos), junto con la descripción en UML. (en la práctica los nombres carecen de sentidos). A partir de este diagrama de clases se pide recuperar el código. No debe implementar ningún método. public interface Buf { public void tib(double moy); } public abstract class Cug implements Buf { protected boolean med = false; protected double rop; public Cug() { ... } public void beb() { ... } public abstract void tib(double moy); } public class Hig extends Cug { private Cug saz; public Hig(Cug yab) { ... } public void tib(double moy) { ... } private double nal() { ... } } public interface Erk extends Buf { ___________________________________________________________________________ Escuela Ingeniería en Computación, Universidad de La Serena. 5 Programación (Orientada a Objetos con Java) Prueba nº1 Dr. Eric Jeltsch F. public Hig urb(double dib); } public void fim(); Preg. Nº 5 (12 Pt.) Se supone que ambas clases están alojadas en un mismo archivo de nombre ClaseA.java. public abstract class ClaseA { protected int num; public int adicion(int a) { return a + num; } public abstract int substrac(int a); public abstract int multipl(int a); } // end ClaseA class ClaseB extends ClaseA { public int multipl(int a) { return a * num; } // end multipl } // end ClaseB a) ¿Cuál es el mensaje de error que se genera tras la ejecución de ClaseA.? Justifique. b) ¿Cómo puede modificarlo para que se “levante” este problema.?. Justifique. a) C:\Documents and Settings\ULS\Mis documentos\ClaseA.java:10: ClaseB is not abstract and does not override abstract method substrac(int) in ClaseA class ClaseB extends ClaseA { ^ 1 error Herramienta completada con código de salida 1 b) Sí, la clase ClaseB debe ser una clase abstract, ya que cualquier clase que contiene un método abstract debe ser de una clase abstract. C:\Documents and Settings\ULS\Mis documentos\ClaseA.java:10: class ClaseB is public, should be declared in a file named ClaseB.java public abstract class ClaseB extends ClaseA { ^ 1 error Herramienta completada con código de salida 1. ___________________________________________________________________________ Escuela Ingeniería en Computación, Universidad de La Serena. 6