You are on page 1of 5

Lenguajes de Programaci on Curso 04-05. Pr actica 2.

Ing. T ec. Telecom. (Telem atica) Universitat de Val` encia

Objetivos

Modelizaci on de un problema mediante clases. Utilizaci on de la composici on. Creaci on de objetos y env o de mensajes. Clases de java.util

Indice
1. Algunas clases del paquete java.util 1.1. La clase StringTokenizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. La clase Hashtable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Tareas 1 1 2 3

1.
1.1.

Algunas clases del paquete java.util


La clase StringTokenizer

Para extraer informaci on de una cadena de texto normalmente hay que realizar la divisi on del texto en partes discretas o tokens. La clase StringTokenizer sirve para este prop osito ya que se puede utilizar para enumerar los tokens individuales contenidos en la cadena. Para poder utilizar esta clase se debe proporcionar la cadena a procesar y otra cadena formada por los delimitadores. La cadena de delimitadores por defecto consiste en: el espacio, la tabulaci on, nueva l nea y retorno de carro. La clase StringTokenizer ofrece 3 constructores:
StringTokenizer ( String str ) StringTokenizer ( S t r i n g str , S t r i n g delim ) S t r i n g T o k e n i z e r ( S t r i n g s t r , S t r i n g delim , boolean delimEsToken )

donde str es el String a separar, delim es el String que contiene los delimitadores y delimEsToken indica si queremos o no que los delimitadores sean tokens (los dos primeros constructores no devuelven los delimitadores como tokens). Los m etodos que vamos a utilizar se describen a continuaci on (el listado de todos los m etodos que se pueden utilizar se encuentra en documentaci on). M etodo
public boolean hasMoreElements()

Descripci on devuelve true si quedan en la cadena uno o m as tokens y devuelve false si estamos en el u ltimo token. devuelve el siguiente token como String y avanza al siguiente token.

public String nextToken()

El siguiente c odigo muestra un ejemplo de utilizaci on de esta clase.


... S t r i n g cadena = System . out . p r i n t l n ( \ El v a l o r e s \ + v ) ; ; S t r i n g T o k e n i z e r s t = new S t r i n g T o k e n i z e r ( cadena , . , + ( ) \ ; ) ;

juan.gutierrez@uv.es

P agina: 1

Lenguajes de Programaci on Curso 04-05. Pr actica 2.

Ing. T ec. Telecom. (Telem atica) Universitat de Val` encia

while ( s t . hasMoreTokens ( ) ) System . out . p r i n t l n ( s t . nextToken ( ) ) ; ...

Como resultado se obtendr a lo siguiente: System out println El valor es v

1.2.

La clase Hashtable

La clase Hashtable almacena pares del tipo clave/valor en una tabla de dispersi on. Al utilizar Hashtable se proporciona un objeto que sirve como clave y otro que sirve de valor que se desea vincular a esta clave. Un objeto de este tipo proporciona un modo r apido de inserci on y de b usqueda. Una analog a es un list n telef onico o un diccionario, dado un nombre proporcionar un n umero de tel efono o dada un palabra proporcionar una denici on. En un vector se obtienen los valores mediante un ndice entero. Con una tabla de dispersi on, no se utiliza un entero directamente sino que se utiliza lo que se denomina como c odigo de dispersi on. Los c odigos de dispersi on asignan un n umero a un objeto. El c odigo de dispersi on permite buscar un valor en un s olo lugar. Si no se encuentra nada tras convertir la clave al c odigo de dispersi on entonces la clave no se encuentra en la tabla. Cuando m as de una clave da el mismo c odigo de dispersi on se dice que ocurre una colisi on. Para trabajar con tablas de dispersi on es necesario que el algoritmo de dispersi on tenga un n umero peque no de colisiones. Para algunas clase como String y Date estos algoritmos ya est an implementados. Hay un par ametro conocido como factor de carga que indica lo llena que puede estar la tabla de dispersi on antes de que su capacidad sea aumentada. Cuando el n umero de elementos en la tabla excede el producto del factor de carga por la capacidad, la capacidad es incrementada autom aticamente llamando al m etodo rehash. Los constructores disponibles son

