AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases...

62
Corina Flores V. Programa MEMI Por Corina Flores Villarroel [email protected] UMSS - Programa MEMI AGRUPANDO OBJETOS (Parte-III)

Transcript of AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases...

Page 1: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Por Corina Flores Villarroel [email protected]

UMSS - Programa MEMI

AGRUPANDO OBJETOS (Parte-III)

Page 2: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Contenido   Conceptos a saber:

  String   ArrayList   Random   HashMap   HashSet   Iterator   Arrays

Page 3: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Introducción   A través de este capítulo conoceremos

nuevas bibliotecas de clases que Java ofrece.

  Entre ellas, aquella que genera números randómicos, hash maps, sets y string.

Page 4: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Documentación para bibliotecas de clases   La biblioteca (librería) de Java es grande.

Consiste de miles de clases, cada una conteniendo muchos métodos con y sin parámetros, con y sin tipos de retorno. Lo que hace imposible de memorizarlo todo.

  Sin embargo, es importante conocer cómo explorar y entender esta biblioteca.

Page 5: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Documentación para bibliotecas de clases   Afortunadamente, la biblioteca de java esta

bien documentada. Esta documentación esta disponible en formato HTML posible de ver con el uso de un navegador.

  Leer y entender esta documentación será una de las tareas que aprenderemos en este capítulo.

Page 6: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Documentación para bibliotecas de clases   Así aprenderemos a:

  Conocer el nombre de las clases   El nombre de los métodos   Los parámetros y tipos de retorno de los métodos   Y, exactamente qué hacen estos métodos.

Page 7: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

JavaDocs   Javadoc es un standard industrial para documentar clases de

