JavaDabbaDoo.org -Tu comunidad Java parlante Fundamentos
Inicio | Cursos infosintesis.net liberados | JavaSE | Iniciación a la Orientación a Objetos paso a paso
Creación de un Televisor estándar
Paso 19: Operativa

La aplicación del Televisor lanza excepciones

Cuando empezamos a desarrollar aplicaciones Java durante bastante tiempo sólo haremos uso de las excepciones creadas por las APIs de Java. Más adelante al adquirir experiencia desarrollando aplicaciones Java y tengamos que crear librerias de bajo nivel, será cuando tengamos la necesidad de crear nuestras propias excepciones.

Vamos a crear una Clase llamada CanalNegativoException en el paquete paqtvestandar que va a heredar de la Clase Exception

Este es el código de la Clase CanalNegativoException

package paqtvestandar;

public class CanalNegativoException extends Exception {
 private int detalle;

 public CanalNegativoException() {
 }


 public CanalNegativoException(int detalle) {
  this.detalle = detalle;
 }

 public String
toString() {
  return "EL VALOR DEL CANAL " +
detalle + " NO ES ACEPTADO";
 }

}

Ahora vamos a modificar el código de las Clases Televisor, TelevisorVirtual y TeleRadioVirtual para que puedan cada una de ellas delegar la excepción CanalNegativoException en caso de que el usuario en la Clase Aplicación al querer crear una instancia de tipo TeleRadioVirtual le pasara un entero negativo al Constructor de la mencionada Clase

Vamos a empezar por la Clase Televisor

package paqtvestandar;

public abstract class Televisor {
 private int canal;
 private int volumen = 5;

 public Televisor() {}
  
 public Televisor(int canal) throws CanalNegativoException {
 
setCanal(canal);
 
 

 public void subirCanal() throws CanalNegativoException {
  setCanal(canal + 1);
 }

 public void bajarCanal() throws CanalNegativoException {
  setCanal(canal - 1);
 }

 public int getCanal() {
  return canal;
 }

 public void setCanal(int canal) throws CanalNegativoException {
  if (canal < 0){
  
// this.canal = 0;
   
throw new CanalNegativoException(canal);
 
 }
  else {
  
this.canal = canal;
 
 }
 }

 public void subirColor(){
  System.out.println("Televisor - subirColor(): estoy subiendo el color");
  subirColorAyuda();
 }

 protected void subirColorAyuda() {
  System.out.println("Televisor - subirColorAyuda(): sigo subiendo el color");
 }

 public void bajarColor(){
  System.out.println("Televisor - subirColor(): estoy bajando el color");
  bajarColorAyuda();
 }

 protected 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 final void encender(){
  System.out.println("Televisor - encender(): estoy encendiendo el televisor");
 }

 public final void apagar(){
  System.out.println("Televisor - apagar(): estoy apagando el 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 TelevisorVirtual() {}

 public TelevisorVirtual(int valorCanal) throws CanalNegativoException {
  super(valorCanal);
 }

 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");
 }
}

Compilamos la Clase TelevisorVirtual.

Este es el código ampliado de la Clase TeleRadioVirtual

package paqtvestandar;

public final class TeleRadioVirutal extends TelevisorVirtual implements IRadio {
 
private int banda = FM;
 
private double emisora = 95.6;

 public TeleRadioVirtual() {}

 public TeleRadioVirtual(int canal) throws CanalNegativoException {
  super(canal);
 }

 public void setBanda(int banda) {
   if ((banda == AM) || (banda == FM)){
   this.banda = banda;
  }
  else {
   this.banda = FM;
  }
 }

 public String 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 - siguienteEmisora(): pasamos a " +
                     "la emisora anterior");
 }

 public void ajustarAntena() {
  // esta radio tiene una antena interna que no se puede ajustar
 }
}

Compilamos la Clase TeleRadioVirtual.

Ahora vamos a crear la Clase AplicacionConExcepcionToString y vamos a crear una instancia de TeleRadioVirtual con un valor de canal correcto. En este caso el canal 8.

Este es el código de la Clase AplicacionConExcepcionToString

package paqtvestandar;

public class AplicacionConExcepcionToString {

 public static void main(String[] args) {
  try {
   TeleRadioVirtual tv = new TeleRadioVirtual(8);
   tv.encender();
   System.out.println("El canal seleccionado es el: " + tv.getCanal());
   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.getBanda());
   System.out.println("La radio tiene la emisora: " + tv.getEmisora());
   tv.siguienteEmisora();
   System.out.println("La radio tiene la banda: " + tv.getBanda());
   tv.setBanda(TeleRadioVirtual.AM);
   System.out.println("La radio tiene la banda: " + tv.getBanda());
   tv.apagar();
  } catch (CanalNegativoException cne) {
    System.out.println(cne.toString());
  }
 }
}


Esta es la salida que cabe esperar al ejecutar la Clase AplicacionConExcepcionToString

Ahora le vamos a pasar al Constructor de la Clase TeleRadioVirtual el canal -5.

Seguidamente ejecutamos la Clase AplicacionConExcepcionToString y comprobamos como el entorno de ejecución Java no ha permitido que se cree un Objeto de tipo TeleRadioVirtual con un valor de canal negativo

Ahora vamos a crear la Clase AplicacionConExcepcionPrintStackTrace y vamos a crear una instancia de TeleRadioVirtual con un valor de canal correcto. En este caso el canal 8.

Este es el código de la Clase AplicacionConExcepcionPrintStackTrace

package paqtvestandar;

public class AplicacionConExcepcionPrintStackTrace {
  
 public static void main(String[] args) {
  try {
   TeleRadioVirtual tv = new TeleRadioVirtual(8);
   tv.encender();
   System.out.println("El canal seleccionado es el: " + tv.getCanal());
   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.getBanda());
   System.out.println("La radio tiene la emisora: " + tv.getEmisora());
   tv.siguienteEmisora();
   System.out.println("La radio tiene la banda: " + tv.getBanda());
   tv.setBanda(TeleRadioVirtual.AM);
   System.out.println("La radio tiene la banda: " + tv.getBanda());
   tv.apagar();
  } catch (CanalNegativoException cne) {
    cne.printStackTrace();
  }
 }
}

Esta es la salida que cabe esperar al ejecutar la Clase AplicacionConExcepcionPrintStackTrace

Ahora le vamos a pasar al Constructor de la Clase TeleRadioVirtual el canal -5.

Seguidamente ejecutamos la Clase AplicacionConExcepcionPrintStackTrace y comprobamos como el entorno de ejecución Java no ha permitido que se cree un Objeto de tipo TeleRadioVirtual con un valor de canal negativo

Página anterior
Ignasi Pérez Valls
fundador-director Infosintesis Solutions Group
asesor-formador independiente
ignasiperez[ARROBA]javadabbadoo[PUNTO]org
Diciembre 2008
JavaDabbaDoo.org
Tu comunidad Java parlante. Cursos abiertos, tutoriales y mucho mucho más ...