Professional Documents
Culture Documents
1.1. Concepto.
Java es un lenguaje de programacin orientada a objetos. Java es gratuito y de uso general, su utilizacin puede contemplar el desarrollo de cualquier tipo de aplicacin informtica (applets, web, de escritorio, mviles, etc).
1.2. Orgenes.
Proyecto Green. As se llam el proyecto iniciado por la Sun que buscaba desarrollar una interfaz para manejar todo tipo de aparatos electrodomsticos. El proyecto no deriv en la implementacin de productos reales por lo que el grupo de disolvi, hasta que en 1993 cuando explot la World Wide Web se observ que el lenguaje podra adaptarse a mltiples plataformas que conforman la internet, por lo que el primer producto obtenido fue un navegador completamente escrito en Java y denominado posteriormente HotJava. Con este producto, se hizo evidente que los programas Java podan instalarse en un entorno internet y ser ejecutados en cada mquina cliente sin ninguna configuracin adicional, por lo que se empezaba a presenciar el nacimiento de los famosos Applets y de la primera versin JDK 1.0 de la plataforma Java.
- Carga. El proceso de carga significa leer los archivos que contienen el cdigo binario desde el disco y llevarlos a memoria primaria. - Verificacin. El verificador se encarga de confirmar que dicho cdigo binario es vlido y no viola las restricciones de seguridad; esto con la finalidad de asegurarse que no se ha introducido algn archivo daado. - Ejecucin. Para su ejecucin, la Mquina Virtual Java lee el cdigo binario y empieza su transformacin en lnea a lenguaje mquina para su correcta ejecucin. Erick Arauco Moreno 5
La configuracin del entorno de desarrollo java implica la definicin de dos variables de suma importancia.
Por lo tanto, primero debemos situarnos en Inicio / Configuracin / Panel de Control / Sistema /, luego seleccionamos la ficha Opciones avanzadas y vamos a la opcin Variables de entorno y observaremos una pantalla similar a la siguiente figura:
La variable JAVA_HOME, es la primera variable a crear la cual debe tener como valor la ruta exacta donde el lenguaje ha sido instalado. Una vez creada la anterior variable pasamos a modificar (o crear en caso no exista), la variable del sistema llamada "Path" utilizada con la finalidad que el lenguaje pueda encontrar los archivos necesarios para la correcta compilacin y ejecucin de nuestras aplicaciones.
El valor de la mencionada variable debe apuntar a la carpeta bin ubicada dentro de la instalacin del lenguaje Java.
En caso que las variables mencionadas no se hubiesen configurado correctamente, al momento de usar cualquiera de los scripts que trae consigo el lenguaje, podramos observar un mensaje como:
java is not recognized as an internal or external command, operable program or batch file.
1.5. Caractersticas.
Independencia de la plataforma.
- Los programas en Java generalmente son compilados a un lenguaje intermedio llamado bytecodes, que luego son interpretados por una mquina virtual (JVM). - Esta ltima sirve como una plataforma de abstraccin entre la mquina y el lenguaje permitiendo que se pueda "escribir el programa una vez, y ejecutar la aplicacin en cualquier lado".
10
1.5. Caractersticas.
Independencia de la plataforma.
2) Se compila el cdigo fuente obteniendo un fichero binario con extensin .class (Bytecode).
Solaris
Windows
Mac OS
JVM
JVM
JVM
3) Cada sistema operativo posee una instalacin de la mquina virtual java para lograr la ejecucin del fichero binario.
11
1.5. Caractersticas.
Simple. Java ofrece toda la funcionalidad de un lenguaje potente, pero sin las caractersticas menos usadas y ms confusas de stos; reduce en un 50% los errores ms comunes de programacin con lenguajes como C y C++ al eliminar muchas de las caractersticas de stos, entre las que destacan:
- Aritmtica de punteros - Necesidad de liberar memoria (free)
12
1.5. Caractersticas.
Orientado a Objetos. Java implementa la tecnologa bsica de C++ con algunas mejoras y elimina algunas cosas para mantener el objetivo de la simplicidad del lenguaje.
- Soporta las tres caractersticas propias del paradigma de la orientacin a objetos: encapsulacin, herencia y polimorfismo.
13
// Programa: MiAplicacion.java // Nuestro primer programa Java. public class MiAplicacion { public static void main ( String args [ ] ) {
// Programa: MiAplicacion.java // Nuestro primer programa Java. Comentarios /* Programa: MiAplicacion.java Nuestro primer programa Java. */
Definicin de la clase
15
Los archivos que contienen cdigo fuente se almacenan con la extensin .java. Cada programa Java consiste al menos en la definicin de una clase.
El nombre de la clase debe ser igual al nombre del archivo almacenado en disco (MiAplicacion.java).
Java es case sensitive: diferencia maysculas de minsculas. Por convencin, el nombre de una clase debe iniciar con la primera letra en maysculas. El cuerpo de la clase se encuentra definido entre llaves. Si las llaves no se encuentran en pares, el programa no compilar. Una clase java puede poseer uno o varios mtodos, exactamente, uno de dichos mtodos puede llamarse main; y al definirse el intrprete java ejecutar lo escrito en l.
Erick Arauco Moreno 16
contador = 1; do { contador = contador + 1; } while ( contador <= 10 ); for ( int contador = 1; contador <= 10; contador ++) { System.out.println ( contador ); }
20
2.3. Operadores.
m = 5 (asignacin). n == 6 (comparacin).
a = a + 2 a += 2
b = b 3 b -= 3 c = c * 4 c *= 4 d = d / 5 d /= 5 e= e+1
- e++. Post-Incremento. - ++e. Pre-Incremento.
f=f1
- f--. Post-Decremento. - --f. Pre-Decremento.
Erick Arauco Moreno 21
La definicin ms bsica que le podemos dar a un objeto es: Todo lo que nos rodea; detallando, podramos decir, todo aquello que podemos identificar que posee ciertas caractersticas y funcionalidades para su uso. Una clase es un molde. Una clase est formada por dos conceptos conocidos como: Propiedades y Mtodos.
Telefono marca modelo color peso encender() apagar() llamar() Nombre de la clase
Mtodos
22
Telefono
Instanciacin
23
24
public class Principal { public static void main (String args [ ]) Telefono tlf1 = new Telefono (); // creando el primer telfono. Telefono tlf2 = new Telefono(); //creando el segundo telfono. tlf1.color= Rojo; //definiendo el color del primer telfono. tlf2.color=Negro; //definiendo el color del segundo telfono. tlf1.encender(); //encendiendo el primer telfono. tlf2.apagar(); //apagando el segundo telfono. } }
marca: M1 modelo: MO1 color: Negro peso: 100 gr. marca: M1 modelo: MO1 color: Rojo peso: 100 gr.
25
} Erick}Arauco Moreno
26
Descripcin Valor absoluto. Redondeo superior. Coseno. Exponencial. Redondeo inferior. Logaritmo.
Independientemente de los mtodos definidos en cada clase, tambin es posible definir un tipo de mtodos cuyo nombre debe ser igual al nombre de la clase, conocidos como Constructores, y los cuales, son ejecutados al momento de crear una instancia (Objeto). Es posible definir una clase con muchos constructores con la finalidad de proveer mltiples accesos para inicializar los objetos de dicha clase. Si una clase posee muchos constructores, los mismos deben ser diferenciados por nmero, tipo y orden de los parmetros de entrada. A esta tcnica que consiste en la declaracin de muchos constructores la conocemos como Sobrecarga de mtodos, as cuando uno de estos mtodos es llamado, el compilador selecciona el ms apropiado examinando el nmero, tipo y orden de los argumentos en la llamada.
28
for ( int x = 1; x <= 10; x++ ) { resultado = calcular(x); salida += "El cuadrado de " + x + " es " + resultado + "\n"; } System.out.println(salida); } public int calcular ( int y ) { //mtodo. return y * y; } public static void main ( String args[] ) { Cuadrados obj = new Cuadrados(); //instancia del objeto. } }
Erick Arauco Moreno 29
//propiedades
//primer constructor
//segundo constructor.
//tercer constructor.
30
3.4. Finalizadores.
Un objeto java al momento de ser creado ( clasula new ), adquiere varios recursos del sistema como memoria, por lo tanto, los finalizadores son los encargados de devolver dichos recursos al sistema. Un finalizador es definido como un mtodo ms de una clase, pero que no realiza ninguna accin, no tiene parmetros de entrada ni define valores de retorno, en conclusin: NO HACE NADA. El mtodo finalizador es llamado por el recolector de basura.
31
Normalmente, al momento de instanciar un objeto, el mismo posee una copia de todas las variables declaradas en el interior de la clase.
El valor para el atributo marca es distinto en cada instancia. Una copia del atributo por cada objeto creado.
32
En ciertas ocasiones, es necesario que una sola copia de la propiedad o mtodo sea asignado a los objetos instanciados independientemente de cuntos existan; por lo tanto, todos los objetos comparten la misma porcin de datos. Los miembros estticos pueden ser accedidos desde cualquier objeto instanciado o directamente desde la misma clase.
Telefono marca modelo color Peso (s)contador encender() apagar() llamar()
Una sola copia del atributo contador es compartida entre las instancias y la clase.
Instancias de la clase Telefono
marca: M1 modelo: MO1 color: Rojo peso: 100 gr. contador: 2
33
La mayora de variables que utilizamos en las aplicaciones necesitan ser modificadas en algn momento, otras no, por lo tanto, es posible utilizar la palabra reservada final para especificar que dicha variable no es modificable (constante) y todo intento de modificacin ocasionara un error. Un ejemplo de la declaracin de una variable final sera: private final int CONTADOR = 1;
34
3.7. Herencia
Los objetos creados a partir de una misma clase mantienen la misma estructura definida en el molde; si tomamos en cuenta los mtodos definidos en una clase, los objetos instanciados tendrn el mismo comportamiento porque contienen una copia de todos los miembros definidos en la clase. Si traducimos esto en la vida real e intentamos crear objetos personas, podra ser ilgico que todas las personas tengan el mismo comportamiento porque no todos somos iguales en este mundo. La herencia es una caracterstica de los lenguajes orientados a objetos que permite agrupar las clases siguiendo un modelo tipo organigrama, donde existe una relacin entre clases padres e hijas, en la cual, las clases hijas heredan las propiedades y/o mtodos definidos en la clase padre. La herencia permite el acceso automtico a la informacin contenida en otras clases, por lo tanto es con esta tcnica que se garantiza la reutilizacin del cdigo.
35
3.7. Herencia
Telefono
Fijo
Celular
Residencial
Comercial
Prim_Generacion
Seg_Generacion
Terc_Generacion
36
3.7. Herencia
Punto
x, y rea: no tiene
Circulo
x, y, radio rea: pi * r2
Cilindro
Erick Arauco Moreno
Hablar de alcance significa el grado de encapsulamiento que podemos aplicar a la propiedad o mtodo para lo cual decidimos usar las palabras public, private, protected y friendly. Un miembro definido con alcance pblico, implica que al ser heredado por otras clases, las mismas tendrn acceso a l generacin tras generacin sin ninguna limitante. En otras palabras todos los miembros de una clase padre marcados como pblicos sern heredados por las subclases. Un miembro definido con alcance privado, implica que el mismo slo podr ser accedido por la clase que lo define y ninguna clase hija lo heredar. El acceso a estos miembros marcados como privados ser posible slo a travs de la definicin de mtodos pblicos. Un miembro definido con alcance protegido ser heredado por todas las subclases independientemente del paquete al que pertenezcan, sin embargo solamente las clases externas que pertenezcan al mismo paquete podrn acceder a estos miembros. Un miembro definido con alcance amigo ( friendly ), es aquel similar al pblico, que no se le ha definido modificador alguno y que puede ser accedido slo por las clases que se encuentren en el mismo paquete incluyendo las subclases.
38
3.9. Encapsulamiento.
Objetivo: proteger las propiedades de cualquier valor ilegal; Cmo?: Todas las propiedades de una clase debern ser siempre privadas implementando para cada una de ellas un mtodo set para transferirle el valor que se est pasando y un mtodo get para recuperar el valor almacenado en la propiedad. Ventaja: controlar el tipo de informacin que se est intentando pasar a la propiedad evitndola en el caso que esta sea ilegal
39
3.9. Encapsulamiento.
public class Fecha { private int mes; private int anio; //mtodo que valida el valor que se intenta pasar a la propiedad mes. public void setMes ( int parametro ) { if ( parametro > 0 && parametro <= 12 ) { mes = parametro; } else { mes = 1; } } //mtodo que devuelve el valor almacenado en la propiedad mes. public int getMes ( ) { return mes; } }
40
3.10. Paquetes
Una definicin de paquetes podra ser una coleccin de clases relacionadas o no relacionadas ordenadas de una manera jerrquica a travs de una estructura de directorios. En java, es posible agrupar un conjunto de clases en un paquete a travs de la palabra reservada package. Si una clase java tiene la necesidad de utilizar una clase que se encuentra ubicada en un paquete distinto utilizaremos la palabra reservada import. Por defecto, cualquier clase java importa el paquete java.lang (donde se encuentran las definiciones bsicas del lenguaje).
41
3.10. Paquetes
42
3.10. Paquetes
java.lang. Incluye las clases Object, Thread, Exception, System, Integer, Float, etc. java.awt. Incluye clases para creacin de interfaces grficas de usuario. Entre ellas encontramos: Button, TextField, CheckBox, ListBox, etc. java.io. Incluye las clases necesarias para el manejo de entradas y salidas ( acceso a ficheros ). InputStream y OutputStream. java.util. Incluye clases tiles para diversas necesidades en programacin. Entre ellas tenemos: Date, Random, Stack, Vector, etc.
43
3.10. Paquetes
Clase
C1 C2 C3
Clases B1 B2 B3 Clases A1 A2 A3
Paquete A
Paquete B
Acceso pblico. Si cualquiera de las clases representadas en la figura tuviese un miembro definido como pblico, el mismo, podr ser accedido directamente desde cualquier ubicacin.
Acceso privado. Si cualquiera de las clases tuviese un miembro definido como privado, el mismo, podr ser accedido slo desde la misma clase. Acceso protegido. Si la clase A1 define un miembro como protegido y cualquiera de las otras clases (A2, A3, B1, B2, B3, C1, C2, C3) es hija de la clase A1, entonces heredarn el miembro y tendrn acceso al mismo sin importar sin estn ubicadas en un paquete distinto. Si cualquiera de las clases restantes (A2, A3, B1, B2, B3, C1, C2, C3) necesita instanciar un objeto de tipo A1 que define un miembro protegido y tener acceso al mismo, entonces, slo aquellas que pertenezcan al mismo paquete que la clase A1 podrn lograrlo. Acceso amigable. Si cualquiera de las clases tuviese un miembro definido como amigo, slo tendrn acceso a l las clases que se encuentren en el mismo paquete. Por ejemplo, si la clase A1 define un miembro amigo, solamente las clases A2 y A3 podrn a travs de una Erick Arauco Moreno relacin de herencia o instanciando el objeto A1 tener acceso a dicho miembro.
44
Ahora que ya hemos visto miembros estticos y paquetes, podemos invocar las propiedades y mtodos estticos de cualquier clase utilizando un import esttico. import static java.lang.Math.*; Todos los miembros estticos de la clase Math estarn disponibles para su uso.
45
46
Tipos primitivos. Una variable de tipo primitivo es aquella que puede almacenar exactamente un valor en un momento dado.
- int, byte, char, short, long, float, double. - Al momento de declarar una variable con alguno de estos tipos un valor por defecto es asignado a la misma, - por ejemplo, si declaramos una variable de tipo int, su valor inicial ser cero ( 0 ), si la declaramos como tipo boolean, su valor inicial ser false.
Tipos referenciados. La mayora de aplicaciones Java utilizan los tipos referenciados para almacenar la ubicacin de un objeto en la memoria del computador.
- Los tipos referenciados tienen una referencia a un objeto. - Por defecto las variables de este tipo son inicializadas con el valor null. Entre algunos de los tipos referenciados encontramos Integer, String, Float, Double, Boolean, etc.
47
Promocin de argumentos : conversin del valor de un argumento en el tipo de dato que el mtodo espera recibir de acuerdo al parmetro definido. Por ejemplo, System.out.println ( Math.sqrt ( 4 ) ); Analizando: el mtodo sqrt, espera un valor de tipo double como parmetro de entrada pero estamos ingresando un valor entero primitivo, a pesar de esto la impresin arroja como resultado 2.0
Qu ha sucedido?, El mtodo sqrt est esperando un valor tipo double, por lo que antes de recibir el valor, Java lo transforma al tipo que el mtodo necesita ( 4.0 ). Promocin.
48
long
int Char short byte boolean
float, double
long, float, double int, long, float, double int, long, float, double short, int, long, float, double Ninguna. Los valores booleanos no son considerados nmeros en Java.
49
Convertir valores hacia un tipo menor traer como consecuencia que el resultado obtenido no represente el valor original. Por ejemplo, el entero primitivo 2000000 no puede ser representado bajo el tipo short, porque ocasionara prdida de datos. Operador cast para forzar la conversin, en caso contrario obtendremos un error en tiempo de compilacin. square ( ( int ) doubleVal )
50
//mtodo suma con parmetros enteros primitivos. public int Suma ( int a, int b ) { return a + b; }
//mtodo suma con parmetros double. public double Suma ( double a, double b) { return a + b;
}
51
En java no es posible decidir sobre el tipo de paso de parmetros. Actualmente existe la siguiente afirmacin: En java las variables de tipo primitivo se pasan por valor y los objetos se pasan por referencia.
import java.awt.Point; public class Ejemplo { public static void modificaPunto(Punto pt, int j) { pt.setLocation(5,5); j = 15; System.out.println("En plena modificacin " + "pt = " + pt + " ; j = " + j); } public static void main(String args[]) { Punto p = new Punto(0,0); int i = 10; System.out.println("Antes de la modificacin " + "p = " + p + " ; i = " + i); modificaPunto(p, i); System.out.println("Despus de la modificacin " + "p = " + p + " ; i = " + i); } } Antes de la modificacion p = java.awt.Point[x=0,y=0] ; i = 10 Erick Arauco Moreno
En plena modificacion pt = java.awt.Point[x=5,y=5] ; j = 15 Despues de la modificacion p = java.awt.Point[x=5,y=5] ; i = 10
52
3.17. Arreglos.
String b[ ] = new String [100]; //creamos un arreglo llamado b. int c[ ] = new int[10]; //creamos un arreglo llamado c. int d[ ] = {10, 30, 50, 60, 70, 80 }; //creamos un arreglo llamado d.
int arreglo[ ] = { 10, 20, 30, 40 }; int total = 0; for (int numero : arreglo ) { total += numero; }
53
3.18. Polimorfismo.
El polimorfismo nos permite simplificar cdigo al momento de programar debido a que es posible orientar nuestra programacin en trminos generales en lugar de especficos. Polimorfismo es la capacidad que tienen los objetos de responder al mismo mensaje de diferentes maneras en funcin a los parmetros utilizados durante su invocacin.
54
Cuando pensamos en clases normalmente es porque necesitamos crear instancias de dichas clases, pero algunas veces, necesitamos que no sea posible crear objetos a partir de una clase determinada. Para ello, las declaramos como clases abstractas. public abstract class Empleado { } Una clase abstracta es una clase (normalmente padre) java que puede tener mtodos implementados o abstractos pero que por ningn motivo puede ser instanciada. Asimismo, al poder definir mtodos abstractos, los mismos no deben poseer ninguna implementacin.
55
Punto 0
Circulo 1
Cilindro 2
56
Clase abstracta
public abstract class Figura { public double calculaArea() { return 0.0; } public abstract String getNombre(); }
Punto
public class Punto extends Figura { protected int x,y; //coordenadas public Punto() { setPunto ( 0, 0 ); }
Circulo
Cilindro
57
Figura
public Circulo() { setRadio(0); }
Punto
Circulo
public Circulo(double r, int a, int b) { super ( a, b ); //llama al constructor de la superclase setRadio(r); } public void setRadio(double r) { radio = ( r >= 0 ? r : 0 ); }
Cilindro
public double getRadio() { return radio; } public double calculaArea() { //redefine el mtodo calculaArea. return Math.PI * radio * radio; } public String getNombre() { //redefine el mtodo getNombre. return "Soy un circulo"; } }
58
Figura
public Cilindro() { setAltura(0); } public Cilindro( double h, double r, int a, int b ) { super ( r, a, b ); setAltura(h); } public void setAltura(double h) { altura = ( h >= 0 ? h : 0 ); }
Punto
Circulo
Cilindro
public double getAltura() { return altura; } //2pi*r2 + 2pi*r*h public double calculaArea() { return 2* super.calculaArea() + 2 * Math.PI * radio * altura; } public String getNombre() { return "Soy un cilindro"; } }
59
Punto
Circulo
arregloFiguras[0] = pt; arregloFiguras[1] = cl; arregloFiguras[2] = cil; String salida=; DecimalFormat formato= new DecimalFormat("0.00");
Cilindro
for ( int i = 0; i < arregloFiguras.length; i++ ) { salida += "\n\n" + arregloFiguras[i].getNombre() + ": " + "\nArea = " + formato.format(arregloFiguras[i].calculaArea() ) ; } System.out.println( salida );
60
Un mtodo declarado como final en una superclase significa que el mismo no puede ser sobreescrito por cualquiera de las clases hijas, por lo tanto las subclases tendrn que usar la misma implementacin hecha en la clase padre. Una clase definida como final significa que no puede ser una superclase, por lo tanto todos los mtodos de una clase final son finales implcitamente.
61
3.21. Interfaces.
Las interfaces definen y estandarizan la forma en la cual los objetos interactan con otros.
62
3.21. Interfaces.
public interface Figura { public double calculaArea(); public String getNombre(); }
63
Los cuadros de dilogo son ventanas en las cuales las aplicaciones pueden capturar informacin o visualizar mensajes que deben ser ledos por el usuario. La clase JOptionPane ofrece un conjunto de mtodos para la utilizacin de cuadros de entrada (InputDialog) cuadros de mensaje (MessageDialog).
import javax.swing.JOptionPane; //importamos la clase JOptionPane. public class Mensaje { public static void main (String args[ ]) { String nombre = JOptionPane.showInputDialog(Ingresa tu nombre:); JOptionPane.showMessageDialog(null, Bienvenido + nombre, Bienvenida, JOptionPane.PLAIN_MESSAGE); }
}
Erick Arauco Moreno 64
Los cuadros de dilogo son ventanas en las cuales las aplicaciones pueden capturar informacin o visualizar mensajes que deben ser ledos por el usuario. La clase JOptionPane ofrece un conjunto de mtodos para la utilizacin de cuadros de entrada (InputDialog) cuadros de mensaje (MessageDialog).
import javax.swing.JOptionPane; //importamos la clase JOptionPane. public class Mensaje { public static void main (String args[ ]) { String nombre = JOptionPane.showInputDialog(Ingresa tu nombre:); JOptionPane.showMessageDialog(null, Bienvenido + nombre, Bienvenida, JOptionPane.PLAIN_MESSAGE); } }
65
El primer argumento representa la posicin en la que aparecer el cuadro de mensaje; el valor null indica que utilizar como referencia el monitor de la computadora. El segundo argumento representa el mensaje a visualizar. El tercer argumento representa el ttulo del cuadro de mensaje.
66
Antes de la aparicin de Swing, los componentes grficos utilizados pertenecan a la Abstract Window Toolkit (AWT), por lo que cuando una aplicacin java que utilizaba componentes AWT era ejecutada bajo un sistema operativo distinto, los componentes grficos aparecan de manera diferente. Actualmente, los componentes grficos Swing definen su apariencia gracias a lo que conocemos como look-and-feel; lo que significa que los componentes Swing permiten definir una presentacin uniforme sobre cualquier plataforma donde se ejecute la aplicacin.
67
4.2.1. JLabel.
public class MiVentana extends JFrame { private JLabel etiqueta1; private JLabel etiqueta2; public MiVentana( ) { super(Etiquetas); setLayout(new FlowLayout()); //etiqueta con una lnea de texto. etiqueta1 = new JLabel(Etiqueta con texto); etiqueta1.setToolTipText(Esta es una etiqueta); add(etiqueta1); //etiqueta con imagen. Icon logo = new ImageIcon(getClass( ).getResource(abit.gif)); etiqueta2 = new JLabel (Etiqueta con texto e imagen, logo, SwingConstants.LEFT); etiqueta2.setToolTipText(Esta es una etiqueta2); add(etiqueta2); }
68
4.2.2. JTextField.
import import import import import java.awt.FlowLayout; javax.swing.JFrame; javax.swing.JLabel; javax.swing.JTextField; javax.swing.JPasswordField;
public class MiVentana extends JFrame { private JTextField texto1; private JPasswordField texto2; private JLabel etiqueta1, etiqueta2; public MiVentana( ) { super(Cajas de Texto); setLayout(new FlowLayout()); etiqueta1 = new JLabel(Ingresar texto:); add(etiqueta1); texto1 = new JTextField(10); add(texto1); etiqueta2 = new JLabel(Ingresar password:); add(etiqueta2); texto2 = new JPasswordField(texto oculto); add(texto2); } }
69
Cada uno de los componentes utilizados genera un evento, en especial la caja de texto; por ejemplo: si al momento de terminar de escribir algn tipo de informacin, presionamos la tecla Enter, qu ha pasado? Ha sucedido lo mismo que debera suceder si hacemos click sobre cualquier botn. Se ha generado un evento. Todos los componentes java generan eventos que le dicen al programador que se est interactuando con este tipo de componente java, el problema es que dichos eventos no son capturados porque lo no podemos saber en este momento qu componente est siendo utilizado.
70
El modelo que representa la gestin de eventos en java est conformado por tres partes, a saber:
- El generador del evento: representado por el objeto grfico java con el que el usuario interacta.
- El evento: objeto que contiene informacin sobre el evento ocurrido. - El oyente de eventos: encargado de recibir el evento y de responder.
Boton1 Oyente1
71
ActionListener: El usuario pulsa un botn, presiona enter en una caja de texto elige algn tem de un men.
72
Un oyente de eventos es una clase java cualquiera que implementa cualquiera de las interfaces mencionadas anteriormente (ActionListener, WindowListener, MouseMotionListener, etc. ). Por ejemplo, la interface ActionListener, posee el siguiente mtodo:
- actionPerformed(ActionEvent e): Cada vez que presionamos un botn o enter en una caja de texto, este mtodo es lanzado. El objeto ActionEvent, ofrece informacin sobre el objeto que origin el evento.
73
75
4.2.3. JButton
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MiAplicacion extends JFrame implements ActionListener { private JButton boton1, boton2; public MiAplicacion() { super(Usando botones); setLayout(new FlowLayout()); boton1 = new JButton(Primer boton); boton1.addActionListener(this); add(boton1); Icon icono1 = new ImageIcon(getClass().getResource(icono.gif)); boton2 = new JButton(Segundo boton, icono1); boton2.addActionListener(this); add(boton2); } public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(this, Presionaste: + e.getActionCommand()); } }
76
La implementacin del oyente de eventos ActionListener hasta el momento no ha sido una tarea complicada.
Eventos relacionados con el manejo del mouse, teclado ventanas. WindowListener, MouseListener o MouseMotionListener.
WindowsListener:
- windowActivated(WindowEvent e) - windowClosed(WindowEvent e) - windowClosing(WindowEvent e) - windowDeactivated(WindowEvent e) - windowDeiconified(WindowEvent e) - windowIconified(WindowEvent e) - windowOpened(WindowEvent e)
Erick Arauco Moreno 77
Interface que implementa ComponentListener ContainerListener FocusListener KeyListener MouseListener MouseMotionListener WindowListener
78
79
4.4. Contenedores.
El primer contenedor que hemos utilizado hasta el momento es el propio JFrame, quien ha tenido la labor de contener botones, cajas de texto, etiquetas, etc. En las versiones anteriores de java, no era posible insertar directamente un componente gui en el contenedor JFrame sino a travs de su Container (mtodo getContentPane()), por lo que actualmente al usar el mtodo add(componente), directamente estamos insertando sobre el Container del JFrame. Entre los contenedores ms utilizados para la construccin de aplicaciones en java tenemos: JPanel, JInternalFrame, JFrame, etc.
80
Posicin Absoluta: Esta forma especifica que al no definir un distribuidor de componentes para un determinado contenedor (setLayout(null)) se debe proceder a definir la posicin exacta del componente. Esta forma de establecer su posicin es bastante tediosa a no ser que se posea un entorno de desarrollo (NetBeans). Distribuidores de Componentes: Usando los distribuidores de componentes dejamos en ellos la responsabilidad para definir la ubicacin y tamao de los componentes, la desventaja radica en que perdemos el control sobre tamao y ubicacin de los componentes. Programacin Visual en algn IDE: Los entornos de desarrollo (IDE), permiten que el programador simplemente arrastre el componente sobre el contenedor. El IDE genera el cdigo java correspondiente dependiendo de los componentes utilizados.
81
BorderLayout
Distribuidor por defecto para los JFrames. Distribuye los componentes en cinco reas: Norte, Sur, Este, Oeste y Centro. Distribuye los componentes en filas y columnas.
GridLayout
82
83
4.5.2. Paneles.
Nuevo
Modificar
Salir
84
4.5.2. Paneles.
Podemos insertar el titulo (JLabel) sobre el JFrame y ubicarlo en la posicin NORTH
Nuevo Nuevo
Modificar Modificar
Salir Salir
JPanel insertado en la posicin CENTER, a su vez tiene un distribuidor GridLayout (3 filas, 2 columnas). Contiene las tres etiquetas y las tres cajas de texto.
JPanel insertado en la posicin SOUTH, a su vez tiene un distribuidor FlowLayout para distribuir los botones de manera horizontal.
85
5. Gestin de errores.
La construccin de cualquier aplicacin informtica conlleva por naturaleza a tener que estar preparados para el momento en que aparezcan errores durante la ejecucin de la misma. Java ofrece una manera de gestionar estos errores con la finalidad de evitar la interrupcin total de la aplicacin. Es necesario tener en cuenta que el uso normal que cualquier usuario da a una aplicacin implica tpicamente el ingreso de datos incorrectos, los cuales, sin ningn control por parte de la aplicacin podran afectar a la misma; es por eso que nuestras aplicaciones se encuentran en la obligacin de implementar un control de errores logrando as de esta manera dirigir al usuario mientras usa la herramienta.
86
5.1. Excepciones.
Una excepcin indica que ha ocurrido un problema durante la ejecucin de la aplicacin. Representa una anomala al funcionamiento normal de la aplicacin. La gestin de las excepciones en java permite a los programadores definir un conjunto de reglas que resuelvan estos problemas al momento de su aparicin.
import java.util.Scanner; public class Calculadora { public static int division(int n, int d) { return n / d; } public static void main (String args[]) { Scanner sc = new Scanner(System.in); System.out.println(Ingrese numerador: ); int num = sc.nextInt(); System.out.println(Ingrese denominador: ); int denom = sc.nextInt(); int resultado = division(num, denom); System.out.println(resultado : + resultado ); Erick Arauco Moreno } } 87
5.1. Excepciones.
Excepcin ArrayIndexOutOfBoundsException ArithmeticException ClassNotFoundException NullPointerException Descripcin Se accede a una posicin del arreglo que no existe. Una excepcin aritmtica ha ocurrido. Divisin por cero. La clase instanciada no ha sido encontrada. Se espera un objeto y se recibe un valor null; la longitud del arreglo esperado es null. Se introducen caracteres no numricos.
NumberFormatException
88
5.1. Excepciones.
try { //sentencias //Pueden generar una excepcin } catch (TipodeExcepcion ex1) { //sentencias que se ejecutarn cuando se produzca una excepcin del tipo TipodeExcepcion. } catch (OtroTipodeExcepcion ex2) { //sentencias que se ejecutarn cuando se produzca una excepcin del tipo OtroTipodeExcepcion. } finally { //sentencias //Se ejecutan siempre. }
89
clase A
clase B
90
import java.util.Scanner; public class Calculadora { //mtodo division informa que no controlar la excepcin, slo la reenviar. public static int division(int n, int d) throws ArithmeticException { return n / d; }
91
92
Existen situaciones en las que necesitamos forzar el lanzamiento de una excepcin para indicar que una aplicacin no se ajusta a ciertas reglas particulares; para ello podemos utilizar la clasula throw.
public class Empleado { private String nombre; private int sueldo; public void setNombre(String nomVal) { nombre = nomVal; } public void setSueldo(int suelVal) throws Exception { if(suelVal>3000) { throw new Exception("Limite superado"); } else { sueldo = suelVal; } } Erick Arauco Moreno } 93
5.1.3. Ejemplo
public class Empleado { private String nombre; private int sueldo; public void setNombre(String nomVal) { nombre = nomVal; } public void setSueldo(int suelVal) throws Exception { if(suelVal>3000) { throw new Exception("Limite superado"); } else { sueldo = suelVal; } }
94
5.1.3. Ejemplo
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MiAplicacion extends JFrame implements ActionListener { private JTextField txtNombre, txtSueldo, txtSueldoNeto; private double sueldo, sueldoNeto; public MiAplicacion() { super( "Demostrando Excepciones" ); setLayout( new GridLayout( 3, 2 ) ); add(new JLabel( "Nombre: ", SwingConstants.RIGHT ) ); txtNombre = new JTextField(); add( txtNombre ); add( new JLabel( "Sueldo (presionar Enter):", SwingConstants.RIGHT ) ); txtSueldo = new JTextField(); add( txtSueldo ); txtSueldo.addActionListener( this );
95
5.1.3. Ejemplo
add( new JLabel( "Sueldo Neto: ", SwingConstants.RIGHT ) ); txtSueldoNeto = new JTextField(); add( txtSueldoNeto ); } public void actionPerformed( ActionEvent e ) { txtSueldoNeto.setText( "" ); try { //Esta linea puede generar una excepcion. sueldo = Double.parseDouble( txtSueldo.getText() ); Empleado emp = new Empleado(); emp.setNombre(txtNombre.getText()); //Esta linea puede generar una excepcion. emp.setSueldo(sueldo); sueldoNeto = calcular(sueldo); txtSueldoNeto.setText( String.valueOf( sueldoNeto ) );
96
5.1.3. Ejemplo
catch ( NumberFormatException nfex ) { JOptionPane.showMessageDialog( this, "Se debe ingresar un entero", "Formato invalido", JOptionPane.ERROR_MESSAGE ); } catch ( Exception ex ) { JOptionPane.showMessageDialog( this, ex.getMessage(), "Excepcion de la clase Empleado", JOptionPane.ERROR_MESSAGE ); } }
public double calcular( double numero ) { double impuesto = numero * 0.19; return numero - impuesto; }
}
97
5.1.3. Ejemplo
98
Registro de Alumnos
Cdigo: Apellidos: Nombres:
Guardar
setNombres(); getNombres();
JavaBean
99
Modelo Relacional.
Number 23603 24568 Row 34589 35761 47132 78321 Primary key Name Jones Kerwin Larson Myers Neumann Stephens Department 413 413 642 611 413 611 Column Salary 1100 2000 1800 1400 9000 8500 Location New Jersey New Jersey Los Angeles Orlando New Jersey Orlando
100
Descripcin Selecciona uno o ms campos de una o varias tablas. Selecciona las tablas envueltas en la consulta. Condicin para la seleccin. Ordena los resultados de manera ascendente o descendente. Inserta registros en una tabla. Actualiza registros en una tabla. Eliminar registros en una tabla.
101
102
6.2. JTable
import javax.swing.*; import java.awt.*; import java.awt.event.*;
public class MiAplicacion extends JFrame { public MiAplicacion() { Object[][] registros = { {"Carlos", "Martinez", "Natacion", 5, false}, {"Pedro", "Ortega", "Tenis",3, true}, {"Juan", "Garcia", "Ajedrez",2, false}, {"Luis", "Perez", "Futbol", 5, true} }; String[] columnas = {"Nombre", "Apellidos", "Deporte", "# de Anios", "Vegetariano"}; JTable tabla = new JTable(registros, columnas); JScrollPane panel = new JScrollPane(tabla); add(panel, BorderLayout.CENTER); } }
103
A partir de este momento nuestra aplicacin java tendr la necesidad de almacenar o recuperar datos desde una base de datos relacional; por lo que se har necesario definir en la aplicacin cierta informacin que ayude a nuestra clase java a encontrar la base de datos deseada, la tabla deseada para poder insertar, actualizar, eliminar o recuperar informacin. Un origen de datos, define cierta informacin que ser utilizada por nuestra aplicacin java para poder establecer conexin con la base de datos deseada. JDBC en este punto, representa un marco de programacin utilizado por los programadores con la finalidad de conectar una aplicacin java con ciertas bases de datos sin importar el software que la gestiona.
104
105
106
107
MiOrigen
108
109
110
111
113
JTable (Object[ ][ ] datos, Object[ ] columnas) JTable (Vector datos, Vector columnas) Ventaja: facilidad de uso. Desventajas:
- Cada celda automticamente se encuentra en estado editable.
- Todos los datos visualizados son tratados con el mismo tipo (String).
- La obligacin de utilizar arreglos o vectores para almacenar datos. Esto puede ser una desventaja, por ejemplo si obtenemos un conjunto de objetos provenientes de una base de datos, no podremos trabajar con ellos directamente sino es a travs de un vector un arreglo bidimensional.
114
Cada JTable utilizado en nuestros ejemplos est basado en un modelo de datos que tiene como finalidad gestionar los datos visualizados en la tabla. Hasta el momento, en los ejemplos anteriores al no crear un modelo de datos propio, la clase JTable al momento de ser instanciada automticamente crea un modelo de datos por defecto (DefaultTableModel). La utilizacin de un modelo de datos permitir a los programadores agregar, modificar, eliminar todo dato visualizado en la tabla; por lo tanto, cualquier operacin que realicemos con el modelo de datos implicar automticamente un cambio en el objeto JTable.
115
Modelo de Datos
Base de Datos
116
JavaBean
public String getCodigo() { return codigo; } public String getNombre() { return nombre; } public String getApellido() { return apellido; } public int getEdad() { return edad; }
117
Para la implementacin del modelo propio, tenemos inicialmente dos opciones: implementar la interface TableModel e implementar todos sus mtodos extender la clase abstracta AbstractTableModel.
- int getColumnCount(): mtodo que debe devolver el nmero de columnas que posee la tabla. - int getRowCount(): mtodo que debe devolver el nmero de registros existentes en la tabla. - Object getValueAt(int rowIndex, int columnIndex): mtodo que debe retornar el valor de una celda habiendo especificado previamente su fila y columna.
118
private LinkedList datos = new LinkedList(); private LinkedList listeners = new LinkedList();
public int getColumnCount() { return 4; } public int getRowCount() { return datos.size(); } public String getColumnName(int columnIndex) { switch (columnIndex) { case 0: return "Codigo"; case 1: return "Nombres"; case 2: return "Apellidos"; case 3: return "Edad"; default: return null; } }
Modelo de Datos
119
public Object getValueAt(int rowIndex, int columnIndex) { Persona aux; aux = (Persona)(datos.get(rowIndex)); switch (columnIndex) { case 0: return aux.getCodigo(); case 1: return aux.getNombre(); case 2: return aux.getApellido(); case 3: return new Integer(aux.getEdad()); default: return null; } }
Modelo de Datos
120
Modelo de Datos
121
Modelo de Datos
122
GestionTabla
}
//Elimina la primera persona de la tabla. public void borraFila () { if (modelo.getRowCount() > 0) modelo.eliminaPersona(0); }
123
Interfaz Grfica
JTable tabla = new JTable (modelo); JScrollPane panel = new JScrollPane(tabla); botonInserta = new JButton ("Insertar"); botonInserta.addActionListener(this); botonElimina = new JButton ("Eliminar"); botonElimina.addActionListener(this);
panel.setBounds(50, 70, 500, 300); botonInserta.setBounds(50, 400, 100, 25); botonElimina.setBounds(160, 400, 100, 25);
add(panel); add(botonInserta); add(botonElimina);
124
Interfaz Grfica
125
Modifica una celda. Recupera el valor de una celda. Recupera nombre de columna.
Modelo de Datos
Inserta una fila Elimina una fila
JFrame + JTable
Inserta una fila Elimina una fila
Gestion Tabla
126
La arquitectura Modelo Vista Controlador (MVC) separa la aplicacin en tres partes que toman exactamente las mismas palabras (Modelo, Vista, Controlador). El objetivo principal de la mencionada arquitectura: Separar la interfaz de usuario de los datos.
- Modelo: El modelo es la capa que permite gestionar los datos de la aplicacin. El modelo es el responsable del almacenamiento y recuperacin del objeto. - Vista: Representa la interfaz de usuario. En otras palabras, la vista puede ser concebida como la interfaz grfica del modelo. Es posible asociar ms de una vista a un modelo. - Controlador: Es el encargo de implementar la lgica para el procesamiento de las entradas de usuario. Encargado de integrar la aplicacin. Una vez que la vista notifica al controlador que se ha originado una entrada de usuario, el controlador notifica al modelo que los datos han cambiado, y por ltimo el modelo notifica a todas las vistas registradas que procedan a su actualizacin.
127
Modelo
Notifica Actualiza
Evento
Vista(s)
Controlador
128
Un Observer es cualquier objeto que necesita recibir notificaciones sobre el estado de otros objetos, mientras que un Observable posee ciertos mtodos que permitan cambiar los datos y notificar a todos los Observer registrados al mismo.
Cambia
Vista 1
Valor Observable
Notifica
Cambia
Vista 2
129
130
132
133
vo.addObserver( to ); vo.addObserver( bo );
} }
134