La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Paquetes e interfaces.

Presentaciones similares


Presentación del tema: "Paquetes e interfaces."— Transcripción de la presentación:

1 Paquetes e interfaces

2 Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos. Es muy conveniente ya que evita conflictos de nombres cuando se manejan un gran numero de clases e interfaces

3 Paquetes Se almacenan de manera jerárquica, utilizando los directorios del sistema de archivos para almacenar los paquetes. Se importan explícitamente en las definiciones de nuevas clases. Permite restringir la visibilidad de las clases que contiene Se pueden definir miembros de una clase que solo sean accesibles por miembros del mismo paquete

4 Definición de un paquete
La siguiente instrucción se incluye al inicio del archivo fuente (.java) package nombre-paquete Si no se incluye la instrucción package en el archivo fuente, entonces java agrega las clases de ese archivo fuente a un paquete por defecto (default package). Si se declara que una clase esta dentro de un paquete llamado PrimerPaquete, entonces el archivo fuente de esa clase se debe almacenar en un directorio llamado PrimerPaquete. Se puede crear una jerarquía de paquetes dentro de paquetes separando los niveles por puntos. Esta es la jerarquía se debe reflejar en el sistema de archivos de desarrollo de java

5 Por ejemplo: package java.awt.imagen; Significa que imagen esta almacenada en la siguiente jerarquía de directorios. java => awt Imagen

6 Usando paquetes Se pueden utilizar las clases publicas de un paquete de dos formas. Utilizando el nombre completo del paquete. java.util.GregorianCalendar hoy= new java.util.GregorianCalendar(); Lo cual resulta muy compolicado o Lo mas simple y común en importar el paquete. import java.util.*; GregorianCalendar hoy= new GregorianCalendar();

7 Como el compilador localiza los paquetes
Es importante recalcar que todos los archivos del paquete se deben de encontrar en un subdirectorio que tenga el mismo nombre del paquete. Estos subdirectorios no deben de estar en la raíz del sistema de directorios. Java busca los paquetes, primero en todos los archivos del paquete por defecto. Los archivos del paquete por defecto están localizados en los directorios definidos en el CLASSPATH. Es responsabilidad del programador poner los paquetes en los subdirectorios correctos.

8 Importante para ejecutar paquetes
Cuando se intenta poner una clase en un paquete, el primer problema es que la estructura de directorios debe coincidir con la jerarquía de paquetes exactamente. No se puede renombrar un paquete sin renombrar el directorio en el cual están almacenadas las clases. Otro problema, cuando desee llamar a una clase que se encuentre en un paquete deberá prestar atención a su ubicación en la jerarquía de paquetes. Por ejemplo, se crea una clase llamada PaquetePrueba en un paquete llamado prueba. Para ello se crea el directorio llamado prueba y se pone en él PaquetePrueba.java y se compila. Si intenta ejecutarlo, el intérprete no lo encontrará. Esto se debe a que esta clase se encuentra ahora en un paquete llamado prueba y no nos podemos referir a ella simplemente con PaquetePrueba. sin embargo si es posible referirse a cualquier paquete enumerando su jerarquía de paquetes, separando los paquetes por puntos. Por lo tanto, si intenta ahora ejecutar ahora Java con prueba.PaquetePrueba, el intérprete tampoco lo encontrará. El motivo de este nuevo fracaso se encuentra en la variable CLASSPATH. Probablemente contenga algo parecido a ".;C:\java\classes" que le dice al intérprete que busque en el directorio de trabajo actual y en el directorio de instalación del Equipo de herramientas de desarrollo de Java estándar. El problema es que no hay un directorio prueba en el directorio de trabajo actual porque usted ya está en el directorio prueba. Tiene dos opciones en este momento: cambiar de directorio un nivel arriba y ejecutar "java prueba.PaquetePrueba", o añadir el extremo de su jerarquía de clases de desarrollo a la variable de entorno CLASSPATH. Después podrá utilizar "java prueba.PaquetePrueba" desde cualquier directorio y Java encontrará el archivo .class adecuado. Si trabaja con su código fuente en un directorio llamado C:\mijava, dé a CLASSPATH el valor ".;C:\mijava;C:\java\classes".

9 Un ejemplo de paquetes

10 Interfaces Son sintácticamente como las clases, pero no tienen variables de instancia y los métodos declarados no contienen cuerpo. Se utilizan para especificar lo que debe hacer una clase, pero no cómo lo hace. Una clase puede implementar cualquier número de interfaces.

11 La instrucción interface
La forma general de una interfaz es acceso interface nombre { tipo_devuelto nombre_de_método1(lista_de_parámetros); tipo_dato nombre_var = valor; } acceso puede ser public o no usarse. Si no se utiliza (acceso por defecto) la interfaz está sólo disponible para otros miembros del paquete en el que ha sido declarada. Si se usa public, puede ser usada por cualquier código (todos los métodos y variables son implícitamente públicos). Los métodos de una interfaz son básicamente métodos abstractos (no tienen cuerpo de implementación). Un interfaz puede tener variables pero serán implícitamente final y static.

