sofisticado
3.0
Conceptos principales a cubrir
• Usando clases de bibliotecas
• Leyendo documentación
• Escribiendo documentación
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 2
Un sistema de soporte técnico
• Un sistema de dialogo basado en texto
• Idea basada en ‘Eliza’ por Joseph
Weizenbaum (MIT, 1960s)
• Exploramos…
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 3
Hay tres proyectos...
• tech-support1:
da siempre la misma respuesta,
identifica la condición para salir (bye).
• tech-support2:
respuesta aleatoria sobre un conjunto
de respuestas posibles.
• tech-support-complete:
respuestas asociadas a las palabras
ingresadas por el usuario.
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 4
Por donde empezamos...?
• simple: por lo simple
da siempre la misma respuesta,
identifica la condición para salir (bye).
• medio:
respuesta aleatoria sobre un conjunto
de respuestas posibles.
• completo:
respuestas asociadas a las palabras
ingresadas por el usuario.
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 5
Hay tres proyectos...
• tech-support1 vemos este
• tech-support2
• tech-support-complete
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 6
Diagrama de clases
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 7
DEMO tech-support1
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 8
Diagrama de clases
bienvenida
pregunto
public void start() respondo
private void printWelcome() despedida
private void printGoodbye()
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 9
Estructura del ciclo principal
public void start()
{
boolean finished = false;
printWelcome();
while(!finished) {
String input = reader.getInput();
if(input.startsWith("bye")) {
finished = true;
}
else {
String response = responder.generateResponse();
System.out.println(response);
}
}
printGoodbye();
}
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 10
Diagrama de Interacción
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 11
Estructura del ciclo principal
public void start()
{
boolean finished = false;
printWelcome();
while(!finished) {
String input = reader.getInput();
if(input.startsWith("bye")) {
finished = true;
}
else {
String response = responder.generateResponse();
System.out.println(response);
}
}
printGoodbye();
}
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 12
La condición de salida
String input = reader.getInput();
if(input.startsWith("bye")) {
finished = true;
}
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 15
Leyendo documentación de
clase
• Documentación de la biblioteca Java
en formato HTML;
• Se lee con el web browser
• Class API: Application Programmers’
Interface
• Descripción de la interface para
todas las clases de la biblioteca.
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 16
Javadoc
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 17
Javadoc
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 18
Práctica
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 19
Práctica
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 20
Práctica Pizarrón
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 21
Práctica tech-support1
Ejercicio 5.8
Mejorar el programa haciendo que “ bye” (con
espacios adelante) sirva para salir. Pista trim()
Ejercicio 5.9
Mejorar el programa haciendo que “ByE” (con
mayúsculas) sirva para salir. Pista toLowerCase()
Ejercicio 5.10
Y si quiero cambiar el programa haciendo que con
exactamente “Bye” sirva para salir (sin nada atrás)?
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 22
Redondeando esto de las
librerías en Java...
• Muchas clases útiles que hacen la
vida (del programador) mas simple.
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 23
También le llaman APIs
• Al conjunto de clases y métodos que
tiene la clase diseñados con algún
propósito especial le llaman API.
• JDBC API = javax.sql.*
• SWING API = javax.swing.*
• COLLECTION API =
java.util.ArrayList
java.util.ArraySet
java.util.Stack
....
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 24
Interface vs implementación
La documentación incluye
• el nombre de la clase;
• una descripción general de la clase;
• una lista de constructores y métodos
• el valor de retorno y los parámetros para
cada constructor y cada métodos.
• una descripción del propósito de cada
constructor y cada método
la interface de la clase
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 25
Interface vs implementación
La documentación no incluye
la implementación de la clase
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 26
Sentencia import
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 28
Nota al margen
Igualdad / Identidad
Operación de Comparación,
Como saber si
Propuestas?
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 29
Igualdad / Identidad
• Veamos algunos ejemplos...
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 30
Caso 1
Otros objetos (no String):
:Person :Person
“Juan” “Pedro”
person1 person2
person1 == person2 ?
:Person :Person
“Juan” “Juan”
person1 person2
person1 == person2 ?
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 32
Caso 3
Otros objetos (no String) :
:Person :Person
“Juan” “Juan”
person1 person2
person1 == person2 ?
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 33
Identidad o Igualdad
• Dos operaciones diferentes...
person1.equals( person2)
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 34
Identidad vs Igualdad (Strings)
String input = reader.getInput();
if(input == "bye") {
== prueba identidad
...
}
:String :String
"bye" == "bye" ?
input
(puede ser) falso!
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 35
Identidad vs Igualdad (Strings)
String input = reader.getInput();
if(input.equals("bye")) {
equals prueba igualdad
...
}
:String :String
input
(sin duda es) true!
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 36
Igualdad de String...
entonces...
if(input == "bye") { comprueba
... identidad
}
if(input.equals("bye")) {
comprueba
... igualdad
}
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 37
Fin de nota al margen
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 38
Práctica
Entonces, las
Strings
siempre deben compararse con
str1.equals(str2)
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 39
Mapas (Maps)
• Los mapas son colecciones que
contienen pares de valores.
• Los pares consisten en una clave y un
valor (key / value en ingles).
• La búsqueda funciona proveyendo
una clave (key) y recuperando un
valor (value).
• Ejemplo : una guía telefónica.
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 40
Usando mapas (Maps)
• Un mapa con claves y valores de
tipo Strings.
:HashMap
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 41
Usando mapas (Maps)
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 42
Práctica
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 43
Práctica en Pizarrón
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 44
Utilidad de HashMap ?
• simple:
da siempre la misma respuesta,
identifica la condición para salir (bye).
• medio:
respuesta aleatoria sobre un conjunto
de respuestas posibles.
• completo:
respuestas asociadas a las palabras
ingresadas por el usuario.
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 45
Diagrama de clases
bienvenida
pregunto
public void start() respondo(pregunta)
private void printWelcome() despedida
private void printGoodbye()
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 48
Pasamos a otro tema...
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 49
Escribiendo documentación
de clase
• Tus propias clases deben estas
documentadas de la misma manera en
que la clases de la biblioteca lo están.
• Otras personal serian capaces de usar
tu clase sin tener que leer la
implementación.
• Haz de tu clase una „clase de
biblioteca‟!
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 50
Elementos de la documentación
La documentación para una clase debe incluir:
• el nombre de la clase
• un comentario describiendo el propósito
general y las características de la clase
• un numero de versión
• el nombre del autor (o autores )
• documentación para cada constructor y
cada método
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 51
Elementos de la documentación
La documentación para cada constructor y
cada método debe incluir:
• el nombre del método
• el tipo de retorno
• los nombre y tipos de los parámetros
• una descripción del propósito o función del
método
• una descripción de cada parámetro
• una descripción del valor de retorno
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 52
javadoc
Comentario de clase:
/**
* La clase Responder representa un objeto generador
* de respuestas. Es usada para generar una respuesta
* automática.
*
* @author Michael Kölling and David J. Barnes
* @version 1.0 (30.Mar.2006)
*/
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 53
javadoc
Comentario de método:
/**
* Lee una línea de texto de la entrada estándar (de
* la consola), y retorna la retorna como un conjunto
* de palabras.
*
* @param prompt un mensaje para imprimir en la
* pantalla.
* @return Un conjunto de Strings, donde cada String
* es una de las palabras tipeadas por el
* usuario.
*/
public HashSet<String> getInput(String prompt)
{
...
}
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 54
public vs private
• Los atributos públicos (campos,
constructores, métodos) son accesibles
para otros clases.
• Los campos no deben ser públicos.
• Los atributos privados son accesibles
solo desde la propia clase.
• Solo los métodos que son deliberada-
mente para otras clases deben ser
públicos.
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 55
Ocultamiento de información
• Los datos pertenecientes a un objeto
están ocultos de otros objetos.
• Conocer que puede hacer un objeto, y
no como es que lo hace.
• El ocultamiento de información
incrementa el nivel de independencia.
• La independencia de los módulos es
importante para el mantenimiento de
grandes sistema (bajo acoplamiento).
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 56
Constantes
private final int gravity = 3;
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 57
Revisión
• Java tiene una extensa biblioteca de clases.
• Un buen programador deber esta
familiarizado con la biblioteca.
• La documentación nos dice lo que precisamos
saber para usar una clase (interface).
• La implementación esta oculta (ocultamiento
de información).
• Documentamos nuestras clases así la
interface puede leerse por si sola
(comentarios de clase, de métodos, etc.).
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 58