Está en la página 1de 244

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 Programa.java

Programa.class

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:
// Programa.java
class Programa
{
// Declaraciones globales
public static void main(String[] args)
{
// Declaraciones locales
// Instrucciones
}
}

PRIMER PROGRAMA EN JAVA (1)


Programa Programa.java :
class Programa
{
public static void main (String[] args)
{
System.out.println(Hola a todos!);
}
}
> javac Programa.java
> 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.
System.out.printl(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 Archivo.java Archivo.html

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


// Programa.java
/** 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){
System.out.println("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)
System.out.println (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)
{
System.out.println (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
{
System.out.println (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:
System.in: Objeto de la clase InputStream que lee
datos de la entrada estndar (teclado).
System.out: Objeto de la clase PrintStream que
escribe datos en la salida estndar (pantalla).
System.err: 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(System.in);
br = new BufferedReader(isr);
Una vez realizadas estas declaraciones, le entrada de
datos la podemos realizar de la siguiente manera:
String entrada = br.readLine(isr);

ENTRADA DESDE TECLADO (2)


Un programa JAVA que use la entrada por teclado,
debe incluir la sentencia:
import java.io.*;

Tambin el mtodo en donde se incluya la sentencia


readLine(), deber incluir a continuacin de su
cabecera la expresin:
throws java.io.IOException

Por ejemplo:
public static void main(String[] args)
throws java.io.IOException
{
...
}

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 =
JOptionPane.showInputDialog("mensaje");
Un programa JAVA que use la entrada por cuadro de
dilogo, debe incluir la sentencia:
import javax.swing.*;
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:
System.out.print(<argumento>): Imprime por
pantalla el argumento dado, independientemente del
tipo que sea.
System.out.println(<argumento>): Igual que el
anterior, pero aadiendo un salto de lnea.
Ambos mtodos pueden imprimir:

Valores directamente
System.out.println(Hola Mundo);
double numeroPI = 3.141592654;
System.out.println(numeroPI);

Valores concatenados con el operador +

System.out.println(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:
JOptionPane.showMessageDialog(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 java.lang:
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];
System.out.println(a.length);
System.out.println(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 < lista.length; i++)
{
System.out.println(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 Math.sin(alfa)/Math.cos(alfa);
}
void imprimirHola()
{
System.out.println(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 = Integer.parseInt(args[0]),
b = Integer.parseInt(args[1]);
System.out.println(mcd(a,b));
}
}
> java Mcd 14 21
7

MAYOR DE DOS NMEROS (1)


import javax.swing.*;
class Mayor{
public static void main(String[] args) {
String s;
s = JOptionPane.showInputDialog("x:");
int x = Integer.parseInt(s);
s = JOptionPane.showInputDialog("y:");
int y = Integer.parseInt(s);
int may = x > y ? x : y;
JOptionPane.showMessageDialog(null, may);
System.exit(0);
}
}

MAYOR DE DOS NMEROS (2)

CONVERSIN DE TEMPERATURAS
import java.io.*;
class Temperaturas{
public static void main(String[] args)
throws java.io.IOException
{
InputStreamReader isr;
BufferedReader br;
isr = new InputStreamReader(System.in);
br = new BufferedReader(isr);
System.out.print("Ingrese temperatura en C:");
String s = br.readLine();
float c = Float.parseFloat(s);
float f = (9/5)*c + 32;
System.out.println("Fahrenheit: " + f);
}
}

PALNDROMOS
import java.io.*;
class Palindromo{
public static void main(String[] args)
{
String s1 = "NOELAMACOMOCAMALEON";
String s2 = ""; char car; boolean band;
int n = s1.length();
for(int i = 0; i < n; i++){
car = s1.charAt(i);
s2 = s2 + car;
}
if (s1.equals(s2)) band = true;
else band = false;
if (band) System.out.println("Es Palndromo");
else System.out.println("No es un Palndromo");
}
}

ORDENAR UNA LISTA (1)


import javax.swing.*;
class Ordenar{
public static void leer (int v[]){
int i;
String s;
for (i = 0; i < v.length; i++){
s = JOptionPane.showInputDialog("elemento:");
v[i] = Integer.parseInt(s);
}
}
public static void mostrar (int v[]){
int i;
for (i = 0; i < v.length; i++)
System.out.println(v[i]);
}

ORDENAR UNA LISTA (2)


public static void ordenar (int v[]){
int i, j, aux;
for (i = 0; i<v.length - 1; i++)
for (j = i+1; j<v.length; j++)
if (v[i] > v[j]){
aux = v[i];
v[i] = v[j];
v[j] = aux;
}
}
public static void main(String[] args){
String s =
JOptionPane.showInputDialog("Nro elemts?: ");
int n = Integer.parseInt(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:
Complejo.java
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();
z.re = 6;
z.im = 3;
z.ubicar(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 (this.norma() > z.norma())
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();
f.dia = 34;
f.mes = 14;
f.anio = 0;
...

class Fecha
{
private int
private int
private int
}
...
Fecha f = new

dia;
mes;
anio;

Fecha();

f.dia = 34;

ERROR

f.mes = 14;

ERROR

f.anio = 0;
...

ERROR

CLASE NMERO COMPLEJO (1)


Archivo: Complejo.java
public class Complejo{
private int re;
private int im;
public void mostrar(){
System.out.println(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 + z.re;
y = im + z.im;
c = new Complejo(x, y);
return (c);
}
public float norma(){
return (float) Math.sqrt(re*re + im*im);
}
}

CLASE NMERO COMPLEJO (3)

Archivo: PruebaComplejo.java
public class PruebaComplejo
{
Complejo a = new Complejo(1, 1);
Complejo b = new Complejo(2, 3);
float r = a.norma();
System.out.println(Norma de a: + r);
System.out.println(b.parteReal());
Complejo c = a.sumar(b);
c.mostrar();
}

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(){
super.mostrar(); // de la superclase
System.out.println(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();
p2.numLegajo = 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();
medico.vacunar(pichichu);
medico.vacunar(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 < lista.length; i++){
System.out.println
(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 Math.sin(x)/Math.cos(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 (Math.PI * 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 <nombre.paquete>;

Por ejemplo: package empresa.empleados;

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 Empleado.java:


package empresa.empleados;
public class Empleado
{
...
}

La clase Empleado realmente se llama:


empresa.empleados.Empleado

Si no se indica la sentencia package, la clase


Empleado pertenecer a un paquete por defecto sin
nombre.

EJEMPLO DE PAQUETE

Archivo fuente Empleado.java:


package empresa.empleados;
public class Empleado
{
...
}

La clase Empleado realmente se llama:


empresa.empleados.Empleado

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 <nombre.del.paquete>.<NombreClase>;

Para importar todas las clases de un paquete:


import <nombre.del.paquete>.*;

El compilador aade a todos los archivos la lnea:


import java.lang.*;
el paquete que contiene las clases fundamentales
para programar en JAVA (Object, System, )

EJEMPLO DE IMPORT
import empresa.empleados.*;
public class Jefe extends Empleado {
String departamento;
Empleado[] subordinados;
}

Si no se escribe el la sentencia import deberamos


referirnos a Empleado como:
empresa.empleados.Empleado

La clase Jefe pertenece al paquete annimo por


defecto.

La clase String pertenece al paquete java.lang.


No necesita la sentencia import.

PAQUETES ESTNDAR

java.lang: Incluye las clases del lenguaje JAVA


propiamente dicho: Object, Thread, Exception,
System, Integer, Math, String, etc.

java.applet: Contiene clases diseadas para usar


con applets.

java.io: Es el paquete de Entrada/Salida, que


contiene las clases de acceso a archivos.

java.net: Da soporte a las conexiones del protocolo


TCP/IP.

java.util: 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() {
System.out.println(Hola Mundo);
}
}
class HolaMundo {
public static void main(String[] args) {
Hilo h = new Hilo();
Thread t = new Thread(h); // Crea el hilo
t.start();
// Lo ejecuta
}
}

CREACIN DE UN THREAD (3)

Extendiendo la clase Thread:

class Hilo extends Thread {


public void run() {
System.out.println(Hola Mundo);
}
}
class HolaMundo {
public static void main(String args[]) {
Thread t = new Hilo(); // Crea el hilo
t.start();
// 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;
System.err.println(Entr. Vend.:+entradas);
}

SINCRONIZACIN DE THREADS (3)


class Vendedora extends Thread
Caja c;
Vendedora(Caja caja) {
c = caja;
}
public void run() {
c.sumar();
}
}

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);
V1.start(); V2.start();
V3.start();
try {
V1.join(); V2.join(); V3.join();
}
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) { }
}
System.out.println(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;
System.out.println(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)
a.poner(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)
a.sacar();
}

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 javax.swing.*;
import java.awt.*;
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 javax.swing.*;
import java.awt.*;
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:


panel.add(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();
sexo.add(varon); sexo.add(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();
sexo.addItem(Mujer);
sexo.addItem(Varn);
sexo.setSelectedIndex(0); Mujer

COMPONENTES EN EL JFRAME (1)


import javax.swing.*;
import java.awt.*;
public class GUI_02 extends JFrame {
Container panel;
JButton boton;
public GUI_02(){
super("GUI_02 con Botn");
panel = getContentPane();
boton = new JButton("ACEPTAR");
panel.add(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");
panel.add(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 javax.swing.*;
import java.awt.*;
public class GUI_03 extends JFrame {
Container panel;
public GUI_03() {
super("GUI_03: Ejemplo de FlowLayout");
panel = getContentPane();
panel.setLayout(new FlowLayout());
for(int i = 1; i <= 8; i++)
panel.add(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 javax.swing.*;
import java.awt.*;
public class GUI_04 extends JFrame {
Container panel;
public GUI_04() {
super("GUI_04: Ejemplo de BorderLayout");
panel = getContentPane();
panel.setLayout(new BorderLayout());
panel.add(new JButton("B1"), BorderLayout.EAST);
panel.add(new JButton("B2"), BorderLayout.SOUTH);
panel.add(new JButton("B3"), BorderLayout.WEST);
panel.add(new JButton("B4"), BorderLayout.NORTH);
panel.add(new JButton("B5"), BorderLayout.CENTER);
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 javax.swing.*;
import java.awt.*;
public class GUI_05 extends JFrame {
Container panel;
public GUI_05() {
super("GUI_05: Ejemplo de GridLayout");
panel = getContentPane();
panel.setLayout(new GridLayout(4, 3));
for (int i = 1; i <= 10; i++)
panel.add(new JButton(B + Integer.toString(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 javax.swing.*;
import java.awt.*;
public class GUI_06 extends JFrame {
Container p;
JPanel p1, p2, p3;
public GUI_06() {
super("GUI_06");
p = getContentPane();
p.setLayout(new BorderLayout());
p1 = new JPanel();
p1.setLayout(new GridLayout(3, 3));
p.add("Center", p1);

PANELES COMO CONTENEDORES (3)


p2 = new JPanel();
p2.setLayout(new GridLayout(8, 1));
p.add("West", p2);
p3 = new JPanel();
p3.setLayout(new FlowLayout());
p.add("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 javax.swing.*;
import java.awt.*;
public class GUI_07 extends JFrame {
public GUI_07() {
Container panel = getContentPane();
panel.setLayout(new BorderLayout());
// Creamos el panel p1 para los botones
// y ponemos GridLayout
JPanel p1 = new JPanel();
p1.setLayout(new GridLayout(4, 3));
// Agregamos los botones al panel
for(int i = 1; i <= 9; i++) {
p1.add(new JButton("" + i));
}
p1.add(new JButton("" + 0));
p1.add(new JButton("Iniciar"));
p1.add(new JButton("Parar"));

EJEMPLO DE PANELES CONTENEDORES (3)


// Creamos p2 para un campo de texto y p1
JPanel p2 = new JPanel();
p2.setLayout(new BorderLayout());
p2.add(new JTextField("Aqu va el tiempo"),
BorderLayout.NORTH);
p2.add(p1, BorderLayout.CENTER);
// Y p2 y un boton en el frame
panel.add(p2, BorderLayout.EAST);
panel.add(new Button("Aqu va la comida"),
BorderLayout.CENTER);
}
public static void main(String[] args) {
GUI_07 ventana = new GUI_07();
ventana.setTitle("Horno Microondas");
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_
CLOSE);
ventana.setSize(500, 250);
ventana.setVisible(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:
componente.addActionListener(a1);

REPRODUCIR UN VALOR (1)


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class GUI_08 extends JFrame{
Container panel;
JButton botonCopiar;
JTextField campoValor, resultado;
public GUI_08(){
panel = getContentPane();
panel.setLayout(new FlowLayout());
panel.add(new JLabel("Valor "));
campoValor = new JTextField(5);
panel.add(campoValor);
botonCopiar = new JButton(COPIAR);
panel.add(botonCopiar);
ActionListener a1 = new Oyente();

REPRODUCIR UN VALOR (2)


botonCopiar.addActionListener(a1);
panel.add(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 = campoValor.getText();
resultado.setText(valor);
}
}
}

REPRODUCIR UN VALOR (3)

CONVERSIN DE TEMPERATURAS (1)


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
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 = this.getContentPane();
panel.add(valor);

CONVERSIN DE TEMPERATURAS (2)


panel.add(boton1);
panel.add(boton2);
panel.setLayout(new FlowLayout());
ActionListener a1 = new Oyente();
ActionListener a2 = new Oyente();
boton1.addActionListener(a1);
boton2.addActionListener(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 = valor.getText();
double t = Float.parseFloat(x);
String s = (String) e.getActionCommand();
if (s.equals("A Celsius")) {
t = (5.0/9.0) * (t - 32);
panel.setBackground(Color.green);
}
else if (s.equals("A Fahrenheit")) {
t = (9.0/5.0) * t + 32;
panel.setBackground(Color.yellow);
}
valor.setText(Double.toString(t));
}
}
}

CONVERSIN DE TEMPERATURAS (4)

CLCULO DE LA FREC. CARDACA MXIMA (1)


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
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();
panel.setLayout(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();
sexo.add(mujer); sexo.add(varon);
b = new JButton("CALCULAR");
e3 = new JLabel(" ");
panel.add(e1); panel.add(valor);
panel.add(e2);
panel.add(mujer); panel.add(varon);
panel.add(b); panel.add(e3);
ActionListener a = new Oyente();
b.addActionListener(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 = valor.getText();
int edad = Integer.parseInt(s);
int f;
if (mujer.isSelected()) f = 226 - edad;
else f = 220 - edad;
e3.setText("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

También podría gustarte