Defina una clase Tiempo con 3 atributos: hora, minutos, y segundos

Anuncio
Programación(Orientada a Objetos con Java)
Prueba nº 1
Dr. Eric Jeltsch F.
Preg. 1
Dado el siguiente código Java. Se pide
a) Una vez realizado el proceso de compilación (virtual), informe si el programa compila
correctamente(es decir, libre de errores) o no. Justificando exactamente en donde ocurre el
error, si es que ocurre.
b) En caso de error, diga como mejorar el código, pero sin hacer grandes cambios. Se supone
que la salida debería informarme de los Km. por Litro (KpL).
class Transporte {
public static void main(String args[]) {
Vehiculo vehiculo = new Vehiculo();
vehiculo.print();
}
}
class Vehiculo {
public Vehiculo (double suKmporLitro) {
KmporLitro = suKmporLitro;
}
public void print() {
System.out.println("KpL: " + KmporLitro);
}
private double KmporLitro = 10;
}
Solución:
C:\Archivos de programa\Xinox Software\JCreatorV3
LE\MyProjects\lab2\src\Transporte.java:3: cannot resolve symbol
symbol : constructor Vehiculo ()
location: class Vehiculo
Vehiculo vehiculo = new Vehiculo();
^
1 error
Process completed.
No, el código no compila. Notar que la clase Vehiculo no posee un constructor por defecto, pero en vez de eso
requiere un double para el constructor. Entonces, la declaración Vehiculo vehiculo = new
Vehiculo(); generara un error durante su compilación. Para corregir el código debemos declarar (o mejor dicho
llamar al constructor) con un argumento double. Es decir, por ejemplo Vehiculo vehiculo = new
Vehiculo(12.3); (nuestro auto es uno económico). Tras lo cual se obtiene el resultado, KpL: 12.3
Preg. 2
Dado el siguiente código Java. Se pide
c) Una vez realizado el proceso de compilación (virtual), informe si el programa compila
correctamente(es decir, libre de errores) o no. Justificando exactamente en donde ocurre el
error, si es que ocurre.
d) En caso de error, diga como mejorar el código, pero sin hacer grandes cambios. Se supone
que la salida debería informarme de la marca del Vehículo.
class Transporte {
public static void main(String args[]) {
Auto gol = new Auto("Volkswagen");
gol.print();
___________________________________________________________________________
Escuela Ingeniería en Computación, Universidad de La Serena.
1
Programación(Orientada a Objetos con Java)
Prueba nº 1
Dr. Eric Jeltsch F.
}
}
class Vehiculo {
public void print() {
System.out.println("KpL: " + KmporLitro);
}
private double KmporLitro = 10;
}
class Auto extends Vehiculo {
public Auto (String suMarca) {
marca = suMarca;
}
public void print() {
System.out.println("Marca: " + marca);
}
private String marca;
}
Solución:
El código compila sin error, y tras su ejecución se visualiza por consola el mensaje.
Marca: Volkswagen.
Preg. 3
Dado el siguiente código Java. Se pide
e) Una vez realizado el proceso de compilación (virtual), informe si el programa compila
correctamente(es decir, libre de errores) o no. Justificando exactamente en donde ocurre el
error, si es que ocurre.
f) En caso de error, diga como mejorar el código, pero sin hacer grandes cambios. Se supone
que la salida debería informarme de la marca del Vehículo y los KpL.
class Transporte {
public static void main(String args[]) {
Auto gol = new Auto("Volkswagen");
gol.setKmporLitro(26.9);
gol.print();
}
}
class Vehiculo {
public void print() {
System.out.println("KpL: " + KmporLitro);
}
protected void setKmporLitro (double kpl) {
KmporLitro = kpl;
}
private double KmporLitro = 10;
}
class Auto extends Vehiculo {
public Auto (String suMarca) {
marca = suMarca;
}
___________________________________________________________________________
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 void print() {
System.out.println("Marca: " + marca);
System.out.println("KpL: " + KmporLitro);
}
private String marca;
}
Solución:
C:\Archivos de programa\Xinox Software\JCreatorV3
LE\MyProjects\lab2\src\Transporte.java:22: KmporLitro has private access in
Vehiculo
System.out.println("KpL: " + KmporLitro);
^
1 error
Process completed.
No, el código no compila. La clase Auto extends Vehiculo, el método setKmporLitro en Vehiculo es protected, ella
es heredada por la clase Auto y llama a gol.setKmporLitro, lo cual esta bien. Sin embargo, el método print de la
clase Auto la salida es KmporLitro un double. Pero, KmporLitro es declarado como private double en la clase
Vehiculo y por tanto no es heredada por Auto. Por lo tanto, la línea de salida de KmporLitro es la causante de la
falla en la compilación. Podemos mejorar o levantar este problema si cambiamos la declaración de la variable
KmporLitro en Vehiculo por protected o public.
El código corregido, y tras su ejecución se visualiza por consola el mensaje.
Marca: Volkswagen.
KpL: 26.9
Preg. 4
a) Considerando las siguientes clases.
public class Perro {
public void ladrar() {
System.out.println("El perro ladra");
}
public void bravo(Perro d) {
System.out.println("A");
}
public void bravo(Collie c) {
System.out.println("B");
}
}
public class Poodle extends Perro {
public int menear_cola() {
return 1;
}
}
public class Collie extends Perro {
public void ladrar() {
System.out.println("El collie ladra");
}
public int menear_cola() {
return 2;
}
___________________________________________________________________________
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.
public void bravo(Poodle p) {
System.out.println("D");
}
}
Y dada las siguientes declaraciones, las que son:
Perro Rin_Tin_Tin = new Perro();
Collie Lassie = new Collie();
Poodle Flupi = new Poodle();
Perro Dicki = new Collie();
Se pide, analizar la salida y justificarla.
Observación: las declaraciones son individuales y su resultado no altera el resultado de la
siguiente sentencia o la de las demás, para cuando Ud. haya encontrado un error en alguna
de las declaraciones.
Declaración
Rin_Tin_Tin.ladra();
Lassie.ladra();
Flupi.ladra();
Dicki.ladra();
System.out.println(Rin_Tin_Tin.menear_cola());
System.out.println(Lassie.menear_cola());
System.out.println(Flupi.menear_cola());
Rin_Tin_Tin.bravo(Rin_Tin_Tin);
Rin_Tin_Tin.bravo(Lassie);
Rin_Tin_Tin.bravo(Flupi);
Rin_Tin_Tin.bravo(Dicki);
Lassie.bravo(Rin_Tin_Tin);
Lassie.bravo(Lassie);
Lassie.bravo(Flupi);
Lassie.bravo(Dicki);
Salida y Justificación.
El perro ladra
El collie ladra
El perro ladra
El collie ladra
Dynamic binding sobre el parámetro,
en tiempo de ejecución, Dicki es
descubierto que es un Collie, de
manera que el método de Collie es
llamado.
error
Rin_Tin_Tin es un Perro y la clase
Perro, no tiene un método
menear_cola().
2
1
A
B
A
La clase Perro no posee un metodo
bravo() que tome a Poodle como
parametro. Pero Flupi es también un
Perro, de manera que el primer
método bravo() en Perro le
corresponde la llamada.
A
A
Lassie es un Collie y la clase Collie no
tiene método bravo() que tome a Perro
como parametro. Pero hereda de
Perro, de manera que lo usa.
B
Similar al anterior.
D
A
___________________________________________________________________________
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. 5
Se da una clase llamada CD_Ordenables, un constructor y métodos apropiados, tales como
getArtista() y getTitulo(). Se pide implementar la interface Comparable para ordenar los
CD por artista y por título.
public class CD_Ordenables implements Comparable
{
private String titulo, artista;
private double valor;
private int pistas;
//----------------------------------------------------------------// Un constructor con una información específica.
//----------------------------------------------------------------public CD_Ordenables (String elTitulo, String elArtista,
double elValor, int lasPistas)
{
titulo = elTitulo;
artista = elArtista;
valor =
elValor;
pistas = lasPistas;
}
//----------------------------------------------------------------// Returns el nombre del artista para CD_Ordenables.
//----------------------------------------------------------------public String getArtista()
{
return artista;
}
//----------------------------------------------------------------// Returns el título para CD_Ordenables.
//----------------------------------------------------------------public String getTitulo()
{
return titulo;
}
Solución:
//----------------------------------------------------------------// Determine la relación de orden entre nombre de artista y título.
Utilizando la interface Comparable
//----------------------------------------------------------------public int compareTo (Object obj)
{
CD_Ordenables otro = (CD_Ordenables) obj;
int result = artista.compareTo (otro.getArtista());
if (result == 0)
result = titulo.compareTo (otro.getTitulo());
return result;
}
___________________________________________________________________________
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.
Preg. 6
a)Un PC está compuesto por un Monitor, un Sistema, un Teclado y, opcionalmente, un ratón. Por
otra parte el sistema tiene una tarjeta madre, uno o varios procesadores, una o varias tarjetas de
memoria (RAM) y uno o varios Discos. Se pide que grafique un modelo de diagrama de clases
UML, que represente la composición de un PC con estos diferentes componentes.
b)Construirse un diagrama de clase modelado con UML para diferentes tipos de figuras, según
sus dimensiones. La clase Figura debería ser abstracta y clase madre, pero que según su
dimensión, (es decir, recta real, plano real o espacio real), puedan sus clases derivadas ser
equipadas con ciertos atributos y métodos que son ad-hoc al ambiente en donde se encuentran.
Por ejemplo, los puntos de la recta real no deberían tener profundidad, pero si los objetos del
espacio, etc.
___________________________________________________________________________
Escuela Ingeniería en Computación, Universidad de La Serena.
6
Descargar