Introduccin al
Lenguaje JAVA
INTRODUCCIN AL LENGUAJE JAVA
Tema 1:
INTRODUCCIN
EL LENGUAJE JAVA (1)
En 1991 Sun Microsystems comienza el proyecto
Green, dirigido por James Gosling, orientado al
desarrollo de software para el control de
electrodomsticos, que tenan:
Escasa potencia de clculo.
Poca memoria.
Distintas CPUs.
Se crea el lenguaje Oak, que tena como
caractersticas principales:
Lenguaje sencillo que genera cdigo reducido.
Cdigo neutro independiente de la CPU (mquina
virtual).
EL LENGUAJE JAVA (2)
Primera aparicin de Duke, mascota
de JAVA.
En 1995 Bill Joy, cofundador de Sun,
decide que Internet es el entorno
adecuado para la utilizacin de Oak.
Para poder presentarlo en sociedad, se debi
modificar el nombre de este lenguaje, pues ya estaba
registrado, por el de JAVA,
Inmediatamente se licencia su uso en el navegador de
Netscape. Y la empresa Microsoft, que en los
comienzos de JAVA no estaba a favor de su
utilizacin, lo incluye en el navegador Internet
Explorer.
CARACTERSTICAS DE JAVA (1)
Simple (en comparacin con su predecesor C++):
No tiene punteros explcitos
Sin herencia mltiple (interfaces)
Gestin automtica de la memoria dinmica
(Garbage collector)
Sintaxis
sencilla (pocas construcciones
de
programa)
Orientado a objetos:
Todo son clases, menos los tipos simples
Encapsulamiento Herencia Polimorfismo
No existen funciones libres, todo son mtodos de
clases
CARACTERSTICAS DE JAVA (2)
Distribudo:
Las clases pueden
mquinas de la red.
estar
ubicadas
en
distintas
Interpretado y Compilado:
Utiliza un lenguaje intermedio (bytecode), para la
mquina abstracta JVM.
El bytecode puede interpretarse o compilarse.
Robusto:
Fuertemente tipado.
Sin construcciones peligrosas (punteros).
Manejo de excepciones.
Seguro:
Verifica el cdigo en tiempo de ejecucin.
Cargador de clases.
CARACTERSTICAS DE JAVA (3)
De arquitectura neutra:
Mquina Virtual JAVA (JVM)
Portable:
Concordancia en el tamao de los tipos bsicos.
WORA (Write Once Run Everywhere)
Multitarea:
Se pueden definir concurrentemente, varios hilos de
ejecucin dentro de un programa.
Clases y primitivas para el manejo de la sincronizacin
Dinmico:
Los mdulos de una aplicacin se enlazan en tiempo
de ejecucin.
LA MQUINA VIRTUAL JAVA (1)
La JAVA Virtual Machine es una mquina
hipottica que emula por software a una mquina real.
El compilador genera bytecodes (instrucciones de
cdigo mquina para la JVM).
El intrprete ejecuta y traduce los bytecodes para
cada mquina especfica.
LA MQUINA VIRTUAL JAVA (2)
La Mquina Virtual JAVA es el ingrediente principal del lema del lenguaje JAVA: Write
Once, Run Everywhere (Escribir una vez, ejecutar en cualquier mquina). Para ello cada
plataforma o sistema operativo (Windows, Linux, Solaris) debe desarrollar una JVM, que
otorga un nivel de abstraccin entre los programas escritos en JAVA y las diferentes
plataformas.
INDEPENDENCIA DE LA PLATAFORMA (1)
En un lenguaje convencional como PASCAL,
tenemos que el cdigo objeto (binario) generado por el
compilador, depender de la plataforma utilizada.
INDEPENDENCIA DE LA PLATAFORMA (2)
En cambio en el lenguaje JAVA, tenemos que el
cdigo binario (bytecode) generado despus de la
compilacin, es independiente de la plataforma utilizada.
INDEPENDENCIA DE LA PLATAFORMA (3)
El cdigo fuente de cualquiera de los lenguajes soportados por la
plataforma .NET, se compila en un cdigo intermedio CIL (Common Intermediate
Language), similar al bytecode de JAVA. Y para la ejecucin del cdigo en una
determinada plataforma, se utiliza el CLR (Common Language Runtime).
GENEALOGA DE JAVA
JAVA es similar en sintaxis a C++ y en semntica a
SmallTalk.
IMPLEMENTACIONES DE LA JVM
La JAVA Virtual Machine (JVM) es la clave en la
independencia de plataforma. Ella puede estar
implementada como:
Una aplicacin de software stand alone
independiente. Por ejemplo: JRE (JAVA Runtime
Environment).
Parte integral de un navegador web (browser). Por
ejemplo: HotJava.
Una componente integral del sistema operativo. Por
ejemplo: JavaOS.
Un
ncleo
de
microprocesador
o
chip
microcontrolador, para productos electrnicos de
consumo: tarjetas inteligentes, telfonos celulares,
agendas electrnicas, etc. Por ejemplo: picoJava.
JAVA Y SUS VERSIONES
Existen diferentes versiones de la JVM:
JSE
(Standard
Edition):
Proporciona
las
herramientas para escribir y realizar aplicaciones en el
lenguaje de programacin JAVA.
JEE (Enterprise Edition): Destinada al desarrollo de
aplicaciones empresariales robustas e inter-operables.
JME (Mobile Edition): Medio ambiente de ejecucin
optimizado para los dispositivos ligeros: Tarjetas
inteligentes (smart cards), telfonos mviles (celulares),
ayudantes personales (PDA).
TIPOS DE APLICACIONES JAVA
Existen diferentes tipos de aplicaciones:
Stand Alone: Aplicacin de escritorio (independiente).
Applets: Dentro del navegador al cargar una pgina
web.
Servlets: Ejecutado en un servidor web.
JavaBeans: Componentes de software reutilizables.
Midlets: Aplicacin que corre en un dispositivo mvil.
PRINCIPALES ENTORNOS DE DESARROLLO
De cdigo libre:
NetBeans
Eclipse
JCreator
De cdigo propietario:
Visual Age for JAVA
JBuilder
Visual J++
INSTALACIN DE JAVA
El archivo necesario para instalar JAVA es:
El entorno integrado de desarrollo (IDE) a utilizar
ser NetBeans V 5.5.1:
Los programas debern
siguiente directorio:
compilarse
desde
c:\Archivos de Programa\Java\jdk1.6.0_03\bin>
el
COMPILADOR E INTRPRETE DE JAVA
El compilador javac analiza la sintaxis del cdigo
fuente (con extensin *.java). Si no hay errores,
genera los bytecodes:
> javac [Link]
[Link]
El intrprete es la JVM que ejecuta los bytecodes (con
extensin *.class) creados por el compilador:
>java Programa (sin extensin .class)
Podemos ejecutar una aplicacin con argumentos:
> java Programa arg1 arg2 ...
EL ENTORNO DE DESARROLLO JDK
El JAVA Development Kit (JDK) es un conjunto de
herramientas, utilidades, documentacin y ejemplos
para desarrollar aplicaciones JAVA.
Compilador (javac): De archivos de cdigo fuente
(*.java) en archivos de clases ejecutables.
Intrprete (java): Permite la ejecucin de programas
JAVA (*.class).
Depurador (jdb): Es una utilidad que permite depurar
aplicaciones JAVA, permitiendo encontrar y eliminar los
errores con mucha exactitud.
Generador de documentacin (javadoc): Es una
herramienta til para la generacin de documentacin
directamente desde el cdigo fuente JAVA, en el
formato de pginas HTML.
EVOLUCIN DEL JDK
El entorno de desarrollo JAVA tradicional, el JDK
Standard Edition (SE), sigue un ritmo de evolucin
constante con la aparicin de nuevas versiones,
aproximadamente cada dos aos. La versin 6, ahora
llamada JAVA SE 6, est disponible desde el 11 de
Diciembre de 2006.
Lo primero que llama la atencin es el cambio de
nomenclatura, que en muchos casos causa confusin.
Hemos pasado del nombre tradicional de J2SE 1.4.x a
J2SE 5.0 (tambin conocido como J2SE 1.5 o JDK 1.5), y
a partir de la versin 6 a JAVA SE 6 (equivalente a J2SE
1.6, JDK1.6 o JDK 6).
PLATAFORMA JAVA
La plataforma para la ejecucin de un programa en
JAVA est formada por la Mquina Virtual Java (JVM) y
las APIs de JAVA.
Las API (Application Programming Interface) son un
conjunto de bibliotecas de clases estndar, que estn
organizadas en paquetes, formando un gran rbol de
herencia.
LIBERACIN DE MEMORIA
Debe liberarse la memoria reservada dinmicamente
que no se vaya a utilizar ms.
En otros lenguajes, esta liberacin debe realizarla el
propio programador.
La JVM dispone de un hilo (thread) que rastrea las
operaciones de memoria, el Garbage Collector
(Recolector de Basura) el cual:
Verifica y libera la memoria que no se necesita.
Se ejecuta automticamente
Puede variar segn la implementacin de la JVM.
SEGURIDAD DEL CDIGO
La JVM verifica los bytecodes asegurando que:
El cdigo se ajusta a las especificaciones de la JVM.
No hay violaciones de acceso restringido.
El cdigo no provoca desbordamientos de la pila.
Los tipos de los parmetros son correctos para todo el
cdigo.
No existen conversiones ilegales de datos (por ejemplo
conversin de enteros a punteros).
Los accesos a los campos de los objetos estn
autorizados.
FORMATO DE LOS PROGRAMA FUENTE (1)
Un programa est compuesto por un conjunto de clases
(al menos una). Las clases son los mdulos del
programa.
Una clase consiste en unos datos (atributos) y unas
funciones (mtodos).
Debe haber un mtodo main() en una de las clases.
El programa se ejecuta a partir del mtodo main().
FORMATO DE LOS PROGRAMA FUENTE (2)
Un esquema para nuestros primeros programas de
prueba es el siguiente:
// [Link]
class Programa
{
// Declaraciones globales
public static void main(String[] args)
{
// Declaraciones locales
// Instrucciones
}
}
PRIMER PROGRAMA EN JAVA (1)
Programa [Link] :
class Programa
{
public static void main (String[] args)
{
[Link](Hola a todos!);
}
}
> javac [Link]
> java Programa
Hola a todos!
PRIMER PROGRAMA EN JAVA (2)
class Programa: Nombre de la clase.
public static void main: La funcin principal,
equivalente a la funcin main de C/C++.
String[]
args: Permite recuperar argumentos
transmitidos al programa en el momento de su
ejecucin.
[Link](Hola a todos): El objeto out
de la clase System recibe el mensaje println() con la
cadena que se quiere mostrar. El objeto out representa
la pantalla, lugar donde se imprime la cadena.
INTRODUCCIN AL LENGUAJE JAVA
Tema 2:
ELEMENTOS BSICOS
DEL LENGUAJE
CARACTERSTICAS DEL LENGUAJE
Sensible a maysculas/minsculas.
Soporta comentarios.
Lenguaje de formato libre.
Permite identificadores.
Incluye palabras reservadas.
Permite variables y constantes.
Convenciones de nomenclatura.
Tiene reglas sobre los tipos de datos
SENSIBLE A MAYSCULAS/MINSCULAS
Se distingue entre maysculas y minsculas.
Los identificadores Pepito, pepito y PEPITO son
diferentes.
Todas las palabras reservadas del lenguaje van en
minsculas.
SOPORTA COMENTARIOS
Existen tres formas de introducir comentarios:
Comentario de una lnea:
// Comentario de una lnea
Comentario en una o ms lneas:
/* Comentario de
ms de una lnea */
Comentario de documentacin (se usa con javadoc):
/** Mtodo XYZ:
Realiza la labor X sobre los datos Y
devolviendo Z */
> javadoc [Link] [Link]
ETIQUETAS PARA JAVADOC
Etiquetas para referencias:
@see <otra clase>
Etiquetas de documentacin de clases:
@version <informacin sobre la versin>
@author <nombre del autor>
Etiquetas de documentacin de mtodos:
@param <nombre del argumento> <descripcin>
@return <descripcin>
@exception <excepcin>
EJEMPLO DE USO DE JAVADOC
// [Link]
/** Primera clase de prueba
@author Rubn D. Maza
@version 1.0
@see Adios
*/
public class Programa
{
/** Mtodo principal
@param args argumentos de lnea de rdenes
@return nada
*/
public static void main(String[] args){
[Link]("Hola a todos");
}
}
RESULTADO DE JAVADOC
LENGUAJE DE FORMATO LIBRE
La disposicin de los elementos dentro del cdigo es
libre.
Sentencias: Lnea simple de cdigo terminada en ;.
x = y + z + w;
Bloque de cdigo: Conjunto de sentencias agrupadas
entre llaves.
{
x = x + y;
c = c +1;
}
JAVA permite espacios en blanco entre elementos del
cdigo.
x1 = y
* delta;
x2 = (y+1) * delta;
IDENTIFICADORES
Son nombres de clases, variables o mtodos.
No tienen una longitud mxima.
El primer carcter del identificador debe ser: A Z, a
z, _, $.
JAVA permite espacios en blanco entre elementos del
cdigo.
El resto debe ser: A Z, a z, _, $, 0 9.
No se permiten vocales acentuadas ni la letra ee (, ).
No se permite utilizar palabras reservadas como
identificadores.
PALABRAS RESERVADAS
abstract default
goto1
null2
synchronized
boolean
do
if
package
this
break
double
implements
private
throw
byte
else
import
protected
throws
case
extends
instanceof
public
transient
catch
false2
int
return
true2
char
final
interface
short
try
class
finally
long
static
void
const
float
native
super
volatile
new
switch
while
continue for
palabras no usadas por el lenguaje, pero son
reservadas.
1
2 realmente son constantes del lenguaje.
VARIABLES Y CONSTANTES
Variables: Zona de memoria cuyos valores van a
cambiar durante la ejecucin del programa.
Declaracin: <tipo> <identificador>;
<tipo> <identificador> <identificador>;
Por ejemplo: int x, y, z;
Constantes: Zona de memoria cuyos valores no
cambian.
Declaracin:
final <tipo> <identificador> = <valor>;
Por ejemplo: final double PI = 3.1416;
ASIGNACIN DE VARIABLES
Se utiliza el operador de asignacin =:
<variable> = <expresin>;
La parte izquierda siempre debe ser una variable.
La parte derecha puede ser un literal, una variable, una
funcin o una combinacin de todos.
Se puede asignar un valor a una variable en el momento
de declararla.
Por ejemplo: int s = 0;
CONVENCIONES DE NOMENCLATURA (1)
Los identificadores que proporciona JAVA siguen una
convencin segn el elemento:
Clases: Primera letra en mayscula de cada palabra.
Por ejemplo:
Figura, NmeroComplejo, String
Variables: Primera letra en minscula y la primera letra
de cada palabra siguiente en mayscula. Por ejemplo:
contador, nroTotalDeElementos, string
Constantes: Todo en maysculas, separando cada
palabra por el carcter de subrayado ( _ ). Por ejemplo:
IVA, PI, LONGITUD_MAXIMA
CONVENCIONES DE NOMENCLATURA (2)
Mtodos: Siguen el mismo formato que las variables,
seguidas de parntesis. Por ejemplo:
superficie(), complejoConjugado()
Estructuras de Control: Utilizar llaves englobando a
todas las sentencias de una estructura de control,
aunque slo haya un sentencia. Por ejemplo:
if (<condicin>){
// hacer algo
}
else {
// hacer otra cosa
}
TIPOS DE DATOS
El lenguaje JAVA define dos tipos de datos:
Tipos primitivos
Tipos referencia
Los tipos primitivos son ocho, agrupados en cuatro
categoras:
Lgico: boolean
Carcter: char
Enteros: byte, short, int, long
Reales: float, double
Los tipos referencia son punteros a objetos.
TIPO DE DATOS LGICO
El tipo de datos boolean (de 8 bits) puede tomar dos
valores posibles: true y false.
El tipo boolean no toma valores numricos.
En JAVA no se considera a cero como falso, y a distinto
de cero como verdadero (como sucede en C y C++).
No existe conversin entre tipos enteros y tipos
lgicos.
int c = 1;
int c = 1;
if (c)
if (c != 0)
{ . . . }
Error de Compilacin
{ . . . }
Correcto
TIPO DE DATOS CARCTER
El tipo de datos char (de 16 bits) representa un solo
carcter Unicode.
El cdigo universal Unicode incluye el cdigo ASCII y
comprende los caracteres grficos de prcticamente
todos los idiomas del mundo (chino, japons, braille,
).
Los literales
(apstrofes).
deben
ir
entre
comillas
simples
Utiliza la siguiente notacin:
Caracteres simples: a
Caracteres especiales: \t, \n
Caracteres Unicode (con 4 dgitos hexadecimales):
\u00BF
TIPO DE DATOS ENTERO
Existen cuatro tipos de datos enteros: byte (de 8 bits),
short (de 16 bits), int (de 32 bits) y long (de 64 bits).
Todos los tipos tienen signo. El cero se considera
positivo.
Los literales enteros se pueden representar con
notacin:
Decimal: 3, 4567
Octal: 03, 04567 (comenzando con un cero).
Hexadecimal: 0x3, 0x4567, 0xABC (comenzando con
0x).
Por defecto siempre se consideran de tipo int.
Seguido de L se considera long: 123L, 0467L, 0xABC.
TIPO DE DATOS REAL
Existen dos tipos de datos reales: float (de 32 bits) y
double (de 64 bits).
Un literal es de punto flotante si lleva:
Un punto decimal: 3.1416
Una E e (notacin cientfica): 12e34, 5.6E78
Una F f (float): 12F, 3.4f
Una D d (double): 12D, 3.4d
Por defecto siempre se consideran de tipo double, si
no se indica explcitamente que es un float.
RESUMEN DE LOS TIPOS DE DATOS PRIMITIVOS
El tamao de cada tipo de dato primitivo se mantiene
invariable, independientemente de la arquitectura de la
mquina.
El valor por defecto se toma para las variables no
inicializadas de los objetos.
Tipo
Contiene
Valor
por
Defecto
Tamao
Valor Mnimo
Valor Mximo
Boolean
true false
false
8 bits
---
---
Char
Carcter
Unicode
\u0000
16 bits
\u0000
\uFFFF
Byte
Entero con signo
8 bits
-128
127
16 bits
-32768
32767
Short
Entero con signo
Int
Entero con signo
32 bits
-2147483648
2147483647
Long
Entero con signo
64 bits
-9223372036854775808
9223372036854775807
Float
Norma IEEE 754
0.0
32 bits
3.40282347E+38
1.40239846E-45
double
Norma IEEE 754
0.0
64 bits
1.79769313486231570E+308
4.94065645841246544E-324
TIPOS DE DATOS REFERENCIA
Un tipo referencia guarda un puntero (de 32 bits) a la
direccin donde se ubica el objeto.
Slo puede almacenar direcciones de objetos de su
propio tipo. Por ejemplo:
Computadora pc1, pc2;
Usuario usr;
pc1 = new Computadora();
usr = pc1; // Error de compilacin
pc2 = pc1; // Correcto
Todas las clases son de tipo referencia.
El valor que toma por defecto una variable de tipo
referencia es null.
MEMORIA ASIGNADA A UNA VARIABLE
Tipo primitivo: Se asigna la cantidad de memoria que
requiere el tipo de la variable. Por ejemplo:
long x;
64 bits
???
Tipo referencia: Se asigna el espacio correspondiente a
una direccin de memoria (32 bits). Por ejemplo:
Computadora pc;
pc
Fecha reunion;
reunion
???
???
32 bits
32 bits
CONVERSIN DE TIPOS
La conversin de tipos (casting) se debe realizar entre
tipos de la misma naturaleza: numricos o referencia.
Al convertir un tipo a un tamao ms pequeo, se
puede perder la informacin de los bits de mayor peso.
La sintaxis es: (<tipo>) <expresin>
byte num8bits = (byte) 63;
int num32bits = 63;
num8bits = (byte) num32bits;
short x, y, z;
z = x + y; Error, el operador + devuelve int
z = (short) (x + y); Correcto
OPERADORES (1)
Operadores unarios: + ,
Operadores aritmticos: +, , *, /, % (resto de la
divisin entera)
Operadores de asignacin: =, +=, *=, /=, %=
<var>+=<expresin> <var>=<var>+<expresin>
Operadores incrementales: ++,
Precediendo a la variable: ++<var> , --<var>
Siguiendo a la variable: <var>++ , <var>- {i=1; j=i++;} {i=1;j=i;i=i+1;} i=2, j=1
{i=1; j=++i;} {i=1;i=i+1;j=i;} i=2, j=2
OPERADORES (2)
Operadores relacionales: == (igual), != (distinto), >, <,
>=, <=
Operadores lgicos: && (AND), || (OR), ! (NOT), &
(AND), | (OR)
&& y || realizan evaluacin perezosa:
op1 && op2 si op1 es false, no se evala op2
op1 || op2 si op1 es true, no se evala op2
& y | siempre evalan los dos operadores
Operadores instanceof:
<objeto> instanceof <clase>
determina si un objeto pertenece a una clase.
OPERADORES (3)
Operador
condicional:
Permite
bifurcaciones
condicionales sencillas.
<exprBooleana> ? <valor1> : <valor2>
Operadores a nivel de bits: >>, <<, >>> , &, |,
^ , ~
op1 >> n Desplaza los bits de op1 (con signo) a la
derecha n posiciones.
op1 >>> n Desplaza los bits de op1 (sin signo) a la
derecha n posiciones.
op1 & op2
Operador AND a nivel de bits
op1 | op2
Operador OR a nivel de bits
op1 ^ op2
Operador XOR a nivel de bits
~op1
Operador complemento (NOT a nivel de
bits)
JERARQUA DE OPERADORES
Todos los operadores binarios se evalan de izquierda
a derecha, excepto los operadores de asignacin.
TIPO
OPERADOR
Operadores sufijos
[] . (argumentos) expr++
Operadores unarios
++expr
--expr
new
Creacin y casting
(tipo)
*
Multiplicativos
<<
Desplazamiento
Igualdad
<
>
~ !
expr
>>
<=
-expr
Aditivos
Relacional
+expr
expr--
>>>
>=
==
instanceof
!=
AND
(bits) &
OR exclusivo
(bits)^
OR inclusivo
(bits) |
AND lgico
&&
OR lgico
||
Condicional
? :
Asignacin
= += -= *= /= %= &= ^= |= <<= >>= >>>=
ESTRUCTURAS DE CONTROL
Las sentencias de control del flujo de ejecucin,
permiten tomar decisiones y realizar un proceso
repetidas veces.
Hay dos tipos principales de sentencias de control de
flujo:
Condicionales: if, switch
Iteracin: for, while, do while
Otras sentencias que permiten interrumpir el flujo
normal de ejecucin son break y continue.
LA SENTENCIA IF
Ejecuta un conjunto de sentencias en funcin del valor
de una expresin booleana.
if (<exprBooleana>)
<sentencia>;
if (<exprBooleana>){
<grupoSentencias>;
}
if (<exprBooleana>){
<grupoSentencias1>;
}
else {
<grupoSentencias2>;
}
if (<exprBooleana1>){
<grupoSentencias1>;
}
else if (<exprBooleana2>)
{
<grupoSentencias2>;
}
else {
<grupoSentencias3>;
}
LA SENTENCIA SWITCH
Comparacin de igualdad mltiple con la misma
variable.
switch (<variable>)
{
case valor1: [<grupoSentencias1>;]
[break;]
case valor2: [<grupoSentencias2>;]
[break;]
...
case valorN: [<grupoSentenciasN>;]
[break;]
[default: <grupoSentencias>;]
}
EJEMPLO SWITCH
Opciones de un men:
1) Altas
2) Bajas
3) Modificaciones
4) Salir
switch (opcion){
case 1: altas();
break;
case 2: bajas();
break;
case 3: modificaciones();
break;
case 4:
default: salir();
}
LA SENTENCIA FOR (1)
Permite la ejecucin repetida un nmero de veces
predeterminado, de un grupo de sentencias.
for (<inicializa>; <exprBooleana>; <actualiza>)
{
<grupoSentencias>;
}
<inicializa>: Asignacin del valor incial de las
variables que intervienen en la expresin.
<exprBooleana>: Condicin booleana.
<actualiza>: Asignacin del nuevo valor de las
variables.
En <inicializa> y en <actualiza> pueden ir ms
de una asignacin, separadas por comas.
LA SENTENCIA FOR (2)
Las partes del for siguen el siguiente orden de
ejecucin:
Por ejemplo:
for (i=0, j=100; i < j; i++, j -= 3)
[Link] (i + , + j);
LA SENTENCIA WHILE
El grupo de sentencias se ejecuta mientras se cumpla
la expresin booleana.
while (<exprBooleana>)
{
<grupoSentencias>;
}
Por ejemplo:
i = 0;
while (i < 10)
{
[Link] (i= + i);
i += 1;
}
EQUIVALENCIA FOR WHILE
La siguiente sentencia for:
for(<inicializa>; <exprBooleana>; <actualiza>)
{
<grupoSentencias>;
}
equivale a:
<inicializa>
while (<exprBooleana>)
{
<grupoSentencias>;
<actualiza>;
}
LA SENTENCIA DO WHILE
El grupo de sentencias se ejecuta mientras se cumpla
la expresin booleana.
do
{
<grupoSentencias>;
} while (exprBooleana>);
El grupo de sentencias se ejecuta por lo menos una
vez. Por ejemplo:
i = 0;
do
{
[Link] (i= + i);
i += 1;
} while (i<10);
LAS SENTENCIAS BREAK Y CONTINUE
La sentencia break provoca la terminacin inmediata
de un ciclo de una sentencia switch (sin ejecutar el
resto de las sentencias).
Es vlida para for, while, do while y switch.
La sentencia continue provoca la
inmediata de una iteracin en un ciclo.
Es vlida para for, while y do while.
terminacin
ENTRADA Y SALIDA ESTNDAR
En JAVA la entrada desde teclado y la salida por
pantalla se realizan a travs de la clase System.
System contiene tres atributos estticos:
[Link]: Objeto de la clase InputStream que lee
datos de la entrada estndar (teclado).
[Link]: Objeto de la clase PrintStream que
escribe datos en la salida estndar (pantalla).
[Link]: Objeto de la clase PrintStream que
escribe mensajes de error en la salida estndar
(pantalla).
ENTRADA DESDE TECLADO (1)
El mtodo readLine() permite leer, en cada llamada,
una lnea completa y la devuelve como String.
Para usar este mtodo, se debe crear un buffer para el
flujo (stream) de caracteres de entrada. Para ello
realizamos las siguientes declaraciones de variables:
InputStreamReader isr;
BufferedReader br;
isr = new InputStreamReader([Link]);
br = new BufferedReader(isr);
Una vez realizadas estas declaraciones, le entrada de
datos la podemos realizar de la siguiente manera:
String entrada = [Link](isr);
ENTRADA DESDE TECLADO (2)
Un programa JAVA que use la entrada por teclado,
debe incluir la sentencia:
import [Link].*;
Tambin el mtodo en donde se incluya la sentencia
readLine(), deber incluir a continuacin de su
cabecera la expresin:
throws [Link]
Por ejemplo:
public static void main(String[] args)
throws [Link]
{
...
}
ENTRADA DESDE TECLADO (3)
Tambin podemos usar un cuadro de dilogo para
realizar la entrada de datos. Este cuadro recibe una
cadena desde el teclado y la asigna a una variable del
tipo String.
String entrada =
[Link]("mensaje");
Un programa JAVA que use la entrada por cuadro de
dilogo, debe incluir la sentencia:
import [Link].*;
Cuando se encuentra un cuadro de dilogo, se
suspende temporariamente la ejecucin del programa,
hasta que se presione el botn de Aceptar
Cancelar.
ENTRADA DESDE TECLADO (4)
Cuadro de dilogo:
SALIDA POR PANTALLA (1)
Se utilizan los mtodos:
[Link](<argumento>): Imprime por
pantalla el argumento dado, independientemente del
tipo que sea.
[Link](<argumento>): Igual que el
anterior, pero aadiendo un salto de lnea.
Ambos mtodos pueden imprimir:
Valores directamente
[Link](Hola Mundo);
double numeroPI = 3.141592654;
[Link](numeroPI);
Valores concatenados con el operador +
[Link](Hola Mundo + numeroPI);
SALIDA POR PANTALLA (2)
Tambin
podemos
utilizar
el
mtodo
showMessageDialog de la clase JOptionPane para
mostrar un cuadro de dilogo que contiene un mensaje
de salida:
[Link](null, salida);
El
mtodo
argumentos:
showMessageDialog
requiere
dos
El primer argumento ayuda a la aplicacin a determinar
en dnde se va a colocar el cuadro de dilogo. Cuando
es null, el cuadro de dilogo aparece en el centro de
la pantalla de la computadora e imprime por pantalla el
argumento dado, independientemente del tipo que sea.
El segundo argumento es la cadena a mostrar.
SALIDA POR PANTALLA (3)
Cuadro de mensajes:
LA CLASE STRING
String(): Constructor para crear String a partir de
varios tipos.
charAt(int): Devuelve el carcter en la posicin
indicada.
equals(String): Devuelve true si las cadenas son
iguales.
length(): Devuelve el nmero de caracteres.
compareTo(String): Devuelve un entero menor que
cero si el objeto String es menor (en orden
alfabtico) que el string dado, cero si son iguales, y
mayor que cero si el objeto String es mayor que el
string dado.
toUpperCase(): Convierte en maysculas.
LA CLASE MATH
E: Constante del nmero (2.718)
PI: Constante con el valor de (3.1415)
double abs(double x): Valor absoluto de x
double round(double x): Entero ms cercano a x
double sin(double x : Seno de x
double cos(double x): Coseno de x
double sqrt(double x): Raz cuadrada de x
double pow(double x, double y): x elevado a y
double log(double x): Logaritmo neperiano de x
double random(): Nmero aleatorio [0, 1)
CLASES ENVOLVENTES
JAVA no trata a los tipos primitivos como objetos. Los
trata de forma diferente por razones de eficiencia.
Las clases envolventes son un complemento de los
tipos primitivos.
Cada tipo primitivo tiene su correspondiente clase
envolvente en el paquete [Link]:
byte
Byte
int
Integer
float
Float
boolean Boolean
short Short
long Long
double Double
char
Character
LA CLASE INTEGER
int parseInt(String): Convierte una String en
entero con signo.
String toBinaryString(int): Crea una String en
base 2.
String toOctalString (int): Crea una String en
base 8.
String toHexStrig(int): Crea una String en base
16.
MAX_VALUE: Constante con el valor mximo posible.
MIN_VALUE: Constante con el valor mnimo posible.
LA CLASE DOUBLE
int parseDouble(String): Convierte una String en
un real de doble precisin.
boolean isInfinite(): Devuelve true si es infinito.
boolean
nmero.
isNan(): Devuelve true si no es un
String toHexStrig(int): Crea una String en base
16.
MAX_VALUE : Constante con el valor mximo posible.
MIN_VALUE : Constante con el valor mnimo posible.
POSITIVE_INFINITY : Constante con el valor +
NaN: Constante con el valor NaN (Not a Number).
ARREGLOS
Los arrays son estructuras de memoria que
almacenan en una variable mltiples valores del
mismo tipo.
Los arrays son objetos se crean con new.
Se utilizan los corchetes ([])para declarar el arreglo y
para acceder a sus elementos.
Pueden ser de cualquier tipo (primitivo o referencia).
Declaracin de arrays:
<tipo> <variable>[]; <tipo>[] <variable>;
int a[]; equivale a int[] a;
int[] a, b, c;
(a, b y c son arrays) RECOMENDADO
INSTANCIACIN DE ARREGLOS
Creacin de objetos arrays:
<variable> = new <tipo> [<tamao>];
Al crear el objeto, el nmero de elementos (<tamao>)
se guarda en un atributo llamado length.
El primer elemento del array est en la posicin 0, y el
ltimo en la posicin length 1.
int[] a = new int[20];
a[0] = 15;
int i = a[0];
[Link]([Link]);
[Link](i); 15
20
INICIALIZACIN DE ARREGLOS
Cuando se instancia un objeto array, sus elementos
se inicializan al valor por defecto del tipo
correspondiente.
Si se conocen los valores iniciales de cada elemento,
se pueden inicializar con los valores entre llaves y
separados por comas (a la vez que se declara).
Por ejemplo: int[] cuadrados = {0, 1, 4, 9};
equivale a:
int[] cuadrados = new int[4];
cuadrados[0] = 0;
cuadrados[1] = 1;
cuadrados[2] = 4;
cuadrados[3] = 9;
EJEMPLOS DE ARREGLOS
int[] digitos = {1, 2, 3, 4, 5, 6, 7, 8,
9};
String[] dias3 = {Lu, Ma, Mi, Ju};
Recorrido de una lista:
int[] lista = new lista[10];
for (int i = 0; i < [Link]; i++)
{
[Link](lista[i]);
}
ARREGLOS MULTIDIMENSIONALES
En JAVA los arreglos son todos de una dimensin.
Un array bidimensional es un array de arrays.
Se necesita un conjunto de corchetes por cada
dimensin. Por ejemplo:
int[] unaD = new int[12];
int[][] dosD = new int[12][31];
int[][][] tresD = new int[10][12][31];
MTODOS
Los mtodos son bloques de cdigo (subprogramas)
definidos dentro de una clase.
Un mtodo tiene acceso a todos los atributos de su
clase.
Pueden ser llamados o invocados desde cualquier
sitio, y un mtodo puede invocar a otros mtodos.
Los mtodos que se invocan a s mismos son
recursivos.
En JAVA no se puede definir un mtodo dentro de
otro.
La ejecucin de todos los programas se inician con el
mtodo main().
DEFINICIN DE MTODOS (1)
<tipoRetorno> <nombreMtodo> (<listaArgumentos>)
{
<bloqueCdigo>
}
<tipoRetorno>: Tipo de dato que retorna el mtodo
(primitivo o referencia). Si no devuelve ningn valor,
debe ser void .
<nombreMtodo>: Identificador del mtodo.
<listaArgumentos>: El mtodo puede admitir el
paso de argumentos, separados por comas, con el
formato:
[<tipo> <argumento> [, <tipo> <argumento>...]]
DEFINICIN DE MTODOS (2)
<bloqueCdigo>: Conjunto de sentencias que
implementan la tarea que debe realizar el mtodo. Si
devuelve un valor, debe utilizar la sentencia return:
return <valor>;
<valor>: Debe ser del mismo <tipoRetorno> con el
que se ha declarado el mtodo.
El cdigo se ejecuta hasta alcanzar la sentencia
return (si devuelve un valor) hasta el final del
mtodo (si no devuelve nada).
Se pueden
necesarias.
declarar
variables
locales
si
son
EJEMPLOS DE MTODOS
double tangente (double alfa)
{
return [Link](alfa)/[Link](alfa);
}
void imprimirHola()
{
[Link](Hola);
}
String darFormato(int d, int m, int a)
{
String s;
s = d + / + m + / + a;
return s;
}
PASO DE ARGUMENTOS
JAVA slo permite pasar argumentos por valor.
El mtodo recibe una copia de los argumentos.
El valor de los argumentos de tipo primitivo no
cambia fuera del mtodo.
El valor de los argumentos de tipo referencia (un
puntero a un objeto) tampoco cambia fuera del
mtodo, pero el contenido del objeto referenciado s
se puede cambiar dentro del mtodo.
Tipo primitivo
Paso por Valor
Tipo referencia Paso por Referencia
MBITO DE LAS VARIABLES (1)
En JAVA se dispone de tres tipos de variables:
Variables miembro pertenecientes a una clase.
Argumentos de un mtodo de la clase.
Variables locales de un mtodo de la clase.
Los argumentos trabajan como variables locales.
class Ejemplo
{
int x ;
// variable miembro
void metodo (int y) // argumento
{
int z ; // variable local
x = y + z ;
}
}
MBITO DE LAS VARIABLES (2)
Las variables miembro son visibles desde cualquier
parte de la clase.
Los argumentos y variables locales slo son visibles
dentro del mtodo al que pertenecen. Dejan de existir
al finalizar el mtodo.
Dentro de un mtodo, si coincide el identificador de
un argumento o variable local con el de una variable
miembro, slo se accede a las variables del mtodo.
MXIMO COMN DENOMINADOR
class Mcd {
public static int mcd(int a, int b){
if (b == 0)
return (a);
else
return mcd(b, a % b);
}
public static void main(String[] args){
int a = [Link](args[0]),
b = [Link](args[1]);
[Link](mcd(a,b));
}
}
> java Mcd 14 21
7
MAYOR DE DOS NMEROS (1)
import [Link].*;
class Mayor{
public static void main(String[] args) {
String s;
s = [Link]("x:");
int x = [Link](s);
s = [Link]("y:");
int y = [Link](s);
int may = x > y ? x : y;
[Link](null, may);
[Link](0);
}
}
MAYOR DE DOS NMEROS (2)
CONVERSIN DE TEMPERATURAS
import [Link].*;
class Temperaturas{
public static void main(String[] args)
throws [Link]
{
InputStreamReader isr;
BufferedReader br;
isr = new InputStreamReader([Link]);
br = new BufferedReader(isr);
[Link]("Ingrese temperatura en C:");
String s = [Link]();
float c = [Link](s);
float f = (9/5)*c + 32;
[Link]("Fahrenheit: " + f);
}
}
PALNDROMOS
import [Link].*;
class Palindromo{
public static void main(String[] args)
{
String s1 = "NOELAMACOMOCAMALEON";
String s2 = ""; char car; boolean band;
int n = [Link]();
for(int i = 0; i < n; i++){
car = [Link](i);
s2 = s2 + car;
}
if ([Link](s2)) band = true;
else band = false;
if (band) [Link]("Es Palndromo");
else [Link]("No es un Palndromo");
}
}
ORDENAR UNA LISTA (1)
import [Link].*;
class Ordenar{
public static void leer (int v[]){
int i;
String s;
for (i = 0; i < [Link]; i++){
s = [Link]("elemento:");
v[i] = [Link](s);
}
}
public static void mostrar (int v[]){
int i;
for (i = 0; i < [Link]; i++)
[Link](v[i]);
}
ORDENAR UNA LISTA (2)
public static void ordenar (int v[]){
int i, j, aux;
for (i = 0; i<[Link] - 1; i++)
for (j = i+1; j<[Link]; j++)
if (v[i] > v[j]){
aux = v[i];
v[i] = v[j];
v[j] = aux;
}
}
public static void main(String[] args){
String s =
[Link]("Nro elemts?: ");
int n = [Link](s);
int a[] = new int[n];
leer(a); ordenar(a); mostrar(a);
}
}
EJERCICIOS
1)
Calcular el factorial del nmero n.-
2)
Determinar si un nmero n es primo.
3)
Obtener las races de la ecuacin cuadrtica:
ax2 + bx + c = 0
4)
Generar las n primeras filas del tringulo de Pascal:
1
1
1
1
1
2
1
3
INTRODUCCIN AL LENGUAJE JAVA
Tema 3:
PROGRAMACIN
ORIENTADA A OBJETOS
LA PROGRAMACIN ORIENTADA A OBJETOS
La definicin de los objetos (estado y comportamiento)
se encuentra en la clase.
Las clases encapsulan cdigo y datos.
La clase define atributos (datos) y mtodos
(operaciones).
Los atributos han de ocultarse (ocultamiento de la
informacin).
Cada objeto (instancia de una clase) contiene su propio
conjunto de atributos.
Cada mtodo declarado en la clase, constituye un
servicio que proporcionan todos los objetos de esa
clase.
Todos los objetos de una misma clase proporcionan los
mismos servicios (tienen un mismo comportamiento).
DEFINICIN DE UNA CLASE
Sintaxis:
<modificador> class <NombreClase>
{
// Declaracin de atributos
<tipo> <variable>;
// Declaracin de mtodos
<tipo> <nombreMtodo> (<argumentos>)
{ ... }
}
El nombre del archivo JAVA debe coincidir con el de la
clase definida en l <NombreClase>.java
Se recomienda definir una clase en cada archivo JAVA.
EJEMPLO DE UNA CLASE
Clase que almacena un nmero complejo:
[Link]
class Complejo
{
// Atributos
int re;
int im;
// Mtodos
void ubicar(int x, int y)
{re = x; im = y;}
int parteReal()
{return re;}
}
MODIFICADORES DE CLASE
Una declaracin de clase puede ir precedida de
modificadores, que otorgan a la clase ciertas
propiedades:
public: Una clase pblica es accesible pblicamente
(desde cualquier lugar).
abstract: Una clase abstracta se considera incompleta
y no se pueden crear instancias de dicha clase. Esto
sucede porque la clase contiene al menos un mtodos
abstracto, que debe ser implementado por una
subclase.
final: Una clase final no admite subclases.
Una declaracin de clase puede estar precedida por
varios modificadores.
CREACIN DE UN OBJETO
Se utiliza la palabra reservada new:
<refObjeto> = new <NombreClase>();
Por ejemplo:
Complejo z;
z = new Complejo();
ACCESO A MIEMBROS DE UN OBJETO
A travs del operador punto (.) se puede acceder,
tanto a los atributos como a los mtodos de un
objeto:
<refObjeto>.<atributo>
:
<refObjeto>.<mtodo>()
Por ejemplo:
Complejo z = new Complejo();
[Link] = 6;
[Link] = 3;
[Link](5,7);
EL PUNTERO THIS (1)
Se emplea para apuntar al objeto actual dentro de un
mtodo.
Con this se hace accesible una variable miembro cuyo
identificador coincide con una variable local.
Dentro de un mtodo, si coincide el identificador de un
argumento o variable local con el de una variable
miembro, slo se accede a las variables del mtodo.
class A{
int x;
void metodo (int y){
int x = 2;
y = 3 * this.x + y - x ;
}
}
EL PUNTERO THIS (2)
Tambin se emplea para apuntar al objeto actual
dentro de un mtodo.
public Complejo mayorNorma(Complejo z){
if ([Link]() > [Link]())
return (this);
else
return (z);
}
SOBRECARGA DE MTODOS
A veces se necesitan varios mtodos que hagan la
misma tarea, pero con argumentos de tipos distintos.
JAVA permite utilizar un mismo nombre para diferentes
mtodos, siempre que se pueda identificar cada mtodo.
Un mtodo se identifica por su nombre, el tipo de
retorno, el nmero de argumentos que tiene y el tipo de
cada uno de ellos.
void mostrarInt(int i)
void mostrarLong(long l)
void mostrarFloat(float f)
void mostrar(int i)
void mostrar(long l)
void mostrar(float f)
Esta caracterstica se denomina sobrecarga de mtodos.
CONSTRUCTORES (1)
Un constructor es un tipo especial de mtodo que
permite construir un objeto de una clase.
Tienen el mismo nombre que la clase, y no definen un
tipo de retorno. Por ejemplo:
class Complejo{
. . .
public Complejo(int x, int y){
re = x; im = y;
}
. . .
}
Se utilizan junto con la palabra reservada new:
Complejo z = new Complejo(6, 3); z = 6 + 3i
CONSTRUCTORES (2)
Los constructores se pueden sobrecargar y son
opcionales.
Si no se define ningn constructor, JAVA proporciona
uno por defecto. Incorpora el siguiente cdigo a la clase.
class <NombreClase>{
...
public <NombreClase>() {...}
...
}
Si se define un constructor con argumentos, se pierde el
constructor por defecto.
Normalmente, en el constructor se inicializan las
variables miembro.
DESTRUCTORES
En JAVA no hay destructores de objetos como en C+
+.
El Recolector de Basura (garbage collector) es el
encargado de liberar la memoria:
Cuando detecta objetos no referenciados.
Al final de un bloque que haya utilizado objetos.
ENCAPSULAMIENTO
El encapsulamiento consiste en el agrupamiento de
los atributos y mtodos en una misma estructura.
Permite la proteccin de la manipulacin externa de
algunas partes de los objetos.
Un objeto suele tener datos y cdigo privados, de
acceso restringido.
Fuerza al usuario a utilizar una interfaz para acceder a
los datos.
Hace que el cdigo sea ms fcil de mantener.
MODIFICADORES PARA EL ACCESO
La definicin de los miembros de una clase se puede
ampliar aadiendo modificadores al principio:
[<modificador>] <tipo> <identificador>;
[<modificador>] <tipo> <nombre> (<args>) {..}
Los modificadores permiten acceder a los datos o al
cdigo de manera restringida:
public: El miembro de la clase es accesible desde
cualquier clase.
private: El miembro de la clase slo es accesible
desde el cdigo perteneciente a la propia clase.
protected: El miembro de la clase es accesible es
accesible en la clase en donde se define y en
cualquiera de sus subclases. .
EJEMPLO DE ENCAPSULAMIENTO
class Fecha
{
public int dia;
public int mes;
public int anio;
}
...
Fecha f = new Fecha();
[Link] = 34;
[Link] = 14;
[Link] = 0;
...
class Fecha
{
private int
private int
private int
}
...
Fecha f = new
dia;
mes;
anio;
Fecha();
[Link] = 34;
ERROR
[Link] = 14;
ERROR
[Link] = 0;
...
ERROR
CLASE NMERO COMPLEJO (1)
Archivo: [Link]
public class Complejo{
private int re;
private int im;
public void mostrar(){
[Link](re + , + im);
}
public int parteReal(){
return re;
}
CLASE NMERO COMPLEJO (2)
public Complejo(int x, int y){
re = x; im = y;
}
public Complejo sumar(Complejo z){
int x, y; Complejo c;
x = re + [Link];
y = im + [Link];
c = new Complejo(x, y);
return (c);
}
public float norma(){
return (float) [Link](re*re + im*im);
}
}
CLASE NMERO COMPLEJO (3)
Archivo: [Link]
public class PruebaComplejo
{
Complejo a = new Complejo(1, 1);
Complejo b = new Complejo(2, 3);
float r = [Link]();
[Link](Norma de a: + r);
[Link]([Link]());
Complejo c = [Link](b);
[Link]();
}
LA VIDA DE LOS OBJETOS
En JAVA, es el sistema el que se encarga de destruir
los objetos.
El entorno de ejecucin de JAVA, dispone de un
recolector de basura que destruye los objetos
(liberando su memoria) cuando detecta que ellos ya
no son accesibles (se han perdido).
Cuando no hay ninguna variable que haga referencia a
un objeto, ya sea directamente o bien mediante
atributos de otros objetos, entonces el recolector de
basura sabe que puede eliminar el objeto sin riesgos.
HERENCIA (1)
Jerarqua de clases basada en agrupar atributos y/o
mtodos comunes.
Las clases descendientes se llaman subclases.
Las clases ascendientes se llaman superclases.
Las subclases heredan atributos y mtodos de las
superclases (excepto los constructores).
HERENCIA (2)
Supongamos, por ejemplo, que tenemos la clase
Docente y la clase Alumno definidas como sigue:
class Docente
{
String nombre;
int dni;
int numLegajo;
}
class Alumno
{
String nombre;
int dni;
int numLibreta;
}
Las partes comunes se pueden agrupar en una misma
clase, manteniendo las otras dos clases con las
partes no comunes, y heredando de esta nueva clase
con la palabra reservada extends.
HERENCIA (3)
Definimos por lo tanto la clase Persona como sigue:
class Persona
{
String nombre;
int dni;
}
Y las clases derivadas, quedan de la siguiente
manera:
class Docente
class Alumno
extends Persona
extends Persona
{
{
int numLegajo;
int numLibreta;
}
}
SOBREESCRITURA DE MTODOS
Tambin denominados mtodos virtuales.
Una subclase puede modificar los mtodos que ha
heredado de la superclase, manteniendo los mismos
nombres, tipo de retorno y lista de argumentos. Por
ejemplo:
class Empleado{
...
int calcularVacaciones(){...}
}
class Jefe extends Empleado{
int numTrabajadores;
int calcularVacaciones(){...}
}
LA REFERENCIA SUPER (1)
public class ComplejoColor extends Complejo {
private int color;
// Constructor predeterminado
public ComplejoColor() {
super();
color = 0;
}
// Constructor parametrizado
public ComplejoColor(int x, int y, int z) {
super(x, y);
color = z;
}
}
LA REFERENCIA SUPER (2)
Tambin en la clase ComplejoColor redefinimos el
mtodo mostrar() de la superclase Complejo, pero
tambin queremos utilizar el mismo mtodo de la
superclase.
public class ComplejoColor extends Complejo {
private int color;
. . .
public void mostrar(){
[Link](); // de la superclase
[Link](Color: + color)
}
. . .
}
OTRAS CARACTERSTICAS DE LA HERENCIA
Todas las clases proporcionadas por JAVA y las que
defina el programador, heredan de una clase comn: la
clase Object.
El compilador aade extends Object a todas las clases
que no heredan explcitamente de ninguna otra clase.
Por ejemplo:
class Fecha
{
...
}
class Fecha extends Object
{
...
}
Los miembros de la clase se pueden proteger con otro
modificador, protected, cuyo acceso queda restringido
a la clase donde se define y a todas sus subclases.
POLIMORFISMO
Polimorfismo significa muchas formas.
Una clase slo tiene una forma, pero una variable que
hace referencia a la superclase de una jerarqua puede
tener muchas formas (una por cada subclase).
Persona p1 = new Persona();
Persona p2 = new Docente();
Persona p3 = new Alumno();
[Link] = 1234; ERROR
((Docente)p2).numLegajo = 1234;
Pueden utilizarse de dos maneras:
Parmetros polimrficos
Colecciones heterogneas
PARMETROS POLIMRFICOS
class Mascota {...}
class Perro extends Mascota {...}
class Gato extends Mascota {...}
class Veterinario
{
void vacunar (Mascota m) {...}
}
...
Veterinario medico = new Veterinario();
Perro pichichu = new Perro();
Gato garfield = new Gato();
[Link](pichichu);
[Link](garfield);
COLECCIONES HETEROGNEAS
Hasta ahora vimos que un array slo poda contener
elementos del mismo tipo (coleccin homognea).
Utilizando polimorfismo se pueden tener elementos de
distinto tipo en un array (coleccin heterognea).
Se crean utilizando arreglos definidos con el tipo de la
superclase. Por ejemplo:
Mascota[] listaMascotas = new Mascota[5];
listaMascotas[0] = new Mascota();
listaMascotas[1] = new Perro();
listaMascotas[2] = new Gato();
listaMascotas[3] = new Gato();
listaMascotas[4] = new Perro();
EJEMPLO DE COLECCIONES HETEROGNEAS
class Empleado{
int sueldo;
int calcularVacaciones(){...}
}
class Jefe extends Empleado{
int numTrabajadores;
int calcularVacaciones(){...}
}
Empleado[] lista = new Empleado[10];
lista[0] = new Empleado();
lista[1] = new Jefe();
...
lista[9] = new Empleado();
for (int i = 0; i < [Link]; i++){
[Link]
(lista[i].calcularVacaciones());
}
MODIFICADOR STATIC
Los miembros de una clase pertenecen a los objetos.
Para acceder a las variables y mtodos de una clase, es
necesario crear primero un objeto.
El modificador static puede aplicarse a variables y a
mtodos para acceder a ellos sin instanciar ningn
objeto.
Los miembros estticos pertenecen a la clase, no a los
objetos (son los denominados atributos y mtodos de
clase).
[<modifAcceso>] [static] <tipo> <identificador>;
<modifAcceso>] [static] <tipo> <nombre> (<args>){
...
}
ATRIBUTOS Y MTODOS ESTTICOS
Los miembros estticos pertenecen a la clase y son
accesibles por todos los objetos de esa clase.
Una variable esttica es una variable global (variable
de clase) dentro de la clase.
Para acceder a un miembro esttico, hay que utilizar
el nombre la clase a la que pertenece. Por ejemplo:
double tangente(double x)
{
return [Link](x)/[Link](x);
}
EJEMPLO DE STATIC (1)
public class Cuenta {
private int numCuenta;
private static int cantCtas = 0;
public Cuenta() {
cantCtas++;
numCuenta = cantCtas;
}
}
...
Cuenta[] cont = new Cuenta[3];
cont[0] = new Cuenta();
cont[1] = new Cuenta();
cont[2] = new Cuenta();
EJEMPLO DE STATIC (2)
CLASES ABSTRACTAS
Una clase abstracta es una clase de la que no se
pueden crear objetos.
Representa un concepto que no se puede instanciar.
Se define anteponiendo el modificador abstract a la
definicin de una clase.
abstract class Figura {...}
class Cuadrado extends Figura {...}
class Triangulo extends Figura {...}
class Circulo extends Figura {...}
...
Figura f = new Figura(); ERROR
COMPATIBILIDAD DE OBJETOS
El up casting consiste en realizar el casting (moldeo)
hacia arriba en la jerarqua de clases.
Persona unaPersona;
Alumno unAlumno;
...
unaPersona = unAlumno; CORRECTO
// todos los alumnos son personas
unAlumno = unaPersona; ERROR
// no todas las personas son alumnos
unAlumno = (Alumno) unaPersona;
// down casting
CORRECTO
MTODOS ABSTRACTOS
Un mtodo es abstracto si se declara (dentro de una
clase abstracta), pero no se implementa. Por ejemplo:
abstract class Figura {
...
public abstract float area();
}
Todas las subclases de una clase abstracta, deben
implementar los mtodos abstractos que tengan
definidos.
class Cuadrado extends Figura {
...
public float area() {...}
}
EJEMPLO DE CLASE ABSTRACTA (1)
Jerarqua de figuras geomtricas:
public abstract class Figura {
protected int x;
protected int y;
public abstract void area();
}
class Rectangulo extends Figura {
private double ancho, alto;
...
public double area(){
return (ancho * alto);
}
}
EJEMPLO DE CLASE ABSTRACTA (2)
class Circulo extends Figura {
private double radio;
...
public double area(){
return ([Link] * radio * radio);
}
}
class Triangulo extends Figura {
private double base, altura;
...
public double area(){
return (base * altura / 2);
}
}
INTERFACES (1)
Una interfaz es un conjunto de declaraciones de
mtodos.
interface <NombreInterfaz> {
<tipo> <nombreMtodo1> (<args>);
<tipo> <nombreMtodo2> (<args>);
}
Una clase que implementa el cdigo de la interfaz, debe
implementar todos sus mtodos, aunque no lleven
cdigo.
class <NombreClase> implements <NombreInterfaz>
{
<tipo> <nombreMtodo1> (<args>) {<cdigo>}
<tipo> <nombreMtodo2> (<args>) {<cdigo>}
}
INTERFACES (2)
Las interfaces sirven para:
Declarar mtodos que sern implementados por una
o ms clases.
Definir la interfaz de programacin de un objeto, sin
mostrar el cuerpo actual de la clase.
Cada interfaz debe escribirse en un archivo *.java
con el mismo nombre de la interfaz.
EQUIVALENCIA NTERFAZ CLASE ABSTRACTA
interface
<tipo>
<tipo>
...
<tipo>
}
Interfaz {
<mtodo1>();
<mtodo2>();
<mtodoN>();
equivale a:
abstract class Interfaz {
abstract <tipo> <mtodo1>();
abstract <tipo> <mtodo2>();
...
abstract <tipo> <mtodoN>();
}
HERENCIA MLTIPLE (1)
JAVA es un lenguaje que slo posee herencia simple
de implementacin, pero que puede aportar herencia
mltiple de interfaz.
Una interfaz no puede implementar otra interfaz,
aunque s puede extenderla (con extends)
amplindola.
Una interfaz puede heredar de ms de una interfaz
antecesora:
interface I1 extends I2, I3 {...}
Una clase no puede tener ms que una clase
antecesora, pero puede implementar ms de una
interfaz:
class C1 extends C2 implements I1, I2 {...}
HERENCIA MLTIPLE (2)
El ejemplo tpico de herencia mltiple es el que se
presenta con la herencia en diamante:
HERENCIA MLTIPLE (3)
Para poder llevar a cabo el esquema anterior en JAVA,
es necesario que las clases Paralelogramo,
Rectngulo y Rombo de la figura sean interfaces, y
que la clase Cuadrado sea una clase (que recibe la
herencia mltiple):
interface Paralelogramo
{...}
interface Rectngulo extends Paralelogramo
{...}
interface Rombo extends Paralelogramo
{...}
class Cuadrado implements Rectngulo, Rombo
{...}
PAQUETES
Un paquete es una agrupacin de clases (librera).
El programador puede crear sus propios paquetes
con la sentencia package al comienzo del archivo
fuente:
package <[Link]>;
Por ejemplo: package [Link];
La composicin de nombres (separados por puntos)
est relacionada con la jerarqua de directorios:
CLASSPATH\empresa\empleados\
Los nombres de los paquetes se suelen escribir en
minsculas.
EJEMPLO DE PAQUETE
Archivo fuente [Link]:
package [Link];
public class Empleado
{
...
}
La clase Empleado realmente se llama:
[Link]
Si no se indica la sentencia package, la clase
Empleado pertenecer a un paquete por defecto sin
nombre.
EJEMPLO DE PAQUETE
Archivo fuente [Link]:
package [Link];
public class Empleado
{
...
}
La clase Empleado realmente se llama:
[Link]
Si no se indica la sentencia package, la clase
Empleado pertenecer a un paquete por defecto sin
nombre.
SENTENCIA IMPORT
La sentencia import indica al compilador dnde (en
qu paquete) se encuentran las clases que estamos
utilizando.
Para importar slo una clase de un paquete:
import <[Link]>.<NombreClase>;
Para importar todas las clases de un paquete:
import <[Link]>.*;
El compilador aade a todos los archivos la lnea:
import [Link].*;
el paquete que contiene las clases fundamentales
para programar en JAVA (Object, System, )
EJEMPLO DE IMPORT
import [Link].*;
public class Jefe extends Empleado {
String departamento;
Empleado[] subordinados;
}
Si no se escribe el la sentencia import deberamos
referirnos a Empleado como:
[Link]
La clase Jefe pertenece al paquete annimo por
defecto.
La clase String pertenece al paquete [Link].
No necesita la sentencia import.
PAQUETES ESTNDAR
[Link]: Incluye las clases del lenguaje JAVA
propiamente dicho: Object, Thread, Exception,
System, Integer, Math, String, etc.
[Link]: Contiene clases diseadas para usar
con applets.
[Link]: Es el paquete de Entrada/Salida, que
contiene las clases de acceso a archivos.
[Link]: Da soporte a las conexiones del protocolo
TCP/IP.
[Link]: Es una miscelnea de clases tiles para
muchas cosas en programacin. Se incluyen, entre
otras, Date (fecha), Dictionary (diccionario),
Random (nmeros aleatorios) y Stack (pila FIFO).
CONTROL DE ACCESO AVANZADO (1)
Las variables y mtodos de una clase pueden estar en
cualquiera de los cuatro niveles de acceso:
Pblico
cdigo.
Por defecto, cuando no se especifica nada (): Desde
la misma clase y el mismo paquete.
Protegido (protected): Acceso desde una jerarqua de
clases.
Privado (private): Mxima proteccin.
(public):
Acceso
total
desde
cualquier
CONTROL DE ACCESO AVANZADO (2)
Modificador
Misma Clase
Subclases
Mismo
Paquete
Universal
public
protected
private
EXCEPCIONES
JAVA incorpora en el lenguaje el manejo de errores
en tiempo de ejecucin (divisin por cero, ndice
fuera de rango, archivo que no existe, etc.)
Robustez (tolerancia a fallos)
Estos errores reciben el nombre de excepciones.
Si no se gestiona una excepcin, se termina la
ejecucin del programa con un mensaje de error.
Programar manejando excepciones hace que se
separen el cdigo de la tarea a realizar, y el cdigo
de control de errores.
SENTENCIAS TRY CATCH
Para gestionar excepciones, se coloca el cdigo que
puede causarlas dentro de la sentencia try, y tantas
sentencias catch como posibles excepciones haya.
Sintaxis:
try {
// Cdigo que puede provocar excepciones
}
catch (<NombreExcepcin1> e1) {
// Cdigo que gestiona la excepcin 1
}
catch (<NombreExcepcin2> e2) {
// Cdigo que gestiona la excepcin 2
}
PROPAGACIN DE EXCEPCIONES
Consideremos el siguiente caso:
main() llama al mtodo primero()
primero() llama al mtodo segundo()
en segundo() se produce una excepcin
main() primero()
segundo()
Si segundo() no captura la excepcin con un
catch, se propaga a primero(); si ste tampoco la
trata, se propaga a main(). Por ltimo, si en main()
tampoco se gestiona, se termina el programa con un
error de ejecucin.
SENTENCIA FINALLY
try {
// Cdigo que puede provocar excepciones
}
finally {
// Cdigo que se ejecuta siempre al final
}
La sentencia finally define un bloque que se
ejecuta siempre, independientemente de que se haya
capturado o no la excepcin.
Si dentro de try hay alguna sentencia return, se
ejecuta finally antes de devolver un valor.
EJEMPLO TRY CATCH FINALLY
Sistema de riego automtico:
try {
abrirGrifo();
regarCesped();
}
catch (MangueraRotaException e) {
darAlarma();
llamarPlomero();
}
finally {
cerrarGrifo();
}
JERARQUA DE EXCEPCIONES (1)
JERARQUA DE EXCEPCIONES (2)
La clase Throwable es la superclase de todos los
errores y excepciones que se pueden producir en
JAVA.
La clase Error est relacionada con errores del
sistema, de la JVM o de compilacin. Son
irrecuperables (no se capturan).
Los errores de la clase Exception se pueden
capturar.
RuntimeException:
Son
excepciones
muy
frecuentes
relacionadas
con
errores
de
programacin. Son excepciones implcitas que se
pueden no capturar.
Las dems (IOException, AWTException, ) son
excepciones explcitas que JAVA obliga a tenerlas
en cuenta y capturarlas en algn lugar del cdigo
Cdigo robusto
REGLA: CAPTURAR Y/O PROPAGAR
La gestin de excepciones explcitas se puede hacer
de tres maneras:
Capturando la excepcin con try catch.
Propagando la excepcin. Para ello hay que indicarlo
explcitamente en la declaracin del mtodo
[<modificador>] <tipo> <nombre> ([<args>])
throws <Excepcin1> [,<Excepcin2>...] {
// Cdigo del mtodo
}
Capturando y propagando la excepcin
Si no se capturan ni se propagan, se producen
errores de compilacin.
EJERCICIOS
1)
Definir la clase NmeroRacional, provista entre
otros, de los mtodos leer(), mostrar(), suma
(de dos nmeros racionales) y resta (de dos
nmeros racionales). Luego escribir un programa
que utilizando la clase anterior, determine la suma
de n fracciones.-
2)
Definir la clase Polinomio, provista de los
mtodos leer(), mostrar(), suma (de dos
polinomios) y resta (de dos polinomios). Utilizarla
luego en un programa para determinar la sumatoria
de n polinomios .-.
INTRODUCCIN AL LENGUAJE JAVA
Tema 4:
PROGRAMACIN
MULTIPROCESO
PROGRAMACION CONCURRENTE
Programa no
concurrente
Programa
concurrente
DIFERENCIA ENTRE PROGRAMA Y PROCESO
Programa
Proceso
Public class Programa
{
int a;
Public static void main()
{
Public static void main()
{
}
}
Cdigo ejecutable
Datos
Pila
Registros PC
THREADS
Un proceso es un programa en ejecucin.
Un thread (tambin llamado hilo hebra de
ejecucin proceso ligero) es un flujo de ejecucin
simple dentro de un proceso.
Un nico proceso puede tener varios hilos
multihilo.
Multitarea multihilo
Un hilo tiene asociado tiempo de CPU, memoria
para el cdigo y memoria para los datos, pero se
puede comunicar, coordinar y sincronizar con otros
hilos.
HILOS Y PROCESOS
CREACIN DE UN THREAD (1)
Hay dos formas de crear un thread:
Declarar una clase que implemente la interfaz
Runnable, y crear un objeto de tirpo Thread a partir
de ella.
Crear una clase que herede de la clase Thread.
La clase Thread encapsula todo el control necesario
sobre los hilos de ejecucin.
Hay que distinguir claramente entre un objeto Thread
(parte esttica) y un hilo de ejecucin o thread (parte
dinmica).
La nica forma de controlar el comportamiento de los
hilos es a travs de la clase Thread.
MTODOS DE LA CLASE THREAD
Hay dos formas de crear un thread:
Declarar una clase que implemente la interfaz
Runnable, y crear un objeto de tirpo Thread a partir
de ella.
Crear una clase que herede de la clase Thread.
La clase Thread encapsula todo el control necesario
sobre los hilos de ejecucin.
Hay que distinguir claramente entre un objeto Thread
(parte esttica) y un hilo de ejecucin o thread (parte
dinmica).
La nica forma de controlar el comportamiento de los
hilos es a travs de la clase Thread.
CREACIN DE UN THREAD (2)
Implementando la interfaz Runnable:
class Hilo implements Runnable {
public void run() {
[Link](Hola Mundo);
}
}
class HolaMundo {
public static void main(String[] args) {
Hilo h = new Hilo();
Thread t = new Thread(h); // Crea el hilo
[Link]();
// Lo ejecuta
}
}
CREACIN DE UN THREAD (3)
Extendiendo la clase Thread:
class Hilo extends Thread {
public void run() {
[Link](Hola Mundo);
}
}
class HolaMundo {
public static void main(String args[]) {
Thread t = new Hilo(); // Crea el hilo
[Link]();
// Lo ejecuta
}
}
ESTADOS DE UN THREAD (1)
Un thread puede estar en cuatro estados:
Nuevo: El thread ha sido creado,
inicializado con el mtodo start().
Listo: El thread puede estar ejecutndose o
preparado para ejecutarse. Se inicia con start().
Bloqueado: El thread podra estar ejecutndose,
pero est esperando que termine alguna otra tarea,
como por ejemplo la E/S de disco.
Finalizado: Terminacin de un thread al finalizar el
mtodo run().
pero
no
ESTADOS DE UN THREAD (2)
SINCRONIZACIN DE THREADS (1)
Una regin crtica es un recurso (archivo, impresora, objeto,
etc.) accesible por ms de un thread a la vez.
La sincronizacin es un mecanismo que evita que se haga
ms de un acceso simultneo a una regin crtica.
El modificador synchronized permite la
exclusiva de un mtodo sin ser interrumpido.
ejecucin
public synchronized void extraccion(int importe)
{
int saldo = leerSaldo();
if (saldo > importe)
saldo = saldo - importe;
}
SINCRONIZACIN DE THREADS (2)
Java utiliza el Monitor (modelo clsico de la
sincronizacion de procesos) es un mecanismo de
control para implementar la exclusin mutua (solo hilo
pueda entrar en el monitor por vez).
Ejemplo: Acumular las ventas de entradas en un cine
en el cual hay tres vendedoras.
Para acumular las entradas vendidas; Clase Caja
class Caja {
int entradas = 0;
public synchronized void sumar()
{
entradas+=1;
[Link](Entr. Vend.:+entradas);
}
SINCRONIZACIN DE THREADS (3)
class Vendedora extends Thread
Caja c;
Vendedora(Caja caja) {
c = caja;
}
public void run() {
[Link]();
}
}
SINCRONIZACIN DE THREADS (4)
public class Tickets {
public static void main(String arg[]) {
Caja caja = new Caja();
Vendedora V1 = new Vendedora(caja);
Vendedora V2 = new Vendedora(caja);
Vendedora V3 = new Vendedora(caja);
[Link](); [Link]();
[Link]();
try {
[Link](); [Link](); [Link]();
}
catch(InterruptedException e) {}
}
}
COMUNICACIN ENTRE HILOS (1)
Se basa en tres mtodos que estn implementados en
la clase Object:
wait(): le indica al hilo en curso que abandone el
monitor y se vaya a dormir hasta que otro hilo entre en
el mismo monitor y llame a modify.
notify(): despierta al primer hilo que realiz una
llamada wait.
notifyAll(): despierta a todos los hilos que
realizarn una llamada wait sobre el mismo objeto.
COMUNICACIN ENTRE HILOS (2)
Productor
Consumidor
Productor
Repetir x siempre
Produce elem.
Alm..lleno?
Dormir
ALMACEN
Consumidor
Repetir x siempre
Produce elem.
Alm..vacio?
Dormir
Poner elem.
Sacar elem.
Contar elem.
Contar elem.
Hay un elem.?
Desp. Cons.
Hay un lugar?
Desp. Prod
COMUNICACIN ENTRE HILOS (3)
PRODUCTOR-CONSUMIDOR
public class Almacen {
int n;
boolean hayElem = false;
public Almacen() { }
synchronized int sacar()
if (!hayElem) {
try {
wait();
}
COMUNICACIN ENTRE HILOS (4)
catch(InterruptedException e) { }
}
[Link](Obtenido:+n);
hayElem = false;
notify();
return n;
}
synchronized void poner(int n) {
if (hayElem) {
try {
wait();
}
COMUNICACIN ENTRE HILOS (5)
catch(InterruptedException e) { }
{
this.n=n;
hayElem = true;
[Link](Colocado+n);
notify();
}
}
COMUNICACIN ENTRE HILOS (6)
public class Productor implements Runnable {
Almacen a;
public Productor(Almacen a) {
this.a = a;
new Thread (this,Productor).start();
}
public void run() {
int i = 0;
while(true)
[Link](i++);
}
}
COMUNICACIN ENTRE HILOS (7)
public class Consumidor implements Runnable {
Almacen a;
public Consumidor(Almacen a) {
this.a = a;
newThread (this,Cosumidor).start();
}
public void run() {
int i = 0;
while(true)
[Link]();
}
COMUNICACIN ENTRE HILOS (8)
public class ProductorConsumidor {
public ProductorConsumidor()
{
}
public static void main(String arg[]) {
Almacen a = new Almacen()
new Productor(a);
new Consumidor(a);
}
}
INTRODUCCIN AL LENGUAJE JAVA
Tema 5:
INTERFACES
GRFICAS
LAS INTERFACES GRFICAS DE USUARIO (GUI)
Hasta ahora hemos desarrollado programas que usan
la consola para interactuar con el usuario. Esta forma
de interfaz de usuario es muy simple, y nos ha
permitido centrarnos en todo aquello que tiene que ver
tan slo con la POO con JAVA, sin tener que tratar al
mismo tiempo con ventanas, botones y otros
elementos similares.
Pero los programas en la actualidad utilizan las
interfaces grficas de usuario (GUI) que ofrecen al
usuario ventanas, cuadros de dilogo, barras de
herramientas, botones, listas desplegables y muchos
otros
elementos
con
los
que
ya
estamos
acostumbrados a utilizar.
En este caso las aplicaciones son conducidas por
eventos y se desarrollan haciendo uso de las clases
que para ello nos ofrece la API de JAVA.
LA API DE JAVA PARA EL DESARROLLO DE GUI
La interfaz de usuario es la parte del programa que
permite al usuario interactuar con l.
La API de JAVA proporciona una biblioteca de clases
para el desarrollo de GUIs (en realidad son dos: AWT y
Swing).
La biblioteca proporciona un conjunto de herramientas
para la construccin de GUIs, que tienen una
apariencia y se comportan de forma semejante en
todas las plataformas en las que se ejecuten.
La estructura bsica de la biblioteca gira en torno a
componentes y contenedores. Los contenedores
contienen componentes y son componentes a su vez,
de forma que los eventos pueden tratarse tanto en
contenedores como en componentes.
LAS BIBLIOTECAS DISPONIBLES
Cuando apareci JAVA, los componentes grficos
disponibles para el desarrollo de GUIs se encontraban
en una biblioteca conocida como Abstract Window
Toolkit (AWT)
AWT trabaja como un intermediario entre el sistema
operativo de base y la aplicacin JAVA. Por ejemplo,
cuando uno utiliza un botn AWT en una GUI, lo que
realmente hace es invocar a la primitiva para botones
del sistema operativo Problemas entre plataformas.
Al aparecer JAVA 2 la biblioteca AWT se reemplaz por
otra biblioteca ms robusta, verstil y flexible: Swing,
que est totalmente implementada en JAVA
Multiplataforma.
EL PAQUETE SWING
Paquete de JAVA para la generacin de GUIs en
aplicaciones reales de gran tamao. Disponible como
paquete externo en JAVA 1.1 e integrado desde JAVA 1.2.
Escrito totalmente en JAVA. No reemplaza a AWT. Se
apoya sobre AWT y aade JComponents.
Utiliza el modelo de eventos de JAVA 1.1.
Eleccin entre diferentes aspectos (look & feel).
Arquitectura Model View Controller (MVC).
Nuevos componentes (rboles, tablas, frames internos,
iconos, bordes, tooltips, beans, etc.).
JERARQUA DE CLASES DE AWT (1)
La jerarqua de clases de los componentes de AWT, se
muestran en la siguiente figura:
JERARQUA DE CLASES DE AWT (2)
Todos los Components (excepto Window y los derivan
de ella) deber ser aadidos a un Container. Tambin
un Container puede ser aadido a otro Container.
Los Containers de mximo nivel son las Windows
(Frames y Dialogs). Los Panels y ScrollPanes
deben estar siempre dentro de otro Container.
Un Component slo puede estar en un nico
Container. Si est en un Container y se aade a
otro, deja de estar en el primero.
La
clase
Component
tiene
una
serie
de
funcionalidades bsica comunes (variables y
mtodos), que son heredados por todas sus subclases.
JERARQUA DE CLASES DE AWT (3)
Component: Superclase de todas las clases de interfaz
grfica.
Container: Para agrupar componentes.
Frame: Ventana que no est contenida en otras
ventanas.
Dialog: Cuadro de dilogo.
Panel:
Contenedor
invisible
que
mantiene
componentes de interfaz y que se puede anidar,
colocndose en otros paneles o en ventanas.
Categoras de clases:
Contenedores: Frame, Window, Dialog
Componentes intermedios: Panel, ScrollPane
Componentes bsicos: Label, Button, ...
Clases de soporte: Graphics, Color, Font, ...
ESTRUCTURA DE UNA APLICACIN GUI
import [Link].*;
import [Link].*;
class NOMBRE extends JFrame {
// DECLARAR COMPONENTES
public NOMBRE(){
super(TITULO);
// CREAR COMPONENTES
// ESTABLECER DISTRIBUCIN
// AGREGAR COMPONENTES
setVisible(true); setSize(ANCHO, ALTO);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args){
new NOMBRE();
}
}
EJEMPLO DE UNA APLICACIN GUI (1)
import [Link].*;
import [Link].*;
public class GUI_01 extends JFrame {
public GUI_01() {
super("GUI_01");
setSize(500,250);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String [] args){
new GUI_01();
}
}
EJEMPLO DE UNA APLICACIN GUI (2)
JFRAME (1)
Frame JFrame (Swing): Es una ventana que no est
contenida en otra ventana. Suele contener otros
componentes.
JFRAME (2)
Cuando se crea un objeto JFrame, se crea un objeto
Container (AWT). El objeto JFrame usa el panel de
contenido
(Container)
para
albergar
los
componentes del frame.
Obtenemos el panel de contenido del frame:
Container panel = getContentPane();
Aadimos componentes a dicho panel:
[Link](unComponente);
JLABEL
Las etiquetas son tiles en todas las GUIs, ya que
pueden servirnos para mostrar ttulos o escribir
carteles indicadores.
Mtodos principales:
JLabel(String): Constructor de la etiqueta, que pone
el texto en su contenido.
String getText(): Devuelve el texto que posee la
etiqueta.
void setText(String) : Cambia el texto original, por
otro que va como parmetro.
Por ejemplo:
JLabel titulo = new JLabel(TITULO);
JTEXTFIELD
Son campos de ingreso de datos de una sola lnea.
Mtodos principales:
JTextField(int) : Constructor de un campo de
texto de un largo definido.
String getText() : Devuelve el texto que posee el
campo de texto.
void setText(String) : Cambia el texto original,
por otro que va como parmetro.
Por ejemplo:
JTextField dato = new JTextField(15);
JBUTTON
Son botones de accin, que se utilizan en las GUIs
como disparadores de eventos especficos.
Mtodos principales:
JButton(String): Constructor de un botn con un
texto como etiqueta.
void
setEnable(bolean):
desactiva (false) el botn.
boolean isEnabled(): Indica si el botn est
activado (true) desactivado (false).
Por ejemplo:
JButton boton = new JButton(CALCULAR);
Activa
(true)
JCHECKBOX
Son recuadros que permiten marcar (elegir) una o ms
opciones.
Mtodos principales:
JCheckBox(String, boolean): Constructor de un
botn con un texto como etiqueta, y si est o no
seleccionado inicialmente.
boolean isSelected(): Devuelve true si el
checkbox est seleccionado, en caso contrario
devuelve false.
Por ejemplo:
JCheckBox a = new JCheckBox(Ftbol, true);
JCheckBox b = new JCheckBox(Tenis, false);
JCheckBox c = new JCheckBox(Rugby, false);
JRADIOBUTTON
Son grupos de botones circulares, en los que por
convencin, slo uno de ellos puede estar seleccionado.
Para ello, se necesita crear una instancia de
ButtonGroup y agregarle cada uno de los botones de
radio.
Mtodo principal:
JRadioButton(String, boolean) : Constructor de un
botn con un texto como etiqueta y si est o no
seleccionado inicialmente.
Por ejemplo:
JRadioButton mujer, varon;
mujer = new JRadioButton(Mujer, true);
varon = new JRadioButton(Varn, false);
ButtonGroup sexo = new ButtonGroup();
[Link](varon); [Link](mujer);
JCOMBOBOX
Define una lista desplegable de opciones, de las que
una est seleccionada inicialmente, con el mtodo
setSelectedIndex.
Esta
clase
combina
las
funcionalidades de una lista y de un campo de texto.
Mtodos principales:
JComboBox(): Constructor de una lista desplegable.
int getSelectedIndex(): Devuelve la posicin del
item de la lista de opciones que est seleccionado.
Por ejemplo:
JComboBox sexo = new JComboBox();
[Link](Mujer);
[Link](Varn);
[Link](0); Mujer
COMPONENTES EN EL JFRAME (1)
import [Link].*;
import [Link].*;
public class GUI_02 extends JFrame {
Container panel;
JButton boton;
public GUI_02(){
super("GUI_02 con Botn");
panel = getContentPane();
boton = new JButton("ACEPTAR");
[Link](boton);
setSize(500,250); setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String args[]) {
new GUI_02();
}
}
COMPONENTES EN EL JFRAME (2)
ADMINISTRADORES DE DISPOSICIN (1)
Los componentes se agregan al contenedor con el
mtodo add():
JButton unBoton = new JButton("Texto");
[Link](unBoton);
El efecto de add() depende del esquema de
colocacin o disposicin (layout) del contenedor que
se use.
Existen
diversos
esquemas
de
disposicin:
FlowLayout, BorderLayout, GridLayout, ...
Los objetos contenedores se apoyan en objetos
LayoutManager (administradores de disposicin).
ADMINISTRADORES DE DISPOSICIN (2)
Clases ms usadas
LayoutManager:
FlowLayout
BorderLayout
GridLayout
que
implementa
la
interfaz
Para organizar el contenedor se utiliza el mtodo
setLayout() :
public void setLayout(LayoutManager mgr)
setLayout(new BorderLayout());
setLayout(new FlowLayout());
setLayout(new GridLayout(3,4));
El layout manager elige la mejor posicin y tamao de
cada componente, de acuerdo al espacio disponible.
FLOWLAYOUT (1)
FlowLayout coloca los componentes de izquierda a
derecha y de arriba hacia abajo:
FLOWLAYOUT (2)
import [Link].*;
import [Link].*;
public class GUI_03 extends JFrame {
Container panel;
public GUI_03() {
super("GUI_03: Ejemplo de FlowLayout");
panel = getContentPane();
[Link](new FlowLayout());
for(int i = 1; i <= 8; i++)
[Link](new JButton("Componente " + i));
setSize(200,200); setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String [] args) {
new GUI_03();
}
}
FLOWLAYOUT (3)
BORDERLAYOUT (1)
BorderLayout organiza el contenedor en cinco
zonas: Norte, Sur, Este, Oeste y Centro.
BORDERLAYOUT (2)
import [Link].*;
import [Link].*;
public class GUI_04 extends JFrame {
Container panel;
public GUI_04() {
super("GUI_04: Ejemplo de BorderLayout");
panel = getContentPane();
[Link](new BorderLayout());
[Link](new JButton("B1"), [Link]);
[Link](new JButton("B2"), [Link]);
[Link](new JButton("B3"), [Link]);
[Link](new JButton("B4"), [Link]);
[Link](new JButton("B5"), [Link]);
setSize(200,200); setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
....
BORDERLAYOUT (3)
GRIDLAYOUT (1)
GridLayout crea una zona de filas x columnas
componentes y stos se van acomodando de izquierda a
derecha y de arriba a abajo. Todas las celdas tienen el
mismo tamao.
setLayout(new GridLayout(filas, columnas))
GRIDLAYOUT (2)
import [Link].*;
import [Link].*;
public class GUI_05 extends JFrame {
Container panel;
public GUI_05() {
super("GUI_05: Ejemplo de GridLayout");
panel = getContentPane();
[Link](new GridLayout(4, 3));
for (int i = 1; i <= 10; i++)
[Link](new JButton(B + [Link](i)));
setSize(200,200);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
...
GRIDLAYOUT (3)
PANELES COMO CONTENEDORES (1)
Supongamos que necesitamos la siguiente distribucin:
Podemos distinguir claramente varios paneles dentro
de este frame:
El layout del frame es BorderLayout.
En el centro hay un panel con GridLayout de 3 x 3.
En la izquierda hay un panel con GridLayout de 8 x 1.
Abajo puede ser un panel con FlowLayout (
GridLayout de 1 x 2).
A la derecha y arriba no es necesario un panel.
PANELES COMO CONTENEDORES (2)
El cdigo quedara escrito como sigue:
import [Link].*;
import [Link].*;
public class GUI_06 extends JFrame {
Container p;
JPanel p1, p2, p3;
public GUI_06() {
super("GUI_06");
p = getContentPane();
[Link](new BorderLayout());
p1 = new JPanel();
[Link](new GridLayout(3, 3));
[Link]("Center", p1);
PANELES COMO CONTENEDORES (3)
p2 = new JPanel();
[Link](new GridLayout(8, 1));
[Link]("West", p2);
p3 = new JPanel();
[Link](new FlowLayout());
[Link]("South", p3);
setSize(500,250);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String args[]) {
new GUI_06();
}
}
EJEMPLO DE PANELES CONTENEDORES (1)
Los paneles actan como pequeos contenedores
para
agrupar
componentes.
Colocamos
los
componentes en paneles, y los paneles en el frame o
incluso en otros paneles.
EJEMPLO DE PANELES CONTENEDORES (2)
import [Link].*;
import [Link].*;
public class GUI_07 extends JFrame {
public GUI_07() {
Container panel = getContentPane();
[Link](new BorderLayout());
// Creamos el panel p1 para los botones
// y ponemos GridLayout
JPanel p1 = new JPanel();
[Link](new GridLayout(4, 3));
// Agregamos los botones al panel
for(int i = 1; i <= 9; i++) {
[Link](new JButton("" + i));
}
[Link](new JButton("" + 0));
[Link](new JButton("Iniciar"));
[Link](new JButton("Parar"));
EJEMPLO DE PANELES CONTENEDORES (3)
// Creamos p2 para un campo de texto y p1
JPanel p2 = new JPanel();
[Link](new BorderLayout());
[Link](new JTextField("Aqu va el tiempo"),
[Link]);
[Link](p1, [Link]);
// Y p2 y un boton en el frame
[Link](p2, [Link]);
[Link](new Button("Aqu va la comida"),
[Link]);
}
public static void main(String[] args) {
GUI_07 ventana = new GUI_07();
[Link]("Horno Microondas");
[Link](JFrame.EXIT_ON_
CLOSE);
[Link](500, 250);
[Link](true);
}
}
EJEMPLO DE PANELES CONTENEDORES (4)
INTERACCIN CON EL USUARIO (1)
Al interactuar con la aplicacin, el usuario:
Pulsa un botn.
Introduce un texto en un campo y luego presiona la tecla
de Entrada.
Selecciona un elemento de una lista, pulsando sobre
dicho elemento.
Elige una opcin de un men, pulsando sobre dicho
elemento.
Pulsa o suelta los botones del ratn (MouseEvent).
Minimiza, cierra o manipula una ventana (WindowEvent).
Escribe con el teclado (KeyEvent).
Nombre:
Aceptar
Cerrar
INTERACCIN CON EL USUARIO (2)
Cuando el usuario de un programa mueve el ratn,
presiona una tecla o hace un clic, genera un evento
(actionEvent).
Los eventos son objetos de ciertas clases.
Normalmente un objeto de alguna subclase de
EventObject que indica:
El elemento que accion el usuario.
La identificacin del evento que indica la naturaleza
del evento.
La posicin del ratn en el momento de la interaccin.
Teclas adicionales pulsadas por el usuario, como la
tecla Control, la tecla de Cambio a maysculas, etc.
MANEJO DE EVENTOS (1)
El esquema general de para el manejo de eventos en
una GUI es el siguiente:
MANEJO DE EVENTOS (2)
1)
Creamos una clase (de nombre Oyente por ejemplo)
que defina los mtodos para manejar los eventos:
class Oyente implements ActionListener {
// Sobrescribimos el mtodo actionPerformed()
public void actionPerformed (ActionEvent e)
{
. . .
// Cdigo de respuesta al evento
. . .
}
}
MANEJO DE EVENTOS (3)
2)
Creamos una instancia de la clase anterior (Oyente).
El objeto creado es un objeto oyente (listener
object):
ActionListener a1 = new Oyente();
3)
Por ltimo vincularemos el manejador de eventos
con el componente:
[Link](a1);
REPRODUCIR UN VALOR (1)
import [Link].*;
import [Link].*;
import [Link].*;
public class GUI_08 extends JFrame{
Container panel;
JButton botonCopiar;
JTextField campoValor, resultado;
public GUI_08(){
panel = getContentPane();
[Link](new FlowLayout());
[Link](new JLabel("Valor "));
campoValor = new JTextField(5);
[Link](campoValor);
botonCopiar = new JButton(COPIAR);
[Link](botonCopiar);
ActionListener a1 = new Oyente();
REPRODUCIR UN VALOR (2)
[Link](a1);
[Link](new JLabel(" Copia "));
resultado = new JTextField(6);
setSize(400, 100); setVisible(true); _
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String [] args) {
new GUI_08();
}
class Oyente implements ActionListener{
public void actionPerformed(ActionEvent e){
String valor = [Link]();
[Link](valor);
}
}
}
REPRODUCIR UN VALOR (3)
CONVERSIN DE TEMPERATURAS (1)
import [Link].*;
import [Link].*;
import [Link].*;
public class GUI_09 extends JFrame {
Container panel;
TextField valor;
JButton boton1, boton2;
public GUI_09(){
super("Conversor de Temperaturas");
boton1 = new JButton("A Celsius");
boton2 = new JButton("A Fahrenheit");
valor = new TextField(10);
panel = [Link]();
[Link](valor);
CONVERSIN DE TEMPERATURAS (2)
[Link](boton1);
[Link](boton2);
[Link](new FlowLayout());
ActionListener a1 = new Oyente();
ActionListener a2 = new Oyente();
[Link](a1);
[Link](a2);
setSize(500, 250);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String [] args) {
new GUI_09();
}
CONVERSIN DE TEMPERATURAS (3)
class Oyente implements ActionListener {
public void actionPerformed(ActionEvent e) {
String x = [Link]();
double t = [Link](x);
String s = (String) [Link]();
if ([Link]("A Celsius")) {
t = (5.0/9.0) * (t - 32);
[Link]([Link]);
}
else if ([Link]("A Fahrenheit")) {
t = (9.0/5.0) * t + 32;
[Link]([Link]);
}
[Link]([Link](t));
}
}
}
CONVERSIN DE TEMPERATURAS (4)
CLCULO DE LA FREC. CARDACA MXIMA (1)
import [Link].*;
import [Link].*;
import [Link].*;
public class GUI_10 extends JFrame {
Container panel;
JLabel e1, e2, e3;
JTextField valor;
JRadioButton mujer, varon;
JButton b;
public GUI_10(){
super("Frecuencia Cardaca Mxima");
panel = getContentPane();
[Link](new FlowLayout());
e1 = new JLabel("Ingrese Edad:");
valor = new JTextField(3);
e2 = new JLabel("Elija Sexo:");
CLCULO DE LA FREC. CARDACA MXIMA (2)
mujer = new JRadioButton("Mujer",true);
varon = new JRadioButton("Varn",false);
ButtonGroup sexo = new ButtonGroup();
[Link](mujer); [Link](varon);
b = new JButton("CALCULAR");
e3 = new JLabel(" ");
[Link](e1); [Link](valor);
[Link](e2);
[Link](mujer); [Link](varon);
[Link](b); [Link](e3);
ActionListener a = new Oyente();
[Link](a);
setSize(500, 250);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
CLCULO DE LA FREC. CARDACA MXIMA (3)
class Oyente implements ActionListener {
public void actionPerformed(ActionEvent e) {
String s = [Link]();
int edad = [Link](s);
int f;
if ([Link]()) f = 226 - edad;
else f = 220 - edad;
[Link]("F. C. MX: " + f + " p.p.m.");
}
}
public static void main(String args[]) {
new GUI_10();
}
}
CLCULO DE LA FREC. CARDACA MXIMA (4)
MANEJO DE EVENTOS MLTIPLES
Para manejar diferentes eventos asociados a una
misma categora, se deben implementar cada uno de
los mtodos en el manejador de eventos.
Si un evento no interesa, el mtodo asociado se
implementa vaco {}.
Para manejar eventos de diferentes categoras, la clase
del manejador de eventos debe implementar a todas las
interfaces relacionadas con los eventos que se quieren
manejar.
Por ejemplo:
public class Manejador implements
ActionListener, WindowListener{...}
ADAPTADORES
Como puede ser molesto tener que implementar
todos los mtodos de una categora, cuando en
realidad solamente se necesitan algunos de ellos,
JAVA ofrece una clase adaptadora por cada categora
que tiene implementados todos los mtodos, sin
ninguna instruccin en ellos.
Por ejemplo:
WindowListener
WindowAdapter
MouseListener
MouseAdapter
KeyListener
KeyAdapater
EJERCICIOS
1)
Calculadora Sencilla
EJERCICIOS
2)
Calculadora de Fracciones