// Construye una t a b l a de d i s p e r s i o n v a c a con c a p a c i d a d i n i c i a l 1 1 y f a c t o r de c a r g a 0 . 7 5 Hashtable ( ) // Construye una t a b l a de d i s p e r s i o n v a c a con l a c a p a c i d a d dada y f a c t o r de c a r g a 0 . 7 5 Hashtable ( int i n i t i a l C a p a c i t y )

// Construye una t a b l a de d i s p e r s i o n con l a c a p a c i d a d dada y e l f a c t o r de c a r g a dado Hashtable ( int i n i t i a l C a p a c i t y , float loadFactor ) // Construye una t a b l a de d i s p e r s i o n a p a r t i r de un o b j e t o Map H a s h t a b l e (Map t )

A continuaci on se proporcionan algunos de los m etodos de esta clase (el listado de todos los m etodos que se pueden utilizar se encuentra en documentaci on).

juan.gutierrez@uv.es

P agina: 2

Lenguajes de Programaci on Curso 04-05. Pr actica 2.

Ing. T ec. Telecom. (Telem atica) Universitat de Val` encia

M etodo
public Object put(Object clave, Object valor)

Descripci on Inserta una clave y un valor en la tabla de dispersi on. Devuelve null si clave no existe en la tabla o el valor anteriormente asociado con clave si esta ya exist a previamente. devuelve el objeto asociado con clave. Si clave no est a en la tabla se devuelve null devuelve en n umero de pares clave/valor que hay en la tabla. aumenta el tama no de la tabla de dispersi on y redispersiona todas sus claves.

public Object get(Object clave) public int size() public void rehash()

La siguiente porci on de c odigo muestra un ejemplo de utilizaci on de la clase Hashtable


... H a s h t a b l e ht = new H a s h t a b l e ( 2 3 ) ; ht . put ( uno , new I n t e g e r ( 1 ) ) ; ht . put ( dos , new I n t e g e r ( 2 ) ) ; ht . put ( t r e s , new I n t e g e r ( 3 ) ) ; ht . put ( c u a t r o , new I n t e g e r ( 4 ) ) ;

System . out . p r i n t l n ( ( I n t e g e r ) ht . g e t ( uno ) ) ; System . out . p r i n t l n ( ( I n t e g e r ) ht . g e t ( t r e s ) ) ; System . out . p r i n t l n ( ( I n t e g e r ) ht . g e t ( c i n c o ) ) ; ...

Como resultado obtendr amos por pantalla: 1 3 null

2.

Tareas

Se pide modelizar mediante clases un problema. En una red local hay instalados una serie de ordenadores y de impresoras. Cada ordenador e impresora tiene (adem as de otros atributos) una direcci on IP (representada mediante un String en este caso) que es u nica. Los ordenadores y las impresoras se almacenaran en tablas de dispersi on (ver 1.2) utilizando como clave su direcci on IP. La descripci on de las clases que hay que realizar se indica a continuaci on:
c l a s s Ordenador { private S t r i n g i p ; private S t r i n g nombre ; Ordenador ( S t r i n g ip , S t r i n g nombre ) {} // D e v u e l v e l a IP public S t r i n g d e v u e l v e I P ( ) {} // D e v u e l v e e l nombre public S t r i n g devuelveNombre ( ) {} // O c u l t a t o S t r i n g ( ) de O b j e c t

juan.gutierrez@uv.es

P agina: 3

Lenguajes de Programaci on Curso 04-05. Pr actica 2.

Ing. T ec. Telecom. (Telem atica) Universitat de Val` encia

// mostrando IP y nombre public S t r i n g t o S t r i n g ( ) {} }

