Anda di halaman 1dari 10

Facultad de Ciencias Exactas, Ingeniera y Agrimensura

Departamento de Sistemas e Informtica


Escuela de Electrnica
Informtica II

Prctica N 3 - Interfaces
Resumen:
Esta prctica tiene como objetivo ayudar a comprender e incorporar la utilizacin de
interfaces.
Problema 1: (*)
a) Defina una interface llamada ExamIntf con los siguientes mtodos:
get()
parmetros: un entero
retorno:un double
propsito: usa el entero como ndice de un array de doubles
put()
parmetros:un double
retorna: un boolean indicando xito (true) o fracaso (false)
propsito: almacena un double. El primer valor debe ser puesto en la posicin con ndice
0, el siguiente en la posicin 1, y as hasta que el array est lleno. Si no hay espacio en el
array, retorna false.
sort()
parmetros: ninguno
retorno: ninguno
propsito: ordena el array de doubles de menor a mayor. Slo se ordena la porcin del array
llena con valores.
avg()
parmetros: ninguno
retorno: un double
propsito: hallar el promedio de los valores almacenados en el array y retornar este valor
b) Escriba una clase ExamArray que implemente ExamIntf . La clase debe tener un
atributo llamado notas que es una referencia a un array de 100 doubles.
c) Escriba una clase llamada RecordExamen que use la interface ExamIntf. Deber:
Deber aadir los valores de la siguiente tabla al objeto de alguna clase que
implemente la interface ExamIntf.
12.4

34.2

98.4

87.5

99.34

100.0

75.3

Luego deber ordenar el array resultante,


Imprimir los valores y
El promedio

89.6

d) Escriba una clase TestExam con un mtodo main() que cree una instancia de la
clase que ha definido en el punto c).
Problema 2:
1- Dada la clase abstracta:
public abstract class Figura {
abstract double area();
}
defina las clases Rectangulo, Circulo y Triangulo que extiendan de Figura.
Implemente en las clases todos lo mtodos y variables necesarios para ello (incluyendo
mtodo toString(). Est permitido modificar la clase Figura, siempre que siga siendo
abstracta.
2 - Las clases de esta jerarqua deben implementar la interface:
public interface Ordenable {
boolean menorArea( Figura O1 );
boolean menorPerimetro ( Figura O1);
}
de manera que sea posible ordenar rectngulos, crculos y tringulos por su rea o su
permetro.
3 - Arme una clase Test que tenga un mtodo main que instancie objetos Rectangulo,
Circulo y Triangulo, y muestre un mensaje por pantalla indicando cul el de mayor
tamao mostrando tambin sus caractersticas (ancho, alto, etc.)
Nota: Implemente en las clases todos lo mtodos y variables necesarios pero siempre al
nivel ms alto posible de la jerarqua de clases.
Problema 3:
Teniendo en cuenta el problema 2, de la prctica 3:
a) Escriba una clase TrainComparator que compare objetos TrainCar en base a su
volmen. O sea car1 > car2 si el volmen de car1 es mayor que el de car2.
Para referencia se provee la interface:
public interface Comparator {
// returns:
// negative if o1 < o2
// zero if o1 = o2
// positive if o1 > o2
int compare(Object obj1, Object obj2);
}

