| Creación de un Televisor estándar |
| Paso 10: Operativa |
Añadir una funcionalidad obligada para todas las Subclases
Imaginemos que hay una normativa de calidad tipo ISO para los televisores. Esta norma nos dice que todos los televisores a partir de ahora tienen que ofrecer a los usurarios la posibilidad de acceder a sus menús y que dichos menús pueden ser implementados de forma diferente en cada televisor.
A partir de ahora decidimos que el Televisor estándar ya no va a ser funcional por sí solo, sino que va a tomar el papel de plantilla para la creación de nuevos televisores. Este es el nuevo Diagrama de Clases de diseño

- +usarMenu(): void
- como bien dice el refrán, "a buen entendedor pocas palabras bastan"
- es decir, un diseñador cuando nos indica que este método es abstracto nos está transmitiendo que
- la Clase Televisor no puede ser instanciada directamente
- las Subclases que hereden de la Superclase Televisor tienen que implementar "obligatoriamente" el método usarMenu() para que puedan ser instanciadas
- si no se implementa este método, la Subclase también será abstracta y así sucesivamente
- +Televisor(canal:int) : void
- Nota: siguiendo las convenciones sobre los métodos de acceso getters y setters Apéndice - métodos de acceso getters y setters hemos reducido el número de métodos de acceso en las Clases de diseño
Este es el código de la Clase Televisor
| package paqtvestandar;
public abstract class Televisor {
private int canal;
private int volumen = 5;
public Televisor() {}
public Televisor(int canal) {
setCanal(canal);
}
public void subirCanal() {
canal = canal + 1;
}
public void bajarCanal() {
canal = canal - 1;
}
public int getCanal() {
return canal;
}
public void setCanal(int canal) {
if (canal < 0){
this.canal = 0;
}
else {
this.canal = canal;
}
}
public void subirColor(){
System.out.println("Televisor - subirColor(): estoy subiendo el color");
subirColorAyuda();
}
private void subirColorAyuda() {
System.out.println("Televisor - subirColorAyuda(): sigo subiendo el color");
}
public void bajarColor(){
System.out.println("Televisor - subirColor(): estoy bajando el color");
bajarColorAyuda();
}
private void bajarColorAyuda() {
System.out.println("Televisor - bajarColorAyuda(): sigo bajando el color");
}
public void subirVolumen() {
volumen = volumen + 1;
}
public void bajarVolumen() {
volumen = volumen - 1;
}
public int getVolumen() {
return volumen;
}
public abstract void usarMenu();
} |
- public abstract void usarMenu();
- declaramos un método abstracto que tendrá que ser implementado por las Subclases que hereden de la Superclase Televisor
Compilamos la Clase Televisor.
Este es el código ampliado de la Clase TelevisorVirtual
package paqtvestandar;
public class TelevisorVirtual extends Televisor {
private boolean sonido = true;
public void setSonido(boolean valorSonido){
sonido = valorSonido;
}
public boolean isSonido(){
return sonido;
}
public void subirVolumen() {
super.subirVolumen();
if (this.isSonido() == false){
setSonido(true);
}
}
public void bajarVolumen() {
super.bajarVolumen();
if (isSonido() == false){
setSonido(true);
}
}
public void usarMenu(){
System.out.println("TelevisorVirtual - usarMenu(): utilizo el menu");
}
} |
- public void usarMenu(){
- este método contiene la operativa propia de utilización del menu de la Clase TelevisorVirtual
Compilamos la Clase TelevisorVirtual.
Y este es el código de la Clase Aplicacion que interactúa con una instancia de tipo TelevisorVirtual
package paqtvestandar;
public class Aplicacion {
public static void main(String[] args) {
TelevisorVirtual tv = new TelevisorVirtual();
tv.setCanal(3);
System.out.println("El canal seleccionado es el: " + tv.getCanal());
tv.subirColor();
tv.setSonido(false);
System.out.println("El telvisor 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();
}
} |
- tv.usarMenu();
- estamos invocando a un método que pertenece a la Clase TelevisorVirtual
Al ejecutar la Clase Aplicacion vemos como el TelevisorVirtual utiliza el menu