You are on page 1of 376

Introduccin a la POO

Jos Antonio Garca Meja

Objetivo
Conocer los principios de la POO y aplicarlos en el lenguaje Java

Jos Antonio Garca Meja

Caractersticas
Abstraccin Encapsulamiento Herencia Polimorfismo Explicar con ejemplos prcticos

Jos Antonio Garca Meja

Abstraccin
ELIMINAR LO IRRELEVANTE Y AMPLIFICAR LO ESENCIAL

Jos Antonio Garca Meja

Abstraccin

Granularidad A los elementos en el dominio del problema y su representacin en el dominio de la solucin se le llama OBJETO. Abstraccin de datos

Jos Antonio Garca Meja

Tipo de dato abstracto

Un tipo abstracto de datos define una especie de caja negra

Abstraccin Modelo

Jos Antonio Garca Meja

Encapsulamiento

Encapsular es agrupar en una misma entidad las estructuras de datos y las funciones, ocultando la implementacin bajo una interface. Implementacin es la manera cmo se llevan a cabo las operaciones, es decir que tipo de datos se utilizan, cuanta memoria utilizan, etc. Si todos los datos miembro de una clase estuvieran disponibles para cualquiera, entonces el cliente podr hacer lo que quiera con la clase y no habra manera de forzar un comportamiento en especial. De ah, la necesidad de mantener claramente separada y protegida la interface y la implementacin.

Jos Antonio Garca Meja

Herencia

Definicin (Herencia). Herencia es el mecanismo que permite que un clase A herede propiedades de una clase B. Decimos "A hereda de B". Objetos de la clase A tienen as acceso a los atributos y mtodos de la clase B sin necesidad de redefinirlos. Definicin (Superclase/Subclase) Si la clase A hereda de la clase B, entonces B es la superclase de A. A es subclase de B.
Jos Antonio Garca Meja

Polimorfismo
poly muchos, varios morph forma o apariencia.

En la programacin orientada a objetos, morph forma se refiere a la interface o a las propiedades de los objetos mientras que poly que las la interface o los atributos de los objetos son diferentes. Las interfaces son fundamentales en los sistemas orientados a objetos ya que es la manera de conocerlos. Se dice que dos o mas objetos son polimrficos si tienen interfaces idnticas pero comportamiento diferente; desde el punto de vista del cliente esos objetos son indistinguibles. El polimorfismo se logra cuando una clase hereda la interfaz de otra clase ya sea total o parcial o bien, con tipo o sin tipo.
Jos Antonio Garca Meja 9

Objeto y clase
En la Programacin orientada a objetos cualquier cosa es un objeto, mantienen un estado que indica sus transiciones y tienen mtodos que sirven para que expresar un comportamiento deseado. Se puede ver a un objeto como una caja negra la cual contiene cdigo (secuencia de instrucciones) y datos (informacin sobre la cual actan las instrucciones). Tradicionalmente el cdigo y los datos son entidades separadas, por ejemplo en el lenguaje C, las unidades de cdigo son las funciones mientras que las unidades de informacin son las estructuras. Un programa es un conjunto de objetos comunicndose entre ellos mediante mensajes.

Jos Antonio Garca Meja

10

Objeto y clase
La clase implementa al tipo. Un objeto se define por medio de su clase de ah que un objeto sea una instancia individual de una clase. Al proceso de crear un objeto se le llama instanciacin. Una clase es la combinacin de estructuras, funciones e interfaces. La interfaz de una clase es todo lo visible para aquellas funciones que no forman parte de la clase. Las funciones cliente se comunican con la clase mediante la invocacin de su interfaz. Los objetos estn protegidos por una interfaz: el contrato entre el objeto y el cliente. Todos los objetos de un mismo tipo pueden recibir los mismos mensajes.
Jos Antonio Garca Meja 11

Objeto y clase
interfaz

Nombre de la Clase Atributos

objeto
mtodo cdigo datos mtodo cdigo

Mtodos

implementacin
Jos Antonio Garca Meja 12

Objeto y clase

Las solicitudes que se puden hacer a un objeto estn definidas por su interface. El tipo del objeto determina la interface de ste.

Light lt; lt.on();

Jos Antonio Garca Meja

13

Objeto y clase

En el mbito de la programacin, existen creadores de clases (aquellos que crean nuevos tipos de datos) y programadores clientes (aquellos que usan las clases creadas por los primeros). La meta del programador cliente es coleccionar una completa caja de herramientas de clases que le permita el rpido desarrollo de aplicaciones. La meta del creador de las clases es exponer nicamente lo que necesita el programador cliente y manterner lo dems oculto.

Jos Antonio Garca Meja

14

Objeto y clase

Especificaciones de estado: Las clases describen la manera de almacenar la informacin del estado dentro de sus instancias. Los tipos de variables dentro de una clase se clasifican en dos categoras:
Variables de instancia: Son variables que aparecen cada vez que se instancia un objeto. Variables de Clase: Son variables que contienen datos que slo son relevantes a la clase misma y no a cualquier instancia de clase. Una variable de clase la comparten todos los objetos de la clase.
Jos Antonio Garca Meja 15

Objeto y clase

Especificacin del comportamiento: El algoritmo que define el comportamiento de un objeto se especifica en la clase del objeto y al igual que las variables se catalogan en dos grupos:
Mtodos de Instancia: Son funciones que manipulan al estado de un objeto en particular. Mtodos de Clase: Son funciones que son relevantes a una clase, pero no operan en alguna instancia en particular de la clase. Se pueden usar para crear nuevas instancias de clase.
Jos Antonio Garca Meja 16

Clases y objetos

Jos Antonio Garca Meja

17

Introduccin a la programacin en Java

Jos Antonio Garca Meja

18

Qu es Java?
Es un lenguaje de OOP, desarrollado por Sun Microsystems, diseado para ser pequeo, sencillo y porttil a travs de plataformas y sistemas operativos, tanto a nivel de cdigo fuente como en binario

Jos Antonio Garca Meja

19

Historia de Java (1)


Fue desarrollado por Sun Microsystems en 1991, se llam Oak. Creacin de software para dispositivos electrnicos (TV, VCR, tostadores). En 1994 se escribe WebRunner (HotJava).
Jos Antonio Garca Meja 20

Historia de Java (2)


En 1994 se reescribe el compilador de Java en Java a partir de su original en C. Sun introduce Java en 1995 en la Sun World 95 convention.

Jos Antonio Garca Meja

21

Caractersticas de Java
Simple. Orientado a objetos. Distribuido Robusto. Arquitectura neutral.
Jos Antonio Garca Meja 22

Java es un lenguaje Multiplataforma

Jos Antonio Garca Meja

23

Compilacin de un programa en Java

Jos Antonio Garca Meja

24

Programas en Java

Jos Antonio Garca Meja

25

Caractersticas de Java
Seguro. Portable Interpretado. Multihilos. Dinmico.
Jos Antonio Garca Meja 26

Java para aplicaciones (1)


Es Java en realidad es una buena tecnologa para desarrollar aplicaciones corporativas? A continuacin se muestran algunas necesidades importantes del desarrollo de aplicaciones
Jos Antonio Garca Meja 27

Java para aplicaciones (2)


Desarrollo rpido de aplicaciones Aplicaciones efectivas y eficientes Portabilidad para programador programa
Jos Antonio Garca Meja

28

Java para aplicaciones (3)


Costos de desarrollo Mantenimiento y soporte Aprendizaje

Jos Antonio Garca Meja

29

Instalacin de Java

El programa de instalacin se encuentra en el CD Seguir los siguientes pasos


Copiar el archivo a su mquina Ejecutar el archivo jdk1_2_2-000-win.exe Modificar agregar c:\jdk1.2.2\bin en la variable PATH, del archivo autoexec.bat
Jos Antonio Garca Meja 30

Construccin y compilacin de programas en Java

Jos Antonio Garca Meja

31

Tipos de Programas en Java

Aplicaciones.- Los programas se ejecutan en consolas Applet.- Los programas se ejecutan en un browser o navegador de la Web

Jos Antonio Garca Meja

32

Primer programa en Java


1: class HelloWorld 2: { 3: public static void main (String args[ ]) 4: { 5: System.out.println("Hello World!"); 6: } 7: }
Jos Antonio Garca Meja 33

Compilacin en Java

javac HelloWorld.java

Jos Antonio Garca Meja

34

Ejecucin del programa

java HelloWorld

Jos Antonio Garca Meja

35

Primer Applet en Java


1: import java.awt.Graphics; 2: public class HelloWorldApplet extends java.applet.Applet 3: { 4: public void paint(Graphics g) 5: { 6: g.drawString("Hello world!", 5, 25); 7: } 8: }
Jos Antonio Garca Meja 36

Pgina HTML para el Applet


1: <HTML> 2: <HEAD> 3: <TITLE>Hola a Todos!</TITLE> 4: </HEAD> 5: <BODY> 6: <P>Mi primer Applet Dice: 7: <APPLET Code=HolaMundoApplet.class 8: width=150 height=25> 9: </APPLET> 10: </BODY> 11:</HTML>

Jos Antonio Garca Meja

37

Ejecucin del Applet


Compile. javac HolaMundoApplet.java Ejecutar el Applet.
appletviewer HolaMundoApplet.html

Jos Antonio Garca Meja

38

Tipos de clases en Java


Abstract final public synchronizable

Jos Antonio Garca Meja

39

Mtodos y atributos
Cada clase que escribe en Java est formada por dos componentes: atributos y comportamiento

Jos Antonio Garca Meja

40

Atributos
Son las caractersticas individuales, que diferencian a un objeto de otro, y determinan la apariencia, estado u otras cualidades de ese objeto.

Jos Antonio Garca Meja

41

Atributos
Los atributos se definen con variables. Cada instancia de una clase puede tener diferentes valores para sus variables, por lo que cada variable se le llama variable de instancia

Jos Antonio Garca Meja

42

Mtodos
Se establece a travs de un conjunto de funciones, llamados mtodos, definidas dentro de las clases.

Jos Antonio Garca Meja

43

Creando una clase


class Motorcycle { }

Jos Antonio Garca Meja

44

Agregando atributos
String make; String color; boolean engineState = false;

Jos Antonio Garca Meja

45

