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

Los paquetes

La forma general de la sentencia package multinivel es la siguiente

  package paq1[.paq2[.paq3]];

Para utilizar un paquete o librería Java se incluye la sentencia import. La forma general de la sentencia import es la siguiente

  import paq1[.paq2[.paq3]].(nombreClase | *);

Los paquetes son un mecanismo que

En todos los pasos anteriores hemos simulado estar en una Empresa de televisores creando

Podemos asegurar que las Clases Televisor, TelevisorVirtual y Aplicacion siempre han pertenecido a la Empresa de televisores porque, todas ellas están incluidas en el paquete paqtvestandar. Esta es su representación en UML

El hecho de que una Clase pertenezca a un paquete u otro tiene una importancia vital sobre el control de acceso o ámbito.

Control de acceso friendly

Además de los controles de acceso o ámbito public y private, existe otro llamado friendly

Un error muy típico en la primera puesta en marcha de una aplicación Java en una empresa, es que los ámbitos public y friendly se han solapado. Es decir, los desarrolladores muy probablemente han estado trabajando bajo el paraguas de un mismo paquete y nunca han tenido problemas de visibilidad a los métodos friendly

Para ilustrar el mencionado error , podemos ver los siguientes Diagramas de Clases de diseño que muestra como una Clase Aplicacion perteneciente al paquete paqusuario interactúa con las Clases del paquete paqtvestandar


Y para ver el mencionado error en código Java, vamos a seguir los siguientes pasos

Modificamos la Clase TelevisorVirtual

package paqtvestandar;

public class TelevisorVirtual extends Televisor {
 private boolean sonido = true;

 void setSonido(boolean valorSonido){ // Quitamos el modificador public
  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.

Ejecutamos la Clase Aplicacion del paquete paqtvestandar y como cabe esperear que la ejecución es correcta.

Ahora nos creamos un paquete llamado paqusuario. Este paquete simula ser la vivienda donde se aloja la Clase Aplicacion, es decir el usuario que quiere ver el televisor TelevisorVirtual que nos ha comprado a nuestra empresa llamada paqtvestandar

package paqusuario;
import paqtvestandar.TelevisorVirtual;

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

Ejecutamos la nueva Clase Aplicacion y comprobamos que el compilador se queja indicándonos que el método setSonido() no es público

NetBeans 6 - Error: setSonido(boolean) is not public in paqtvestandar.TelevisorVirtual;  cannot be accessed from outside package

Y finalmente

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