b) Escriba un mtodo genrico que chequee si un array de objetos est ordenado. Un array
est ordenado si a[i] a[i+1], para todo i.
Dicho mtodo deber tomar como parmetro un array de objetos y un Comparator para
indicar a dicho mtodo cmo comparar pares de objetos.
c) Supongamos que estamos escribiendo un programa y se tiene un array de TrainCar
declarado: TrainCar train[];
Cmo usara las respuestas de los dos puntos anteriores para chequear si este array est
ordenado (en cuanto a sus volmenes)?
Problema 4:
Una compaa de seguros del automotor calcula la cuota mensual de sus clientes teniendo
en cuenta ciertas variables tales como la calidad de manejo del titular o caractersticas de
los vehculos.
Dadas las clases e interface a implementar suministradas:
a) Completarlas con lo mnimo necesario. Analizar qu clases extienden a otras, qu
visibilidad debe tener cada campo, qu interfaces y dnde se deben implementar, si hay
clases abstractas, etc.
Debe tenerse en cuenta que:
La variable 'escala' toma valor 1 si el titular del vehculo tiene varios siniestros en su
historial, -1 si nunca requiri servicios del seguro y 0 si se considera un cliente de
comportamiento normal.
La cuota para un automvil se calcula sumando el precio base ms la variable 'escala'
multiplicada por 30. Y solamente se suman $20 si el automvil tiene instalado un
equipo de GNC.
La cuota para las motos se calcula sumando el precio base ms la variable 'escala'
multiplicada por 15, ms la cilindrada de la moto dividida por 12.
La cobertura para robo depende de que si el vehculo tiene alarma o no.El seguro
reconocer el valor base multiplicado por 300 para los vehculos con alarma y el valor
base multiplicado por 250 para los dems, independientemente del tipo de vehculo.
b) Disear la clase Prueba. Instanciar una moto y un automvil, guardarlos en un arreglo.
Imprimir por pantalla la cuota de la moto.
public interface Seguro {
double cuota();
double cobertura_robo();
}
class Vehiculo {
double base;
String patente;
int escala;
String marca;
boolean alarma;
}

class Automovil {
boolean GNC;
}
class Moto {
int cilindrada;
}
Problema 5:
a) Declare una interface llamada Funcion que tenga un mtodo llamado evaluar() que
tome como argumento y retorne un entero.
b) Cree una clase Mitad que implemente Funcion y tal que el mtodo evaluar()
retorne el valor obtenido de dividir el argumento del mtodo por 2.
c) Cree un mtodo que tome como argumento un array de valores enteros y retorne un
array de la misma longitud que el primero pero que cada elemento de este nuevo array
tenga la mitad del valor del correspondiente elemento en el array pasado como
parmetro. En la implementacin del mtodo podr crear una instancia de Mitad y usar
dicha instancia para calcular los valores del array a retornar.
d) Reescriba el mtodo del punto anterior: el mtodo deber tener un argumento adicional
que sea una referencia de tipo Funcion y deber usar la misma en lugar de la instancia
de tipo Mitad.
Problema 6:
El API de Java define la interface Comparable como:
interface Comparable{
int compareTo(Object O1);
}
donde x.compareTo(y) retornar 1 si x es menor que y, 0 si son iguales y 1 si x es
mayor que y.
Defina una clase MyArray que implemente Comparable y cuyos objetos se comporten
como arreglos (vectores) de enteros.
Objetos de tipo MyArray deben compararse de acuerdo a las sumas de sus elementos.
Por ejemplo:
int[] a = new int[] {1,2,3,4}; /* crea un array e inicializa los
elementos */
int[] b = new int[] {-1,2,-3,4,-5};
MyArray m1 = new MyArray(a);
MyArray m2 = new MyArray(b);
System.out.println(m1.compareTo(m2)); /* imprime 1, puesto que
1+2+3+4 > -1+2-3+4-5 */
Defina lo suficiente para que la clase MyArray para que el cdigo de ms arriba funcione.

Problema 7:
Dadas las clases e interface a implementar suministradas,
a) Completarlas con lo mnimo necesario para que el programa de prueba (clase Prueba)
funcione adecuadamente, sin agregar propiedades (campos) ni alterar la esencia del
problema.
Debe tenerse en cuenta que:
* el consumo de un equipo de pared se calcula como 0,41 vatios por frigora mientras que el
de un split es de 0,45 vatios por frigora
* el costo de instalacin final se calcula como el bsico ms los materiales. Estos ltimos
en el caso de un equipo de pared siempre son $30.Luego completar la clase Prueba para:
b) Crear un arreglo de 4 equipos (de diferentes tipos) utilizando directamente
los constructores con datos adecuados (no hace falta ingreso por teclado).
interface LineaFrio { /* devuelve datos del
acondicionadores, heladeras, freezers, etc. */
double costoBasicoInstalacion = 50.0;
boolean tieneRemoto();
double frigorias();
double consumo();
double precio();
double costoFinalInstalacion();
}