Agregando mtodos
void startEngine( ) { if (engineState == true) System.out.println("The engine is already on."); else { engineState = true; System.out.println("The engine is now on."); } } Jos Antonio Garca Meja

46

Agregando mtodos
void showAtts() { System.out.println("This motorcycle is a " + color + " " + make); if (engineState == true) System.out.println("The engine is on."); else System.out.println("The engine is off."); }

Jos Antonio Garca Meja

47

Agregando el mtodo main()


1: public static void main (String args[]) 2: { 3: Motorcycle m = new Motorcycle(); 4: m.make = "Yamaha RZ350"; 5: m.color = "yellow"; 6: System.out.println("Calling showAtts..."); 7: m.showAtts(); 8: System.out.println("--------"); 9: System.out.println("Starting engine..."); 10: m.startEngine(); 11: System.out.println("--------"); 12: System.out.println("Calling showAtts..."); 13: m.showAtts(); 14: System.out.println("--------"); 15: System.out.println("Starting engine..."); 16: m.startEngine(); Garca Meja Jos Antonio 17: }

48

Salida del programa


Calling showAtts... This motorcycle is a yellow Yamaha RZ350 The engine is off. -------Starting engine... The engine is now on. -------Calling showAtts... This motorcycle is a yellow Yamaha RZ350 The engine is on. -------Starting engine... The engine is already on.
Jos Antonio Garca Meja 49

Alcance de objetos y reciclado de memoria


En Java, la recoleccin y liberacin de memoria es responsabilidad de un thread llamado automatic garbage collector (recolector automtico de basura).
Jos Antonio Garca Meja 50

Herencia (1)
Permite la creacin de nuevas clases a partir de clases existentes, definiendo solamente las diferencias existentes entre ambas.

Jos Antonio Garca Meja

51

Herencia (2)
Clase A

Clase B

Clase C

Clase D

Clase E

Jos Antonio Garca Meja

52

Subclasificacin
Crear una nueva clase que heredar atributos y mtodos de alguna otra clase en la jerarqua.

Jos Antonio Garca Meja

53

Una jerarqua de clases


Object

Vehiculo

VehiculoPersonal

VehiculoGrupo

Jos Antonio Garca Meja

54

Una jerarqua de clases


Object

Vehiculo

Vehiculo_Dos_Llantas

Vehiculo_Cuatro_Llantas

Moto

Automovil

Camion

Jos Antonio Garca Meja

55

Cmo funciona la herencia?

Jos Antonio Garca Meja

56

Cmo sobreponer mtodos?

Jos Antonio Garca Meja

57

Java solo contempla la herencia simple, pero se puede simular la herencia mltiple

Jos Antonio Garca Meja

58

Modificadores de acceso
public protected private friendly

Jos Antonio Garca Meja

59

Creando una subclase


