Download Chapter 2

Document related concepts
no text concepts found
Transcript
Comenzando con Java
Objetivos
• Identificar los componentes básicos de programas java
• Escribir programas simples en java
• Describir la diferencia entre declarar un objeto y crearlo
• Describir los procesos de creación y corrida de programas java
• Usar las clases estándar: Date, SimpleDateFormat, String y
JOptionPane
• Desarrollar programas java usando el método de desarrollo
incremental
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 1
Primer programa de Java
• El concepto fundamental de OOP ilustrado en
este programa es:
Un programa orientado a objetos usa objetos
• Este progrma muestra una ventana en la pantalla
• El tamaño de la ventana es 300 pixeles de ancho
y 200 de alto. Se pone como título “Mi primer
programa de Java”
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 2
Ch2Sample1
Se declara una clase Ch2Sample1 que incluye un
método llamado main. Este crea y usa un objeto
myWindow de la clase estándar JFrame
import javax.swing.*;
Declara una clase
class Ch2Sample1 {
public static void main(String[ ] args) {
JFrame
myWindow;
myWindow = new JFrame( );
Crea un objeto
myWindow.setSize(300, 200);
myWindow.setTitle(“Mi primer programa Java”);
myWindow.setVisible(true);
}
Usa un objeto
}
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 3
Diagrama de relación de dependencia entre clases
Ch2Sample1
setTitle(“My First Java Program”)
Clase cliente
myWindow : JFrame
Clase servidora
Dependiente
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 4
Relación de Dependencia
Ch2Sample1
myWindow : JFrame
En vez de dibujar todos los mensajes, se resume dibujando sólo
la relación de dependencia. Este diagrama muestra que Sh2Sample1
depende de un servicio provisto por myWindow
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 5
Declaración de Objetos
Nombre de la clase
Esta clase debe esta
definida antes de esta
declaración
JFrame
Más
Ej
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
Account
Student
Vehicle
Nombre del Objecto
Se declara un objeto
aqui
myWindow;
customer;
jan, jim, jon;
car1, car2;
4th Ed Chapter 2 - 6
Creación del Objeto
Nombre de la clase
Se crea una instancia de
esta clase
Nombre del Objeto
Nombre del Objeto que
se esta creando aqui
myWindow
Más Ej
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
= new JFrame (
Argumento
No se usan argumento en
este caso .
);
customer
= new Customer( );
jon
= new Student(“John Java”);
car1
= new Vehicle( );
4th Ed Chapter 2 - 7
Declaración vs. Creación
1
Customer
customer;
2
customer
=
1. Se declara el indentificador
customer y se reserva
espacio en memoria
new
Customer( );
2. Se crea un objeto Customer y se
pone el identificador customer para
referirse al mismo
.
customer
customer
1
2
: Customer
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 8
Estado de memoria vs. Programa
customer
customer : Customer
: Customer
Notación del
estado de memoria
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
Notación del
diagrama de Programa
4th Ed Chapter 2 - 9
Nombre vs. Objeto
Customer
customer;
customer
=
new
Customer( );
customer
=
new
Customer( );
customer
Creado con el
primer new
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
: Customer
: Customer
Creado con el segundo new.
Se pierde la referencia al
primer objeto Customer
4th Ed Chapter 2 - 10
Destrucción de objetos
-Se puede usar el mismo identificador para referirse a otro
objeto de la misma clase.
-Cuando se pierde la referencia a un objeto, este se borra y
libera el espacio de mem. ocupado.
-La devolución del espacio de mem al sistema (deallocation)
se llama recolector de basura (garbage collection).
- Se realiza automáticamente pero taa se puede invocar
- En c++ no existe este mecanismo y se debe invocar a un
destructor explícitamente.
Declaración y creación en una sentecia
En vez de escribir dos sentencias una con la declaración del
objeto y otra con la creación se suele hacer ambas en una:
Estudiante juan = new Estudiante();
En vez de:
Estudiante juan;
juan = new Estudiante();
Envío de Mensajes
Nombre del Objeto
Nombre del objeto al cual
le estamos enviando un
mensaje
Nombre del Método
Nombre del mensaje que
estamos enviando
myWindow
Más Ej
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
.
setVisible
(
Argumento
El argumento que le
estamos pasando con el
mensaje
true
) ;
account.deposit( 200.0 );
student.setName(“john”);
car1.startEngine( );
4th Ed Chapter 2 - 13
Componentes de un Programa
• Un programa Java se compone de
– commentarios,
– sentencias import y
– Declaraciones de clases
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 14
Componente de programa: comentario
/*
Chapter 2 Sample Program: Displaying a Window
File: Ch2Sample2.java
*/
import javax.swing.*;
class Ch2Sample1 {
public static void main(String[ ] args) {
Comentario
JFrame myWindow;
myWindow = new JFrame( );
myWindow.setSize(300, 200);
myWindow.setTitle(“My First Java Program”);
myWindow.setVisible(true);
}
}
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 15
Mapeo de marcas de comentario
/* This is a comment on one line */
/*
Comment number 1
*/
/*
Comment number 2
*/
/*
Esto es parte del
comentario
/*
/*
This is a comment
*/
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
*/
Error: No tiene marca
de inicio
4th Ed Chapter 2 - 16
Los tres Tipos de Comentarios
/*
This is a comment with
three lines of
Varias Líneas
text.
*/
// This is a comment
// This is another comment
Una sóla línea
// This is a third comment
/**
* This class provides basic clock functions. In addition
* to reading the current time and today’s date, you can
Commentario javadoc
* use this class for stopwatch functions.
*/
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 17
Sentencia Import
/*
Chapter 2 Sample Program: Displaying a Window
File: Ch2Sample2.java
*/
import javax.swing.*;
Sentencia
Import
class Ch2Sample1 {
public static void main(String[ ] args) {
JFrame
myWindow;
myWindow = new JFrame( );
myWindow.setSize(300, 200);
myWindow.setTitle(“My First Java Program”);
myWindow.setVisible(true);
}
}
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 18
Sentencia import sintaxis y semántica
Nombre de la clase
Nombre de la clase que
deseamosimportar. Se usan
* para importar todas las
clases (del paquete)
Nombre del paquete
Nombre del paquete que
contiene la clase que
deseamos usar
.
<package name>
e.g.
Más Ej.
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
dorm
import
import
import
.
<class name> ;
Resident;
javax.swing.JFrame;
java.util.*;
com.drcaffeine.simplegui.*;
4th Ed Chapter 2 - 19
Ventaja de usar import
El uso de sentencias import permite escribir en forma abreviada.
No se copian las clases en el programa.
Usando al sentencia import se puede escribir JFrame para referirse
a la clase en vez de escribir cada vez javax.swing.JFrame.
Clase Declaración
/*
Chapter 2 Sample Program: Displaying a Window
Declaración
File: Ch2Sample2.java
de la clase
*/
import javax.swing.*;
class Ch2Sample1 {
public static void main(String[ ] args) {
JFrame
myWindow;
myWindow = new JFrame( );
myWindow.setSize(300, 200);
myWindow.setTitle(“My First Java Program”);
myWindow.setVisible(true);
}
}
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 21
Declaración del Método
/*
Chapter 2 Sample Program: Displaying a Window
File: Ch2Sample2.java
*/
Declaración
del Método
import javax.swing.*;
class Ch2Sample1 {
public static void main(String[ ] args) {
JFrame
myWindow;
myWindow = new JFrame( );
myWindow.setSize(300, 200);
myWindow.setTitle(“My First Java Program”);
myWindow.setVisible(true);
}
}
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 22
Declaración del Método: Elementos
Modifica
dor
public
Modifica
dor
static
Tipo de
retorno
void
JFrame myWindow;
Nombre del
Método
main(
Parámetros
String[ ] args
){
Cuerpo del
Método
myWindow = new JFrame( );
myWindow.setSize(300, 200);
myWindow.setTitle(“My First Java Program”);
myWindow.setVisible(true);
}
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 23
Plantilla para programas simples en java
/*
Chapter 2 Sample Program: Displaying a Window
Commentario
File: Ch2Sample2.java
*/
Sentencias
Import
import javax.swing.*;
class Ch2Sample1
{
public static void main(String[ ] args) {
JFrame
myWindow;
Nombre de la
Clase
myWindow = new JFrame( );
myWindow.setSize(300, 200);
myWindow.setTitle(“My First Java Program”);
Cuerpo del
Método
myWindow.setVisible(true);
}
}
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 24
Por qué usar clases estándar
• Si existe un objeto que cubre las necesidades
conviene usarlo
• Aprender a usar las clases java estándar es el
primer paso para dominar OOP.
• Se introducirán 4 clases estándar
–
–
–
–
JOptionPane
String
Date
SimpleDateFormat
– La documentación completa de las clases estándar se
puede consultar en el apéndice o en general en
http://java.sun.com/j2se/1.5.0/docs/api/index.html
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 25
JOptionPane
• Una forma simple de mostrar los resultados de un
cálculo a un usuario es usando
showMessageDialog de la clase JOptionPane
JOptionPane.showMessageDialog(null, “I Love Java”);
Aparecerá este cuadro
de diálogo en el centro
de la pantalla
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 26
Mostrar varias líneas de Texto
• Podemos mostrar varias líneas de texto
separándolas con una marca de fin de línea \n.
JOptionPane.showMessageDialog(null,
“one\ntwo\nthree”);
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 27
String
• Los textos que se pasan al método
showMessageDialog son instancias de la
clase String
• Una secuencia de caracteres entre comillas
dobles es una constante String
• Hay cerca de 50 métodos definidos para la
clase String. Vamos a ver 3 de ellos:
substring, length y indexOf.
• Tambien veremos la operación de string de
concatenación
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 28
Un String es un Objecto
1
String
name;
2
name
new
=
String(“Jon Java”);
1. Se declara el indetificador
name y se asigna el espacio
en memoria.
1
name
2. Se crea un objeto String y
el identificador name que se
refiere a él.
2
name
: String
Jon Java
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 29
Indices de String
La posición o índice del
1er caracter es 0
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 30
Definición: substring
• Asumamos que str es un objeto String y que
está defidamente inicializado a un string.
• str.substring( i, j ) retornará un nuevo string
extrayendo los caracteres de str desde la
posición i a la j-1, donde 0  i  longitud de
str, 0  j  longitud de str, and i  j.
• Si str is “programming” , entonces
str.substring(3, 7) creará un nuevo string cuyo
valor es “gram” porque g está en la posición 3
y m en la posicion 6
• El string original no de modifica
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 31
Ej: substring
String text = “Espresso”;
text.substring(6,8)
“so”
text.substring(0,8)
“Espresso”
text.substring(1,5)
“spre”
text.substring(3,3)
“”
text.substring(4,2)
error
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 32
Definición: length
• Asumimos que str es un objeto debidamente
inicializado a un string
• str.length( ) devuelve el numero de caracteres
de str.
• Si str es “programming” , entonces str.length( )
devolverá 11 porque hay 11 caracteres en él.
• El string str permace sin modificarse
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 33
Ej: length
String
str1 =
str2 =
str3 =
str4 =
str1.length( )
str2.length( )
str1, str2, str3, str4;
“Hello” ;
“Java” ;
“” ; //empty string
“ “ ; //one space
5
4
str3.length( )
str4.length( )
0
1
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 34
Definición: indexOf
• str.indexOf( substr ) devuelve la 1ª posición en
que substr está en str.
• Si str es “programming” y substr es “gram” ,
entonces str.indexOf(substr ) devolverá 3
porque la primera posición del 1er caracter de
substr en str is 3.
• Si no se encuentra substr en str, devuelve -1
• La búsqueda distingue entre mayúsculas y
minúsculas, en inglés “case-sensitive”
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 35
Ej: indexOf
String str;
str = “I Love Java and Java loves me.” ;
3
7
21
str.indexOf( “J” )
7
str2.indexOf( “love” )
21
str3. indexOf( “ove” )
3
str4. indexOf( “Me” )
-1
-1 Indica que no hay coincidencia
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 36
Definición: concatenación
• str1 + str2 devuelve un nuevo string que es la
concatenacion de ambos strings
• Si str1 es “pro” y str2 es “gram” , entonces str1
+ str2 devolverá “program”.
• Notar que éste es un operador y no un método
de la clase String
• Los strings str1 y str2 no cambian.
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 37
Ej: concatenación
String str1, str2;
str1 = “Jon” ;
str2 = “Java” ;
str1 + str2
str1 + “ “ + str2
str2 + “, “ + str1
“JonJava”
“Jon Java”
“Java, Jon”
“Are you “ + str1 + “?”
“Are you Jon?”
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 38
Fecha: Date
• La clase Date del paquete java.util se usa para
representar una fecha
• Cuando se crea un objeto Date, se le pone el dia
actual (la fecha de la computadora)
• La clase tiene un método toString que convierte el
formato interno a un string
Date today;
today = new Date( );
today.toString( );
“Fri Oct 31 10:05:18 PST 2003”
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 39
SimpleDateFormat
• La clase SimpleDateFormat permite ver la fechas
en diferentes formatos
Date today = new Date( );
SimpleDateFormat sdf1, sdf2;
sdf1 = new SimpleDateFormat( “MM/dd/yy” );
sdf2 = new SimpleDateFormat( “MMMM dd, yyyy” );
sdf1.format(today);
“10/31/03”
sdf2.format(today);
“October 31, 2003”
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 40
JOptionPane para Ingreso (Input)
• Usar el método showInputDialog de la clase
JoptionPane es la manera más simple de
ingresar un string.
String name;
name = JOptionPane.showInputDialog
(null, “What is your name?”);
Este cuadro de dialogo
aparecerá en el centro
de la pantalla listo para
aceptar el ingreso.
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 41
Problema Enunciado
• Problema:
Escribir un programa que le pida al usuario nombres
y apellido y le muestre el monograma, es decir las
iniciales.
Ej:
ingreso:
salida:
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
Andrew Lloyd Weber
ALW
4th Ed Chapter 2 - 42
Plan General
• Identificar las tareas principales que el
programa tiene que realizar
• Necesitamos saber que hay que desarrollar antes de
comenzar a hacerlo!
• Tareas:
– Obtener los nombres y el apellido
– Extraer las iniciales y crear el monograma
– Mostrar el monograma
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 43
Pasos de Desarrollo
•
Desarrollaremos el programa en 2 pasos
1. Comenzamos con una plantilla del programa y le
agregamos el código para obtener el ingreso de
la información.
2. Agregamos el código para calcular y mostrar el
monograma
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 44
Diseño paso 1
• La especificación del programa dice obtener
el nombre del usuario pero no dice cómo
• Consideraremos cómo en este 1er paso
• Podemos usar JoptionPane para el ingreso
• Caso 1: Ingreso del primer nombre, segundo
nombre y apellido separados
Caso 2: ingreso del nombre completo de una vez
• Elegimos el segundo caso porque es más
fácil y rápido para que el usuario ingrese
información
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 45
Codigo paso 1
/*
Chapter 2 Sample Program: Displays the Monogram
File: Step1/Ch2Monogram.java
*/
import javax.swing.*;
class Ch2Monogram {
public static void main (String[ ] args) {
String name;
name = JOptionPane.showInputDialog(null,
"Enter your full name (first,
middle, last):“);
JOptionPane.showMessageDialog(null, name);
}
}
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 46
Paso 1 Prueba
• Corremos el programa y verificamos que:
– Se pueda ingresar un nombre
– El nombre ingresado se muestre correctamente
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 47
Paso 2 Diseño
• Vamos a asumir que:
– El ingreso contiene 1er y 2do nombre y el apellido
en ese orden separados por espacios en blanco
• Ej
John Quincy Adams
John Kennedy
Harrison, William Henry
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
(bien)
(mal)
(mal)
4th Ed Chapter 2 - 48
Paso 2 Diseño
• Dado un ingreso válido,
obtenemos el
monograma
– Separando el nombre
ingresado en 1ro y 2do
nombre y apellido
– Extraer el 1er caracter
– Concatenar los tres
caracteres
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
“Aaron Ben Cosner”
“Aaron”
“Ben Cosner”
“Ben”
“Cosner”
“ABC”
4th Ed Chapter 2 - 49
Paso 2 Code
/*
Chapter 2 Sample Program: Displays the Monogram
File: Step 2/Ch2MonogramStep2.java
*/
import javax.swing.*;
class Ch2Monogram {
public static void main (String[ ] args) {
String name, first, middle, last,
space, monogram;
space = " “;
//Input the full name
name = JOptionPane.showInputDialog(null,
"Enter your full name (first, middle, last):“ );
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 50
Step 2 Code (cont)
//Extract first, middle, and last names
first = name.substring(0, name.indexOf(space));
name = name.substring(name.indexOf(space)+1,
middle = name.substring(0, name.indexOf(space));
last = name.substring(name.indexOf(space)+1,
name.length());
name.length());
//Compute the monogram
monogram = first.substring(0, 1) +
middle.substring(0, 1) +
last.substring(0,1);
//Output the result
JOptionPane.showMessageDialog(null,
"Your
monogram is " + monogram);
}
}
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 51
Paso 2 Prueba
• Verificar que para valores válidos de ingreso
se muestran el monograma correcto
• Corremos el programa varias veces,
intentando distintos tipos de ingresos válidos.
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 52
Revisión del Programa
• Una vez que el programa desarrollado corre
correctamente se revisa si para ver si es
posible mejorarlo
• Sugerencia
– Indicarle al usuario claramente en que formato
tiene que ingresar su nombre
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display.
4th Ed Chapter 2 - 53