12 Por que interfaces Los interfaces se utilizan para definir un protocolo de comportamiento que puede ser implementado por cualquier clase del árbol de clases. Los interfaces son útiles para. capturar similitudes entre clases no relacionadas sin forzar una relación entre ellas. declarar métodos que una o varias clases necesitan implementar. revelar la interfase de programación de un objeto sin mostrar sus clases (los objetos de este tipo son llamados objetos anónimos y pueden ser útiles cuando se comparte un paquete de clases con otros desarrolladores).

13 Utilizar un Interface Para utilizar un interface se debe escribir una clase que lo implemente. Una clase declara todos los interfaces que implementa en su declaración de clase. Para declarar que una clase implementa uno o más interfaces, se utiliza la palabra clave implements seguida por una lista delimitada por comas con los interfaces implementados por la clase. Una vez declarada la interfaz, puede ser implementada por varias clases. Cuando implementemos un método de una interfaz, tiene que declararse como public. Si una clase implementa dos interfaces que declaran el mismo método, entonces los clientes de cada interfaz usarán el mismo método.

14 Ejemplo de interfase interface coleccion { int MAXIMO = 500;
void añadir(Object obj); void borrar(Object obj); Object buscar(Object obj); int contadorActual(); }

15 continuación class PilaFIFO implements coleccion { . . .
void añadir(Object obj) { } void borrar(Object obj) { } Object buscar(Object obj) { } int contadorActual() { } }

16 Conceptos de Hilos Un hilo -algunas veces llamado contexto de ejecución o proceso ligero- es un flujo de control secuencial dentro de un programa Un único hilo es similar a un programa secuencial; es decir, tiene un comienzo, una secuencia y un final, además en cualquier momento durante la ejecución existe un sólo punto de ejecución. un hilo no es un programa; no puede correr por sí mismo, corre dentro de un programa

17 Creación de un hilo Una forma de crear un hilo es heredando de Thread
class MiThread extends Thread { public void run() { . . . } La otra forma es utilizando la interface Runnable public class MiThread implements Runnable { Thread t; // Ejecución del thread una vez creado

18 El método run() Antes que nada, necesitamos proveer a cada hilo con un método run para indicarle qué debe hacer. El código de este método implementa el comportamiento en ejecución del hilo y puede hacer, prácticamente cualquier cosa capaz de ser codificada en Java. Existen dos técnicas para proveer un método run para un hilo: Haciendo una subclase de Thread y sobrecargando run Implementando la interface Runnable. Thread es una clase, pero Runnable es una interface.

19 Manejo de Prioridades de los hilos
La gran ventaja que ofrecen los hilos es que corren de manera concurrente. La mayoría de las computadoras tienen un sólo procesador, por lo tanto los hilos corren uno a la vez de forma tal que proveen la ilusión de concurrencia (esto es llamado scheduling). El sistema de ejecución de Java soporta un algoritmo determinístico (para el scheduler) llamado fixed priority scheduling. Este algoritmo asigna tiempo de ejecución a un hilo basado en su prioridad relativa a los demás hilos que están listos para ejecutarse. Cuando se crea un nuevo hilo, hereda su prioridad del hilo que lo crea, ésta puede ser modificada con el método setPriority.

20 Prioridad Si dos hilos con la misma prioridad están esperando que el CPU los ejecute, el scheduler escoge uno utilizando round-robin (i.e. escoge uno aleatoriamente, se supone que round-robin ofrece iguales probabilidades de ejecución a los hilos en cuestión). El hilo escogido para ejecución, corre hasta que alguna de estas condiciones sea verdadera: Un hilo con mayor prioridad está listo para ejecución. El hilo cede su lugar (yields), o su método run termina. En sistemas que soportan rebanadas de tiempo (time slicing), su tiempo asignado ha expirado

21 Sincronización. Cuando tenemos varios hilos, muchas veces deseamos que éstos pueden compartir datos, por lo tanto, es indispensable saber sincronizar sus actividades; esto también nos permitirá evitar inanición y abrazos mortales. En muchas situaciones, hilos que se ejecutan concurrentemente comparten información y deben considerar el estado de las actividades de los demás hilos.

22 Suspensión de un Thread
Puede resultar útil suspender la ejecución de un thread sin marcar un límite de tiempo. Si, por ejemplo, está construyendo un applet con un thread de animación, querrá permitir al usuario la opción de detener la animación hasta que quiera continuar. No se trata de terminar la animación, sino desactivarla. Para este tipo de control de thread se puede utilizar el método suspend(). t1.suspend(); El thread es suspendido indefinidamente y para volver a activarlo de nuevo necesitamos realizar una invocación al método resume(): t1.resume();

23 Parada de un Thread El último elemento de control que se necesita sobre threads es el método stop(). Se utiliza para terminar la ejecución de un thread: t1.stop(); Esta llamada no destruye el thread, sino que detiene su ejecución. La ejecución no se puede reanudar ya con t1.start(). Cuando se desasignen las variables que se usan en el thread, el objeto thread (creado con new) quedará marcado para eliminarlo y el garbage collector se encargará de liberar la memoria que utilizaba .

24

25

26


Descargar ppt "Paquetes e interfaces."

Presentaciones similares


Anuncios Google