equipo.

Sirve

class Acondicionadores {
private String marca;
private String modelo;
private double frigorias;
private String color;
private boolean remoto;
private double precio;
Acondicionadores(double frig, String col, boolean rem) {
frigorias = frig;
color = col;
remoto = rem;
}
public boolean tieneRemoto() { return remoto;}
public double frigorias() { return frigorias;}
public double precio() { return precio;}
}
class Split {
private double diametroAgujero;
private double costoMaterialesInstalacion;

para

}
class DePared {
private double alto_agujero;
private double ancho_agujero;
}
Problema 8:
En la siguiente figura Person (persona) tiene un nombre (Name), Student (estudiante) es
una persona y los estudiantes implementan Comparable. Comparable es una interface
definida en Java. Suponga que las clases Name y Person ya estn implementadas.
Deber implementar la clase Student de acuerdo a las especificaciones, donde
compareTo es un mtodo para comparar dos estudiantes en orden alfabtico de sus:
especialidades (major), apellido (lastName), primer nombre (firstName) e inicial del
segundo nombre (mi). Puede utilizar el mtodo de String:
public int compareTo(String anotherString), el cual retorna 0 si los String son
iguales.

Comparable

Name
-firstName: String
-mi: char
-lastName: String
+Name(firstName: String, mi: char
lastName: String)
+getFirstName(): String
+setFirstName(firstName: String): void
+getMi(): char
+setMi(mi: char): void
+getLastName(): String
+setLastName(lastName: String): void
+getFullName(): String

Person

Student

-name: Name

-major: String

+Person(name: Name)
+getName(): Name
+SeName(name: Name): void

+Student(name: Name,
major: String)
+getMajor(): String
+setMajor(major: String): void
+int compareTo(object: Object)

Problema 9:
El Banco de Londres posee distintos tipos de cuentas incluyendo CuentasLimitadas y
CuentasIlimitadas, cada una de ellas es un tipo de Cuenta. Escriba un programa Java
que use una interface DignadeCredito para tratar todos los tipos de cuentas de la misma
forma como potenciales clientes a quienes se les puede entregar una tarjeta de crdito. Un
cliente de tipo CuentasLimitadas califica para poseer una tarjeta de crdito si el nmero
de transacciones que ha realizado en su cuenta es mayor a 80. Un cliente de tipo
CuentasIlimitadas califica para poseer una tarjeta de crdito si el saldo ms pequeo
que ha tenido en su cuenta es superior a $5000.
Para todos los clientes se tienen en cuenta tres tipos de operaciones:
i.-Mostrar por pantalla su situacin financiera en una lnea con el siguiente formato:

