| Creación de un Televisor estándar |
| Paso 17: Operativa |
Las Interfaces
Aunque nuestra empresa nació con el objetivo de crear televisores, hemos hecho un estudio de mercado y hemos constadado que hay muchas personas que estarían interesadas en poder escuchar la radio a través de su televisor.
- antes de empezar a crear nuestro primer televisor con radio incorporada, decidimos realizar un estudio de las funcionalidades más comunes en los aparatos de radio
- en esta captación de requisitos descubrimos que una asociación de fabricantes de radios ha creado una especificación sobre las funcionalidades más comunes de las radios.
Esta especificación se plasma en el siguiente Diagrama de Clases de diseño con la Interfaz IRadio
- este tipo de flecha en UML representa una relación de Realización
- este tipo de relación
- nos indica que la Clase hija, en este caso TeleRadioVirtual, tiene que implementar todos los métodos de la Interfaz que está implementando
Vamos a crearnos una Interfaz llamada IRadio en el paquete paqtvestandar

Este es el código Java correspondiente a la Interfaz IRadio del paquete paqtvestandar
| package paqtvestandar;
public interface IRadio {
public static final int AM = 1;
public static final int FM = 2;
public void setBanda(int banda);
public int getBanda();
public void setEmisora(double emisora);
public double getEmisora();
public void siguienteEmisora();
public void emisoraAnterior();
public void ajustarAntena();
public void subirVolumen();
public void bajarVolumen();
public void encender();
public void apagar();
} |
- public interface IRadio {
- una Interfaz es como una Clase, pero no tiene implementado ninguno de sus métodos
- es como si fuera una Clase que todos sus métodos fueran abstractos
- las Interfaces se utilizan para obligar a la Subclase a implementar todos los métodos de la Interfaz que tiene por encima
- public final int AM = 1;
public final int FM = 2;
- aqui estamos declarando dos variables finales que tienen los valores 1 y 2
- las Clases cliente que nos utilicen nunca llegarán a saber los verdaderos valores de estas variables
- las Clases cliente utilizarán los nombres AM y FM en vez de los valores 1 y 2
- encapsulando estos valores conseguimos tener total libertad para en un futuro cambiar los valores internos de estas varibles finales, sin que esto afecte a las Clases cliente que están interactuando con esta Clase servidora
Compilamos la Interfaz IRadio.
Ahora nos vamos a crear una nueva Clase en el paquete paqtvestandar llamada TeleRadioVirtual que va a heredar de la Calse TelevisorVirtual y va a implementar de la Interfaz IRadio
Este es el código Java del nuevo modelo de televisor llamado TeleRadioVirtual
| package paqtvestandar;
public class TeleRadioVirtual extends TelevisorVirtual implements IRadio {
private int banda = FM;
private double emisora = 95.6;
public void setBanda(int banda) {
if ((banda == AM) || (banda == FM)){
this.banda = banda;
}
else {
this.banda = FM;
}
}
public int getBanda() {
return banda;
}
public void setEmisora(double emisora) {
this.emisora = emisora;
}
public double getEmisora(){
return emisora;
}
public void siguienteEmisora() {
System.out.println("TeleRadioVirtual - siguienteEmisora(): pasamos a " +
"la siguiente emisora");
}
public void emisoraAnterior() {
System.out.println("TeleRadioVirtual - emisoraAnterior(): pasamos a " +
"la emisora anterior");
}
public void ajustarAntena() {
// esta radio tiene una antena interna que no se puede ajustar
}
} |
- public class TeleRadioVirtual extends TelevisorVirtual implements IRadio {
- cuando una Clase implementa un Interfaz se tiene que utilizar la palabra reservada implements
- en Java sólo se puede heredar de una Clase pero se puede implementar de tantas Interfaces como queramos
- private int banda = FM;
- si no estubiéramos utilizando las variables finales AM y FM esta línea de código estaría escrita de la siguiente forma
- private int banda = 2;
- está claro que esta forma no es tan flexible e intuitiva como la anterior
Compilamos la Clase TeleRadioVirtual.
Ahora modificamos la Clase Aplicacion del paquete paqtvestandar para que en vez de crear una instancia de tipo TelevisorVirtual, cree una instancia de tipo TeleRadioVirtual
Al ejecutar la Clase Aplicacion tendremos que ver la siguiente salida
Este es parte del código de la Clase Aplicacion del paquete paqtvestandar
package paqtvestandar;
public class Aplicacion {
public static void main(String[] args) {
TeleRadioVirtual tv = new ...
tv.encender();
tv.setCanal(3);
System.out.println("El canal seleccionado es el: " + tv.getCanal());
tv.subirColor();
tv.setSonido(false);
System.out.println("El televisor tiene el sonido: " + tv.isSonido());
tv.subirVolumen();
System.out.println("La posición del volumen es: " + tv.getVolumen());
System.out.println("El televisor tiene el sonido: " + tv.isSonido());
tv.usarMenu();
System.out.println("La radio tiene la banda: " + tv....
System.out.println("La radio tiene la emisora: " + tv....
tv.siguienteEmisora();
System.out.println("La radio tiene la banda: " + tv....
tv.setBanda(...
System.out.println("La radio tiene la banda: " + tv....
tv.apagar();
}
} |
Compara tu código con la solución propuesta