Академический Документы
Профессиональный Документы
Культура Документы
UNIVERSIDAD TÉCNICA
PARTICULAR DE LOJA
La Universidad Católica de Loja
APRENDIENDO
JAVA
GUíA DIDÁCTICA VIRTUAL
CURSO ONLINE
INTRODUCCIÓN
El desarrollo del curso se realiza en base a los siguientes capítulos los cuales
se describen en forma breve a continuación:
OBJETIVOS
Objetivos Generales
CONTENIDOS
PRIMER MES
SEGUNDO MES
ANEXOS
GLOSARIO
Programación en Java - vii
BIBLIOGRAFÍA
Libro básico
Bibliografía complementaria
Este libro tiene dos aspectos muy importantes: por un lado la parte teórica
es muy explicativa en cuanto al lenguaje Java y en cuanto a la
Programación Orientada a Objetos y por otro lado dispone de ejercicios
desarrollados que complementan muy bien los contenidos del texto.
Igualmente dispone de una serie de ejercicios propuestos que le ayudan
al estudiante a aplicar los conocimientos adquiridos.
Sitios de Internet
http://java.sun.com/
http://javaboutique.internet.com/
http://www.developer.com/java/
http://www.java.com/en/index.jsp
http://java.programacion.net/
http://usuarios.lycos.es/froufe/
http://www.juegosjava.com/
http://www.microjavacenter.com/
Programación en Java - 1
PRIMER MES
Programación en Java - 2
Objetivos
1
Texto tomado del libro programación con JAVA de Decker Hirshfield, pagina 1
Programación en Java - 4
Como nos podemos dar cuenta, programar en java es una tarea relativamente
sencilla sobre todo si ya tienes conocimientos sobre Programación orientada a
objetos y programación en el lenguaje “C” puesto que las instrucciones son
muy similares. Adicionalmente a las características existen otras tales como:
Una vez finalizada la instalación se crea una estructura tal como indico a
continuación.
Programación en Java - 5
Estas utilidades deben ser accesibles desde cualquier directorio en el cual esté
desarrollando las aplicaciones, esto se logra indicándole al Sistema Operativo
en dónde buscar dichas utilidades; la variable de entorno PATH debe tener la
ubicación exacta del directorio “bin” en el cual están dichas utilidades:
Programación en Java - 6
// Average.java //
Programación en Java - 8
En Java todo texto que inicie con: // significa que es un comentario, igualmente
el texto que este entre /* y */ también será interpretado como comentario.
class Average {
double a = ( i + j ) / 2.0;
i EJERCICIOS PROPUESTOS
Objetivos
2.2 Clases
2.3 Objetos
En la sección 2.1 ya hemos revisado lo que son los objetos y sobre todo como
están estructurados.
2.5 Métodos
2.6 Mensaje
avión.elevarse(200);
2.8 Herencia
i EJERCICIOS PROPUESTOS
Objetivos
Algo muy importante que debe tener en cuenta es la definición del método
principal “public static void main(String[] parametros)” ya que
la secuencia de instrucciones del programa se inicia en este.
/* Declaracion de atributos */
tipo_atributo nombre_atributo1, nombre_atributo2;
tipo_atributo nombre_atributo3, nombre_atributo4;
/* Declaración de métodos */
tipo_dato nombre_metodo1(tipo_dato parametro) {
/*Cuerpo del método*/
. . . . . . . . . . . . . .
}
Recuerde el primer ejercicio en la sección 1.6 del primer capítulo, podrá darse
cuenta que éste no tiene declarados atributos y tiene implementado solo un
método; el main(String[] param).
En Java los datos primitivos son: enteros(byte, short, int, long, char) y
reales(float, double); así mismo se tiene los de tipo “String” y “boolean”.
Programación en Java - 17
El tipo de dato que devuelve el método o de los argumentos que este recibe
puede ser cualquiera de los anteriormente estudiados o void; en la
implementación del cuerpo del método pueden haber declaraciones de
variables, en este caso éstas son variables que tienen un alcance únicamente
para el método y no a toda la clase como el caso de los atributos.
Recuerda que debes leer del libro básico las páginas indicadas para entender
claramente la sintaxis de las estructuras de control las mismas que son:
while, if...else, for, do...while, switch.
Nombre_clase nombre_objeto;
nombre_objeto = new Nombre_clase();
ó
Nombre_clase nombre_objeto = new Nombre_clase();
Nombre_objeto.atributo
Nombre_objeto.metodo()
3.7 Constructores.
¾ Todas las clases que se definen en Java tienen un constructor por defecto
el mismo que no tiene parámetros y se ejecuta cada vez que se crea un
objeto de esta clase.
¾ El nombre del/los constructores es exactamente el mismo nombre de la
clase.
¾ Los constructores nunca devuelven ningún valor(int, float, double, etc.),
inclusive no se definen ni como “void”, y tampoco puede tener algún
modificador(final, static, etc.).
¾ Una clase puede tener varios constructores, como ya indique
anteriormente con el mismo nombre de la clase, pero difieren en cuanto al
tipo y cantidad de parámetros que estos reciben.
¾ Cuando se quiere ejecutar un constructor desde una línea de código del
objeto, se lo puede hacer directamente mediante su nombre o a través de
la palabra reservada “this()”, en este caso esta línea deberá ser la
primera de ese método.
¾ El constructor que se ejecuta al momento de crear el objeto se lo
especifica en la instrucción “new Nombre_clase(param1, param2,.
. . );”
¾ El constructor por defecto que tienen todas las clases, es reemplazado o
desaparece cuando se declara explícitamente un constructor.
tipo[] nombre;
tipo nombre[];
la declaración y creación del arreglo puede ser al igual que el resto de objetos
en una sola línea:
1 class Suma {
2 public static void main(String[] param) {
3 int s;
4 if (param.length < 2) {
5 System.out.println("No existen parámetros");
6 }
7 else {
8 String a = param[0], b = param[1];
9 s = Integer.parseInt(a) + Integer.parseInt(b);
10 System.out.println("La suma es: " + s);
11 }
12 }
13 }
Programación en Java - 21
float f = 3.1416F;
int i = (int)f;
En la sección 3.7 hablé sobre los constructores y mencioné que una clase
puede tener varios constructores, estos difieren el uno del otro por el tipo y
cantidad de parámetros que reciben, lo mismo ocurre con los otros métodos de
la clase, es decir, se puede tener declarados varios métodos con el mismo
nombre los cuales igualmente pueden diferir por el tipo y cantidad de
parámetros, los métodos también se pueden diferenciar por el tipo de dato que
estos devuelven lo cual no ocurre con los constructores ya que estos últimos
nunca devuelvan valor alguno como ya lo comente en la sección 3.7. A esta
propiedad de poder declarar varios métodos con el mismo nombre le
denominamos sobrecarga. A continuación presento un ejemplo de métodos
sobrecargados.
6
7 double calculo_de_recargo(double costo) {
8 double total;
9 total = costo + (costo * 12 / 100);
10 return total;
11 }
12
13 double calculo_de_recargo(double costo, double incremento) {
14 return costo + incremento;
15 }
Lea la sección: 8.9 Manejo de Error y Excepción; en las páginas 258 – 263
del libro básico
. . . . .
. . . . .
}
catch (TipoExcepcion e2) {
. . . . .
. . . . .
}
¾ El uso de la instrucción: throws
Revisemos el siguiente código para tener una visión más clara del control de
Excepciones.
1 class Numeros {
2 String texto;
3 int numero;
4 int den = 0;
5 int result;
6
7 public Numeros(String texto) {
8 this.texto = texto;
9 }
10
11 void dividir() {
12 try {
13 numero = Integer.parseInt(texto);
14 result = numero/den;
15 }
16 catch (ArithmeticException e1) {
17 System.out.println("Ha ocurrido un error del
18 Î tipo: " + e1.toString());
19 result = -1;
20 }
21 catch (NumberFormatException e2) {
22 System.out.println("Error el texto ingresado
23 Î tiene espacios");
24 }
25 }
26 }
27
28 public class Excepciones {
29 public static void main(String[] args) {
30 Numeros obj = new Numeros("124 ");
Programación en Java - 24
31 obj.dividir();
32 System.out.println("El resultado de la división es: "
33 Î + obj.result);
34 }
35 }
¾ Las líneas 13 y 14 están dentro del bloque try, esto significa que al
ejecutarse las mismas podrían producir errores.
1 class Numeros2 {
2 String texto;
3 int numero;
4 int den = 0;
5 int result;
6
7 public Numeros2(String texto) {
8 this.texto = texto;
9 }
10
11 void dividir() throws ArithmeticException,
12 Î NumberFormatException {
13 numero = Integer.parseInt(texto);
14 result = numero/den;
15 }
16 }
17
18 public class Excepciones2 {
19 public static void main(String[] args) {
20 Numeros2 obj = new Numeros2("124 ");
21 try {
22 obj.dividir();
23 }
Programación en Java - 25
24 catch (ArithmeticException e) {
25 System.out.println("Ha ocurrido un Error del
26 Î tipo: " + e.toString());
27 }
28 catch (NumberFormatException e2) {
29 System.out.println("Error el texto ingresado
30 Î tiene espacios");
31 }
32
33 System.out.println("El resultado de la división es: "
34 Î + obj.result);
35 }
36 }
Finalmente vale la pena indicar que las excepciones pueden ser explicitas; si
da un error indicando que se deben atrapar dichas Excepciones al momento
de compilar; o pueden ser implícitas si da el error únicamente cuando estas
ocurren es decir al momento de su ejecución.
i EJERCICIOS PROPUESTOS
1 class Operaciones {
2 int a,b;
3 void asignar(int a1, int b1){
4 a = a1;
5 b = b1;
6 }
7 void sumar() {
8 int s;
9 s = a + b;
10 System.out.println("La suma es: " + s);
11 }
12 int producto() {
Programación en Java - 26
13 int p = a * b;
14 return p;
15 }
16 public static void main(String[] args){
17 Operaciones calculo1 = new Operaciones();
18 calculo1.asignar(5,3);
19 calculo1.sumar();
20 System.out.println("El producto es: " +
21 Î calculo1.producto());
22 }
23 }
1 Void resta() {
2 Int r;
3 R = a - B
4 System.out.write("La resta es: " + r );
5 }
Objetivos
Una de las grandes ventajas que presenta el lenguaje es que tiene una gran
cantidad de clases desarrolladas(API de Java); estas clases están organizadas
en una estructura en la cual existe una clase raíz. Esta jerarquía de clases en
POO se llama herencia; es decir todas las clases en Java incluyendo aquellas
definidas o creadas por nosotros heredan de esta raíz la misma que es la clase
Object, consecuentemente los atributos y métodos de esta clase(Object) están
disponibles en todas las clases del Lenguaje.
import java.awt.Frame;
import java.awt.*;
Programación en Java - 30
import java.lang.*;
Crear un objeto de una clase significa crear una instancia de esa clase. Por
otra parte cuando se crea un objeto, este se crea con los atributos y métodos
de la clase; pero ¿Qué son los atributos o métodos de instancia o de clase?;
esto lo explicaré con el siguiente ejemplo: si recordamos la aplicación
“Ventanas” del capitulo 3 la cual permitía crear objetos de dicha clase,
recuerde el atributo “titulo” con el que cualquier objeto creado a partir de esta
clase podía tener un titulo diferente, por Ejemplo: “Mi Pc”, “Mis
Documentos”, etc. es decir se creó un atributo para cada objeto puesto que el
Programación en Java - 31
MiPc.color_fondo = “Azul”;
Ventanas.color_fondo = “Azul”;
Con esto queda claro que el valor de este atributo será el mismo para todos los
objetos de la clase.
Lea la sección: 8.2 Clases de envoltura de Java ; en las paginas 240 y 241
del libro básico.
Las posibilidades de trabajo con los tipos de datos primitivos(byte, short, int,
long, char, float, double, boolean) se ven ampliamente beneficiadas con el uso
de las respectivas clases que los encapsulan. Esta clases contienen métodos
que convierten un datos numérico a “String” y viceversa. Estas clases están
implementadas en el paquete “java.lang”.
1 class Datos {
2 public static void main(String[] param) {
3 int num;
4 String str;
5 num = Integer.parseInt("128") + 20;
6 str = Integer.toString(35) + "20";
7 System.out.println("Suma: " + num );
8 System.out.println("Concatenación: " + str);
9 }
10 }
Programación en Java - 32
Esta claro que en Java todo se construye en base a objetos, por lo tanto
cuando usted declara una variable de tipo “String” en realidad lo que esta
creando es un objeto de este tipo(String), estos objetos son algo especiales ya
que no necesitan del operador “new” para instanciarse. Adicionalmente toda
cadena en Java por ejemplo “abcd” es igualmente un objeto, esto quiere decir
que se puede acceder a todos sus métodos; esto lo veremos a continuación en
nuestro próximo taller de Programación.
i EJERCICIOS PROPUESTOS
SEGUNDO MES
Programación en Java - 38
Objetivos
¾ javax.swing.event
¾ javax.swing.filechooser
¾ javax.swing.table
Programación en Java - 39
¾ javax.swing.text
¾ javax.swing.tree
Los objetos contenedores son objetos sobre los cuales se puede colocar otros
objetos como botones, etiquetas, listas, cajas de texto(TextField), etc. Un
contenedor es una especie de plataforma sobre la que descansan los otros
objetos o componentes. “JPanel”, “JFrame”,“JApplet”,“JWindow”, entre otros
son ejemplos de contenedores.
1 import javax.swing.*;
2 import java.awt.*;
3
4 class Distribucion extends JFrame {
5 Container intermedio = new Container();
6 GridLayout admin = new GridLayout(2, 2, 25, 15);
7 JButton primero = new JButton("Primero");
8 JButton segundo = new JButton("Segundo");
Programación en Java - 41
2. Cada manejador de eventos se debe asociar con el objeto que recibirá los
eventos utilizando un método especifico:
someComponent.addWindowListener(instanceOfMyClass);
5.5 Applets
1 <html>
2 <head>
3 <title>Applet con Swing</title>
4 </head>
5 <body>
6 <applet code="MiApplet.class" width=330 height=300>
7 <param name=param_1 value="Lista de Clientes">
8 </applet>
9 </body>
10 </html>
Appletviewer pagina_Web.html
Vale la pena recalcar que esta utilidad se ejecuta en base al archivo html que
contiene el Applet y no en base al archivo de clase tal como lo hace la utilidad
“java” en la aplicaciones.
Para recoger los valores enviados desde la página Web al Applet, se utiliza el
método “getParameter(String nombre)” el mismo que recibe el nombre del
parámetro indicado en la etiqueta <APPLET> de la pagina Web
i EJERCICIOS PROPUESTOS
HILOS EN JAVA
El lenguaje Java permite desarrollar aplicaciones que ejecuten diferentes
procesos en forma simultánea; imagine un servidor Web el mismo que debe
atender diferentes solicitudes por parte de varios clientes(Browser),
naturalmente no se atienden estas solicitudes una por una, es decir
manteniendo en cola de espera el resto de peticiones; para cada solicitud se
debe lanzar un hilo diferente en este caso se tendrán varios hilos trabajando en
forma simultanea. Es importante aclarar que en sistemas con un solo
procesador no existe el multiprocesamiento, lo que hace el sistema es asignar
a cada hilo un tiempo de uso de la CPU lo cual da la impresión que los
procesos son simultáneos.
Objetivos
A continuación presento los pasos a seguir para implementar Hilos sin que esté
derivada de “Thread”.
1. “El Objeto debe ser de una clase que implemente la interfaz Runnable, ya
que es esta la que soporta el método run.
2. Sobrescribir el método run con las sentencias que tiene que ejecutar el
hilo.
3. Crear un objeto de esa clase.
4. Crear un objeto de la clase Thread pasando como argumento al
constructor, el objeto cuya clase incluye el método run.
5. Invocar al método start del objeto Thread”2 .
2
Texto tomado del libro JAVA 2 – Curso de programación de Fco. Javier Cevallos, pagina 641
Programación en Java - 51
i EJERCICIOS PROPUESTOS
3
Texto tomado del libro JAVA 2 – Curso de programación de Fco. Javier Cevallos, pagina 636
Programación en Java - 52
Objetivos
Lea las secciones: 8.6, 8.7 y 8.8 sobre Flujos de Entrada/Salida; en las
páginas 246 – 257 del libro básico
Como en Java todo se maneja en base a objetos y clases; los flujos no son la
excepción, en realidad un flujo es un objeto que se encuentra en un punto
intermedio entre nuestra aplicación y el punto de origen o destino de la
información; esto se puede entender mediante la siguiente ilustración:
Programación en Java - 53
1 import java.io.*;
2
3 class Flujos {
4 InputStream teclado = System.in;
5 PrintStream pantalla = System.out;
6 String texto = "";
7
8 void leer() throws IOException {
9 int letra;
10 pantalla.print("Ingrese el texto: ");
11 do {
12 letra = teclado.read();
13 texto = texto + (char)letra;
14 } while (letra != '\n' );
15 teclado.close();
16 }
17
18 void escribir() {
19 pantalla.println("El texto ingresado es: " + texto);
20 pantalla.close();
21 }
22
23 public static void main(String[] args) {
24 Flujos datos = new Flujos();
25 try {
26 datos.leer();
27 }
28 catch(IOException ioe) {}
29 datos.escribir();
30 }
31 }
Los algoritmos para leer y escribir datos son siempre más o menos los
mismos:4
4
Texto tomado del libro JAVA 2 – Curso de programación de Fco. Javier Cevallos, pagina 92
Programación en Java - 54
Leer Escribir
Abrir un flujo desde un origen Abrir un flujo hacia un destino
Mientras haya información Mientras haya información
Leer información Escribir información
Cerrar el flujo Cerrar el flujo
El objeto teclado dispone del método read para leer información; mientras que
el objeto pantalla dispone del método println para enviar información al
destino, en este caso el monitor.
Tal como indiqué en el párrafo anterior se debe tener en cuenta el tipo de dato
que se va ha escribir o leer del archivo:
¾ Flujos de bytes
¾ Flujos de caracteres
¾ Flujos de datos primitivos
Estas clases se utilizan para grabar o leer datos de tipo byte; a continuación
presento el código necesario para escribir datos en un archivo utilizando la
clase FileOutputStream
Programación en Java - 56
1 import java.io.*;
2
3 class EscribirBytes {
4 FileOutputStream datosOut = null;
5 byte[] datos = new byte[72];
6 int nbytes;
7
8 EscribirBytes() {
9 try {
10 System.out.print("Escriba el texto: ");
11 nbytes = System.in.read(datos);
12 datosOut = new FileOutputStream("Datos.txt",
13 Î false);
14 datosOut.write(datos, 0, nbytes - 2);
15 datosOut.close();
16 }
17 catch(IOException e) {
18 System.out.println("Error: " + e.toString());
19 }
20 }
21
22 public static void main(String[] args) {
23 new EscribirBytes();
24 }
25 }
1 import java.io.*;
2
3 class LeerBytes {
4 FileInputStream datosIn = null;
5 byte[] datos = new byte[72];
6 int nbytes;
7
8 LeerBytes() {
9 try {
Programación en Java - 57
i EJERCICIOS PROPUESTOS
ANEXOS
Programación en Java - 60
Taller de Programación # 1
Planteamiento de la aplicación
1 /* Archivo: Ventanas.java */
2 /* Fecha: 13 de Julio 2003 */
3 /* Autor: Guido Riofrio */
4
5 class Ventanas {
6
7 // Declaración de atributos
8 String titulo, direccion;
9 int ancho, alto;
10 int posicion_X, posicion_Y;
11 int estado;
12 static String color_fondo = "Blanco";
13
14 // Implementación del método crear_ventana
15 void crear_ventana(String p_titulo, int posicion_X, int
16 Î posicion_Y, int ancho, int alto, int estado) {
17 titulo = p_titulo;
18 this.posicion_X = posicion_X;
19 this.posicion_Y = posicion_Y;
20 this.ancho = ancho;
21 this.alto = alto;
22 this.estado = estado;
23 }
24
25 // Implementación del método mover
26 void mover(int dX, int dY){
27 posicion_X = posicion_X + dX;
28 posicion_Y = posicion_Y + dY;
29 }
30
31 // Implementación del método cambiar_tamaño
32 void cambiar_tamaño(int ancho1, int alto){
33 ancho = ancho + ancho1;
34 this.alto = this.alto + alto;
35 }
36
37 // Implementación del método presentar_informacion
38 void presentar_informacion(){
39 System.out.println("El titulo de la ventana es: " +
40 Î titulo);
41 System.out.println("La posición es: X = " + posicion_X
42 Î + ", Y = " + posicion_Y);
Programación en Java - 61
Análisis de la aplicación
Resultados de la aplicación.
Taller de Programación # 2
Planteamiento de la aplicación
1 /* Archivo: Basicas.java */
2 /* Fecha: 23 de Julio 2003 */
3 /* Autor: Guido Riofrio */
4
5 // Implementación de la clase Parrafos
6 class Parrafos {
7 String texto;
8 String tipo_letra;
9 int tamaño_letra;
10
11 Parrafos(String texto, String tipo_letra, int tamaño_letra)
12 Î {
13 this.texto = texto;
14 this.tipo_letra = tipo_letra;
15 this.tamaño_letra = tamaño_letra;
16 }
17
18 String insertar(int posicion, String texto_nuevo) {
19 String txt1, txt2;
20 txt1 = texto.substring(0, posicion);
21 txt2 = texto.substring(posicion, texto.length());
22 texto = txt1 + texto_nuevo + txt2;
23 return texto;
24 }
25
26 void eliminar(int pos_inicio, int pos_fin) {
27 String txt1, txt2;
28 txt1 = texto.substring(0, pos_inicio);
29 txt2 = texto.substring(pos_fin, texto.length());
30 texto = txt1 + txt2;
31 }
32
33 int eliminar(String txt_out) {
34 int indice;
35 indice = texto.indexOf(txt_out);
36 if (indice != -1)
Programación en Java - 64
Análisis de la aplicación
Resultados de la aplicación.
Programación en Java - 67
Taller de Programación # 3
Planteamiento de la aplicación
1 /* Archivo: Matematicas.java */
2 /* Fecha: 24 de Julio 2003 */
3 /* Autor: Guido Riofrio */
4
5 import javax.swing.*;
6 import java.awt.*;
7
8 class Matematicas extends JFrame {
9 String[] columnas = {"Función de Java", "Operación",
10 Î "Resultado"};
11 Object[][] datos = {
12 Î {"abs(-12.56)", "Valor absoluto de un número", new
13 Î Double(Math.abs(-12.56))},
14 {"cos(Math.PI)", "Coseno de un ángulo dado en
15 Î Radianes", new Double(Math.cos(Math.PI))},
16 {"log(5)", "Logaritmo de un número", new
17 Î Double(Math.log(5))},
18 {"max(12, 56)", "El valor máximo de dos cantidades",
19 Î new Integer(Math.max(12,56))},
20 {"pow(4, 3)", "Potenciación", new
21 Î Double(Math.pow(4,3))},
22 {"random()", "Numeros Aleatorios", new
23 Î Double(Math.random())},
24 {"round(19.8)", "Redondeo de una cantidad", new
25 Î Double(Math.round(19.8))},
26 {"sqrt(81)", "Raíz cuadrada", new
27 Î Double(Math.sqrt(81))},
28 {"toDegrees(Math.PI)","Angulo de Radianes a grados",
29 Î new Double(Math.toDegrees(Math.PI))},
30 {"toRadians(180)", "Angulo de Grados a Radianes", new
31 Î Double(Math.toRadians(180))}};
32 JTable tabla = new JTable(datos,columnas);
33 JScrollPane scrollPane = new JScrollPane(tabla);
34
35 Matematicas() {
36 super("Uso de la clase Math de JAVA");
37 setBounds(0,0,600,300);
38 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
39 getContentPane().setLayout(new GridLayout(1,1,10,10));
40 getContentPane().add(scrollPane);
Programación en Java - 68
41 setVisible(true);
42 }
43
44 public static void main(String[] args) {
45 Matematicas obj = new Matematicas();
46 }
47 }
Análisis de la aplicación
Resultados de la aplicación.
Programación en Java - 69
Taller de Programación # 4
Planteamiento de la aplicación
1 /* Archivo: Herencia.java */
2 /* Fecha: 24 de Julio 2003 */
3 /* Autor: Guido Riofrio */
4
5 import javax.swing.*;
6 import java.awt.*;
7
8 class Punto extends JFrame {
9 int x;
10 int y;
11
12 Punto(int x, int y) {
13 super("Implementación de las clases: Punto, Circulo,
14 Î Elipse");
15 this.x = x;
16 this.y = y;
17 setBounds(0,0,200,200);
18 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
19 setVisible(true);
20 }
21 void dibujar() {
22 Graphics grf;
23 grf = getGraphics();
24 paint(grf);
25 }
26 void mover(int dx, int dy) {
27 Graphics grf;
28 grf = getGraphics();
29 x = x + dx;
30 y = y + dy;
31 paint(grf);
32 }
33 void get_X(String clase) {
34 System.out.println("La coordenada X del objeto de tipo
35 Î " + clase + " es: " + x);
36 }
37 void get_Y(String clase) {
38 System.out.println("La coordenada Y del objeto de tipo
39 Î " + clase + " es: " + y);
Programación en Java - 70
40 }
41 public void paint(Graphics g) {
42 setBackground(new Color(191,206,237));
43 g.setColor(Color.black);
44 g.fillOval(x,y,4,4);
45 }
46 }
47
48 class Circulo extends Punto {
49 int radio;
50
51 Circulo(int x, int y, int radio) {
52 super(x, y);
53 this.radio = radio;
54 }
55 void get_Radio() {
56 System.out.println("El radio del objeto perteneciente
57 Î a la clase Circulo es: " + radio);
58 }
59 public void paint(Graphics g) {
60 setBackground(new Color(232,241,217));
61 g.setColor(Color.blue);
62 g.fillOval(x,y,radio,radio);
63 }
64 }
65
66 class Elipse extends Punto {
67 int radioMay;
68 int radioMen;
69
70 Elipse(int x, int y, int radioMay, int radioMen) {
71 super(x, y);
72 this.radioMay = radioMay;
73 this.radioMen = radioMen;
74 }
75 void get_RadioMay() {
76 System.out.println("El radio mayor del objeto de tipo
77 Î Elipse es: " + radioMay);
78 }
79 void get_RadioMen() {
80 System.out.println("El radio menor del objeto de tipo
81 Î Elipse es: " + radioMen);
82 }
83 public void paint(Graphics g) {
84 setBackground(new Color(245,213,242));
85 g.setColor(Color.red);
86 g.fillOval(x,y,radioMay,radioMen);
87 }
88 }
89
90 public class Herencia {
91 public static void main(String[] args) {
92 /******* Clase Punto *******/
93 Punto obj1 = new Punto(100,120);
94 obj1.dibujar();
95 obj1.mover(40, -20);
96 obj1.get_X("Punto");
97 obj1.get_Y("Punto");
Programación en Java - 71
Análisis de la aplicación
Resultados de la aplicación.
Programación en Java - 73
Taller de Programación # 5
Planteamiento de la aplicación
1 /* Archivo: Interfaz.java */
2 /* Fecha: 28 de Julio 2003 */
3 /* Autor: Guido Riofrio */
4
5 import javax.swing.*;
6 import java.awt.*;
7
8 class HolaSwing extends JFrame {
9 String[] dias = { "Lunes", "Martes", "Miercoles",
10 Î "Jueves", "Viernes", "Sabado", "Domingo" };
11 String[] meses = { "Enero", "Febrero", "Marzo",
12 Î "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre",
13 Î "Octubre", "Noviembre", "Diciembre"};
14 Container intermedio = new Container();
15 JButton aceptar = new JButton("Aceptar");
16 ImageIcon imagen = new ImageIcon("middle.gif");
17 JButton cancelar = new JButton("Cancelar",imagen);
18 JSlider control = new JSlider(20, 80);
19 JComboBox opciones_1 = new JComboBox(dias);
20 JList opciones_2 = new JList(meses);
21 JScrollPane scroll_opc_2 = new JScrollPane(opciones_2);
22 JLabel etiqueta = new JLabel("Etiqueta");
23 JLabel picture = new JLabel(new
24 Î ImageIcon("Dog.gif"));
25
26 HolaSwing() {
27 super("Interfaz Gráfica de Usuario");
28 setBounds(0,0,360,260);
29 intermedio = getContentPane();
30 intermedio.setLayout(new FlowLayout());
31 intermedio.add(aceptar);
32 intermedio.add(cancelar);
33 intermedio.add(control);
34 intermedio.add(opciones_1);
35 opciones_2.setVisibleRowCount(4);
36 intermedio.add(scroll_opc_2);
37 intermedio.add(etiqueta);
38 intermedio.add(picture);
39 setVisible(true);
40 }
Programación en Java - 74
41 }
42
43 public class Interfaz {
44 public static void main(String[] args) {
45 HolaSwing obj = new HolaSwing();
46 }
47 }
Análisis de la aplicación
Resultados de la aplicación.
Programación en Java - 76
Taller de Programación # 6
Planteamiento de la aplicación
1 /* Archivo: Eventos.java */
2 /* Fecha: 30 de Julio 2003 */
3 /* Autor: Guido Riofrio */
4
5 import javax.swing.*;
6 import java.awt.*;
7 import java.awt.event.*;
8
9 class Eventos extends JFrame implements WindowListener,
10 Î ActionListener, MouseListener {
11 Container intermedio = new Container();
12 FlowLayout admin = new FlowLayout(10,10,10);
13 JPanel panel1 = new JPanel(admin);
14 MiContainer area2 = new MiContainer();
15 JPanel panel3 = new JPanel(admin);
16 JButton aceptar = new JButton("Aceptar");
17 JButton cancelar = new JButton("Cancelar");
18 JTextField texto = new JTextField("Digite su
19 Î nombre.",20);
20 JTextField msgbox = new JTextField(25);
21
22 Eventos() {
23 super("Control de Eventos");
24 setSize(310,300);
25 intermedio = getContentPane();
26 intermedio.setLayout(new BorderLayout());
27 admin.setAlignment(FlowLayout.CENTER);
28 panel1.setBackground(new Color(234,207,255));
29 panel3.setBackground(new Color(176,231,176));
30 panel1.add(aceptar);
31 panel1.add(cancelar);
32 panel1.add(texto);
33 panel1.setPreferredSize(new Dimension(300,80));
34 panel3.add(msgbox);
35 intermedio.add(panel1,BorderLayout.NORTH);
36 intermedio.add(area2,BorderLayout.CENTER);
Programación en Java - 77
37 intermedio.add(panel3,BorderLayout.SOUTH);
38 addWindowListener(this);
39 aceptar.addActionListener(this);
40 cancelar.addActionListener(this);
41 texto.addActionListener(this);
42 area2.addMouseListener(this);
43 setVisible(true);
44 }
45
46 /* Metodos pertenecientes a la interfaz "WindowListener" */
47
48 public void windowActivated(WindowEvent e) {}
49 public void windowClosed(WindowEvent e) {}
50 public void windowClosing(WindowEvent e) {
51 System.exit(0);
52 }
53 public void windowDeactivated(WindowEvent e) {}
54 public void windowDeiconified(WindowEvent e) {}
55 public void windowIconified(WindowEvent e) {}
56 public void windowOpened(WindowEvent e) {}
57
58 /* Metodos pertenecientes a la interfaz "ActionListener" */
59
60 public void actionPerformed(ActionEvent e) {
61 if (e.getSource() == aceptar) {
62 msgbox.setText(msgbox.getText() + " Aceptar");
63 }
64 if (e.getSource() == cancelar) {
65 msgbox.setText(msgbox.getText() + " Cancelar");
66 }
67 if (e.getSource() == texto) {
68 msgbox.setText(" ¡ Hola " + texto.getText() + "
69 Î! ");
70 }
71 }
72
73 /* Metodos pertenecientes a la interfaz "MouseListener" */
74
75 public void mouseClicked(MouseEvent e) {
76 area2.dibujar(e.getX(), e.getY());
77 msgbox.setText("Clic en: X = " + e.getX() + " Y = " +
78 Î e.getY());
79 }
80 public void mouseEntered(MouseEvent e) {
81 msgbox.setText("metodo mouseEntered en: " + e.getX() +
82 Î " Y = " + e.getY());
83 }
84 public void mouseExited(MouseEvent e) {
85 msgbox.setText("metodo mouseExited en: " + e.getX() +
86 Î " Y = " + e.getY());
87 }
88 public void mousePressed(MouseEvent e) {}
89 public void mouseReleased(MouseEvent e) {}
90
91 /* Metodo principal de la clase "Eventos" */
92
93 public static void main(String[] args) {
94 Eventos obj = new Eventos();
Programación en Java - 78
95 }
96 }
97
98 class MiContainer extends Container {
99 int x,y;
100 void dibujar(int x, int y) {
101 this.x = x;
102 this.y = y;
103 repaint();
104 }
105 public void paint(Graphics g) {
106 g.fillOval(x, y, 6, 6);
107 }
108 }
Análisis de la aplicación
Resultados de la aplicación.
Programación en Java - 80
Taller de Programación # 7
Planteamiento de la aplicación
1 /* Archivo: MiApplet.java */
2 /* Fecha: 30 de Julio 2003 */
3 /* Autor: Guido Riofrio */
4
5 import javax.swing.*;
6 import java.awt.*;
7 import java.awt.event.*;
8 import javax.swing.table.*;
9
10 public class MiApplet extends JApplet {
11 String[] ciudades = {"Quito", "Guayaquil", "Cuenca",
12 Î "Loja"};
13 String[] columnas = {"Codigo", "Apellido", "Nombre",
14 Î"Ciudad"};
15 Object[][] datos = {{"C001", "Jaramillo", "Diego", ""},
16 {"C002", "Encalada", "Carlos", ""},
17 {"C003", "Beltran", "Maria", ""},
18 {"C004", "Cueva", "Gonzalo", ""},
19 {"C005", "Maldonado", "Jaime", ""}};
20 JPanel superior = new JPanel(new
21 Î FlowLayout(FlowLayout.CENTER,15,15));
22 JPanel inferior = new JPanel(new
23 Î FlowLayout(FlowLayout.CENTER,15,15));
24 JTextField texto = new JTextField(25);
25 JTable tabla = new JTable(datos,columnas);
26 JScrollPane scroll = new JScrollPane(tabla);
27 JButton aceptar = new JButton("Aceptar");
28 JComboBox dat = new JComboBox(ciudades);
29 String parametro_1;
30 String metodos = "Metodos:";
31 JWindow mensajes = new JWindow();
32 JTextField txt_msg = new JTextField(metodos,32);
33
34 public void init() {
35 parametro_1 = getParameter("param_1");
36 superior.setBackground(new Color(242,206,245));
37 inferior.setBackground(new Color(242,237,203));
38 superior.add(texto);
39 texto.setText(parametro_1);
Programación en Java - 81
Análisis de la aplicación
Resultados de la aplicación.
Programación en Java - 83
Taller de Programación # 8
Planteamiento de la aplicación
1 /* Archivo: Contadores.java */
2 /* Fecha: 09 de Agosto 2003 */
3 /* Autor: Guido Riofrio */
4
5 import javax.swing.*;
6 import java.awt.*;
7
8 public class Contadores extends JFrame {
9 JTextField ind_a = new JTextField("0");
10 JTextField ind_b = new JTextField("0");
11 JTextField ind_c = new JTextField("0");
12 public Contadores() {
13 super("Hilos en Java");
14 setSize(250,150);
15 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
16 getContentPane().setLayout(new GridLayout(3,5,10,10));
17 getContentPane().add(new JLabel("Indicador A"));
18 getContentPane().add(ind_a);
19 getContentPane().add(new JLabel("Indicador B"));
20 getContentPane().add(ind_b);
21 getContentPane().add(new JLabel("Indicador C"));
22 getContentPane().add(ind_c);
23 setVisible(true);
24 Thread A = new Thread (new Indicadores(ind_a));
25 Thread B = new Thread (new Indicadores(ind_b));
26 Thread C = new Thread (new Indicadores(ind_c));
27 A.start();
28 B.start();
29 C.start();
30 }
31 public static void main(String[] args) {
32 new Contadores();
33 }
34 }
35
36 class Indicadores implements Runnable {
37 JTextField texto;
38 String s;
39 public Indicadores(JTextField indic) {
40 texto = indic;
41 }
Programación en Java - 84
Análisis de la aplicación
Resultados de la aplicación.
Programación en Java - 85
SOLUCIONARIO
Programación en Java - 86
AUTOEVALUACIONES
Primer Bimestre Segundo Bimestre
1 ( v ) 1 ( v )
2 ( v ) 2 ( v )
3 ( v ) 3 ( v )
4 ( f ) 4 ( v )
5 ( f ) 5 ( v )
6 ( v ) 6 ( v )
7 ( v ) 7 ( f )
8 ( f ) 8 ( v )
9 ( v ) 9 ( v )
10 ( v ) 10 ( v )
11 ( v ) 11 ( v )
12 ( v ) 12 ( v )
13 ( v ) 13 ( v )
14 ( v ) 14 ( v )
15 ( v ) 15 ( v )
16 ( v ) 16 ( v )
17 ( v ) 17 ( v )
18 ( v ) 18 ( v )
19 ( v ) 19 ( v )
20 ( v ) 20 ( v )
21 ( v ) 21 ( f )
22 ( f )
23 ( v )
24 ( v )
25 ( v )
26 ( v )
27 ( v )
28 ( v )
29 ( v )
30 ( v )
31 ( v )
32 ( v )
Programación en Java - 87
GLOSARIO
Programación en Java - 88
Alias: Variable que se refiere al mismo objeto como otro. Sólo las variables de
tipo clase pueden ser alias unas de otras.
Boolean: Un tipo lógico, que representa los valores true o false. Denominado
así en honor de George Boole, lógico del siglo XIX.
Byte: Ocho bits. Un byte puede representar cualquiera de 256 valores posibles.
Es frecuente que sea la unidad fundamental de organización de la memoria en
las computadoras.
Clase: Descripción de los datos y métodos para manipular los datos de cada
objeto de su tipo. Una clase puede considerarse como plantilla o prototipo de
cada uno de sus objetos.
Devolución de llamada: Método u objeto de una clase que se registra con otra
(frecuentemente, en construcción), de modo que se le pueda llamar o usar más
adelante.
Etiqueta: Componente básico del HTML. Una etiqueta consiste en una palabra
clave de HTML y otra información opcional, que se incluye entre paréntesis
(corchetes) angulares, <>.
Evento: Usualmente, una acción que se genera por cierta interacción del
usuario con el programa, como hacer clic en un botón o mover el ratón.
Herencia múltiple: Situación en que una clase hereda los métodos y variables
de dos o más clases, ninguna de las cuales es una superclase de la primera.
Es algo permitido en algunos lenguajes como C++, no así en Java.
Programación en Java - 93
Inmutable: Objeto que no se puede modificar una vez construido. En Java las
cadenas son inmutables.
Literal: Representación en código fuente del valor una tipo primitivo, String o
null. Por ejemplo 3.08 es una literal doble y “foo” es una literal de cadena.
Null: La única literal de tipo clase. Un objeto nulo es uno en estado inicializado.
Prueba de intervalo: Proceso usado en Java para verificar que el índice usado
en el acceso a una matriz constituye una posición legítima de la matriz.
Algunos lenguajes no efectúan este proceso, con lo que sacrifican la seguridad
en aras de la eficiencia.
STUB: Definición de método que tiene cuerpo trivial o vacío. El término se usa
frecuentemente en el desarrollo de programas para establecer su organización
mientras se posterga su implantación detallada en fecha ulterior.
realizarse con ellos. En Java los tipos se dividen de manera amplia en ocho
primitivos y todos los demás (tipos de clases).
Tipo más amplio: El tipo W es más ancho que el tipo N si puede considerarse
que cada N es una W al mismo tiempo que existen W que no son N. Por
ejemplo double es un tipo más amplio que int es una double, mientras que
existen double, como 3.5, que no sería razonable interpretar como int. Véase
también superclase.
5
Glosario tomado del libro PROGRAMACION CON JAVA de Decaer Hirshfield, pagina 595