Paquetes Los paquetes permiten agrupar una colección de clases e interfaces funcionalmente relacionadas asignándole un nombre Todo nombre en Java está dentro de un paquete Paquetes n n Java Arrays y Cadenas package nombrePaquete; // fichero como parte de un paquete El paquete default contiene todas las clases no definidas explícitamente en un paquete 1 Paquetes Java Arrays y Cadenas 2 Paquetes Librería A Librería B public class Text { .... } public class Text { .... } es.fdi.ucm.a es.fdi.ucm.b public class Text { .... } public class Text { .... } Mi programa Mi programa es.fdi.ucm.a.Text txt = new es.fdi.ucm.a.Text (); ... es.fdi.ucm.b.Text msg = new es.fdi.ucm.bText (); Text txt = new Text(); ... Text msg = new Text(); ¿Qué ¿Qué clase clase Text Text se se instancia? instancia? Java Arrays y Cadenas 3 Paquetes Para evitar colisión de nombres Sirven para definir bibliotecas de clases e interfaces n Arrays y Cadenas 4 Paquetes Definen contextos de denominación n Java Reutilización: no volver a inventar la rueda Permiten organizar el código de una gran aplicación Un paquete determina un subdirectorio del disco Java Arrays y Cadenas 5 Las declaraciones de los paquetes tienen que estar al principio de los ficheros fuente. Sólo se permite la declaración de un paquete en cada fichero fuente. //Clase Empleado del departamento de //finanzas de la compañía ABC. package abc.financeDept; public class Empleado { ... } Los nombres de los paquetes están jerarquizados separados por puntos. Java Arrays y Cadenas 6 1 Paquetes Paquetes La palabra reservada package debe aparecer en la primera línea del fichero fuente. Por lo general el nombre de los elementos de un paquete es todo en minúsculas. El nombre de las clases empieza en mayúscula y la primera letra de cada palabra añadida al nombre también. Los paquetes pueden anidarse n Convención para el nombrado de paquetes (para conseguir nombres únicos): n Java Arrays y Cadenas 7 Paquetes n Define una jerarquía: paquete.subpaquete.subpaquete.clase dominio.empresa.departamento.proyecto Java Arrays y Cadenas 8 La sentencia import dominio.empresa.departamento.proyecto (nombre de dominio Internet al revés) Ejemplo: es.ucm.sip.cursoJava Java Arrays y Cadenas 9 La sentencia import Uso de paquetes Se puede llamar a la clase Empleado como abc.financedept.Empleado o se puede utilizar la sentencia import y sólo el nombre de la clase Empleado. Java Arrays y Cadenas Indica al compilador dónde encontrar las clases. Debe preceder a todas las declaraciones de las clases. import abc.financeDept.*; public class Jefe extends Empleado{ String departamento; Empleado [] subordinados; } Java Arrays y Cadenas 10 11 Utilización de nombres de un paquete: n Usando un nombre completo: class ImprimeFecha1 ImprimeFecha1 {{ class public static static void void main main () () {{ public java.util.Date ahora ahora == new new java.util.Date java.util.Date(); java.util.Date(); System.out.println(ahora); System.out.println(ahora); }} }} Java Arrays y Cadenas 12 2 Uso de paquetes n Directorio de trabajo Los paquetes se guardan en directorios cuyos nombres coinciden con los de los paquetes. Usando la cláusula import: import java.util.Date; java.util.Date; import class ImprimeFecha2 ImprimeFecha2 {{ class public static static void void main main () () {{ public Date ahora ahora == new new Date(); Date(); Date System.out.println(ahora); System.out.println(ahora); }} }} Java Arrays y Cadenas 13 Control de acceso a miembros de una clase Importación de clases n package abc.financeDept public class Empleado{ } javac Empleado.java ¿Cuál es el directorio de Empleado.class? Java Arrays y Cadenas 14 classpath\abc\financeDept\Empleado.class Hay cuatro niveles de protección en función de los atributos de acceso y de la organización en paquetes No es necesario para el paquete java.lang w Por defecto: import java.lang.* n * permite referirse a todas las clases e interfaces de un paquete n n import java.*; n // ERROR: no vale para paquetes Publico, paquete, protegido y privado Ejemplo: Para importar la clase Applet: w import java.applet.Applet; // directamente la clase w import java.applet.*; // todos los nombres del paquete Java Arrays y Cadenas 15 Control de acceso a miembros de una clase n Si no se indica nada un miembro es accesible desde todo el paquete private w acceso sólo dentro de la clase n public w acceso desde cualquier lugar n protected w acceso en la clase, las subclases (en cualquier paquete) y desde las clases del mismo paquete Java Arrays y Cadenas Arrays y Cadenas 16 Control de acceso a miembros de una clase Atributos de acceso n Java 17 Modificador Misma Clase Mismo Paquete Subclase Universal public sí sí sí sí protected sí sí sí default sí sí private sí Java Arrays y Cadenas 18 3 Ejemplo control de acceso Ejemplo control de acceso El control de acceso se aplica tanto a atributos como a métodos métodos public // redefinición redefinición de de la la clase clase rectángulo rectángulo con con control control de de // acceso acceso public class class Rectangulo Rectangulo {{ public private int int x;// x;// accesible accesible sólo sólo dentro dentro de de la la clase clase private int y; // accesible dentro dentro del del paquete paquete (( por por defecto) defecto) int y; // accesible public int int ancho;// ancho;// accesible accesible desde desde todos todos los los sitios sitios public protected int int alto; alto; // accesible accesible desde desde el el paquete paquete yy protected // // desde las las subclases subclases // desde private int int calcularSuperficie() calcularSuperficie() // // accesible accesible sólo sólo private //dentro de de la la clase clase //dentro .……... {{ .……... }} }} Java Arrays y Cadenas 19 Llamadas (mensajes) métodos private 3 variables private 2 Una instancia Java 1Arrays y Cadenas 20 4