1:import java.awt.Graphics; 2:import java.awt.Font; 3:import java.awt.Color; 4: 5:public class HolaOApplet extends java.applet.Applet 6: { 7: 8: Font f = new Font("TimesRoman",Font.BOLD,36); 9: 10: public void paint(Graphics g) 11: { 12: g.setFont(f); 13: g.setColor(Color.red); 14: g.drawString(Hola Otra vez!", 5, 40); 15: } 16: }
Jos Antonio Garca Meja 60

Pgina HTML para el Applet


<HTML> <HEAD> <TITLE>Otro Applet</TITLE> </HEAD> <BODY> <P>Mi Segundo Applet dice: <BR> <APPLET Code="HolaOApplet.class" Width=200 Height=50> </APPLET> </BODY> </HTML>
Jos Antonio Garca Meja 61

Salida del Applet

Jos Antonio Garca Meja

62

Variables y mtodos estticos


Sirven para crear una clase en la que el valor de una variable de instancia sea el mismo para todos los objetos instanciados a partir de esa clase.

Jos Antonio Garca Meja

63

Tipos de variables
Variables de instancia. Variables de clase. Variables locales.

Jos Antonio Garca Meja

64

Declaracin de variables
int myAge; String myName; boolean isTired; int x, y, z; String firstName, LastName; int myAge, mySize, numShoes = 28; String myName = "Laura"; boolean isTired = true; int a = 4, b = 5, c = 6;
Jos Antonio Garca Meja 65

Tipos de datos
int float String char boolean byte short long

Jos Antonio Garca Meja

66

Tipos de constantes
Nmero String char boolean long

Jos Antonio Garca Meja

67

Operadores
+,-,*,/ +=, -=, *=, /= ++,-==, !=, <, >, <=, >=

Jos Antonio Garca Meja

68

Precedencia de operadores (1)


.[]() ++ -- ! instanceof new (tipo) expresin */% +< > <= >=

Jos Antonio Garca Meja

69

Precedencia de operadores (2)


== != && || ?: = += -= *= /= %=

Jos Antonio Garca Meja

70

Cmo crear nuevos objetos?


String str=new String(); Random r = new Random(); Motorcycle m2= new Motorcycle()

Jos Antonio Garca Meja

71

Lo que hace new


Crea una nueva instancia de la clase dada. Se llama al mtodo constructor.

Jos Antonio Garca Meja

72

Mtodo constructor
Es un mtodo especial para crear e inicializar nuevas instancias de clase. Tiene el mismo nombre de la clase y no posee un tipo de retorno.
Jos Antonio Garca Meja 73

Acceso a las variables de instancia y de clase Con la notacin de punto, un nombre de variable de instancia o de clase tiene dos partes: objeto.variable
Jos Antonio Garca Meja 74

Variables de instancia

Point thePoint = new Point(10,10); thePoint.x = 5; System.out.println(Y es :+thePoint.y);

Jos Antonio Garca Meja

75

Variables de clase
class FamilyMember { static String surname = Johnson; String name; int age; }

Jos Antonio Garca Meja

76

Mtodos de instancia

myObject.methodOne(arg1,arg2,arg3); myObject.methodNoArgs(); myObject.getClass().getName(); myObject.var.methodTwho(arg1,arg2);

Jos Antonio Garca Meja

77

Mtodos de clase

Clase.myMetod(); String.valueOf(5);

Jos Antonio Garca Meja

78

Cast en tipos primitivos

(typename) value

(int) x/y; (String) arg;

Jos Antonio Garca Meja

79

Cast de objetos
(classname) object GreenApple a; Apple a2; a = new GreenApple(); a2 = (Apple) a;

Jos Antonio Garca Meja

80

Comparacin de objetos
El nico tipo de comparacin que se puede llevar a cabo entre los objetos es con los operadores: == (igual) != (diferente) Object.equals(Object Object)

Jos Antonio Garca Meja

81

Ejemplo de igualdad en Strings


1: class EqualsTest { 2: public static void main(String args[]) { 3: String str1, str2; 4: str1 = "she sells sea shells by the sea shore."; 5: str2 = str1; 6: 7: System.out.println("String1: " + str1); 8: System.out.println("String2: " + str2); 9: System.out.println("Same object? " + (str1 == str2));

Jos Antonio Garca Meja

82

Prueba de igualdad
10: 11: str2 = new String(str1); 12: 13: System.out.println("String1: " + str1); 14: System.out.println("String2: " + str2); 15: System.out.println("Same object? " + (str1 == str2)); 16: System.out.println("Same value? " + str1.equals(str2)); 17: } 18: }

Jos Antonio Garca Meja

83

Determinacin de la clases de un objeto


String name = obj.getClass().getName();

"foo" instanceof String // true Point pt = new Point(10, 10); pt instanceof String // false

Jos Antonio Garca Meja

84

Paquetes de clases en Java


java.lang java.util java.net java.awt java.applet

Jos Antonio Garca Meja

85

Arreglos
Son una forma de almacenar una lista de elementos. En Java son verdaderos objetos que pueden pasarse y tratarse de la misma manera que otros objetos.

Jos Antonio Garca Meja

86

Pasos para crear arreglos


Declare una variable para guardar el arreglo. Cree un nuevo objeto de arreglo y asgnelo a la variable de arreglo. Guarde lo que desee en el arreglo.
Jos Antonio Garca Meja 87

Declaracin de arreglos

String[ ] difficultWords; Point[ ] hits; int[ ] temps;

Jos Antonio Garca Meja

88

Creando arreglos de objetos


String[] names = new String[10]; int[ ] temps = new int[99]; String[ ] chiles = { "jalapeno", "anaheim", "serrano", "habanero", "thai" };

Jos Antonio Garca Meja

89

Acceso a los elementos de un arreglo

myArray[subscript]

Jos Antonio Garca Meja

90

Arreglos multidimensionales
int coords[ ][ ] = new int[12][12]; coords[0][0] = 1; coords[0][1] = 2;

Jos Antonio Garca Meja

91

Sentencia if
if (x < y) System.out.println("x is smaller than y"); if (x < y) System.out.println("x is smaller than y"); else System.out.println("y is bigger");

Jos Antonio Garca Meja

92

Condicionales if
if (engineState == true ) System.out.println("Engine is already on."); else { System.out.println("Now starting Engine."); if (gasLevel >= 1) engineState = true; else System.out.println("Low on gas! Can't start engine.");

Jos Antonio Garca Meja

93

Sentencia switch
switch (test) { case valueOne: resultOne; break; case valueTwo: resultTwo; break; case valueThree: resultThree; break; ... default: defaultresult; }
Jos Antonio Garca Meja 94

Condicional switch
switch (x) { case 2: case 4: case 6: case 8: System.out.println("x is an even number."); break; default: System.out.println("x is an odd number."); }

Jos Antonio Garca Meja

95

Condicional switch
1: class NumberReader { 2: 3: String convertNum(int val) { 4: switch (val) { 5: case 0: return "zero "; 6: case 1: return "one "; 7: case 2: return "two "; 8: case 3: return "three "; 9: case 4: return "four "; 10: case 5: return "five "; 11: case 6: return "six "; 12: case 7: return "seven ";
Jos Antonio Garca Meja 96

Condicional switch
13: case 8: return "eight "; 14: case 9: return "nine "; 15: default: return " "; 16: } 17: } 18: 19: public static void main (String args[]) { 20: NumberReader n = new NumberReader(); 21: String num = n.convertNum(4) + n.convertNum(1) + n.convertNum(5); 22: System.out.println("415 converts to " + num); 23: } 24:}
Jos Antonio Garca Meja

97

Ciclos for
for (initialization; test; increment) { statements; }

Jos Antonio Garca Meja

98

Ciclos for
1: class NamesLoop { 2: 3: String[] firstNames = { "Dennis", "Grace", "Bjarne", "James" }; 4: String[] lastNames = new String[firstNames.length]; 5: 6: void printNames() { 7: for (int i = 0; i < firstNames.length; i++) 8: System.out.println(firstNames[i] + " " + lastNames[i]); 9: }
Jos Antonio Garca Meja 99

Ciclos for
10: 11: public static void main (String args[]) { 12: ArrayTest a = new ArrayTest(); 13: a.printNames(); 14: System.out.println("----------"); 15: a.lastNames[0] = "Ritchie"; 16: a.lastNames[1] = "Hopper"; 17: a.lastNames[2] = "Stroustrup"; 18: a.lastNames[3] = "Gosling"; 19: 20: a.printNames(); 21:} 22:} Jos Antonio Garca Meja

100

Ciclos while
while (condition) { bodyOfLoop; }

Jos Antonio Garca Meja

101

Ciclos while
1: class CopyArrayWhile { 2: public static void main (String args[]) { 3: int[] array1 = { 5, 7, 3, 6, 0, 3, 2, 1 }; 4: float[] array2 = new float[array1.length]; 5: 6: System.out.print("array1: [ "); 7: for (int i = 0; i < array1.length; i++) { 8: System.out.print(array1[i] + " "); 9: } 10: System.out.println("]");

Jos Antonio Garca Meja

102

Ciclos while
11: 12: System.out.print("array2: [ "); 13: int count = 0; 14: while ( count < array1.length && array1[count] != 0) { 15: array2[count] = (float) array1[count]; 16: System.out.print(array2[count++] + " "); 17: } 18: System.out.println("]"); 19: } 20:}
Jos Antonio Garca Meja 103

Ciclos do ... while

do { bodyOfLoop; } while (condition);

Jos Antonio Garca Meja

104

Ciclos do ... while


1: class DoTest { 2: public static void main (String args[]) { 3: int x = 1; 4: 5: do { 6: System.out.println("Looping, round " + x); 7: x++; 8: } while (x <= 10); 9: } 10: }

Jos Antonio Garca Meja

105

Cmo salir de los ciclos?


break continue

Jos Antonio Garca Meja

106

Ejemplo del uso de break


int count = 0; while (count < array1.length) { if (array1[count] == 0) { break; } array2[count] = (float) array1[count++]; }

Jos Antonio Garca Meja

107

Ejemplo del uso de continue


int count1 = 0; int count2 = 0; while (count < array1.length) { if (array1[count1] == 0) { continue; count1++ } array2[count2++] = (float)array1[count1++]; }
Jos Antonio Garca Meja 108

Definicin de Clases
class MyClassName { ... }

Jos Antonio Garca Meja

109

Herencia
class myClassName extends mySuperClassName { ... }

Jos Antonio Garca Meja

110

Constantes
final float pi = 3.141592; final boolean debug = false; final int maxsize = 40000;

Jos Antonio Garca Meja

111

Variables de clase
static int sum; static final int maxObjects = 10;

Jos Antonio Garca Meja

112

Mtodos
returntype methodname(type1 arg1, type2 arg2, type3 arg3..) { ... }

Jos Antonio Garca Meja

113

La clase RangeClass
1: class RangeClass { 2: int[] makeRange(int lower, int upper) { 3: int arr[] = new int[ (upper - lower) + 1 ]; 4: 5: for (int i = 0; i < arr.length; i++) { 6: arr[i] = lower++; 7: } 8: return arr; 9: } 10:

Jos Antonio Garca Meja

114

La clase RangeClass
11: public static void main(String arg[]) { 12: int theArray[]; 13: RangeClass theRange = new RangeClass(); 14: 15: theArray = theRange.makeRange(1, 10); 16: System.out.print("The array: [ "); 17: for (int i = 0; i < theArray.length; i++) { 18: System.out.print(theArray[i] + " "); 19: } 20: System.out.println("]"); 21: } 22: 23: }

Jos Antonio Garca Meja

115

La palabra reservada this


Hace referencia al objeto actual

t = this.x; this.myMethod(this); return this;

Jos Antonio Garca Meja

116

Pasando argumentos a los programas en Java


1: class EchoArgs { 2: public static void main(String args[]) { 3: for (int i = 0; i < args.length; i++) { 4: System.out.println("Argument " + i + ": " + args[i]); 5: } 6: } 7: }

Jos Antonio Garca Meja

117

Mtodos constructores Es una clase especial de mtodo que determina como se inicializa un objeto cuando se crea.

Jos Antonio Garca Meja

118

Constructores bsicos
Siempre tienen el mismo nombre de la clase. No tiene un tipo de retorno (return)

Jos Antonio Garca Meja

119

Sobrecargando constructores
1: import java.awt.Point; 3: class MyRect2 { 4: int x1 = 0; 5: int y1 = 0; 6: int x2 = 0; 7: int y2 = 0; 9: MyRect2(int x1, int y1, int x2, int y2) { 10: this.x1 = x1; 11: this.y1 = y1; 12: this.x2 = x2; 13: this.y2 = y2; 14: }
Jos Antonio Garca Meja 120

Sobre carga de constructores


16: MyRect2(Point topLeft, Point bottomRight) { 17: x1 = topLeft.x; 18: y1 = topLeft.y; 19: x2 = bottomRight.x; 20: y2 = bottomRight.y; 21: } 22: 23: MyRect2(Point topLeft, int w, int h) { 24: x1 = topLeft.x; 25: y1 = topLeft.y; 26: x2 = (x1 + w); 27: y2 = (y1 + h); 28: } Jos Antonio Garca Meja

121

Sobre carga de constructores


30: void printRect() { 31: System.out.print("MyRect: <" + x1 + ", " + y1); 32: System.out.println(", " + x2 + ", " + y2 + ">"); 33: }

Jos Antonio Garca Meja

122

Sobre carga de constructores


35: public static void main(String args[]) { 36: MyRect2 rect; 37: 38: System.out.println("Calling MyRect2 with coordinates 25,25 50,50:"); 39: rect = new MyRect2(25, 25, 50,50); 40: rect.printRect(); 41: System.out.println("----------"); 42: 43: System.out.println("Calling MyRect2 w/points (10,10), (20,20):");
Jos Antonio Garca Meja 123

Sobre carga de constructores


44: rect= new MyRect2(new Point(10,10), new Point(20,20)); 45: rect.printRect(); 46: System.out.println("----------"); 47: 48: System.out.print("Calling MyRect2 w/1 point (10,10)"); 49: System.out.println(" width (50) and height (50):"); 50: rect = new MyRect2(new Point(10,10), 50, 50); 51: rect.printRect(); 52: System.out.println("----------"); 54: } }

Jos Antonio Garca Meja

124

Sobre carga de mtodos


1: class PrintClass { 2: int x = 0; 3: int y = 1; 4: 5: void printMe() { 6: System.out.println("x is " + x + ", y is " + y); 7: System.out.println("I am an instance of the class " + 8: this.getClass().getName()); 9: } 10: }
Jos Antonio Garca Meja 125

Sobre carga de mtodos


1: class PrintSubClass extends PrintClass { 2: int z = 3; 3: 4: public static void main(String args[]) { 5: PrintSubClass obj = new PrintSubClass(); 6: obj.printMe(); 7: } 8: }

Jos Antonio Garca Meja

126

Sobre carga de mtodos


1: class PrintSubClass2 extends PrintClass { 2: int z = 3; 3: 4: void printMe() { 5: System.out.println("x is " + x + ", y is " +y+ 6: ", z is " + z); 7: System.out.println("I am an instance of the class " + 8: this.getClass().getName()); 9: }
Jos Antonio Garca Meja 127

Sobre carga de mtodos

11: public static void main(String args[]) { 12: PrintSubClass2 obj = new PrintSubClass2(); 13: obj.printMe(); 14: } 15: }

Jos Antonio Garca Meja

128

Llamada del mtodo original


// From PrintSubClass2 void printMe() { super.printMe(); System.out.println("z is " + z); }

Jos Antonio Garca Meja

129

Sobreponiendo Constructores
1: import java.awt.Point; 2: class NamedPoint extends Point { 3: String name; 4: 5: NamedPoint(int x, int y, String name) { 6: super(x,y); 7: this.name = name; 8: }

Jos Antonio Garca Meja

130

Sobreponiendo Constructores
9: public static void main (String arg[]) { 10: NamedPoint np = new NamedPoint(5, 5, "SmallPoint"); 11: System.out.println("x is " + np.x); 12: System.out.println("y is " + np.y); 13: System.out.println("Name is " + np.name); 14: } 15:}
Jos Antonio Garca Meja 131

Applets
Son pequeas aplicaciones que se pueden ejecutar desde un visualizador del World Wide Web

Jos Antonio Garca Meja

132

Restricciones de Applets
No pueden leer o escribir en el sistema de archivos del director. Slo se pueden comunicar con el servidor donde residen. No pueden ejecutar ningn programa en el sistema del lector.

Jos Antonio Garca Meja

133

Creando Applets
public class myClass extends java.applet.Applet { ... }

Jos Antonio Garca Meja

134

Actividades principales de los applets


Inicializacin. Arranque. Detencin. Destruccin.

Jos Antonio Garca Meja

135

Inicializacin
public void init() { ... }

Jos Antonio Garca Meja

136

Arranque
public void start() { ... }

Jos Antonio Garca Meja

137

Detencin
public void stop() { ... }

Jos Antonio Garca Meja

138

Destruccin
public void destroy() { ... }

Jos Antonio Garca Meja

139

Dibujo
public void paint(Graphics g) { ... }

Jos Antonio Garca Meja

140

Un Applet sencillo
1: import java.awt.Graphics; 2: import java.awt.Font; 3: import java.awt.Color; 4: 5: public class HelloAgainApplet extends java.applet.Applet { 6: 7: Font f = new Font("TimesRoman", Font.BOLD, 36); 8:
Jos Antonio Garca Meja 141

Un applet sencillo
9: public void paint(Graphics g) { 10: g.setFont(f); 11: g.setColor(Color.red); 12: g.drawString("Hello again!", 5, 40); 13: } 14: }

Jos Antonio Garca Meja

142

El tag <APPLET>
1: <HTML> 2: <HEAD> 3: <TITLE>This page has an applet on it</TITLE> 4: </HEAD> 5: <BODY> 6: <P>My second Java applet says: 7: <BR><APPLET CODE="HelloAgainApplet.class" WIDTH=200 HEIGHT=50> 8: Hello Again! 9: </APPLET> 10: </BODY> 11: </HTML>

Jos Antonio Garca Meja

143

Resultado

Jos Antonio Garca Meja

144

Pasando parmetros a los Applets


1: <HTML> 2: <HEAD> 3: <TITLE>Hello!</TITLE> 4: </HEAD> 5: <BODY> 6: <P> 7: <APPLET CODE="MoreHelloApplet.class" WIDTH=200 HEIGHT=50> 8: <PARAM NAME=name VALUE="Bonzo"> 9: Hello to whoever you are! 10: </APPLET> 11: </BODY> 12: </HTML>
Jos Antonio Garca Meja 145

Pasando parmetros a los Applets


1: import java.awt.Graphics; 2: import java.awt.Font; 3: import java.awt.Color; 4: 5: public class MoreHelloApplet extends java.applet.Applet { 6: 7: Font f = new Font("TimesRoman", Font.BOLD, 36); 8: String name; 9:
Jos Antonio Garca Meja 146

Pasando parmetros a los Applets


10: 11: 12: 13: 14: 15: 16: 17: public void init() { name = getParameter("name"); if (name == null) name = "Laura"; name = "Hello " + name + "!"; }

Jos Antonio Garca Meja

147

Pasando parmetros a los Applets


18: public void paint(Graphics g) { 19: g.setFont(f); 20: g.setColor(Color.red); 21: g.drawString(name, 5, 40); 22: } 23: }

Jos Antonio Garca Meja

148

Resultado

Jos Antonio Garca Meja

149

La clase Graphics
import java.awt.Graphics; public class MyClass extends java.applet.Applet { ... }

Jos Antonio Garca Meja

150

El sistema coordenado

Jos Antonio Garca Meja

151

Lneas
import java.awt.Graphics; public class MyLine extends java.applet.Applet { public void paint(Graphics g) { g.drawLine(25,25,75,75); } }

Jos Antonio Garca Meja

152

Resultado

Jos Antonio Garca Meja

153

Rectngulos
import java.awt.Graphics; public class MyRect extends java.applet.Applet { public void paint(Graphics g) { g.drawRect(20,20,60,60); g.fillRect(120,20,60,60); } }

Jos Antonio Garca Meja

154

Resultado

Jos Antonio Garca Meja

155

Rectngulos redondeados

Jos Antonio Garca Meja

156

Rectngulos redondeados
import java.awt.Graphics; public class MyRRect extends java.applet.Applet { public void paint(Graphics g) { g.drawRoundRect(20,20,60,60,10,10); g.fillRoundRect(120,20,60,60,20,20); } }

Jos Antonio Garca Meja

157

Resultado

Incluir la imagen para ejemplificar esto

Jos Antonio Garca Meja

158

Rectngulos 3D
import java.awt.Graphics; public class My3DRect extends java.applet.Applet { public void paint(Graphics g) { g.draw3DRect(20,20,60,60,true); g.draw3DRect(120,20,60,60,false); } }

Jos Antonio Garca Meja

159

Resultado

Incluir la imagen para ejemplificar esto

Jos Antonio Garca Meja

160

Polgonos
import java.awt.Graphics; public class MyPoly extends java.applet.Applet { public void paint(Graphics g) { int exes[] = { 39,94,97,142,53,58,26 }; int whys[] = { 33,74,36,70,108,80,106 }; int pts = exes.length; g.drawPolygon(exes,whys,pts); } }
Jos Antonio Garca Meja 161

Resultado

Jos Antonio Garca Meja

162

valos
import java.awt.Graphics; public class MyOval extends java.applet.Applet { public void paint(Graphics g) { g.drawOval(20,20,60,60); g.fillOval(120,20,100,60); } }

Jos Antonio Garca Meja

163

Resultado

Jos Antonio Garca Meja

164

La clase Lamp
1: import java.awt.*; 2: 3: public class Lamp extends java.applet.Applet { 4: 5: public void paint(Graphics g) { 6: // the lamp platform 7: g.fillRect(0,250,290,290); 8: 9: // the base of the lamp 10: g.drawLine(125,250,125,160); 11: g.drawLine(175,250,175,160); 12:
Jos Antonio Garca Meja 165

La clase Lamp
13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: } 26: } // the lamp shade, top and bottom edges g.drawArc(85,157,130,50,-65,312); g.drawArc(85,87,130,50,62,58); // lamp shade, sides g.drawLine(85,177,119,89); g.drawLine(215,177,181,89); // dots on the shade g.fillArc(78,120,40,40,63,-174); g.fillOval(120,96,40,40); g.fillArc(173,100,40,40,110,180);
Jos Antonio Garca Meja 166

Resultado

Jos Antonio Garca Meja

167

Texto y fuentes
1: import java.awt.Font; 2: import java.awt.Graphics; 3: 4: public class ManyFonts extends java.applet.Applet { 5: 6: public void paint(Graphics g) { 7: Font f = new Font("TimesRoman", Font.PLAIN, 18); 8: Font fb = new Font("TimesRoman", Font.BOLD, 18); 9: Font fi = new Font("TimesRoman", Font.ITALIC, 18); 10: Font fbi = new Font("TimesRoman", Font.BOLD + Font.ITALIC, 18);

Jos Antonio Garca Meja

168

Texto y fuentes
12: 13: 14: 15: 16: 17: 18: 19: 20: } 21: 22: } g.setFont(f); g.drawString("This is a plain font", 10, 25); g.setFont(fb); g.drawString("This is a bold font", 10, 50); g.setFont(fi); g.drawString("This is an italic font", 10, 75); g.setFont(fbi); g.drawString("This is a bold italic font", 10, 100);

Jos Antonio Garca Meja

169

Texto y fuentes

Jos Antonio Garca Meja

170

Centrando un texto
1: import java.awt.Font; 2: import java.awt.Graphics; 3: import java.awt.FontMetrics; 4: 5: public class Centered extends java.applet.Applet { 6: 7: public void paint(Graphics g) { 8: Font f = new Font("TimesRoman", Font.PLAIN, 36); 9: FontMetrics fm = getFontMetrics(f); 10: g.setFont(f);
Jos Antonio Garca Meja 171

Centrando un texto
11: 12: String s = "This is how the world ends."; 13: int xstart = (size().width fm.stringWidth(s)) / 2; 14: int ystart = size().height / 2; 15: 16: g.drawString(s, xstart, ystart); 17: } 18:}

Jos Antonio Garca Meja

172

Manejando colores
1: import java.awt.Graphics; 2: import java.awt.Color; 3: 4: public class ColorBoxes extends java.applet.Applet { 5: 6: public void paint(Graphics g) { 7: int rval, gval, bval; 8: 9: for (int j = 30; j < (size().height -25); j += 30) 10: for (int i = 5; i < (size().width -25); i += 30) { 11: rval = (int)Math.floor(Math.random() * 256);

Jos Antonio Garca Meja

173

Manejando colores
12: 256); 13: 256); 14: 15: 16: 17: 18: 19: 20: } 21: } gval = (int)Math.floor(Math.random() * bval = (int)Math.floor(Math.random() *

g.setColor(new Color(rval,gval,bval)); g.fillRect(i, j, 25, 25); g.setColor(Color.black); g.drawRect(i-1, j-1, 25, 25); }

Jos Antonio Garca Meja

174

Resultado

Jos Antonio Garca Meja

175

Hilos
Son una secuencia de ejecucin independiente de otras secuencias de ejecucin o hilos que pudieran existir.

Jos Antonio Garca Meja

176

Como escribir Applets con hilos


Cambie la identificacin de su clase applet para incluir las palabras implements Runnable. Incluya una variable de instancia para guardar el hilo.

Jos Antonio Garca Meja

177

Como escribir Applets con hilos


Modifique el mtodo start() para producir un hilo e iniciar su ejecucin. Cree el mtodo run() que contenga el cdigo actual que inicie la ejecucin de su applet.

Jos Antonio Garca Meja

178

Un reloj Digital
1: import java.awt.Graphics; 2: import java.awt.Font; 3: import java.util.Date; 4: 5: public class DigitalClock extends java.applet.Applet 6: implements Runnable { 7: 8: Font theFont = new Font("TimesRoman",Font.BOLD,24); 9: Date theDate; 10: Thread runner;
Jos Antonio Garca Meja 179

Un reloj Digital
12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 21: 22: 23: public void start() { if (runner == null) { runner = new Thread(this); runner.start(); } } public void stop() { if (runner != null) { runner.stop(); runner = null; } } Jos Antonio Garca Meja

180

Un reloj Digital
25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:} public void run() { while (true) { theDate = new Date(); repaint(); try { Thread.sleep(1000); } catch (InterruptedException e) { } } } public void paint(Graphics g) { g.setFont(theFont); g.drawString(theDate.toString(),10,50); }
Jos Antonio Garca Meja 181

El mtodo repaint()
La llamada a repaint() resulta en una llamada al mtodo update(). El mtodo update() limpia el contenido existente en la pantalla y luego llama a paint(). El mtodo paint() dibuja el contenido del cuadro actual.

Jos Antonio Garca Meja 182

Evitando el parpadeo en los Applets


Sobreponga update() para no borrar nada en la pantalla o para borrar slo las partes de la pantalla que usted cambi. public void update(Graphics g) { g.setColor(getBackground()); g.fillRect(0, 0, width, height); g.setColor(getForeground()); paint(g); }
Jos Antonio Garca Meja 183

Uso de Imgenes
La clase Image en java.awt ofrece mtodos abstractos para representar un comportamiento de imagen comn y mtodos especiales definidos en Applet y Graphics para desplegarlas y usarlas en sus applets.
Jos Antonio Garca Meja 184

Obteniendo Imgenes
Image img = getImage( new URL("http://www.server.com/files/image.gif")); Image img = getImage(getDocumentBase(), "image.gif") Image img = getImage(getCodeBase(), "image.gif") Image img = getImage(getCodeBase(), "images/image.gif")

Jos Antonio Garca Meja

185

Desplegando Imgenes

public void paint() { g.drawImage(img, 10, 10, this); }

Jos Antonio Garca Meja

186

El Applet Ladybug
1:import java.awt.Graphics; 2:import java.awt.Image; 3: 4:public class LadyBug extends java.applet.Applet { 5: 6: Image bugimg; 7: 8: public void init() { 9: bugimg = getImage(getCodeBase(), 10: "images/ladybug.gif"); 11: }
Jos Antonio Garca Meja 187

EL Applet Ladybug
12: 13: public void paint(Graphics g) { 14: g.drawImage(bugimg, 10, 10,this); 15: } 16:}

Jos Antonio Garca Meja

188

El Applet Ladybug

Jos Antonio Garca Meja

189

El Applet Ladybug2
1: import java.awt.Graphics; 2: import java.awt.Image; 3: 4: public class LadyBug2 extends java.applet.Applet { 5: 6: Image bugimg; 7: 8: public void init() { 9: bugimg = getImage(getCodeBase(), 10: "images/ladybug.gif"); 11: }

Jos Antonio Garca Meja

190

El Applet Ladybug2
13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: public void paint(Graphics g) { int iwidth = bugimg.getWidth(this); int iheight = bugimg.getHeight(this); int xpos = 10; // 25 % g.drawImage(bugimg, xpos, 10, iwidth / 4, iheight / 4, this); // 50 % xpos += (iwidth / 4) + 10; g.drawImage(bugimg, xpos , 10, iwidth / 2, iheight / 2, this);
Jos Antonio Garca Meja 191

El Applet Ladybug2
27: 28: 29: 30: 31: 32: 33: 34: } 35: } // 100% xpos += (iwidth / 2) + 10; g.drawImage(bugimg, xpos, 10, this); // 150% x, 25% y g.drawImage(bugimg, 10, iheight + 30, (int)(iwidth * 1.5), iheight / 4, this);

Jos Antonio Garca Meja

192

EL APPLET neko

Jos Antonio Garca Meja

193

Eventos
Es la manera en la cual el AWT le comunica a usted y a otros componentes Java AWT que algo ha sucedido

Jos Antonio Garca Meja

194

Algunos eventos sencillos


Clics del mouse. Movimientos del mouse. Eventos del teclado.

Jos Antonio Garca Meja

195

Clicks del Mouse


mouseDown(). mouseUp(). mouseDrag(). mouseMove().

Jos Antonio Garca Meja

196

mouseDown()

public boolean mouseDown(Event evt, int x, int y) { ... }

Jos Antonio Garca Meja

197

mouseUp()

public boolean mouseUp(Event evt, int x, int y) { ... }

Jos Antonio Garca Meja

198

El Applet Spots
1: import java.awt.Graphics; 2: import java.awt.Color; 3: import java.awt.Event; 4: 5: public class Spots extends java.applet.Applet { 6: 7: final int MAXSPOTS = 10; 8: int xspots[] = new int[MAXSPOTS]; 9: int yspots[] = new int[MAXSPOTS]; 10: int currspots = 0;
Jos Antonio Garca Meja 199

EL Applet Spots
12: 13: 14: 15: 16: int y) { 17: 18: 19: 20: 21: 22: 23: 24: 25: public void init() { setBackground(Color.white); } public boolean mouseDown(Event evt, int x, if (currspots < MAXSPOTS) { addspot(x,y); return true; } else { System.out.println("Too many spots."); return false; } }
Jos Antonio Garca Meja 200

EL Applet Spots
27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 20); 38: 39: 40: } void addspot(int x,int y) { xspots[currspots] = x; yspots[currspots] = y; currspots++; repaint(); } public void paint(Graphics g) { g.setColor(Color.blue); for (int i = 0; i < currspots; i++) { g.fillOval(xspots[i] - 10, yspots[i] - 10, 20, } }
Jos Antonio Garca Meja 201

EL APPLET SPOTS

Jos Antonio Garca Meja

202

DOBLE CLIC
public boolean mouseDown(Event evt, int x, int y) { switch (evt.clickCount) { case 1: // single-click case 2: // double-click case 3: // triple-click .... }

Jos Antonio Garca Meja

203

MOVIMIENTOS DEL MOUSE mouseDrag().

mouseMove().

Jos Antonio Garca Meja

204

mouseDrag()

public boolean mouseDrag(Event evt, int x, int y) { ... }

Jos Antonio Garca Meja

205

mouseMove()

public boolean mouseMove(Event evt, int x, int y) { ... }

Jos Antonio Garca Meja

206

ENTRADA Y SALIDA DEL APPLET

mouseEnter().

mouseExit().

Jos Antonio Garca Meja

207

mouseEnter()

public boolean mouse Enter(Event evt, int x, int y) { ... }

Jos Antonio Garca Meja

208

mouseExit()

public boolean mouseExit(Event evt, int x, int y) { ... }

Jos Antonio Garca Meja

209

EL APPLET Lines
1: import java.awt.Graphics; 2: import java.awt.Color; 3: import java.awt.Event; 4: import java.awt.Point; 5: 6: public class Lines extends java.applet.Applet { 7: 8: final int MAXLINES = 10; 9: Point starts[] = new Point[MAXLINES]; // starting points 10: Point ends[] = new Point[MAXLINES]; // endingpoints 11: Point anchor; // start of current line 12: Point currentpoint; // current end of line 13: int currline = 0; // number of lines
Jos Antonio Garca Meja 210

EL APPLET Lines
15: 16: 17: 18: 19: y) { 20: 21: 22: 23: 24: 25: 26: 27: 28: public void init() { setBackground(Color.white); } public boolean mouseDown(Event evt, int x, int if (currline < MAXLINES) { anchor = new Point(x,y); return true; } else { System.out.println("Too many lines."); return false; } }
Jos Antonio Garca Meja 211

EL APPLET Lines
30: public boolean mouseUp(Event evt, int x, int y) { 31: if (currline < MAXLINES) { 32: addline(x,y); 33: return true; 34: } 35: else return false; 36: } 37: 38: public boolean mouseDrag(Event evt, int x, int y) { 39: if (currline < MAXLINES) { 40: currentpoint = new Point(x,y); 41: repaint(); 42: return true; 43: } 44: else return false; 45: }
Jos Antonio Garca Meja 212

EL APPLET Lines
46: 47: 48: 49: 50: 51: 52: 53: 54: 55:

void addline(int x,int y) { starts[currline] = anchor; ends[currline] = new Point(x,y); currline++; currentpoint = null; anchor = null; repaint(); }

Jos Antonio Garca Meja

213

EL APPLET Lines
56: public void paint(Graphics g) { 57: 58: // Draw existing lines 59: for (int i = 0; i < currline; i++) { 60: g.drawLine(starts[i].x, starts[i].y, 61: ends[i].x, ends[i].y); 62: } 63: 64: // draw current line 65: g.setColor(Color.blue); 66: if (currentpoint != null) 67: g.drawLine(anchor.x,anchor.y, 68: currentpoint.x,currentpoint.y); 69: } 70:} Jos Antonio Garca Meja

214

EL APPLET Lines

Jos Antonio Garca Meja

215

EVENTOS DEL TECLADO


public boolean keyDown(Event evt, int key) { ... } public boolean keyDown(Event evt, int key) { System.out.println("ASCII value: " + key); System.out.println("Character: " + (char)key); return true; }

Jos Antonio Garca Meja

216

EVENTOS DEL TECLADO

public boolean keyUp(Event evt, int key) { ... }

Jos Antonio Garca Meja

217

EL APPLET Keys
1: import java.awt.Graphics; 2: import java.awt.Event; 3: import java.awt.Font; 4: import java.awt.Color; 5: 6: public class Keys extends java.applet.Applet { 7: 8: char currkey; 9: int currx; 10: int curry;

Jos Antonio Garca Meja

218

EL APPLET Keys
12: public void init() { 13: currx = (size().width / 2) -8; // default 14: curry = (size().height / 2) -16; 15: 16: setBackground(Color.white); 17: setFont(new Font("Helvetica",Font.BOLD,36)); 18: }

Jos Antonio Garca Meja

219

EL APPLET Keys
20: key) { 21: 22: 23: 24: 25: 26: 27: public boolean keyDown(Event evt, int switch (key) { case Event.DOWN: curry += 5; break; case Event.UP: curry -= 5; break;

Jos Antonio Garca Meja

220

EL APPLET Keys
28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: case Event.LEFT: currx -= 5; break; case Event.RIGHT: currx += 5; break; default: currkey = (char)key; } repaint(); return true; }
Jos Antonio Garca Meja 221

EL APPLET Keys
42: public void paint(Graphics g) { 43: if (currkey != 0) { 44: g.drawString(String.valueOf(currkey), currx,curry); 45: } 46: } 47: }

Jos Antonio Garca Meja

222

PROBANDO LAS TECLAS MODIFICADORES


Permite verificar las teclas de control y meta (Alt) public boolean mouseDown(Event evt, int x, int y ) { if (evt.shiftDown()) // handle shift-click else // handle regular click }

Jos Antonio Garca Meja

223

PROBANDO LAS TECLAS MODIFICADORES


public boolean mouseDown(Event evt, int x, int y){ if (evt.metaDown()) // handle a right-click else if (evt.controlDown()) // handle a middle-click else // handle a regular click }

Jos Antonio Garca Meja

224

EL MANEJADOR DE EVENTOS AWT


public boolean handleEvent(Event evt) { switch (evt.id) { case Event.MOUSE_DOWN: System.out.println("MouseDown: " + evt.x + "," + evt.y); return true; case Event.MOUSE_UP: System.out.println("MouseUp: " + evt.x + "," + evt.y); return true;

Jos Antonio Garca Meja

225

EL MANEJADOR DE EVENTOS AWT


case Event.MOUSE_MOVE: System.out.println("MouseMove: " + evt.x + "," + evt.y); return true; case Event.MOUSE_DRAG: System.out.println("MouseDrag: " + evt.x + "," + evt.y); return true; default: return false; } } Jos Antonio Garca Meja

226

OBJETIVO
Conocer los elementos fundamentales para el manejo del AWT en Java

Jos Antonio Garca Meja

227

EL AWT OFRECE
Un conjunto completo de accesorios UI. Respaldo para contenedores UI. Un sistema de eventos. Mecanismos para distribuir los componentes de forma que permitan un diseo UI independiente de la plataforma.
Jos Antonio Garca Meja 228

IDEA BSICA
Una ventana Java es un conjunto de componentes anidados que empieza desde la ventana exterior hasta el ms pequeo componente UI.

Jos Antonio Garca Meja

229

COMPONENTES AWT

Jos Antonio Garca Meja

230

PRINCIPALES COMPONENTES
Contenedores. Lienzos. Componentes UI. Componentes de construccin de ventana.

Jos Antonio Garca Meja

231

JERARQUA DE CLASES AWT PARCIAL

Jos Antonio Garca Meja

232

COMPONENTES BSICOS DE LA UI
public void init() { Button b = new Button("OK"); add(b); }

Jos Antonio Garca Meja

233

ETIQUETAS
Son cadenas de texto que puede usar para etiquetar otros componentes Label() Label(String) Label(String,int)

Jos Antonio Garca Meja

234

ETIQUETAS
import java.awt.*; public class LabelTest extends java.applet.Applet { public void init() { setFont(new Font ("Helvetica", Font.BOLD, 14)); setLayout(new GridLayout(3,1)); add(new Label("aligned left", Label.LEFT)); add(new Label("aligned center", Label.CENTER)); add(new Label("aligned right", Label.RIGHT)); } Jos Antonio Garca Meja 235 }

BOTONES
Son componentes UI sencillos que inician alguna accin cuando se les oprime Button(). Button(String).

Jos Antonio Garca Meja

236

BOTONES
public class ButtonTest extends java.applet.Applet { public void init() { add(new Button("Rewind")); add(new Button("Play")); add(new Button("Fast Forward")); add(new Button("Stop")); } }

Jos Antonio Garca Meja

237

CASILLAS DE VERIFICACIN
Son componentes que tienen dos estados:activada o desactivada. No inician acciones directas en la UI, pero, en su lugar, se usan para indicar caractersticas opcionales de alguna otra accin

Jos Antonio Garca Meja

238

CASILLAS DE VERIFICACIN
Checbox( ). Checbox(String). Checbox(String, null, boolean).

Jos Antonio Garca Meja

239

CASILLAS DE VERIFICACIN
import java.awt.*; public class CheckboxTest extends java.applet.Applet { public void init() { setLayout(new FlowLayout(FlowLayout.LEFT)); add(new Checkbox("Shoes")); add(new Checkbox("Socks")); add(new Checkbox("Pants")); add(new Checkbox("Underwear", null, true)); add(new Checkbox("Shirt")); } }
Jos Antonio Garca Meja 240

BOTONES DE RADIO

Tienen la misma apariencia de las casillas de verificacin, pero slo uno de una serie de ellos puede seleccionarse a la vez.

Jos Antonio Garca Meja

241

BOTONES DE RADIO
import java.awt.*; public class CheckboxGroupTest extends java.applet.Applet { public void init() { setLayout(new FlowLayout(FlowLayout.LEFT)); CheckboxGroup cbg = new CheckboxGroup(); add(new Checkbox("Red", cbg, false)); add(new Checkbox("Blue", cbg, false)); add(new Checkbox("Yellow", cbg, false)); add(new Checkbox("Green", cbg, true)); add(new Checkbox("Orange", cbg, false)); add(new Checkbox("Purple", cbg, false)); } }
Jos Antonio Garca Meja 242

MENS DE OPCIONES
Permiten seleccionar un elemento de un men que se despliega en pantalla

Jos Antonio Garca Meja

243

MENS DE OPCIONES
import java.awt.*; public class ChoiceTest extends java.applet.Applet { public void init() { Choice c = new Choice(); c.addItem("Apples"); c.addItem("Oranges"); c.addItem("Strawberries"); c.addItem("Blueberries"); c.addItem("Bananas"); add(c); } }
Jos Antonio Garca Meja 244

CAMPOS DE TEXTO
Permiten al lector introducir texto Textfield(). Textfield(int). Textfield(String). Textfield(String,int).

Jos Antonio Garca Meja

245

CAMPOS DE TEXTO
add(new Label("Enter your Name")); add(new TextField("your name here", 45)); add(new Label("Enter your phone number")); add(new TextField(12)); add(new Label("Enter your password")); TextField t = new TextField(20); t.setEchoCharacter('*'); add(t);

Jos Antonio Garca Meja

246

ADMINISTRADORES DE DISEO
Determina la forma en la cual los componentes AWT se muestran en la pantalla.

Jos Antonio Garca Meja

247

LA CLASE FlowLayout
import java.awt.*; public class FlowLayoutTest extends java.applet.Applet { public void init() { setLayout(new FlowLayout()); add(new Button("One")); add(new Button("Two")); add(new Button("Three")); add(new Button("Four")); add(new Button("Five")); add(new Button("Six")); } Jos Antonio Garca Meja }

248

LA CLASE GridLayout
import java.awt.*; public class GridLayoutTest extends java.applet.Applet { public void init() { setLayout(new GridLayout(3,2); add(new Button("One")); add(new Button("Two")); add(new Button("Three")); add(new Button("Four")); add(new Button("Five")); add(new Button("Six")); } Jos Antonio Garca Meja }

249

LA CLASE BorderLayout
import java.awt.*; public class BorderLayoutTest extends java.applet.Applet { public void init() { setLayout(new BorderLayout()); add("North", new Button("One")); add("East", new Button("Two")); add("South", new Button("Three")); add("West", new Button("Four")); add("Center", new Button("Five")); add(new Button("Six")); } }
Jos Antonio Garca Meja 250

MANEJO DE ACCIONES Y EVENTOS UI

public boolean action(Event evt, Object arg) { ... }

Jos Antonio Garca Meja

251

MANEJO DE ACCIONES Y EVENTOS UI


Todos los componentes UI bsicos cuentan con diferentes acciones y argumentos: El argumento de un botn es la etiqueta del botn. Las casillas de verificacin, exclusivas y no exclusivas, generan acciones cuando se seleccionan. El argumento es siempre true.
Jos Antonio Garca Meja 252

MANEJO DE ACCIONES Y EVENTOS UI


Los campos de texto crean acciones cuando el usuario presiona Return dentro del campo de texto.

Jos Antonio Garca Meja

253

MANEJO DE ACCIONES Y EVENTOS UI


public boolean action(Event evt, Object arg) { if (evt.target instanceof TextField) return handleText(evt.target); else if (evt.target instanceof Choice) return handleChoice(arg); ... }

Jos Antonio Garca Meja

254

MANEJO DE ACCIONES Y EVENTOS UI


1:import java.awt.*; 3:public class ButtonActionsTest extends java.applet.Applet { 4: 5: public void init() { 6: setBackground(Color.white); 7: 8: add(new Button("Red")); 9: add(new Button("Blue")); 10: add(new Button("Green")); 11: add(new Button("White")); 12: add(new Button("Black")); 13: }
Jos Antonio Garca Meja 255

MANEJO DE ACCIONES Y EVENTOS UI


15: public boolean action(Event evt, Object arg) { 16: if (evt.target instanceof Button) { 17: changeColor((String)arg); 18: return true; 19: } else return false; 20: }

Jos Antonio Garca Meja

256

MANEJO DE ACCIONES Y EVENTOS UI


22: void changeColor(String bname) { 23: if (bname.equals("Red")) setBackground(Color.red); 24: else if (bname.equals("Blue")) setBackground(Color.blue); 25: else if (bname.equals("Green")) setBackground(Color.green); 26: else if (bname.equals("White")) setBackground(Color.white); 27: else setBackground(Color.black); 28: 29: repaint(); 30: } 31:}

Jos Antonio Garca Meja

257

ANIDANDO PANELES Y COMPONENTES


Permite crear diferentes diseos para distintas partes generales del rea general del applet, aislar colores de fondo y primer plano y fuentes a partes individuales de un applet.

Jos Antonio Garca Meja

258

ANIDANDO PANELES Y COMPONENTES


setLayout(new GridLayout(1, 2, 10, 10)); Panel panel1 = new Panel(); Panel panel2 = new Panel(); add(panel1); add(panel2);

Jos Antonio Garca Meja

259

ANIDANDO PANELES Y COMPONENTES


panel1.setLayout(new FlowLayout()); panel1.add(new Button("Up")); panel1.add(new Button("Down"));

Jos Antonio Garca Meja

260

EVENTOS Y PANELES ANIDADOS


Al crear un applet con paneles anidados, los paneles forman una jerarqua desde el panel ms externo hasta el componente UI ms interno. Esta jerarqua afecta el manejo de eventos. Los eventos son recibido por el componente ms interno y son trasladados en cadena hacia la raz.

Jos Antonio Garca Meja

261

EVENTOS Y PANELES ANIDADOS


Un mtodo de manejo de eventos, ya sea los mtodos de eventos bsicos (mouseDown, mouseUp) o el ms genrico puede realizar una de tres tareas posibles:

Jos Antonio Garca Meja

262

EVENTOS Y PANELES ANIDADOS


No estar interesado en el evento. El evento se pasa hacia arriba en la jerarqua hasta que un componente lo procese. El mtodo de manejo de eventos debe regresar false.

Jos Antonio Garca Meja

263

EVENTOS Y PANELES ANIDADOS


Interceptar el evento, procesarlo y regresar true. En este caso, el evento se detiene en ese mtodo.

Jos Antonio Garca Meja

264

EVENTOS Y PANELES ANIDADOS


Interceptar el mtodo, procesarlo y pasarlo al siguiente manejador de eventos.

Jos Antonio Garca Meja

265

OTROS COMPONENTES UI
reas de texto. Listas desplazables. Barras de desplazamiento. Deslizadores.

Jos Antonio Garca Meja

266

REAS DE TEXTO
Permite la introduccin de grandes cantidades de texto. TextArea(). TextArea(int,int). TextArea(String). TextArea(String,int,int).
Jos Antonio Garca Meja 267

REAS DE TEXTO
import java.awt.*; public class TextAreaTest extends java.applet.Applet { public void init() { String str = Esta es una prueba de un rea de texto"; // more text deleted for space add(new TextArea(str,10,50)); } }
Jos Antonio Garca Meja 268

LISTAS DESPLAZABLES
Es similar a un men de opciones que permite escoger varias opciones de una lista List() List(int, boolean).

Jos Antonio Garca Meja

269

LISTAS DESPLAZABLES
import java.awt.*; public class ListsTest extends java.applet.Applet { public void init() { List lst = new List(5, true); lst.addItem("Hamlet"); lst.addItem("Claudius"); lst.addItem("Gertrude"); lst.addItem("Polonius"); lst.addItem("Horatio"); lst.addItem("Laertes"); lst.addItem("Ophelia"); add(lst); } } Jos Antonio Garca Meja

270

BARRAS DE DESPLAZAMIENTO
Permiten seleccionar un valor entre un valor mximo y uno mnimo.

Scrollbar(). Scrollbar(int). Scrollbar(int,int,int,int)

Jos Antonio Garca Meja

271

BARRAS DE DESPLAZAMIENTO
import java.awt.*; public class SliderTest extends java.applet.Applet { Label l; public void init() { setLayout(new GridLayout(1,2)); l = new Label("0", Label.CENTER); add(l); add(new Scrollbar(Scrollbar.HORIZONTAL,0,0,1,100)); }
Jos Antonio Garca Meja 272

BARRAS DE DESPLAZAMIENTO
public Insets insets() { return new Insets(15,15,15,15); } public boolean handleEvent(Event evt) { if (evt.target instanceof Scrollbar) { int v = ((Scrollbar)evt.target).getValue(); l.setText(String.valueOf(v)); repaint(); return true; } else return false; } }
Jos Antonio Garca Meja 273

CANVAS
Es un componentes sobre el que se puede dibujar
Canvas can = new Canvas(); add(can);

Jos Antonio Garca Meja

274

MAS EVENTOS UI
Para eventos relacionados con las barras de desplazamiento y las listas desplazables, la nica manera de interceptar estos eventos es sobreponer handleEvent( )

Jos Antonio Garca Meja

275

EL AWT OFRECE
Ventanas. Mens. Cuadros de dilogo.

Jos Antonio Garca Meja

276

CLASE WINDOW DEL AWT

Jos Antonio Garca Meja

277

FRAMES
Permite crear una ventana funcional completa con una barra de mens.

Frame Frame(String)

Jos Antonio Garca Meja

278

UNA VENTANA POP-UP


1:import java.awt.*; 2: 3:public class PopupWindow extends java.applet.Applet { 4: Frame window; 5: 6: public void init() { 7: add(new Button("Open Window")); 8: add(new Button("Close Window")); 9: 10: window = new BaseFrame("A Popup Window"); 11: window.resize(150,150); 12: window.show(); 13: } Jos Antonio Garca Meja

279

UNA VENTANA POP-UP


15: public boolean action(Event evt, Object arg) { 16: if (evt.target instanceof Button) { 17: String label = (String)arg; 18: if (label.equals("Open Window")) { 19: if (!window.isShowing()) 20: window.show(); 21: } 22: else if (label.equals("Close Window")) { 23: if (window.isShowing()) 24: window.hide(); 25: } 26: return true; 27: } 28: else return false; 29: } Jos Antonio Garca Meja 280 30:}

LA CLASE BASEFRAME
1:import java.awt.*; 2: 3:class BaseFrame extends Frame { 4: String message = "This is a Window"; 5: 6: BaseFrame1(String title) { 7: super(title); 8: setFont(new Font("Helvetica", Font.BOLD, 12)); 9: } 10: 11: public void paint(Graphics g) { 12: g.drawString(message, 20, 20); 13: } 14:} Jos Antonio Garca Meja

281

CERRANDO LA VENTANA
Agregue el siguiente mtodo para poder cerrar la ventana
public boolean handleEvent(Event evt) { if (evt.id == Event.WINDOW_DESTROY) hide(); return super.handleEvent(evt); }

Jos Antonio Garca Meja

282

MENS Y BARRAS DE MENS

Jos Antonio Garca Meja

283

MENS Y BARRAS DE MENS


1:import java.awt.*; 2: 3:class BaseFrame2 extends Frame { 4: String message = "This is a Window"; 5: 6: BaseFrame2(String title) { 7: super(title); 8: setFont(new Font("Helvetica", Font.BOLD, 12)); 9:

Jos Antonio Garca Meja

284

MENS Y BARRAS DE MENS


10: MenuBar mb = new MenuBar(); 11: Menu m = new Menu("Colors"); 12: m.add(new MenuItem("Red")); 13: m.add(new MenuItem("Blue")); 14: m.add(new MenuItem("Green")); 15: m.add(new MenuItem("-")); 16: m.add(new CheckboxMenuItem("Reverse Text")); 17: mb.add(m); 18: setMenuBar(mb); 19: }

Jos Antonio Garca Meja

285

MENS Y BARRAS DE MENS


21: public boolean action(Event evt, Object arg) { 22: String label = (String)arg; 23: if (evt.target instanceof MenuItem) { 24: if (label.equals("Red")) setBackground(Color.red); 25: else if (label.equals("Blue")) setBackground(Color.blue); 26: else if (label.equals("Green")) setBackground(Color.green); 27: else if (label.equals("Reverse Text")) { 28: if (getForeground() == Color.black) { 29: setForeground(Color.white); 30: } else setForeground(Color.black); 31: } 32: repaint(); 33: return true; 34: } else return false; 35: }
Jos Antonio Garca Meja

286

MENS Y BARRAS DE MENS

37: public void paint(Graphics g) { 38: g.drawString(message, 20, 20); 39: } 40: 41: public boolean handleEvent(Event evt) { 42: if (evt.id == Event.WINDOW_DESTROY) hide(); 43: return super.handleEvent(evt); 44: } 45:}
Jos Antonio Garca Meja 287

DILOGOS
Tienen una funcin similar a los frames, sin embargo, estn destinados a emplearse como ventanas transitorias, ventanas que le permiten conocer advertencias, solicitan informacin especfica, etc.
Jos Antonio Garca Meja 288

DILOGOS
Para agregar un dilogo de texto en la clase BaseFrame, agregue :

TextDialog dl;

Jos Antonio Garca Meja

289

DILOGOS
Para agregar un dilogo de texto en la clase BaseFrame, agregue al constructor:
m.add(new CheckboxMenuItem("Reverse Text")); m.add(new MenuItem("Set Text..."));

Jos Antonio Garca Meja

290

DILOGOS
Para agregar un dilogo de texto en la clase BaseFrame, agregue al constructor:
dl = new TextDialog(this, "Enter Text", true); dl.resize(150,100);

Jos Antonio Garca Meja

291

DILOGOS
Para agregar un dilogo de texto en la clase BaseFrame, agregue al mtodo action():
else if (label.equals("Green")) setBackground(Color.green); else if (label.equals("Set Text...")) dl.show(); else if (label.equals("Reverse Text")) {

Jos Antonio Garca Meja

292

LA CLASE TextDialog( )
1:import java.awt.*; 2: 3:class TextDialog extends Dialog { 4: TextField tf; 5: BaseFrame3 theFrame;

Jos Antonio Garca Meja

293

LA CLASE TextDialog( )
7: TextDialog(Frame parent, String title, boolean modal) { 8: super(parent, title, modal); 9: 10: theFrame = (BaseFrame3)parent; 11: setLayout(new BorderLayout(10,10)); 12: setBackground(Color.white); 13: tf = new TextField(theFrame.message,20); 14: add("Center", tf); 15: add("South", new Button("OK")); 16: resize(150,75); 17: } Jos Antonio Garca Meja

294

LA CLASE TextDialog( )
19: 20: 21: 23: arg) { 24: 25: 26: 27: 28: 29: 30: 32: 33: 34: public Insets insets() { return new Insets(30,10,10,10); } public boolean action(Event evt, Object String label = (String)arg; if (evt.target instanceof Button) { if (label == "OK") { hide(); theFrame.message = tf.getText(); theFrame.repaint(); }} else return false; return true; }} Jos Antonio Garca Meja

295

DILOGOS DE ARCHIVO
Es un cuadro de dilogo bsico para abrir y (o) guardar archivos, el cual le permite tener acceso al sistema de archivos de la plataforma sobre la cual ejecuta la aplicacin Java.
Jos Antonio Garca Meja 296

DILOGOS DE ARCHIVO
FileDialog(Frame,String) FileDialog(Frame,String,int)

Jos Antonio Garca Meja

297

DILOGOS DE ARCHIVO
FileDialog fd = new FileDialog(this, "FileDialog"); fd.show();

Jos Antonio Garca Meja

298

JDBC
Creado por Hughes Technologies en Australia. DBMS light para UNIX accesible por Internet. Orientado a Intranets.

Jos Antonio Garca Meja

299

Java Networking
Java posee clases para la construccin de aplicaciones cliente-servidor

Jos Antonio Garca Meja

300

Java Networking
Las clases estn orientadas a utilizar los servicios que ofrece TCP/IP

Jos Antonio Garca Meja

301

Paquete
java.net.*;

Jos Antonio Garca Meja

302

TIPOS DE APLICACIONES
Socket API. URLs

Jos Antonio Garca Meja

303

SOCKETS
Interface de bajo nivel para comunicaciones en red

Jos Antonio Garca Meja

304

TIPOS DE SOCKETS
Orientados a la conexin (TCP). Sin conexin (UDP).

Jos Antonio Garca Meja

305

CLIENTES Y SERVIDORES
El cliente es quien inicia la conversin creando un socket.

Jos Antonio Garca Meja

306

CLIENTES Y SERVIDORES
El servidor se debe preparar para escuchar las comunicaciones entrantes
Jos Antonio Garca Meja 307

PROTOCOLOS
Es el conjunto de reglas que gobiernan el comportamiento de una red
Jos Antonio Garca Meja 308

TIPOS DE PROTOCOLOS
Telnet SMTP FTP HTTP
Jos Antonio Garca Meja 309

PROTOCOLO SMTP
HELO host.dominio.nombre MAIL FROM:usuario@direccion RCPTTO:usuario@direccion

Jos Antonio Garca Meja

310

PROTOCOLO SMTP
DATA (mensaje de correo) . QUIT
Jos Antonio Garca Meja 311

JDBC
Es una API de Java para ejecutar estatutos de SQL a prcticamente cualquier base de datos relacional.
Jos Antonio Garca Meja 312

JDBC
Provee una API estndar que posibilita la escritura de aplicaciones de base de datos utilizando Java
Jos Antonio Garca Meja 313

JDBC
Con Java y JDBC es posible publicar una pgina Web conteniendo applets que accedan a bases de datos
Jos Antonio Garca Meja 314

JDBC
Las empresas pueden continuar utilizando sus bases de datos instaladas y pueden acceder a informacin an si estn almacenadas en diferentes DBMS
Jos Antonio Garca Meja 315

Qu es lo que hace JDBC?


Establece una conexin con la base de datos. Enva estatutos SQL. Procesa los resultados.

Jos Antonio Garca Meja

316

Estableciendo conexin
Connection con = DriverManager.getConnect ion(jdbc:odbc:wombat,l ogin,password);

Jos Antonio Garca Meja

317

Enviando estatutos
Statement stmt=con.createStatement(); ResultSet rs=stmt.executeQuery(Select * fromTable);

Jos Antonio Garca Meja

318

Procesando resultados
while (rs.next()) { int x = getInt(1); String s = getString(2); }

Jos Antonio Garca Meja

319

JDBC vs. ODBC


ODBC utiliza una interfaz C. ODBC es difcil de usar desde otros lenguajes. ODBC utiliza apuntadores void* ODBC es difcil de aprender. ODBC puede trabajar con JDBC.
Jos Antonio Garca Meja 320

Modelos de 2 y 3 enlaces
JDBC soporta los modelos de 2 y 3 enlaces de base de datos.
Jos Antonio Garca Meja 321

Modelo de 2 enlaces

Jos Antonio Garca Meja

322

Modelo de 2 enlaces
La aplicacin o el applet habla directamente a la base de datos.
Jos Antonio Garca Meja 323

Modelo de 2 enlaces
Requiere un controlador JDBC que pueda comunicarse directamente con la base de datos.
Jos Antonio Garca Meja 324

Modelo de 2 enlaces
Los estatutos SQL son enviados a la base de datos y los resultados son regresados al usuario.
Jos Antonio Garca Meja 325

Modelo de 3 enlaces

Jos Antonio Garca Meja

326

Modelo de 3 enlaces
Los comandos son enviados a un enlace intermedio (middle-tier)

Jos Antonio Garca Meja

327

Modelo de 3 enlaces
El middle-tier enva los estatutos SQL a la base de datos

Jos Antonio Garca Meja

328

Modelo de 3 enlaces
La base de datos procesa los estatutos SQL y regresa los resultados al middletier
Jos Antonio Garca Meja 329

Modelo de 3 enlaces
El middle-tier regresa los resultados al usuario.

Jos Antonio Garca Meja

330

JavaSoft FrameWork El admnistrador de controladores JDBC. El suite de prueba de controladores JDBC. El bridge JDBC-ODBC
Jos Antonio Garca Meja 331

JavaSoft FrameWork

Jos Antonio Garca Meja

332

ABRIENDO UNA CONEXIN


String url=jdbc:odbc:db; Connection con = DriverManager.getConnection(url,lo gin,password);

Jos Antonio Garca Meja

333

JDBC URLs
Provee la forma de identificar una base de datos a fin de que el controlador apropiado la reconozca y establezca una conexin con la misma.
Jos Antonio Garca Meja 334

JDBC URLs
jdbc:<subprotocol>:<subname>

Jos Antonio Garca Meja

335

El subprotocolo ODBC
jdbc:odbc:<data-sourcename>[;<atribute-name>=<atributename>]*

Jos Antonio Garca Meja

336

Ejemplos ODBC
jdbc:odbc:qeor7 jdbc:odbc:wombat jdbc:odbc:wombat;CacheSize=20 jdbc:odbc:qeora;UID=kgh;PWD=fooey

Jos Antonio Garca Meja

337

DriverManager
Es una capa administradora que trabaja entre el usuario y los controladores
Jos Antonio Garca Meja 338

CARGANDO EL CONTROLADOR
Class.forName(acme.db .Driver);

Jos Antonio Garca Meja

339

CARGANDO EL CONTROLADOR
Se crea una instancia de la clase Driver. Se invoca al mtodo DriverManager.register Driver
Jos Antonio Garca Meja 340

Estableciendo la conexin
Class.forName(sun.jdbc.odbc.Jd bcOdbcDriver); String url=jdbc:odbc:fred; DriverManager.getConnection(url, login,passwd);

Jos Antonio Garca Meja

341

INTRODUCCIN A LA TECNOLOGA OOP

JAVA SESIN -15

Jos Antonio Garca Meja

342

OBJETIVO Conocer como enviar estatutos SQL a una base de datos desde JDBC

Jos Antonio Garca Meja

343

LA CLASE Statement Un objeto Statement se utiliza para enviar estatutos SQL a una base de datos

Jos Antonio Garca Meja

344

TIPOS DE OBJETOS Statement Statement PreparedStatement CallableStatement


Jos Antonio Garca Meja 345

OBJETOS Statement Ejecuta estatutos SQL simples sin parmetros

Jos Antonio Garca Meja

346

OBJETOS PreparedStatement Ejecuta estatutos SQL simples precompilados con o sin parmetros IN
Jos Antonio Garca Meja 347

OBJETOS CallableStatement Ejecuta una llamada a un procedimientos almacenado en la base de datos


Jos Antonio Garca Meja 348

CREANDO OBJETOS Statement


Connection con=DriverManager.getConnection(url, sunny,); Statement stmt = con.createStatement();

Jos Antonio Garca Meja

349

ENVIANDO ESTATUTOS SQL


ResultSet rs=stmt.executeQuery(Select a,b,c from Table);

Jos Antonio Garca Meja

350

MTODOS PARA EJECUTAR ESTATUTOS UTILIZANDO OBJETOS Statement


executeQuery executeUpdate execute
Jos Antonio Garca Meja 351

MTODO executeQuery
Est diseado para estatutos que producen un slo conjunto resultado. Por ej., SELECT

Jos Antonio Garca Meja

352

MTODO executeUpdate
Se utiliza para ejecutar : Estatutos INSERT, UPDATE, DELETE. Estatutos de DDL : CREATE TABLE, DROP TABLE.
Jos Antonio Garca Meja 353

MTODO executeUpdate
Para estatutos como CREATE TABLE o DROP TABLE el valor regresado es siempre 0

Jos Antonio Garca Meja

354

EJECUCIN CONSECUTIVA DE MTODOS Statement


Todos los mtodos para ejecutar estatutos Statement cierran el conjunto resultado actual, si existe uno abierto

Jos Antonio Garca Meja

355

LA CLASE ResultSet Contiene todos los renglones que han satisfecho las condiciones de un estatuto SQL
Jos Antonio Garca Meja 356

LA CLASE ResultSet Permite acceder a los datos en los renglones del resultado

Jos Antonio Garca Meja

357

LA CLASE ResultSet Permite acceder a los datos en los renglones del resultado

Jos Antonio Garca Meja

358

EJEMPLO
Statement stmt=con.createStatement( ); ResultSet r = stmt.executeQuery(Select a,b,c from Table1);

Jos Antonio Garca Meja

359

EJEMPLO
while (r.next()) { int i = r.getInt(a); String s=r.getString(b); float f=r.getFloat(c); }
Jos Antonio Garca Meja 360

RENGLONES
El OBJETO ResultSet mantiene un cursor al rengln de datos actual. Al inicio el cursor se coloca un rengln antes del primer rengln. El mtodo next() avanza el cursor.
Jos Antonio Garca Meja 361

COLUMNAS
Se accede a las columnas del rengln actual con los mtodos getXXX. Puede utilizarse el nmero o el nombre de la columna.

Jos Antonio Garca Meja

362

EJEMPLO COLUMNAS
String s = rs.getString(titulo); String s = rs.getString(2);

Jos Antonio Garca Meja

363

COLUMNAS

En el caso de QUERYs SELECT * no es posible usar los nombres de los campos

Jos Antonio Garca Meja

364

RESULTADOS NULL
Utilice el mtodo getXXX correspondiente. Utilice el mtodo ResultSet.wasNull

Jos Antonio Garca Meja

365

EL BRIDGE JDBC-ODBC Es posible utilizar un controlador Java Puro en lugar del controlador y bridge JDBC-ODBC
Jos Antonio Garca Meja 366

JDBC PURO vs JDBCODBC Esto elimina la configuracin necesaria en el cliente requerida por ODBC

Jos Antonio Garca Meja

367

JDBC PURO vs JDBCODBC Elimina el error potencial de que la JVM se corrompa por errores en el cdigo nativo del Bridge
Jos Antonio Garca Meja 368

QU ES EL BRIDGE JDBC-ODBC? Es un controlador JDBC que implementa las operaciones JDBC traducindolas en operaciones ODBC
Jos Antonio Garca Meja 369

QU ES EL BRIDGE JDBC-ODBC? Para ODBC se muestra como un programa de aplicacin normal.


Jos Antonio Garca Meja 370

QU ES EL BRIDGE JDBC-ODBC? El Bridge implementa JDBC para cualquier base de datos para la cual exista un controlador ODBC
Jos Antonio Garca Meja 371

QU ES EL BRIDGE JDBC-ODBC? Es implementado en el paquete sun.jdbc.odbc

Jos Antonio Garca Meja

372

VERSIN DE ODBC SOPORTADA

ODBC 2.x

Jos Antonio Garca Meja

373

USANDO EL BRIDGE

Class.forName(sun.jdbc.odbc. JdbcOdbcDriver);

Jos Antonio Garca Meja

374

DRIVERS ODBC QUE FUNCIONAN CON EL BRIDGE

Oracle, Sybase, Informix, Microsoft SQL Server, Ingres, xBASE, Access

Jos Antonio Garca Meja

375

DEBUGGING

java.sql.DriverManager.setLog Stream(System.out);

Jos Antonio Garca Meja

376

You might also like