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