class Impresora { private S t r i n g i p ; private S t r i n g nombre ; private boolean e s t a d o ; I m p r e s o r a ( S t r i n g ip , S t r i n g nombre ) {} // cambia e l e s t a d o e n c e n d i d a / apagada public void e s t a b l e c e r E s t a d o ( boolean nuevoEstado ) {} // t r u e s i l a i m p r e s o r a e s t a e n c e n d i d a f a l s e s i n o // s i e s t a e n c e n d i d a d e b e mostrar e l mensaje Imprimiendo en + nombre public boolean i m p r i m i r ( ) {} // D e v u e l v e l a d i r e c c i o n i p de l a i m p r e s o r a public S t r i n g d e v u e l v e I P ( ) {} // O c u l t a t o S t r i n g ( ) de O b j e c t // mostrando IP , nombre y e s t a d o public S t r i n g t o S t r i n g ( ) {} }

c l a s s RedLocal { private H a s h t a b l e o r d e n a d o r e s ; private H a s h t a b l e i m p r e s o r a s ; private S t r i n g nombre ; RedLocal ( S t r i n g n ) {}

public void nuevoOrdenador ( Ordenador ) {} public void q u i t a O r d e n a d o r ( Ordenador ) {} public void n u e v a I m p r e s o r a ( I m p r e s o r a ) {} // n u l l s i no e x i s t e public Ordenador getOrdenador ( S t r i n g IP ) {} // n u l l s i no e x i s t e public I m p r e s o r a g e t I m p r e s o r a ( S t r i n g IP ) {} // t r u e s i l a i m p r e s o r a e x i s t e y e s t a encendida // f a l s e s i l a i m p r e s o r a no e x i s t e o e s t a apagada public boolean i m p r i m i r ( S t r i n g IP ) {} // D e v u e l v e una cadena con i n f o r m a c i o n s o b r e // t o d o s l o s o r d e n a d o r e s e i m p r e s o r a s i n s t a l a d o s // en e s t a r e d l o c a l public S t r i n g t o S t r i n g ( ) {} }

c l a s s PruebaRedLocal { // Crea un ordenador a p a r t i r de l a i n f o r m a c i o n de l a cadena // Se d e b e u t i l i z a r l a c l a s e S t r i n g T o k e n i z e r private s t a t i c Ordenador c r e a O r d e n a d o r ( S t r i n g cadena ) {}

juan.gutierrez@uv.es

P agina: 4

Lenguajes de Programaci on Curso 04-05. Pr actica 2.

Ing. T ec. Telecom. (Telem atica) Universitat de Val` encia

// Crea una i m p r e s o r a a p a r t i r de l a i n f o r m a c i o n de l a cadena // Se d e b e u t i l i z a r l a c l a s e S t r i n g T o k e n i z e r private s t a t i c I m p r e s o r a c r e a I m p r e s o r a ( S t r i n g cadena ) {} public s t a t i c void main ( S t r i n g [ ] a r g s ) { // Crea una r e d l o c a l RedLocal r e d = new RedLocal ( A ) ;

// Se o b t i e n e i n f o r m a c i o n de o r d e n a d o r e s e i m p r e s o r a s u t i l i z a n d o l a c l a s e que s e // p r o p o r c i o n a String or ; Ordenador ord ; f o r ( i n t i =1; i <=10; i ++){ o r = U t i l i d a d . daOrdenador ( ) ; ord = c r e a O r d e n a d o r ( o r ) ; r e d . nuevoOrdenador ( ord ) ; } S t r i n g im ; I m p r e s o r a imp ; f o r ( i n t i =1; i <=5; i ++){ im = U t i l i d a d . d a I m p r e s o r a ( ) ; imp = c r e a I m p r e s o r a ( o ) ; r e d . n u e v a I m p r e s o r a ( imp ) ; }

// Obten ci o n de una Impresora por su IP S t r i n g IP = . . . ; imp = r e d . g e t I m p r e s o r a ( IP ) ; imp . e s t a b l e c e r E s t a d o ( f a l s e ) ; // Se imprime en una de te r mi n ad a i m p r e s o r a r e d . i m p r i m i r ( IP ) ; // . . .

// Se muestra l a r e d l o c a l System . out . p r i n t l n ( r e d ) ; } }

Se proporciona una clase Utilidad que tiene dos m etodos p ublicos y est aticos que se deben utilizar para obtener la informaci on necesaria para crear un ordenador o una impresora. El String que devuelven estos m etodos contiene una direcci on IP, una coma y el nombre del ordenador (o de la impresora). Un ejemplo de lo que se puede obtener es: 127.156.17.53, ant.uv.es El siguiente c odigo muestra los m etodos p ublicos de la clase Utilidad.
public c l a s s U t i l i d a d { //Da una l i n e a d e l f i c h e r o ordenador . t x t cada v e z que s e l e l l a m a public s t a t i c S t r i n g daOrdenador ( ) ; //Da una l i n e a d e l f i c h e r o i m p r e s o r a . t x t cada v e z que s e l e l l a m a public s t a t i c S t r i n g d a I m p r e s o r a ( ) ; }

juan.gutierrez@uv.es

P agina: 5

You might also like