Tipo de cuenta, saldo=saldo actual, saldo menor=menor saldo que tuvo la cuenta
ii.-Retornar (double) valor del lmite de crdito inicial calculado como 5 veces el saldo
mnimo de la cuenta
iii.-Retornar true si califica para tener tarjeta de crdito, false en caso contrario
Deber:
a) Escribir la definicin de la interface DignadeCrdito de forma tal de tener en cuenta
las operaciones mencionadas
b) Completar la siguiente declaracin de la clase CuentasIlimitadas de forma tal que
implemente DignadeCrdito. Puede aadir las variables de instancia y mtodos que
considere necesarios.
public class CuentasIlimitadas {
protected static double saldoMinimoRequerido= 500.00;
protected static double ComisionesMensuales = 5.00;
public CuentasIlimitadas(double saldoInicial) {
super(saldoInicial);
}
public void findeMes(){
if(saldoMinimo<saldoMinimoRequerido)
saldo-=ComisionesMensuales; /* descuenta las comisiones
del mes */
imprimirEstadoMensual();
}
// completar
}
Problema 10:
Se trata de escribir programas para manejar canales de TV por cable. Cada clase que
maneja una empresa de televisin por cable deber poder manejar un nmero mximo de
canales (por defecto, el mximo es 99 canales). Estas clases son lo suficientemente
inteligentes como para registrar el canal que est viendo y el que ha visto previamente.
Inicialmente estas variables tienen el valor 1. Los nmeros de canales debern estar
siempre entre 1 y el nmero mximo, inclusive. Estas clases tienen una caracterstica
adicional, alternarCanal, que permite intercambiar los dos ltimos canales vistos. Con
esta descripcin cree una clase Java que implemente la siguiente interface:
interface TVI {
/* nro. Mximo de canales, por defecto */
final int DEFAULT_MAX = 99;
/* retorna canal actual */
int getCurrentChannel();

/* cambia a canalactual+1, chequea que no supere el mximo */


void incChannel();
/* cambia a canalactual-1, chequea que no pase el canal 1 */
void decChannel ();
/* cambia canal actual por el ltimo visto */
void alternateChannel ();
}
Problema 11:
Complete la clase Frase de forma tal que el siguiente mtodo main() se ejecute
correctamente y muestre por pantalla la salida mostrada.
public interface Reversible {
public void reverse();
}
public class Test {
public static void main(String [] args) {
String [] palabras = {"Here", "are", "some", "words"};
Reversible theItem = new Frase(palabras);
System.out.println(theItem);
theItem.reverse();
System.out.println(theItem);
}
}
Salida por pantalla:
Frase: Here are some words
Frase: words some are Here

Solucin del problema 1:


public interface ExamIntf {
public double get(int idx);
public boolean put(double val);
public void sort();
public double avg();
}
public class ExamArray implements ExamIntf {
private double[] notas;
private int contador;
public ExamArray() {
notas = new double[100];
for (int i = 0; i < notas.length; i++)
notas[0] = 0.0;
//OTRA FORMA:
contador = 0;

java.util.Arrays.fill(notas, 0.0);

}
public double get(int idx) {
return notas[idx];
}
public boolean put(double val) {
if (contador < notas.length) {
notas[contador++] = val;
return true;
} else
return false;
}
public void sort() {
// java.util.Arrays.sort(notas,0,contador);
//no valido para J.1.0
double men;
for (int i = 0; i < contador - 1; i++)
for (int j = i + 1; j < contador; j++)
if (notas[i] > notas[j]) {
men = notas[j];
notas[j] = notas[i];
notas[i] = men;
}
}
public double avg() {
double sum = 0;
for (int i = 0; i < contador; i++)
sum += notas[i];
return sum / (contador);

}
}
public class RecordExam {
public RecordExam(ExamIntf lote) {
lote.put(12.4);
lote.put(34.2);
lote.put(98.4);
lote.put(87.5);
lote.put(99.34);
lote.put(100.0);
lote.put(75.3);
lote.put(89.6);
lote.put(9.6);
//lote.put(189.6);
lote.sort();
int pos = 0;
while (true) {
double x = lote.get(pos++);
if (x == 0)
break;
System.out.println(x);
}
/*otra forma de lo mismo
pero desconocemos hasta donde debe llegar i
(es mejor la anterior)
for (int i=0;i<1000;i++) {
double x = lote.get(i) ;
if (x==0)
break;
System.out.println(x);
}
*/
System.out.println("\n" + lote.avg());
}
}
public class TestExam {
public static void main(String[] args) {
ExamArray EA1 = new ExamArray();
RecordExam RR = new RecordExam (EA1);
}
}

Anda mungkin juga menyukai