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 14: Operativa

Este es el nuevo diagrama de Clases de diseño con el último cambio

Así es como se ven reflejadas las variables de Clase canal y la variables de instancia volumen en la memoria de nuestro ordenador

Esta es la Clase Televisor modificada

package paqtvestandar;

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

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

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

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

 public int getCanal() {
  return canal;
 }

 public static void setCanal(int valorCanal) {
  if (
valorCanal < 0){
   canal = 0;
  }
  else {
   canal =
valorCanal;
  }
 }


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

Compilamos la Clase Televisor.

Ahora nos vamos a crear una Clase llamada Aplicacion5 que en vez de iterar los diferentes televisores con matrices o vectores para cambiar el canal de todos los televisores, lo hagamos realizando simplemente una llamando a un sólo método.

Este es parte del código fuente de la Clase Aplicacion5 perteneciente al paquete paqtienda

package paqtienda;
import paqtvestandar.Televisor;
import paqtvestandar.TelevisorVirtual;
import paqtvfabricante.TelevisorPlasma;

public class Aplicacion5 {

 public static void main(String[] args) {
  TelevisorVirtual tv1 = new TelevisorVirtual();
  TelevisorVirtual tv2 = new TelevisorVirtual();
  TelevisorPlasma tv3 = new TelevisorPlasma();
  TelevisorPlasma tv4 = new TelevisorPlasma();

  
// Cambiar el canal de todas las instancias de tipo Televisor   
  Televisor....

  System.out.println("El canal del televisor tv1 es el: " + tv1.getCanal());
  System.out.println("El canal del televisor tv3 es el: " + tv3.getCanal());

  tv1.subirCanal();

  System.out.println("El canal del televisor tv1 es el: " + tv1.getCanal());
  System.out.println("El canal del televisor tv3 es el: " + tv3.getCanal());
 }
}

Con una sola invocación al método setCanal(5), todos los televisores estarán mostrando el canal 5 y con una invocación al método subirCanal todos los televisores mostrarán el canal 6 tal y como podemos ver al ejecutar la Clase Aplicacion5


Compara tu código con la solución propuesta

Cuando trabajemos con variables de Clase no nos podemos permitir que haya un solo método que interactúe con una variable de Clase y que este método no sea estático.

Si el mismo código que acabamos de escribir lo tuviéramos que releer de aquí a 6 meses ya sea debido a una amplicación de la aplicación o a un fallo de ésta la siguiente línea de código nos traicionaría

  tv1.subirCanal();

Por tanto lo correcto sería que el método subirCanal(...) fuera estático y para dejar claro que estamos subiendo el canal de todos las instancias de tipo Televisor modificaríamos la invocación al método subirCanal(...) de la siguiente forma

  Televisor.subirCanal();

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 ...