Java ** * A class to maintain an arbitrarily long list of notes. * Notes are numbered for external reference by a human user. * In this version, note numbers start at 0. * * @author David J. Barnes and Michael Kolling. * @version 2006.03.30 */ public class Notebook { // Storage for an arbitrary number of notes. private ArrayList<String> notes;

/** * Perform any initialization that is required for the * notebook. */ public Notebook() {

Page 8: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

¿Para qué documentar?   Para hacer más comprensible el código fuente a otros

programadores que tengan que trabajar con él, ya sea porque forman parte del grupo de desarrollo.

  Para facilitar que el programa puede ser mantenido o modificado por otra persona distinta al programador inicial.

  También resulta muy útil durante la depuración y el mantenimiento del programa por el propio programador, al paso del tiempo las decisiones se olvidan y surgen dudas hasta en el propio programador.

Page 9: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

¿Qué documentar?   Las clases   Variables   Métodos   Y todo aquello que se considere importante

Page 10: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

¿Qué documentar?   Al documentar debemos explicar por qué se hace así una

clase, un método, etc. Esto se traduce en:   ¿de qué se encarga una clase? ¿un paquete?   ¿qué hace un método?   ¿cuál es el uso esperado de un método?   ¿para qué se usa una variable?   ¿cuál es el uso esperado de una variable?   ¿qué algoritmo estamos usando? ¿de dónde lo hemos

sacado?   ¿qué limitaciones tiene el algoritmo? ¿... la implementación?   ¿qué se debería mejorar ... si hubiera tiempo?

Page 11: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Generar documentación con BlueJ   BlueJ puede ayudar en la documentación de clases Para usar una clase, lo único que se necesita conocer

de ella es la interfaz pública:

• campos: sus nombres y tipos, y descripción • métodos: sus cabeceras y descripción de lo que hacen

Se puede extraer esta información de manera automática, por medio de herramientas de documentación.

Elegir en la ventana del proyecto: Tools => Project documentation

Page 12: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Generar documentación con BlueJ

Page 13: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Generar documentación con BlueJ

Page 14: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Documentación de Java

Page 15: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

El sistema de soporte técnico   Este ejemplo, trata de un programa que provee el

soporte técnico a clientes de una compañía de software. Esta compañía tiene un departamento que se encarga de dar el soporte técnico a través de llamadas de clientes quienes piden ayuda con sus problemas técnicos.

  El programa establece un diálogo con el usuario a través del envío de mensajes respuestas a las consultas que el cliente le hace.

Page 16: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

El sistema de soporte técnico   Para ingresar las consultas del usuario, el programa

debe permitir escribir texto a través del teclado.

  Cómo hacerlo?, utilizando la clase Scanner del paquete util de Java

Page 17: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

El sistema de soporte técnico   Veamos el modelo del ejemplo del proyecto

SoporteTecnico

Page 18: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

El sistema de soporte técnico public class SistemaSoporte { private InputReader lee; private Responder responde;

/** * Crea al sistema de soporte. */ public SistemaSoporte() { lee = new InputReader(); responde = new Responder(); }

Page 19: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

El sistema de soporte técnico   Examinemos las clases participantes

  InputReader, permite obtener una cadena entrada desde afuera (terminal)

  Responder, genera una respuesta

Page 20: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

El sistema de soporte técnico   A su vez:

  InputReader, tiene un método getInput que permite ingresar una línea de entrada desde afuera.

String entrada = lee.getInput();

public String getInput() { System.out.print("> "); // muestra el prompt String escribeLinea = lector.nextLine();

return escribeLinea; }

Page 21: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

El sistema de soporte técnico   Responder, tiene un método generaRespuesta que

permite siempre retornar una cadena .

String respuesta= responde.generaRespuesta();

public String generaRespuesta() { return "Hemos tomado nota de su problema. Algo más?..."; }

Page 22: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

El sistema de soporte técnico   Veamos con atención el método comenzar()

public void comenzar() { boolean finalizado = false;

imprimeBienvenida();

while(!finalizado) { String entrada = lee.getInput(); … }

imprimeDespedida();

}

Page 23: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

private void imprimeBienvenida() { System.out.println("Bienvenid@ al sistema de soporte tecnico de VIVA."); System.out.println(); System.out.println("Por favor, cuéntenos ... ¿cúal es su problema?."); System.out.println("Nosotros le ayudaremos cualquiera que sea éste."); System.out.println("Para terminar nuestro diálogo, por favor escriba ... 'chau', gracias!"); }

El sistema de soporte técnico   El método imprimeBienvenida()

Page 24: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

El sistema de soporte técnico   Volviendo al método start(), encontramos al método

startsWith()

while(!finalizado) { String entrada = lee.getInput();

if(entrada.startsWith("chau")) { finalizado = true; } else {

Testea si la cadena de entrada comienza con La palabra ‘chau’

Page 25: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Leyendo la documentación de clases   Desde el menú Tools de BlueJ, seleccionar la

opción Use Library Class …

  Este abrirá un browser (navegador) que mostrará la página principal que documenta las API de Java.

Page 26: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Leyendo la documentación de clases   Así como:

Nombre de la clase

Descripción de la clase

Page 27: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Leyendo la documentación de clases   Así como:

Constructores y métodos de la clase

Page 28: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Interfaces vs. Implementación   Sintetizando, la documentación incluye diferentes piezas de

información. Entre ellas se pueden citar:   El nombre de la clase   Una descripción general del propósito de la clase   Una lista de constructores y métodos de la clase   Los parámetros y tipos de retorno para cada constructor y

métodos   Una descripción del propósito de cada constructor y método.

  A toda esta información se denomina Interface de una clase.La, Interface describe la visibilidad pública de una clase

Page 29: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Interfaces vs. Implementación   El código fuente, llega a ser la escena donde las clases

trabajan, a esto se llama Implementación de una clase

  Comúmente los programadores trabajan de manera simultáneamente en la implementación de grandes programas y en la interface para hacer uso de las clases que necesita.

Page 30: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Usando métodos de la librería de clases   Volviendo al ej. SoporteTecnico … deseamos

mejorar el procesamiento de la cadena ingresada.

  Por ejemplo: ¿qué pasa si el usuario ingresa

  ‘Chau’ en vez de ‘ chau’

  Desearíamos ajustar el texto de entrada. Es decir, crear una nueva cadena a partir de ésta.

// Comienza con mayúscula // Comienza con un espacio

Page 31: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Usando métodos trim() y toLowerCase()   Abrir el proyecto SoporteTecnico2 y veamos el

método comenzar()

while(!finalizado) { String entrada = lee.getInput().trim().toLowerCase();

if(entrada.startsWith("chau")) { finalizado = true; }

Page 32: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Usando métodos trim() y toLowerCase()   El método trim(), elimina los espacios de la

cadena ingresada.   Por ejem. entrada = entrada.trim(); // almacena en input

una cadena sin espacios.   Insertando en nuestro código fuente de

SistemaSoporte1, tendríamos algo como sigue: String entrada = lee.getInput(); entrada = entrada.trim();

  Estas dos líneas pueden ser escritas también como: String entrada = lee.getInput().trim()

Page 33: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Usando métodos trim() y toLowerCase()   El método toLowerCase(), convierte la cadena

ingresada a minúsculas.   Por ejemplo:

String entrada = lee.getInput().trim().toLowerCase();

Obtiene una cadena

Elimina los espacios de la cadena

Convierte a minúsculas la cadena

Page 34: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Chequeando la igualdad de cadenas   Una forma de intentar chequear si la cadena de

entrada es “chau” en vez de preguntar si comienza con “chau” se podría escribir …

If (entrada == “chau”) { … }

El operador == chequea si cada lado de los operando refieren al mismo objeto, no si ellos tienen el mismo valor

Esto es incorrecto!!

Page 35: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Chequeando la igualdad de cadenas   Una solución es utilizando el método equals, que

permite verificar si el valor de dos objetos cadenas es el mismo. Así:

If (entrada.equals(“chau”)) { … }

Page 36: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Añadiendo comportamiento randómico   Un problema en el proyecto SoporteTecnico1 es que,

siempre da la misma respuesta, independiente de la cadena que ingresa el usuario.

  Podríamos mejorar este problema, incluyendo un conjunto de frases con los cuales responder.

  El programa, seleccionaría aleatoriamente (randómicamente) una frase para responder.

  Usaremos un arrayList para almacenar alguna cadena de respuesta, generaremos un número entero aleatoriamente, y utilizaremos este número como índice de la lista de frases como respuestas.

Page 37: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

La clase random   La librería de clases de Java, contiene una clase

Random que ayuda en la generación números aleatorios (randómicos).

  Para generar un número randómico, tenemos que:   Crear una instancia de la clase Random, y   Hacer una llamada a un método de la instancia para

conseguir el número.

Page 38: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

La clase random   Así en el proyecto SoporteTecnico2 …

encontramos en la clase Responder

import java.util.ArrayList; import java.util.Random;

public class Responder { private Random randomGenerator; private ArrayList<String> respuestas;

Page 39: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

La clase random   Así en el proyecto SoporteTecnico2 …

encontramos en la clase Responder y su constructor …

public Responder() { randomGenerator = new Random(); respuestas = new ArrayList<String>(); llenarRespuestas(); }

Page 40: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

La clase random   Así en el proyecto SoporteTecnico2 …

encontramos en la clase Responder Elige un número randómico para el índice de la lista de respuestas. El número estará entre 0 y el tamaño -1 de la lista

public String generateResponse() { int indice = randomGenerator.nextInt(respuestas.size()); return respuestas.get(indice); }

2 1 3

4 5

Page 41: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

La clase random

2

1

3

4

5

Consigue el tamaño de la lista de frases, llamando al Método size. Genera un número randómico entre 0 y el tamaño - 1

Almacena el número randómico en la variable local indice Recupera la respuesta en la posicion del indice con El metodo get.

Retorna la frase resultante.

Page 42: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Números randómicos con rango limitado   Los números randómicos se generan en rango

limitado de enteros (-2147483648 a 2147483647).

  El método nextInt(int n) de la clase Random, por ejemplo, genera un número randómico entre 0 y n-1

Page 43: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Generando respuestas randómicas   Podemos extender la clase Responder para

seleccionar una respuesta a partir de una lista predefinida de frases.

  Así: import java.util.ArrayList; import java.util.Random;

public class Responder { private Random randomGenerator; private ArrayList<String> respuestas;

Page 44: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Generando respuestas randómicas   En el constructor …

public Responder() { randomGenerator = new Random(); respuestas = new ArrayList<String>(); llenarRespuestas(); }

Page 45: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Generando respuestas randómicas   El método llenarRespuestas() …

private void llenarRespuestas() { respuestas.add("No estamos seguros de comprender su problema. Por favor, describanos mas detalles ..."); respuestas.add("Es un problema de conexion, es importante que revise si el moden esta encendido. \n" + "Podría indicarnos si la luz derecha esta encendida?"); respuestas.add("Muy bien!!. Puede hacer ahora la prueba?..."); respuestas.add("Necesito saber su número de IP, dejeme buscar."); respuestas.add("Ok, tenemos apuntado su reclamo, de inmediato verificaremos el problema"); respuestas.add("Podría por favor indicarnos el modelo de su máquina?. Qué sistema operativo maneja?"); respuestas.add("El problema que nos indica es raro. Nunca hemos tenido una queja así\n" + "pero ... permítanos consultar con el experto?"); respuestas.add("Aguardemé un momento por favor, ... en este instante le paso con el experto!"); respuestas.add("Podría dejar su número telefónico, para devolverle la llamada?. Gracias!"); }

Page 46: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Generando respuestas randómicas

  Se pide hacer abrir el proyecto SoporteTecnico2, examinar su codigo y ejecutar.

Page 47: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Clases parametrizables o genericas

  Son modelos de clases o tambien vistos como contenedores.

  Una clase parametrizable es una clase que es usada para crear una familia de otras clases.

  Una clase parametrizable no puede ser utilizada tal cual. Conviene primero instanciarla, a fin de obtener una clase concreta que podrá a su vez ser instanciada en objetos.

Page 48: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Clases parametrizadas   Ejemplo:

  ArrayList<E>   HashMap<K, V>

Informacion extra

E, K, V son nombres de clases, los que a su vez deben ser instanciados.

Clases parametrizadas

o

Clases genericas

Page 49: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Clases parametrizadas   Por ejemplo:

  private ArrayList<String> citas;   private ArrayList<Producto> productos;

  Un ArrayList se puede parametrizar con cualquier otro tipo de clase.

  El tipo de objetos puede añadirse a un ArrayList, depende del tipo usado en la parametrizacion, y el tipo de objetos que retorna el metodo get depende tambien del tipo

Page 50: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Uso de la clase Map

  En Java existe una clase denominada Map que al igual que un ArrayList es una coleccion que almacena un par de entradas (objetos) definidas por: CLAVE y VALOR.

  La idea es que mediante una CLAVE, se puede conseguir un VALOR.

  HashMap es una especializacion de Map

Page 51: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Uso de la clase Map …   Una diferencia entre ArrayList y Map es que con Map cada entrada

no es un objeto, sino un par de objetos.

  El par consiste de:   Una clave de objeto   Un valor de objeto

  La biblioteca estándar de Java tiene dos tipos diferentes de objetos Map (que es una interfaz con cierta funcionalidad): HashMap y TreeMap.

  Los Maps como los ArrayList pueden expandirse fácilmente.

Page 52: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Uso de maps …   Un ejemplo de Map, puede ser un directorio telefonico,

donde cada entrada consta de un par:   Un nombre   Un numero telefono

  Un Map puede ser organizado por el valor de su clave facilmente. Para el caso del directorio telefonico, este puede ser usando un orden alfabetico, para esto bastara ordenar las claves en orden alfabetico.

  Los Maps son utiles, cuando se conoce la clave y se necesita conocer el valor asociado a esta clave.

Page 53: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Usando un HasMap   HashMap es una particular implementacion de Map. Es una colección de

objetos, (como los Arrays), pero estos no tienen posicion. Cada objeto se identifica mediante algun indentificador apropiado, por ejemplo una ”clave". Es decir, para cada objeto que se inserte debe existir una clave única.

  Los métodos mas importantes de HashMap son:   put   get

  El metodo put, inserta una entrada en el map,   El metodo get, recupera el valor para una clave dada.

  El siguiente fragmento de codigo, crea un HashMap e inserta tres entradas en el.

Page 54: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Usando un HasMap Hashmap<String, String> phoneBook . . . phoneBook = new HashMap<String, String>()

. . .

phoneBook.put(“Armando Manzanero”, “77123456”); phoneBook.put(“Luisa Molina”, “4234561”); phoneBook.put(“William Lopez”, “717345226”);

// Declarando una variable de tipo HashMap

// Creando un objeto HashMap

// Almacenamos las claves y los valores del map

Page 55: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Usando un HasMap Por ejemplo: deseamos encontrar el numero de telefono

de Luisa Molina y luego imprimir. Entonces, String number = phoneBook.get(“Luisa Molina”); System.out.println(number);

Se puede ver que, se pasa la clave (“Luisa Molina”) para conseguir el valor (numero telefonico)

Page 56: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Usando un Map en el SoporteTecnico   Para el ejemplo del sistema de soporte técnico se puede usar

un Map, de manera que las palabras sean claves que estarán asociadas a valores de respuestas.

  Por ejemplo: la palabra lento, estará asociada al siguiente texto: "Posiblemente Ud. tiene muchas aplicaciones abiertas al mismo

tiempo \n" + "Le aconsejo que cierre algunas. Teniendo el cuidado de guardar

sus datos \n" + "luego reinicie su sistema");

Page 57: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Usando un Map en el SoporteTecnico…   Abriendo el proyecto SoporteTecnicoCompleto y

examinando la clase Responder se encuentra …

import java.util.HashMap; . . . private HashMap<String, String> respuestaMap;

public Responder() { respuestaMap = new HashMap<String, String>(); llenarRespuestasMap(); . . . }

// Importando el paquete util

// Declarando

// Creando

Page 58: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Usando un Map en el Soporte Técnico…   Examinando el método llenarRespuestasMap() …

private void llenarRespuestasMap() { respuestaMap.put("lento", "Posiblemente Ud. tiene muchas aplicaciones abiertas al mismo tiempo \n" + "Le aconsejo que cierre algunas. Teniendo el cuidado de guardar sus datos \n" + "luego reinicie su sistema");

respuestaMap.put("virus", "Indiqueme que tipo de mensaje le sale en su pantalla. Sospecho que es un virus\n" + "por tanto, antes de indicarle que hacer conviene saber de que virus se trata\n" + "espero su respuesta");

}

CLAVE

VALOR

Page 59: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

¿Cuándo usar ArrayList o Map?   Ambas estructuras (ArrayList y Map) de datos almacenan Objetos y

por defecto en Java todas las clases heredan de Object, lo que permite, guardar cualquier objeto en cada una de ellas.

  El asunto es ¿cuándo emplear una u otra estructura?. Por ejemplo, se puede usar un ArrayList cuando se necesita que los objetos almacenados se ordenen de acuerdo a un indice, mantengan el orden en el que se ingresan y pueden tener elementos duplicados. Asi, un ArrayList es una columna de objetos en línea, donde cada objeto ocupa una posicion definida por un indice. En cambio, un HashMap es algo así como una sala llena de objetos dispersos y para llamar a un objeto debemos hacerlo por su clave de modo que retorne su valor asociado. No almacena elementos duplicados.

Page 60: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Usando sets   Un set, es una colección que almacena cada elemento a lo

sumo una vez.

  Cada elemento que se añada a un Set debe ser único, ya que el otro caso no se añadirá porque el Set no permite almacenar elementos duplicados.

  No mantiene un orden espec’ifico, ya que al aplicar el Iterator los elementos pueden ser retornados en un orden diferente en el que han sido almacenados los objetos que contiene el HashSet

Page 61: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Usando sets   HashSet, es una particular implementación de Set y es utilizado

de forma similar a HashMap.

  Por ejemplo:

public void comenzar() { boolean finalizado = false;

imprimeBienvenida();

while(!finalizado) { HashSet<String> entrada = lee.getInput();

if . . . }

Copia las palabras Ingresadas en un HashSet

Page 62: AGRUPANDO OBJETOS (Parte-III) - Ingenieria de Sistemas UMSS€¦ · nuevas bibliotecas de clases que Java ofrece. ... La librería de clases de Java, contiene una clase Random que

Corina Flores V. Programa MEMI

Usando sets   Veamos el método generaRespuesta …

public String generaRespuesta(HashSet<String> palabras) { Iterator<String> it = palabras.iterator(); while(it.hasNext()) { String palabra = it.next(); String respuesta = respuestaMap.get(palabra); if(respuesta != null) { return respuesta; } } return saltaDefaultResppuesta(); }

Acepta un conjunto de palabras como parámetro

Itera sobre estas pala bras, chequeando con cada una, en su map de palabras. Si cualquiera de

Las palabras es reco nocida, devuelve la Respuesta asociada

Si las palabras no son reco nocidas, devuelve cualquier Respuesta por defecto