paquetes e interfaces. paquetes un paquete es un contenedor de clases, que se usa para mantener el...

26
Paquetes e interfaces

Upload: maria-dolores-castillo-vargas

Post on 31-Jan-2016

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

Paquetes e interfaces

Page 2: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

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

Page 3: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

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

Page 4: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

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

Page 5: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

Por ejemplo: package java.awt.imagen;

Significa que imagen esta almacenada en la siguiente jerarquía de directorios.

java=> awt

Imagen

Page 6: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

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

Page 7: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

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.

Page 8: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

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

Page 9: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

Un ejemplo de paquetes

Page 10: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

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.

Page 11: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

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.

Page 12: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

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

Page 13: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

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.

Page 14: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

Ejemplo de interfase

interface coleccion

{ int MAXIMO = 500;

void añadir(Object obj);

void borrar(Object obj);

Object buscar(Object obj);

int contadorActual(); }

Page 15: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

continuación

class PilaFIFO implements coleccion

{ . . .

void añadir(Object obj) { . . . }

void borrar(Object obj) { . . . }

Object buscar(Object obj) { . . . }

int contadorActual() { . . . }

}

Page 16: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

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

Page 17: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

Creación de un hilo

Una forma de crear un hilo es heredando de Threadclass MiThread extends Thread { public void run() { . . . }

La otra forma es utilizando la interface Runnablepublic class MiThread implements Runnable { Thread t; public void run() { // Ejecución del thread una vez creado } }

Page 18: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

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.

Page 19: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

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.

Page 20: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

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

Page 21: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

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.

Page 22: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

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

Page 23: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

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 .

Page 24: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos
Page 25: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos
Page 26: Paquetes e interfaces. Paquetes Un paquete es un contenedor de clases, que se usa para mantener el espacio de nombres de clase, dividido en compartimentos

http://www.geocities.com/CollegePark/Quad/8901/cap05.htm

http://www.programacion.com/java/tutorial/java_basico/30/

http://leo.ugr.es/~fjgc/CLDC/transjava/node9.html

http://pisuerga.inf.ubu.es/lsi/Invest/Java/Tuto.Oct98/2_Lengua/5_Interf.htm