Anda di halaman 1dari 58

Comportamiento mas

sofisticado

Usando clases de bibliotecas para


implementar funcionalidad mas avanzada.

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

public void start();

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

public String getInput()

public String generateResponse()

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;
}

De donde salió „startsWith‟ ???????


• Que es?
• Que hace?
• Como podemos averiguarlo?
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 13
Las bibliotecas de clases Java
librerías
• Miles de clases
• Organizadas en paquetes
• De 5 a 30 métodos que tiene cada
clase.

• Muchas son 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 14
Como manejarse entre tantas
clases y métodos...

• Me acuerdo que String tiene un


método startWith que me parece
que hace ....

• Como podemos saber el propósito de


una clase?

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

• lo mismo para el método toUpperCase

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.

• Un programador Java competente de


debe poder para trabajar con la
biblioteca.

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

• campos privados (la mayoría de los campos


son privados)
• métodos privados
• el cuerpo (código fuente) para cada
método

la implementación de la clase

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 26
Sentencia import

• Para evitar tener que referirse a las


clases usando el nombre largo:
a = new java.util.ArrayList()
• la clases de las paquetes pueden ser
importadas en el encabezado de cada
clase, usando la sentencia import
• no hace falta importar las clases del
paquete java.lang.
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 27
Paquetes e importación
(packages and import)
• Las clases se organizan en paquetes.

• Se puede importar una clase:


import java.util.ArrayList;

• O se puede importar todo el paquete:


import java.util.*;

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

dos Objetos son iguales?

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 ?

Hagan sus apuestas...


Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 31
Caso 2
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 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...

• Identidad (Identidad Referencial)


person1 == person2

• Igualdad (Igualdad Semantica)

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

"bye" equals "bye" ?

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

"Charles Nguyen" "(531) 9392 4587"

"Lisa Jones" "(402) 4536 4674"


"William H. Smith" "(998) 5488 0123"

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 41
Usando mapas (Maps)

HashMap <String, String> phoneBook =


new HashMap<String, String>();

phoneBook.put("Charles Nguyen", "(531) 9392 4587");


phoneBook.put("Lisa Jones", "(402) 4536 4674");
phoneBook.put("William H. Smith", "(998) 5488 0123");

String phoneNumber = phoneBook.get("Lisa Jones");


System.out.println(phoneNumber);

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

public String getInput()

public String generateResponse()

public String generateResponse(String theInput)


Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 46
Recortamos, hasta aca
llegamos...
• simple:
da siempre la misma respuesta,
identifica la condición para salir (bye).
• medio: fuera de programa
respuesta aleatoria sobre un conjunto
de respuestas posibles.
• completo: fuera de programa
respuestas asociadas a las palabras
ingresadas por el usuario.
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 47
Para el que quiera profundizar...
• tech-support1
• tech-support2
• tech-support-complete

• El libro los guia paso a paso para implementar


lo que finalmente es el proyecto tech-support-
complete
• Aprenden Random, ArraySet, String.split()
• ver Secciones 5.4, 5.7, 5.8, 5.9

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;

• private: modificador de acceso


(como siempre)
• final: constante

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

Anda mungkin juga menyukai