Professional Documents
Culture Documents
Objetivo
Conocer los principios de la POO y aplicarlos en el lenguaje Java
Caractersticas
Abstraccin Encapsulamiento Herencia Polimorfismo Explicar con ejemplos prcticos
Abstraccin
ELIMINAR LO IRRELEVANTE Y AMPLIFICAR LO ESENCIAL
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
Abstraccin Modelo
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.
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.
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
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.
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.
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
17
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
19
21
Caractersticas de Java
Simple. Orientado a objetos. Distribuido Robusto. Arquitectura neutral.
Jos Antonio Garca Meja 22
23
24
Programas en Java
25
Caractersticas de Java
Seguro. Portable Interpretado. Multihilos. Dinmico.
Jos Antonio Garca Meja 26
28
29
Instalacin de Java
31
Aplicaciones.- Los programas se ejecutan en consolas Applet.- Los programas se ejecutan en un browser o navegador de la Web
32
Compilacin en Java
javac HelloWorld.java
34
java HelloWorld
35
37
38
39
Mtodos y atributos
Cada clase que escribe en Java est formada por dos componentes: atributos y comportamiento
40
Atributos
Son las caractersticas individuales, que diferencian a un objeto de otro, y determinan la apariencia, estado u otras cualidades de ese objeto.
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
42
Mtodos
Se establece a travs de un conjunto de funciones, llamados mtodos, definidas dentro de las clases.
43
44
Agregando atributos
String make; String color; boolean engineState = false;
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."); }
47
48
Herencia (1)
Permite la creacin de nuevas clases a partir de clases existentes, definiendo solamente las diferencias existentes entre ambas.
51
Herencia (2)
Clase A
Clase B
Clase C
Clase D
Clase E
52
Subclasificacin
Crear una nueva clase que heredar atributos y mtodos de alguna otra clase en la jerarqua.
53
Vehiculo
VehiculoPersonal
VehiculoGrupo
54
Vehiculo
Vehiculo_Dos_Llantas
Vehiculo_Cuatro_Llantas
Moto
Automovil
Camion
55
56
57
Java solo contempla la herencia simple, pero se puede simular la herencia mltiple
58
Modificadores de acceso
public protected private friendly
59
62
63
Tipos de variables
Variables de instancia. Variables de clase. Variables locales.
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
66
Tipos de constantes
Nmero String char boolean long
67
Operadores
+,-,*,/ +=, -=, *=, /= ++,-==, !=, <, >, <=, >=
68
69
70
71
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
75
Variables de clase
class FamilyMember { static String surname = Johnson; String name; int age; }
76
Mtodos de instancia
77
Mtodos de clase
Clase.myMetod(); String.valueOf(5);
78
(typename) value
79
Cast de objetos
(classname) object GreenApple a; Apple a2; a = new GreenApple(); a2 = (Apple) a;
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)
81
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: }
83
"foo" instanceof String // true Point pt = new Point(10, 10); pt instanceof String // false
84
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.
86
Declaracin de arreglos
88
89
myArray[subscript]
90
Arreglos multidimensionales
int coords[ ][ ] = new int[12][12]; coords[0][0] = 1; coords[0][1] = 2;
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");
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.");
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."); }
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; }
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; }
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("]");
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
104
105
106
107
Definicin de Clases
class MyClassName { ... }
109
Herencia
class myClassName extends mySuperClassName { ... }
110
Constantes
final float pi = 3.141592; final boolean debug = false; final int maxsize = 40000;
111
Variables de clase
static int sum; static final int maxObjects = 10;
112
Mtodos
returntype methodname(type1 arg1, type2 arg2, type3 arg3..) { ... }
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:
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: }
115
116
117
Mtodos constructores Es una clase especial de mtodo que determina como se inicializa un objeto cuando se crea.
118
Constructores bsicos
Siempre tienen el mismo nombre de la clase. No tiene un tipo de retorno (return)
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
121
122
124
126
11: public static void main(String args[]) { 12: PrintSubClass2 obj = new PrintSubClass2(); 13: obj.printMe(); 14: } 15: }
128
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: }
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
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.
133
Creando Applets
public class myClass extends java.applet.Applet { ... }
134
135
Inicializacin
public void init() { ... }
136
Arranque
public void start() { ... }
137
Detencin
public void stop() { ... }
138
Destruccin
public void destroy() { ... }
139
Dibujo
public void paint(Graphics g) { ... }
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: }
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>
143
Resultado
144
147
148
Resultado
149
La clase Graphics
import java.awt.Graphics; public class MyClass extends java.applet.Applet { ... }
150
El sistema coordenado
151
Lneas
import java.awt.Graphics; public class MyLine extends java.applet.Applet { public void paint(Graphics g) { g.drawLine(25,25,75,75); } }
152
Resultado
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); } }
154
Resultado
155
Rectngulos redondeados
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); } }
157
Resultado
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); } }
159
Resultado
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
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); } }
163
Resultado
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
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);
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);
169
Texto y fuentes
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:}
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);
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); }
174
Resultado
175
Hilos
Son una secuencia de ejecucin independiente de otras secuencias de ejecucin o hilos que pudieran existir.
176
177
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.
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")
185
Desplegando Imgenes
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:}
188
El Applet Ladybug
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: }
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);
192
EL APPLET neko
193
Eventos
Es la manera en la cual el AWT le comunica a usted y a otros componentes Java AWT que algo ha sucedido
194
195
196
mouseDown()
197
mouseUp()
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
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 .... }
203
mouseMove().
204
mouseDrag()
205
mouseMove()
206
mouseEnter().
mouseExit().
207
mouseEnter()
208
mouseExit()
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(); }
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
215
216
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;
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: }
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;
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: }
222
223
224
225
226
OBJETIVO
Conocer los elementos fundamentales para el manejo del AWT en Java
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.
229
COMPONENTES AWT
230
PRINCIPALES COMPONENTES
Contenedores. Lienzos. Componentes UI. Componentes de construccin de ventana.
231
232
COMPONENTES BSICOS DE LA UI
public void init() { Button b = new Button("OK"); add(b); }
233
ETIQUETAS
Son cadenas de texto que puede usar para etiquetar otros componentes Label() Label(String) Label(String,int)
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).
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")); } }
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
238
CASILLAS DE VERIFICACIN
Checbox( ). Checbox(String). Checbox(String, null, boolean).
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.
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
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).
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);
246
ADMINISTRADORES DE DISEO
Determina la forma en la cual los componentes AWT se muestran en la pantalla.
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
251
253
254
256
257
258
259
260
261
262
263
264
265
OTROS COMPONENTES UI
reas de texto. Listas desplazables. Barras de desplazamiento. Deslizadores.
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).
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.
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);
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( )
275
EL AWT OFRECE
Ventanas. Mens. Cuadros de dilogo.
276
277
FRAMES
Permite crear una ventana funcional completa con una barra de mens.
Frame Frame(String)
278
279
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); }
282
283
284
285
286
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;
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..."));
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);
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")) {
292
LA CLASE TextDialog( )
1:import java.awt.*; 2: 3:class TextDialog extends Dialog { 4: TextField tf; 5: BaseFrame3 theFrame;
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)
297
DILOGOS DE ARCHIVO
FileDialog fd = new FileDialog(this, "FileDialog"); fd.show();
298
JDBC
Creado por Hughes Technologies en Australia. DBMS light para UNIX accesible por Internet. Orientado a Intranets.
299
Java Networking
Java posee clases para la construccin de aplicaciones cliente-servidor
300
Java Networking
Las clases estn orientadas a utilizar los servicios que ofrece TCP/IP
301
Paquete
java.net.*;
302
TIPOS DE APLICACIONES
Socket API. URLs
303
SOCKETS
Interface de bajo nivel para comunicaciones en red
304
TIPOS DE SOCKETS
Orientados a la conexin (TCP). Sin conexin (UDP).
305
CLIENTES Y SERVIDORES
El cliente es quien inicia la conversin creando un socket.
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
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
316
Estableciendo conexin
Connection con = DriverManager.getConnect ion(jdbc:odbc:wombat,l ogin,password);
317
Enviando estatutos
Statement stmt=con.createStatement(); ResultSet rs=stmt.executeQuery(Select * fromTable);
318
Procesando resultados
while (rs.next()) { int x = getInt(1); String s = getString(2); }
319
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
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
326
Modelo de 3 enlaces
Los comandos son enviados a un enlace intermedio (middle-tier)
327
Modelo de 3 enlaces
El middle-tier enva los estatutos SQL a la base de datos
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.
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
332
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>
335
El subprotocolo ODBC
jdbc:odbc:<data-sourcename>[;<atribute-name>=<atributename>]*
336
Ejemplos ODBC
jdbc:odbc:qeor7 jdbc:odbc:wombat jdbc:odbc:wombat;CacheSize=20 jdbc:odbc:qeora;UID=kgh;PWD=fooey
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);
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);
341
342
OBJETIVO Conocer como enviar estatutos SQL a una base de datos desde JDBC
343
LA CLASE Statement Un objeto Statement se utiliza para enviar estatutos SQL a una base de datos
344
346
OBJETOS PreparedStatement Ejecuta estatutos SQL simples precompilados con o sin parmetros IN
Jos Antonio Garca Meja 347
349
350
MTODO executeQuery
Est diseado para estatutos que producen un slo conjunto resultado. Por ej., SELECT
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
354
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
357
LA CLASE ResultSet Permite acceder a los datos en los renglones del resultado
358
EJEMPLO
Statement stmt=con.createStatement( ); ResultSet r = stmt.executeQuery(Select a,b,c from Table1);
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.
362
EJEMPLO COLUMNAS
String s = rs.getString(titulo); String s = rs.getString(2);
363
COLUMNAS
364
RESULTADOS NULL
Utilice el mtodo getXXX correspondiente. Utilice el mtodo ResultSet.wasNull
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
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? El Bridge implementa JDBC para cualquier base de datos para la cual exista un controlador ODBC
Jos Antonio Garca Meja 371
372
ODBC 2.x
373
USANDO EL BRIDGE
Class.forName(sun.jdbc.odbc. JdbcOdbcDriver);
374
375
DEBUGGING
java.sql.DriverManager.setLog Stream(System.out);
376