Manual Fundamentos Java
Manual Fundamentos Java
CURSO - TALLER
“Fundamentos de Java”
Material compartido por el autor para la realización del curso, no utilizar para otros fines distintos a los de la capacitación.
Revisado y adaptado por José Canchucaja V.
INDICE
INDICE........................................................................................................................................ 1
Tema 1. CONCEPTOS BASICOS Y LENGUAJE DE PROGRAMACIÓN.................................................5
1.1. INTRODUCCION.............................................................................................................. 5
1.1.1 Características de Java...................................................................................................5
1.1.2. Java en la empresa.........................................................................................................5
1.1.3. Java en tu PC.................................................................................................................6
1.1.4. Java Virtual Machine (JVM)........................................................................................21
1.1.5. El recolector de basura (Garbage Collector)...............................................................22
1.2. TIPOS DE DATOS.......................................................................................................... 23
1.2.1 Variables........................................................................................................................23
1.3. OPERADORES............................................................................................................... 25
1.3.1. Operador de asignación...............................................................................................25
1.3.2. Operadores aritméticos................................................................................................25
1.3.3. Operadores Incremento y Decremento........................................................................25
1.3.4. Operadores de Comparación........................................................................................25
1.3.5. Operadores Lógicos.....................................................................................................26
1.3.6. Operadores Compuestos..............................................................................................26
1.3.7. Operadores con Cadenas..............................................................................................26
1.3.8. Precedencia de operadores...........................................................................................27
1.3.9. EJERCICIOS...............................................................................................................27
Ejercicio 2..............................................................................................................................27
1.4. CONTROL DE FLUJO....................................................................................................28
1.4.1 Bloques en Java............................................................................................................28
1.4.2. IF y ELSE....................................................................................................................29
1.4.3. IF anidados...................................................................................................................29
1.4.4. Errores comunes..........................................................................................................30
1.4.5. El operador condicional (?:)........................................................................................30
1.4.6. La sentencia SWITCH.................................................................................................31
1.4.7. EJERCICIOS...............................................................................................................32
1.5. LOS CICLOS REPETITIVOS..........................................................................................33
1.5.1. WHILE.........................................................................................................................33
1.5.2. DO...WHILE................................................................................................................34
1.5.3. EL CICLO FOR...........................................................................................................34
1.5.4. ERRORES COMUNES...............................................................................................34
1.5.5. LA SENTENCIA BREAK...........................................................................................34
1.5.6. LA SENTENCIA CONTINUE...................................................................................35
1.5.7 EJERCICIOS................................................................................................................35
Tema 2. PRINCIPIOS DE LA ORIENTACION A OBJETOS................................................................37
2.1. DEFINICION DE OBJETO..............................................................................................37
2.1.1. Un nuevo paradigma....................................................................................................37
2.2.2 Los objetos son una abstracción...................................................................................37
2.2. Encapsulamiento............................................................................................................ 38
2.3. Relaciones entre objetos.................................................................................................38
2.3.1 Asociación entre objetos...............................................................................................38
2.3.2 Composición de objetos................................................................................................39
2.4. Clases............................................................................................................................. 39
Autor: Ing. Ángel Chata T. 1 Revisado por: José Canchcucaja V.
“Fundamentos de Java” Julio 2008
Ejercicio................................................................................................................................. 40
2.5. Herencia......................................................................................................................... 40
2.6. Polimorfismo................................................................................................................... 40
Ejemplos................................................................................................................................41
Ejercicio.................................................................................................................................41
2.7. CLASES EN JAVA.......................................................................................................... 41
2.7.1. Paquetes.......................................................................................................................41
2.7.2. Modificadores de acceso..............................................................................................42
2.7.3. Creación de objetos......................................................................................................42
2.7.4. La referencia null.........................................................................................................43
2.7.5. Asignando referencias..................................................................................................43
2.8. Laboratorio. Uso de Objetos...........................................................................................44
2.9. Métodos.......................................................................................................................... 44
2.9.1. Argumentos..................................................................................................................45
2.9.2. Valores de retorno........................................................................................................45
2.9.3. Recursividad................................................................................................................45
2.9.4. Invocando métodos......................................................................................................46
Laboratorio............................................................................................................................46
2.10. Encapsulamiento.......................................................................................................... 47
Laboratorio............................................................................................................................47
2.11. Paso de variables a métodos........................................................................................47
Laboratorio............................................................................................................................48
Laboratorio............................................................................................................................48
Ejercicio.................................................................................................................................48
Tema 3. TRABAJANDO CON CLASES...........................................................................................50
3.1. DEFINICIONES INICIALES............................................................................................50
3.1.1. Sobrecarga de métodos................................................................................................50
3.1.2. Iniciación de variables de instancia.............................................................................50
3.1.3. Constructores...............................................................................................................51
3.1.4. La referencia this.........................................................................................................52
3.1.5. Variables de clase.........................................................................................................52
3.1.6. Métodos de clase..........................................................................................................53
3.2 EJERCICIOS................................................................................................................... 54
Ejercicio 1..............................................................................................................................54
Ejercicio 2..............................................................................................................................56
Tema 4. TRABAJANDO CON ARREGLOS......................................................................................57
4.1. DEFINICION DE ARREGLOS.........................................................................................57
4.1.1 Definición.....................................................................................................................57
4.1.2. Practica Guiada............................................................................................................57
4.2. ARREGLOS MULTIDIMENSIONALES............................................................................58
4.3. LABORATORIO.............................................................................................................. 59
4.3.1 Ejercicio........................................................................................................................59
4.3.2. Ejercicio.......................................................................................................................59
4.4. CADENAS...................................................................................................................... 60
4.4.1. Definición....................................................................................................................60
4.4.2. Construccion de cadenas..............................................................................................60
4.4.3. Concatenacion..............................................................................................................60
4.5. OPERACIONES CON CADENAS...................................................................................60
4.5.1. Longitud de una cadena...............................................................................................61
4.5.2. Ubicar un carácter mediante un indice........................................................................61
Autor: Ing. Ángel Chata T. 2 Revisado por: José Canchcucaja V.
“Fundamentos de Java” Julio 2008
1.1. INTRODUCCION.
Simple
Reduce en un 50% los errores más comunes de programación en lenguajes como C y C++ al eliminar
aritmética de punteros, referencias, necesidad de liberar memoria.
Robusto
Java realiza verificaciones en busca de problemas tanto en tiempo de compilación como en tiempo de
ejecución.
Arquitectura neutral
El código compilado tiene un formato independiente de la arquitectura de la máquina en que se
ejecutará.
Seguro
No usa punteros para prevenir el acceso ilegal a la memoria.
Interpretado
Requiere un runtime (JRE) para ser ejecutado, lo que lo hace 10 veces mas lento que un programa C
compilado.
Orientado a objetos
Soporta las tres características propias del paradigma de la orientación a objetos: encapsulamiento,
herencia y polimorfismo
Distribuido
Se ha construido con extensas capacidades de interconexión TCP/IP, presenta librerías con protocolos
http y ftp para obtener información a través de la red.
Costos de desarrollo
La llegada de Java e Intranet ha reducido los costos de las aplicaciones, además es creciente el software
gratuito por explotar.
Hola.java
Hola.class
JVM(java.exe)
Lenguaje Maquina
1. El JDK y el JVM están disponibles en http://java.sun.com en un solo paquete conocido como J2SE.
De clic en el
enlace Java SE
jdk-6u5-windows-i586-p.exe
Autor: Ing. Ángel Chata T. 6 Revisado por: José Canchcucaja V.
“Fundamentos de Java” Julio 2008
De clic en
éste botón
De clic en
éste botón
1. Seleccione
la plataforma
2. Seleccione
su idioma
3. Acepte la
licencia
4. De clic en
éste botón
1. De clic
aquí
2. De clic en
éste enlace
C:\Archivos de programa\Java\jdk1.6.0_05
3. Adicionalmente se debe configurar la PC para que se reconozca su ubicación (Path); por ejemplo en
Windows XP seria:
3.1 Mi PC / Propiedades
De clic en
éste botón
En caso que exista la variable Path elija dicha variable y edítela haciendo
uso del botón Modificar.
3.5 Ahora debe modificar o ingresar por primera vez el valor de la variable
Path
Debe adicionar la ruta donde se halla el directorio bin del JDK que ha
instalado, le recomiendo buscar en: C:\Archivos de programa\Java
C:\Archivos de programa\Java\jdk1.6.0_05\bin
En el ejemplo sería:
Ejemplo: Crear un programa para saludar a los que se inician con Java
Paso 2: Cargue el bloc de notas (Notepad). Para eso de clic el botón Inicio
del Windows, luego seleccione Ejecutar…, digite lo de abajo
notepad C:\Curso_Java\Hola.java
cmd
Autor: Ing. Ángel Chata T. 20 Revisado por: José Canchcucaja V.
“Fundamentos de Java” Julio 2008
C:\Curso_Java>javac Hola.java
Y presione la tecla [Enter].
2. Para ejecutar el programa ya compilado (seudo compilado, en bytecode) se usa el java.exe. El código
Java se suele trasmitir como bytecode a la máquina receptora, que utiliza un compilador just-in-time para
traducir el bytecode en código máquina antes de su ejecución.
C:\java>java Hola
Y presione la tecla [Enter]. Saldrá:
Hola desde java
4. Al ejecutar un programa java, el JVM empieza a buscar el método main de la clase principal para
ejecutarlo.
JDK y JRE
El JDK es un conjunto de programas que incluye al JVM, y es el acrónimo de Java Development Kit, que
traducido sería Paquete de desarrollo de Java. Comprende a lo siguiente:
JVM (máquina virtual Java) es una instancia de JRE en tiempo de ejecución, este es el programa que
interpreta el código Java y además por las librerías de clases estándar que implementan el API de Java.
Ambas JVM y API deben ser consistentes entre sí, de ahí que sean distribuidas de modo conjunto.
Un usuario sólo necesita el JRE para ejecutar las aplicaciones desarrolladas en lenguaje Java, mientras
que para desarrollar nuevas aplicaciones en dicho lenguaje es necesario un entorno de desarrollo,
denominado JDK, que además del JRE (mínimo imprescindible) incluye, entre otros, un compilador para
Java.
Resumiendo:
El JRE es suficiente para un usuario de aplicaciones hechas en Java. Peor si la aplicación es Web, dicho
usuario ya no lo necesita.
El JDK es necesario para quienes desarrollan aplicaciones en Java ya sean aplicaciones cliente servidor o
aplicaciones distribuidas incluyendo a las aplicaciones Web.
Lo que usted necesita saber es que para cada sistema operativo (o plataforma operativa) existe un JDK y
por consiguiente un JRE apropiado, por lo que debe descargare el que corresponde a su sistema
operativo preferido.
La buena noticia es que el programa que usted desarrolle por ejemplo en Windows y luego compilado
también en Windows puede correr en Linux o en Unix, etc. sin mayores problemas, salvo que usted haya
puesto instrucciones particulares para el sistema operativo en el que ha desarrollado los programas.
Por eso le sugerimos no salirse de los estándares impuestos por Java, en el curso le ayudaremos a no
salirse de los mismos.
“Write once and run everywhere”, escriba una vez su programa y ejecute donde quiera sin cambios.
El concepto de recolección de basura fue inventado por John McCarthy en 1959 para evitar la gestión
manual de memoria en el lenguaje Lisp.
¿Cómo funciona?
Cuando un lenguaje dispone de recolección de basura, el programador no tiene que invocar a una
subrutina para liberar memoria. La reserva de memoria también es más o menos automática sin la
intervención del programador. Por ejemplo:
En los lenguajes orientados a objetos: se reserva memoria cada vez que el programador crea un
objeto, pero éste no tiene que saber cuanta memoria se reserva ni cómo se hace esto.
En los lenguajes declarativos: cada vez que se construye una expresión se reserva memoria (de
una manera inteligente), pero el programador no es consciente de ello.
El recolector de basura es informado de todas las reservas de memoria que se producen en el programa.
Además, el compilador colabora para que sea posible llevar una cuenta de todas las referencias que
existen a un determinado espacio de memoria reservado.
El único inconveniente a este mecanismo es determinar cuándo se tiene que ejecutar el recolector de
basura. Existen varios algoritmos para hacerlo, pero el más eficiente es el primero de ellos:
En resumen:
El entorno de ejecución de Java dispone de un recolector de basura (garbage collector) que limpia de la
memoria los objetos no utilizados.
Estándares
Nombre de Variables
Tipos de Variables
2. Las cadenas no son un tipo de variable sino una Clase de tipo String
Declaración de Variables
1. La forma básica de declarar variables es:
tipo identificador = valor;
2. Las variables de instancia se pueden usar en cualquier lugar de la clase.
3. Las variables locales se pueden usar solo en el ámbito donde son declarados.
Ejercicio
C:\java>notepad Variables.java
public class Variables {
/* Variables instancia */
public static int peliculasAlquilados = 0;
Compilación:
C:\java>javac Variables.java
Ejecución:
C:\java>java Variables
Resultado:
0
0.15
50
3
G
1.3. OPERADORES
int a, b, c, d;
a = 2 + 2; // adicion
b = a * 3; // multiplicacion
c = b - 2; // substraccion
d = b / 2; // division
e = b % 2; // resto de la division (modulo)
a = a – 1;
Los datos byte, char y short se convierten en int después de una operación
Si un operando es long, el otro se convierte en long y la respuesta será long.
byte b1 = 1, b2 = 2, b3;
b3 = b1 + b2 // error el resultado es entero
int var1 = 3;
var1 ++;
int var1 = 3, var2 = 0;
var2 = ++var1; // Se incrementa var1 y luego se asigna a var2;
var2 = var1++; // Se asigna a var2 y luego se incrementa var2;
boolean valor;
int a = 1, b = 2, c = 3, d = 4, e = 3;
int nivelBuenCredito = 3;
int nivelCreditoCliente;
boolean esBuenCredito = false;
esBuenCredito = (nivelCreditoCliente == nivelBuenCredito);
boolean valor;
int a = 1, b = 2, c = 3;
valor = (b > a) || (a > b) ; // operación logica OR
valor = (b > a) && (c > b); // operación logica AND
valor = !(a > b); // operación logica NOT
OR AND NOT
F || F = false F && F = false !F = true
F || T = true F && T = false !T = false
T || F = true T && F = false
T || T = true T && T = true
//
int total = 0, cantidad = 10;
total += cantidad; // asignación con incremento
total -= 3; // asignación con decremento
total *= 2; // asignación con multiplicación
//
int diasDeAlquiler;
diasDeAlquiler = diasDeAlquiler + 3;
diasDeAlquiler += 3;
//
double total = 0, num = 1;
double porcentaje = 0.50;
total = total + num;
total += num;
total -=num;
total *= porcentaje;
int var1 = 0;
var1 = 2 + 3 * 4;
var1 = 12 – 6 + 3;
1.3.9. EJERCICIOS
Ejercicio 1
Encuentre los errores en el siguiente código:
Ejercicio 2.
/* Ejercicio:
* Se pide calcular el costo del alquiler de dos peliculas
* por dos 2 dias.
* Odisea 2001 = 2.95 por dia
// Declaracion de variables
double pelicula1;
double pelicula2;
// Asignacion de valores
pelicula1 = 2.95;
pelicula2 = 3.50;
}
}
C:\java>javac Operadores.java
C:\java>java Operadores
Odisea 2001 : 2.95
El Padrino : 3.5
Total Alquiler = 12.9
Total Venta = 15.093
Puedo Alquilar? false
1.4.2. IF y ELSE
Esta sentencia provee una selección de procesos básico. Una expresión boleana controla que sentencia
se ejecutara. Si la expresión es true, se realizara la primera expresión es false se realizara la segunda.
SINTAXIS
============================
if (<Condición Lógica >) <Instrucción>;
else <Instrucción>;
============================
if (<Condición Lógica >) {
_________;
_________;
}
else {
_________;
_________;
}
Ejemplos:
if ( i % 2 == 0 )
System.out.println("Es par");
else
System.out.println("Es impar");
//
if (diasDeAlquilerTranscurridos > diasAlquilerContratados )
System.out.println("Primero pagar moras por alquiler");
else
System.out.println("Puede alquilar nuevas peliculas");
//
if ( numero > 0 ) {
System.out.println("El numero es positivo");
}
//
if (mes <= 7) System.out.println("El impuesto es 18%");
else System.out.println("El impuesto es 19%");
1.4.3. IF anidados
Cuando se requieren muchas condiciones, se pueden anidar sentencias IF.
Autor: Ing. Ángel Chata T. 29 Revisado por: José Canchcucaja V.
“Fundamentos de Java” Julio 2008
Este enfoque es utilizado poco, ya que se crea un código algo complicado de entender.
Es preferible usar las llaves { } para separar los bloques.
//
if (velocidad >= 25) {
if (velocidad > 100) {
System.out.println("Vamos muy rapido!");
}
else {
System.out.println("Llegaremos a tiempo");
}
}
else {
System.out.println("Que lento es la movilidad");
}
int x = 3, y = 5;
if ( x >= 0)
if ( y < x )
System.out.println("y es menor que x");
else
System.out.println("x es negativo");
//
int x = 7;
if ( x = 0) // if (x == 0)
System.out.println("x es cero");
//
int x = 15, y = 24;
if ( x % 2 == 0 && y % 2 == 0 );
System.out.println("x e y son pares");
if (mes <= 7)
impuesto = 0.18;
else
impuesto = 0.19;
Es usada cuando se requiere tomar una accion entre varias en base a una expresión.
int dia
switch (dia) {
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("Tienes que ir a trabajar");
break;
case 6:
case 7:
System.out.println("Quedate en casa");
break;
default:
System.out.println("En que planeta vives?");
}
char letra='e';
switch(letra);
{
case 'a':
case 'A':
case 'e':
case 'E':
case 'i':
case 'I':
case 'o':
case 'O':
case 'u':
case 'U':
printf("Es una vocal");
break;
default: printf("Es una consonante");
}
Autor: Ing. Ángel Chata T. 31 Revisado por: José Canchcucaja V.
“Fundamentos de Java” Julio 2008
1.4.7. EJERCICIOS
Ejercicio 1
// Que es la Edad?
public class Edad {
public static void main (String [] arg)
{
int edad = 15;
if (edad <= 18)
System.out.println ("Eres un niño");
System.out.println ("La edad es un estado mental");
}
}
Ejercicio 2
// La mejor Nota
public class Nota {
public static void main (String [] arg)
{
int tuNotaFinal = 17;
int miNotaFinal = 12;
int mejorNotaFinal ...
Ejercicio 3
// En MegaPlaza se hace un 20% de descuento a los clientes
// cuya compra supere los 300
// ¿Cual será la cantidad que pagara una persona por su compra?
C:\java>notepad Compra.java
public class Compra {
Ejercicio 4
Un obrero necesita calcular su salario semanal, el cual se obtiene de la
siguiente manera:
Si trabaja 40 horas o menos se le paga $16 por hora
Si trabaja mas de 40 horas se le paga $16 por cada una de las primeras 40
horas y $20 por cada hora extra.
C:\java>notepad Salario.java
public class Salario {
horasTrabajadas = 47;
if ( horasTrabajadas > 40 ) {
horasExtras = horasTrabajadas - 40;
salarioSemanal = horasExtras * 20 + 40 * 16;
System.out.println("El salario con horas extras es de " +
salarioSemanal);
}
else {
salarioSemanal = horasTrabajadas * 16;
System.out.println("Su sueldo es de " + salarioSemanal);
}
}
Ejercicio 5
// Un año es bisiesto si es divisible por 4
// excepto aquellos divisibles por 100 pero no por 400
// Según el año determine la cantidad de dias de un mes.
//
public class Mes {
public static void main (String [] arg)
{
int anio = 1948;
int mes = 02;
int dias;
...
System.out.println ("Tiene "+dias+" dias");
}
}
1.5.1. WHILE
El while es la forma mas simple de un bucle.
Tiene la siguiente forma:
int i = 1; // inicializacion
while (i<=10) { // condicion de repeticion
System.out.println(i*3.5); // cuerpo
i++; // iteracion
}
1.5.2. DO...WHILE
Realiza la condicion de repetición al finalizar el bloque.
int i = 1; // inicializacion
do {
System.out.println(i*3.5); // cuerpo
i++; // iteracion
} while ( i <= 10 ) // condicion
EJEMPLO
Un empleado ha llegado a su edad de jubilación (65) y ha trabajado desde los 25 años. Su CTS se
deposita en un banco que le otorga interes por estos depositos. Un nuevo gobierno ha decretado que
esta liquidación tendra un maximo de 250,000 soles
1.5.7 EJERCICIOS
Ejercicio 1
Mostrar la conversión de 1 hasta 10 dólares en soles, dólar tras dólar, suponiendo que el tipo de cambio
es 3.50 soles/dolar.
C:\java>notepad Cambio.java
public class Cambio {
Ejercicio 2
Una persona desea invertir $1000.00 en un banco, el cual le otorga un 2% de interés mensual. Cual será
la cantidad de dinero que esta persona tendrá al cabo de un año si todo el dinero lo reinvierte?.
while (mes<=12) {
dinero = dinero * 1.02;
mes++;
}
System.out.println(dinero);
}
Ejercicio 3
Simular el comportamiento de un reloj digital, imprimiendo la hora, minutos y segundos de un día desde
las 00:00:00 horas hasta las 23:59:59 horas
Ejercicio 4
Una persona desea invertir $1000.00 en un banco, el cual le otorga un 2% de interés mensual. En
cuantos meses tendrá mas de $1500, si reinvierte cada mes todo su dinero?.
for (;;) {
dinero = dinero * 1.02;
if (dinero >= 1500) break;
mes++;
}
System.out.println(mes);
System.out.println(dinero);
}
}
Resumen
Se estudiara el paradigma de la orientación a objetos y como se emplea en Java.
Que es un objeto?
Definición filosófica: Es una entidad que se puede reconocer.
Para la tecnología de objetos : Es una abstracción de un objeto del mundo real.
En términos de negocios: Es una entidad relevante al dominio del negocio.
En términos de software: Es una estructura que asocia datos y funciones.
Algunos ejemplos de objetos en POO son: Cliente, Factura, Contrato, Película. Un Cliente tiene
un nombre, dirección, crédito. Un Cliente podría alquilar una película, pagar una factura,
devolver una película.
2.2. Encapsulamiento
El encapsulamiento oculta como las cosas funcionan dentro de un objeto
Solo nos comunicamos con el objeto a través sus métodos
Los métodos son una interfaz que permite ignorar como están implementados.
No es posible evadir el encapsulamiento en OO
Ejercicio
Complete con operaciones y atributos lo siguiente:
Objeto Operaciones Atributos
Cajero automático P5
Universidad
Computadora
Auto de carreras
DVD
Satélite
Persona
getEdad
Cliente getNombre Edad
o Mensaje getDireccion Nombre
Transmisor getEdad() setEdad Direccion
setNombre
setDireccion
Para que un objeto envíe un mensaje a otro, el receptor debe ser visible para el transmisor.
Esta visibilidad se da a través de enlaces.
Ejemplos:
El radar en tierra monitorea el satélite. El satélite es monitoreado por el radar en tierra.
Un cliente tiene una cuenta de ahorros. La cuenta de ahorros pertenece a un cliente.
2.4. Clases
Una clase es una molde para crear objetos.
Para definir una clase se tiene que indicar las operaciones y atributos
Los objetos son instancias de la clase.
Cuando se cree un cajero automático P3 no se requiere indicar sus operaciones y atributos.
Solo se requiere indicar a que clase pertenece.
Identificación de clases
Reconocer una estructura y comportamiento comunes entre varios objetos.
Lapicero rojo
Pluma y tinta
Ejercicio
A que clase pertenecen estos dos objetos?
Clases y Objetos.
Las clases son definiciones estáticas que nos permite entender todos los objetos de esa clase.
Los objetos son entidades dinámicas que existen en el mundo real y en simulaciones del mundo
real.
2.5. Herencia
Entre diferentes clases pueden haber similitudes
La herencia es una relación entre clases donde una es padre de otra.
Las propiedades comunes definen la superclase. Clase padre.
Las subclases heredan estas propiedades. Clase hijo.
Un objeto hijo es un-tipo-de una superclase.
Un Helicóptero es un tipo de Nave Aérea.
Nave Aérea
Helicóptero Dirigible
Jumbo
Globo
Ejercicio
Indique que propiedades tiene la clase Nave Aérea.
2.6. Polimorfismo
Significa que la misma operación se realiza en las clases de diferente forma.
Estas operaciones tienen el mismo significado, comportamiento.
Autor: Ing. Ángel Chata T. 40 Revisado por: José Canchcucaja V.
“Fundamentos de Java” Julio 2008
Abordar pasajeros
Ejemplos
Enviar calcularIntereses a objetos como: Cuenta de Ahorros, Cuenta CTS, Cuenta Corriente.
En java se representa como: cuenta.calcularIntereses();
Ejercicio
Determine las clases, métodos, atributos y asociaciones del siguiente problema. Puede aplicar
herencia o polimorfismo?
Tacora Films esta en el negocio de alquiler de películas a sus clientes. Y ahora esta
automatizando el proceso de alquiler. El cliente escoge las películas en la tienda y las lleva a la
caja para proceder con el alquiler. El empleado de la tienda solicita la TacoraCard al cliente para
identificarlo y escanea el código de barras de cada película que esta alquilando.
Los clientes tienen que ser socios de Tacora Film Club para poder alquilar películas. Al
suscribirse al club entregan datos como nombre, dirección, teléfono. TacoraCard tiene un único
número impreso que identifica al cliente.
Cada alquiler tiene un número único para identificarlo y en el acuerdo se indica la fecha de inicio
del alquiler y la lista de películas que se están alquilando. No se puede alquilar más de 10
películas. No se sabe cuando exactamente el cliente devolverá la película.
El gerente de Tacora está considerando emplear el mismo programa para alquilar otros artículos
como libros, reproductores de VHS y de DVD, CDs de juegos.
Cada artículo tiene un precio de alquiler, número de días que puede ser alquilado, el titulo de la
película, una descripción breve, el tipo de película (Familiar, Acción, Comedia...)
2.7.1. Paquetes
Un paquete es un contenedor (agrupador) de clases que están relacionadas lógicamente.
Un paquete tiene sus clases en un mismo directorio
Varias clases pueden tener el mismo nombre pero en diferente paquete.
NO NO
private
SOLO
SOLO SI
SI protected HEREDA
HEREDA
SI
SI
public
SI NO
Pelicula
private String titulo; Odisea 2001 El Padrino
private String tipo; Ciencia Ficcion Drama
public void mostrarDetalles()
public void obtenerTitulo()
La Strada
Pelicula pelicula1 =
pelicula1 Drama
new
Pelicula();
nu
Pelicul ll
a pelicul int j = 3;
pelicul a1
a1;
3
Dias de Radio
jPelicula pelicula2 =
pelicula2
Pelicula.java
public class Pelicula {
public String titulo;
public String tipo;
}
PruebaPeliculas.java
public class PruebaPeliculas {
public static void main (String[] args) {
Pelicula pelicula1, pelicula2;
...
pelicula1.titulo = "Los sueños de Akira Kurosawa";
pelicula2 = pelicula1;
pelicula2.titulo = "Día de entrenamiento";
System.out.println("La pelicula 1 es "+ ...);
System.out.println("La pelicula 2 es "+ ...);
}
}
2.9. Métodos
Un método es equivalente a una función o subrutina de otros lenguajes.
Los métodos solo se definen dentro de una clase.
2.9.1. Argumentos
En la definición del método se indica el tipo y el nombre de los argumentos del método.
2.9.3. Recursividad
Un método recursivo es aquel que directa o indirectamente se llama a si mismo.
Como ejemplo útil se puede presentar el cálculo de factorial y sumatorias
Factorial de 0 = 1
Factorial de N = N * Factorial de N - 1
Sumatoria de 0 = 0
Sumatoria de N = N + Sumatoria de N - 1
Un método recursivo debe tener al menos un caso no recursivo y otros casos recursivos que se
aproximen al caso no recursivo para evitar la recursión infinita.
Recursion.java
Laboratorio
Pelicula.java
public class Pelicula {
private String titulo,tipo;
//...
public String getTipo () {
return tipo;
}
public String setTipo (String nuevoTipo) {
tipo = nuevoTipo;
}
}
PruebaPeliculas.java
public class PruebaPeliculas {
public static void main (String[] args) {
Pelicula pelicula1 = new Pelicula();
pelicula1.setTipo("Comedia");
if (pelicula1.getTipo().equals("Drama")) {
System.out.println("La pelicula es un drama");
}
else {
System.out.println("La pelicula no es un drama");
}
}
}
2.10. Encapsulamiento
1. Las variables de instancia de una clase deberían ser declaradas como privadas
Solo un método debería acceder a las variables privadas.
No se debe acceder a las variables de instancia directamente, sino a través de un método.
Laboratorio
Pelicula.java
public class Pelicula {
private String titulo;
private String tipo;
1. Cuando el argumento es una primitva, se genera una copia de la variable para el método.
Laboratorio
TestPrimitivas.java
public class TestPrimitivas {
public static void main (String[] args)
{
int numero = 150;
unMetodo(numero);
System.out.println(numero);
}
Laboratorio
TestReferencias.java
public class TestReferencias {
public static void main (String[] args)
{
Pelicula pelicula1 = new Pelicula();
pelicula1.setTitulo("El Resplandor");
pelicula1.setTipo("Drama");
unMetodo(pelicula1);
System.out.println(pelicula1.getTipo());
}
Ejercicio
1. Cree la clase Cliente con los atributos código, nombre, dirección, teléfono encapsulados
(métodos set y get).
2. Agregue a la clase Cliente el método toString que muestre en pantalla todos los datos de la
clase Cliente.
3. Cree la clase Pelicula con los atributos código, titulo, tipo, precio de alquiler. Incluya el
método toString.
4. Cree un programa como TacoraFilms.java y cree como objetos a dos clientes con datos
de sus familiares. (cliente1 y cliente2)
5. Agregue al programa principal objetos de dos películas que haya visto recientemente.
(pelicula1, pelicula2)
6. Al final del programa coloque lo siguiente:
System.out.println(cliente1);
System.out.println(cliente2);
System.out.println(pelicula1);
System.out.println(pelicula2);
Resumen
Se realizara un estudio sobre características avanzadas en la definición de clases.
3.1.3. Constructores
Para una adecuada iniciación de variables de instancia, la clase debe tener un constructor.
Un constructor se invoca automáticamente cuando se crea un objeto.
Se declaran de forma pública.
Tiene el mismo nombre que la clase.
No retorna ningún valor.
Si no se codifica un constructor, el compilador crea uno por defecto sin argumentos que solo inicia las
variables de instancia.
Laboratorio
Pelicula.java
public class Pelicula {
private String titulo;
private String tipo = "Drama";
public Pelicula() {
titulo = "Pelicula sin definir.";
}
}
TestConstructores.java
public class TestConstructores {
public static void main (String[] args) {
Pelicula pelicula1 = new Pelicula();
Pelicula pelicula2 = new Pelicula("La lista de
Schindler.");
Pelicula pelicula3 = new Pelicula("El
dormilon.","Comedia");
System.out.println(pelicula1.getTitulo()
+pelicula1.getTipo());
System.out.println(pelicula2.getTitulo()
+pelicula2.getTipo());
Autor: Ing. Ángel Chata T. 51 Revisado por: José Canchcucaja V.
“Fundamentos de Java” Julio 2008
System.out.println(pelicula3.getTitulo()
+pelicula3.getTipo());
}
}
Se puede compartir código entre constructores usando la referencia this. Un constructor invoca a otro
pasandole los argumento que requiere.
Laboratorio
Pelicula.java
public class Pelicula {
private String titulo;
private String tipo;
public Pelicula()
{
this("Pelicula sin definir");
}
public Pelicula (String titulo) {
this.titulo = titulo;
}
public String getTitulo() {
return titulo;
}
}
TestThis.java
public class TestThis {
public static void main (String[] args) {
Pelicula pelicula1 = new Pelicula();
Pelicula pelicula2 = new Pelicula("Todo sobre mi madre");
System.out.println(pelicula1.getTitulo());
System.out.println(pelicula2.getTitulo());
}
}
Laboratorio
Pelicula.java
import java.util.*;
public class Pelicula {
private static int numeroDias = 3;
// iniciación compleja
private static double precioMinimo;
static {
Date hoy = new Date();
if (hoy.getDay() == 0) //si es Domingo
precioMinimo = 5.10;
else
precioMinimo = 3.29;
}
public int getNumeroDias() {
return numeroDias;
}
public double getPrecioMinimo() {
return precioMinimo;
}
}
TestStatic.java
public class TestStatic {
public static void main (String[] args) {
Pelicula pelicula = new Pelicula();
System.out.println(pelicula.getNumeroDias());
System.out.println(pelicula.getPrecioMinimo());
}
}
Laboratorio
Pelicula.java
public class Pelicula {
private static float precio = 3.50f;
private String titulo;
Autor: Ing. Ángel Chata T. 53 Revisado por: José Canchcucaja V.
“Fundamentos de Java” Julio 2008
}
}
3.2 EJERCICIOS
Ejercicio 1
Cree la clase Cliente que tendrá los siguiente datos código (int) nombre, dirección, teléfono (String)
La clase debe contar con dos constructores.
Uno sin argumentos para autogenerar el código (que inicia en 2000).
Otro que aceptara los datos nombre, dirección, teléfono.
El código del cliente debe ser automático e incrementarse en uno cada vez que se cree una instancia.
Los códigos inician en 2001
Agregue los métodos set y get para estos atributos.
También agregue el método toString() para mostrar los datos del cliente asi como el código creado
automáticamente.
Cree la clase Pelicula con los siguientes datos: codigo (int) titulo, tipo (String) precio (float)
La clase debe contar con dos constructores.
Uno sin argumentos para autogenerar el código (que inicia en 9000).
Otro que aceptara los datos titulo, tipo, precio .
El código de la pelicula debe ser automático e incrementarse en uno cada vez que se cree una instancia.
Los codigos inician en 9001
Agregue los métodos set y get para estos atributos.
También agregue el método toString() para mostrar los datos de la pelicula incluido el código
autogenerado.
Defina la clase BaseDeDatos donde creara 4 clientes (nombres familiares) y 6 películas (que haya visto
en cine o televisión).
Autor: Ing. Ángel Chata T. 54 Revisado por: José Canchcucaja V.
“Fundamentos de Java” Julio 2008
Finalmente cree el programa TestClases que muestre toda la base de datos (haciendo uso de la ventaja
del método toString() ). También muestre el ultimo código autogenerado tanto en clientes como en
películas que deberá obtener directamente de sus clases.
Cliente.java
public class Cliente {
private int id;
//...
private static int ultimoId = 2000;
//...
public Cliente() {
this.id = ...
ultimoId++;
}
public Cliente(String nombre...) {
this();
this.nombre = ...
}
Pelicula.java
public class Pelicula {
private int id;
//...
private static int ultimoId = 9000;
//...
public static int getUltimoId() {
return ultimoId;
}
}
BaseDeDatos.java
public class BaseDeDatos {
Cliente cliente1 = new Cliente("Daneel Olivaw","Solaria4","11-2542");
//...
Pelicula pelicula1 = new Cliente("El Padrino","Drama",5.30f);
//...
}
TestClases.java
public class TestClases {
public static void main (String[] args) {
Ejercicio 2
Cree la clase Vendedor con los siguientes atributos nombre, edad, ventas, sueldoFijo. La clase también
contara con un atributo estático para contar la cantidad de vendedores que se vayan creando. La clase
cuenta con un constructor que recibe nombre, edad, ventas, sueldoFijo como argumentos. En este
constructor se incrementara el contador de vendedores creados.
Contara con un método estático que retornara la cantidad actual de vendedores creados getCantidad().
Otro método retornara el sueldo del vendedor getSueldo(). El sueldo es el 0.25% de las ventas mas el
sueldo fijo.
Agregue otro constructor con dos argumentos como nombre y ventas únicamente.
En el programa AplicacionVendedor.java se encuentra lo siguiente:
...
Vendedor vendedorHari = new Vendedor("Hari Seldon",8000);
Vendedor vendedorSalvor= new Vendedor("Salvor Hardin",30,5000,1300);
System.out.println(Vendedor.getCantidad());
System.out.println(vendedorHari.getSueldo());
System.out.println(vendedorSalvor.getSueldo());
...
4.1.1 Definición
Un arreglo es una colección de variables del mismo tipo.
La longitud de un arreglo es fijo cuando se crea.
Se declara el arreglo
Inicialmente la variable referencia un valor nulo potencias-> null
int[] potencias; //forma mas usada
int potencias[];
Los arreglos son muy usados para buscar datos, especialmente si se conocen sus valores cuando se
crean.
Los elementos de un arreglo inician con el valor por defecto de una primitiva.
La propiedad length del arreglo es su longitud.
Autor: Ing. Ángel Chata T. 57 Revisado por: José Canchcucaja V.
“Fundamentos de Java” Julio 2008
// bloque 1
int[] numeros = new int[5];
System.out.println(numeros.length-1); // 4
// bloque 2
int[] truco = new int[3];
System.out.println(truco[0]); // 0
// bloque 3
int[] cubos = {1, 8, 27, 64, 125};
int indice = cubos.length; // 5
System.out.println(cubos[indice]); // Error el índice va de 1 a 4, n
to
// bloque 4
int[] pares = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
int cantidad = 0;
while (cantidad.length < 10) { //while (pares[cantidad] != null) {
cantidad++;
}
// bloque 5
char[] vocales;
System.out.println(vocales.length); // Falta inicializar
Errores:
Definir una matriz de enteros colocando como valores la suma de su numero de fila y columna en la
matriz
{
int n= 10;
int p= 20;
double[][] m = new double[n][p];
for (int i= 0; i<n; i++)
for (int j= 0; j<p; j++)
m[i][j]= i+j;
}
4.3. LABORATORIO
4.3.1 Ejercicio
Se tiene en un arreglo las notas del examen parcial de 10 alumnos. Encuentre la mínima y máxima nota.
Notas.java
package ejercicios;
public class Notas {
public static void main(String[] args) {
int[] notas = {12, 04, 07, 18, 10, 15, 05, 16, 18, 11};
int i = 1;
double min= 20.1;
double max= 00.0;
while (i < 10) {
...
}
System.out.println(max);
System.out.println(min);
}
}
4.3.2. Ejercicio
Se cuenta con los arreglos siete y ocho
Multiplicar el primer elemento del arreglo siete con el primer elemento del arreglo ocho y así
sucesivamente. Almacenar el resultado en otro arreglo y muéstrelo.
Matriz.java
package ejercicios;
public class Matriz {
public static void main(String[] args) {
}
}
4.4. CADENAS.
4.4.1. Definición.
Una cadena es una secuencia de caracteres
La librería String (o clase String) se usa para definir todas las cadenas en Java.
Las cadenas se delimitan con comillas dobles.
//
System.out.println("Hola Mundo.");
String camara = "Camara";
String luces = camara +" Accion";
String vacio = "";
//
4.4.3. Concatenacion.
Para concatenar cadenas puede usar lo siguiente:
// Usando el operador +
System.out.println(" Nombre = " + nombreEmpleado );
// Puede concatenar primitivas y cadenas.
int edad = 22;
System.out.println(" Edad = " + edad );
// Mediante la función concat()
String nombre = "Elijah ";
String apellidos = "Baley ";
String nombreCompleto = nombre.concat(apellidos);
> 11
//
String alfa = "1977";
int alfaInteger = Integer.parseInt(alfa);
//
String beta = "19.77";
float betaFloat = Float.parseFloat(beta);
4.5.11. EJERCICIOS
Cual es la respuesta de:
// Bloque 1
String s = new String("Viernes");
if (s=="Viernes")
System.out.println("Respuesta A");
if (s.equals("Viernes"))
System.out.println("Respuesta B");
> ?
// Bloque 2
4.6.2. Ejercicios
Cual es el resultado de:
//
String [] categorias = {"Drama", "Comedia", "Accion", "Infantil"};
int indice = categorías.length – 2;
System.out.println(categorías[indice].length() );
//
String [] categorias = {"Drama", "Comedia", "Accion", "Infantil"};
int indice = categorías.length – 2;
System.out.println(categorías[indice].length() );
4.7. MAIN
main() cuenta con un único parámetro que es un arreglo de cadenas.
Este arreglo de cadenas son los parámetros de la linea de comandos.
4.8 LABORATORIO
Cree la clase Cliente que tendra los siguiente datos codigo (int) nombre, direccion, telefono (String)
La clase debe contar con dos constructores.
Uno sin argumentos para autogenerar el código (que inicia en cero).
Otro que aceptara los datos nombre, dirección, teléfono.
El código del cliente debe ser automático e incrementarse en uno cada vez que se cree una instancia.
Los códigos inician en 2001
Opcionalmente agregue los métodos set y get para estos atributos.
También agregue el método toString() para mostrar los datos del cliente así como el código creado
automáticamente.
Cree la clase Pelicula con los siguientes datos: codigo (int) titulo, tipo (String) precio (float),
La clase debe contar con dos constructores.
Uno sin argumentos para autogenerar el codigo (que inicia en 1).
Otro que aceptara los datos titulo, tipo, precio .
El código de la Pelicula debe ser automático e incrementarse en uno cada vez que se cree una instancia.
Los códigos inician en 9001
Opcionalmente agregue los métodos set y get para estos atributos.
También agregue el método toString() para mostrar los datos de la pelicula incluido el código
autogenerado.
Cliente.java
public class Cliente {
private int id;
private static int ultimoId=2000;
private String nombre;
private String direccion;
private String telefono;
public Cliente() {
this.id = ultimoId;
ultimoId++;
}
nombre = nuevoNombre;
}
public Pelicula() {
this.id = ultimoId;
ultimoId++;
}
Defina la clase BaseDeDatos con tres métodos: en el primero creara 4 clientes (nombres familiares) y 6
peliculas (que haya visto en cine o televisión). Los clientes y las películas se encontraran en un arreglo.
El segundo devolvera el objeto cliente ingresando el id del cliente. El tercero realizara lo mismo con el id
de una pelicula.
BaseDeDatos.java
package tacora;
public class BaseDeDatos {
public BaseDeDatos() {
cliente[0] = new Cliente("Daneel Olivaw","Solaria 4",
"511-711-2542");
//...
pelicula[0] = new Pelicula("Neverland","Drama",10.0f);
//...
}
Cree la aplicación Arreglos que permita Cargar la base de datos y mostrar los datos del cliente con
codigo 2002 y la pelicula con codigo 9003
TacoraArreglos.java
package tacora;
public class TacoraArreglos {
public static void main (String[] args) {
int clienteId;
int peliculaId;
if (args.length != 4)
System.out.println("java TacoraArreglos 2002 9003");
else {
clienteId = args[0];
peliculaId = args[1];
}
BaseDeDatos bd = new BaseDeDatos();
System.out.println(bd.getCliente(clienteId ));
System.out.println(bd.getPelicula(peliculaId));
}
}
Segunda Parte
Modifique la clase Pelicula y agregue el atributo: cliente (Cliente) que sera quien alquile la pelicula,
implemente el método set y get correspondientes.
Modifique la clase Cliente y agregue el atributo: importeAlquiler (float) implemente su métodos set y
get correspondiente.
Modifique la clase BaseDeDatos y agregue un método que permite calcular el importe de alquiler de un
cliente. La aplicación debe permitir realizar el alquiler de 3 películas al cliente 2002 y muestre su costo.
Pelicula.java
package tacora;
public class Pelicula {
private Cliente cliente;
//...
public void setCliente(Cliente alquiladoPor) {
cliente = alquiladoPor;
}
}
Cliente.java
package tacora;
public class Cliente {
private float importeAlquiler;
//...
}
BaseDeDatos.java
package tacora;
public class BaseDeDatos {
//...
public static float getImporte(Cliente cliente) {
Pelicula pelicula = null;
Autor: Ing. Ángel Chata T. 67 Revisado por: José Canchcucaja V.
“Fundamentos de Java” Julio 2008
float importe = 0;
for (int i = 0;...) {
if (pelicula[i].getCliente().getId() == cliente.getId()) {
importe += pelicula[i].getPrecio();
}
}
return importe;
}
}
TacoraArreglos.java
package tacora;
public class TacoraArreglos {
public static void main (String[] args) {
int clienteId;
int peliculaId1;
int peliculaId2;
int peliculaId3;
if (args.length != 4)
System.out.println("java TacoraArreglos 2002 9001 9002 9003");
else {
clienteId = args[0];
peliculaId1= args[1];
peliculaId2= args[2];
peliculaId3= args[3];
}
BaseDeDatos bd = new BaseDeDatos();
System.out.println(cliente);
System.out.println(pelicula1);
System.out.println(pelicula2);
System.out.println(bd.getPelicula(peliculaId3));
System.out.println(bd.getImporte(cliente));
}
}
5.1. HERENCIA
5.1.1 Definición
Permite a una clase compartir la misma estructura de datos y comportamiento de otra clase.
La herencia minimiza la necesidad de duplicar código.
El Polimorfismo permite utilizar el método de acuerdo al objeto heredado.
Item
Superclase
5.1.4. Métodos
La superclase define los métodos para todas las subclases.
La subclase puede especificar métodos propios.
Item0.java
public class Item0 {
protected float precio = 0;
Pelicula0.java
public class Pelicula0 extends Item0
{
private String titulo = "";
{
return titulo;
}
}
TestSuper.java
public class TestSuper {
public static void main (String[] args) {
}
}
Item1.java
public class Item1 {
public float calcularImporte(int cliente) {
return 50;
}
}
Pelicula1.java
public class Pelicula1 extends Item1 {
public float calcularImporte(int cliente) {
if (cliente < 500)
return 10;
else
return 30;
}
}
TestSobrescribir.java
public class TestSobrescribir {
public static void main (String[] args) {
}
}
Item2.java
public class Item2 {
public float calcularImporte(int cliente) {
return 50;
}
}
Equipo2.java
public class Equipo2 extends Item2 {
public float calcularImporte(int cliente) {
float seguroEquipo = 25;
float alquiler = super.calcularImporte(cliente);
return seguroEquipo + alquiler;
}
}
TestSuper2.java
public class TestSuper2 {
public static void main (String[] args) {
}
}
5.2. Polimorfismo
Permite efectuar una misma operación dependiendo del tipo de objeto.
Ejemplo
TacoraFilms inicia sus operaciones alquilando únicamente películas.
Tres meses después amplia el alquiler a equipos, juegos y libros.
Alquiler3.java
public class Alquiler3 {
private int dias;
public Alquiler3(int dias) {
this.dias = dias;
}
public int getDias () {
return dias;
}
}
Item3.java
public class Item3 {
protected float calcularImporte(Alquiler3 contrato) {
return 0;
}
}
Pelicula3.java
public class Pelicula3 extends Item3 {
protected float calcularImporte(Alquiler3 contrato) {
int importe = 2*contrato.getDias();
return importe;
}
}
Equipo3.java
public class Equipo3 extends Item3 {
protected float calcularImporte(Alquiler3 contrato) {
int seguroEquipo = 50;
int importe = seguroEquipo + 5*contrato.getDias();
return seguroEquipo + importe;
}
}
Juego3.java
public class Juego3 extends Item3 {
String fabricante;
public Juego3(String fabricante) {
this.fabricante = fabricante;
}
public String getFabricante() {
return fabricante;
}
protected float calcularImporte(Alquiler3 contrato) {
String fabricante = this.fabricante;
int tasa = 0;
if (fabricante.equals("PlayStation")) tasa = 2;
if (fabricante.equals("Nintendo")) tasa = 1;
int importe = tasa*contrato.getDias();
return importe;
}
}
Libro3.java
public class Libro3 extends Item3 {
protected float calcularImporte(Alquiler3 contrato) {
return 0;
}
}
TestPolimorfismo.java
public class TestPolimorfismo {
public static void main (String[] args) {
}
}
testOperador(oscar);
testOperador(vhs);
testOperador(mu);
testOperador(agua);
}
public static void testOperador (Item3 articulo) {
if (articulo instanceof Juego3) {
Juego3 juego = (Juego3) articulo;
System.out.println(juego.getFabricante());
}
else {
System.out.println("No tiene Fabricante");
}
}
}
Librería.java
public final class Libreria {
public final static String BLANCO = "000000";
public final static float PI = 3.141592f;
TestLibreria.java
public class TestLibreria {
public static void main (String[] args) {
System.out.println(Libreria.BLANCO);
System.out.println(Libreria.PI);
System.out.println(Libreria.getModulo10(11));
System.out.println(Libreria.getModulo10(880385));
}
}
El objeto "Zelig" que estaba referenciado por pelicula ha perdido todas sus referencias.
Luego el Garbage Collector liberara el espacio ocupado por "Zelig"
El método finalize es llamado justo antes que el Garbage Collector libere la memoria. En este instante se puede
aprovechar para realizar otras operaciones.
}
}
5.6. Ejercicio
Encuentre los errores en el siguiente código.
Item.java
1. package alquiler;
2. public class Item {
3. public final int MAXIMO = 5;
4. public String getNombre() return "";
5. private String getColor() return "";
6. protected String getImporte() return "";
7. String getAlias() return "";
8. public final String getFabricante() return "";
9. }
Pelicula.java
1. package alquiler;
2. public class Pelicula extends Item {
3. public final int MAXIMO = 5;
4. public String getNombre() return super.getNombre();
5. private String getColor() return super.getColor();
6. protected String getImporte() return super.getImporte();
7. String getAlias() return super.getAlias();
8. public final String getFabricante()
9. return super.getFabricante();
10. }
Juguete.java
1. package almacen;
2. public final class Juguete {
3. Item item = new Item("");
4. public String getNombre() return item.getNombre();
5. public String getColor() return item.getColor();
6. protected String getImporte() return item.getImporte();
7. String getAlias() return item.getAlias();
8. }
Pelota.java
1. package almacen;
2. public final class Pelota extends Juguete {
3. public String getNombre() return super.getNombre();
4. public String getColor() return super.getColor();
5. protected String getImporte() return super.getImporte();
5.7. Laboratorio.
Cree una clase Item.java con los siguientes atributos: id (int); titulo, descripción, ranking, categoría (String) , precio
de alquiler por dia (double). Todos estos atributos seran protected.
Agregue un atributo entero privado estático que inicia en 1000 para autogenerar el Id del item.
Agregue un constructor sin parámetros que autogenere un id para el item en base al atributo estático.
Agregue un segundo constructor con argumentos titulo, descripción, precio, ranking y categoría. Este constructor
invocara al primer constructor para asignar el id. Ademas asignara los argumentos a los atributos.
Agregue todos los métodos set y get para cada atributo.
Item.java
public class Item {
private static int siguienteId = 1000;
protected int id;
...
public Item() {
this.id = ++siguienteId;
}
public Item(String titulo... ) {
this();
this.titulo = titulo...
}
public int getId()...
...
public void setTitulo(String titulo)...
public String getTitulo()...
...
public static int getSiguienteId()...
}
Cree una clase Pelicula.java que herede de Item.java con los siguientes atributos: duracion (int) y director (String).
Estos atributos seran privados.
Agregue un constructor con argumentos titulo, descripción, precio, ranking, numero de dias, categoría, duración y
director. Este constructor invocara al constructor de la superclase y luego asignara los dos ultimos argumentos a sus
atributos privados.
Agregue todos los métodos set y get para sus dos atributos privados.
Agregue el método toString() que devuelva todos los atributos privados y heredados
Pelicula.java
public class Pelicula extends Item {
private String director;
Cree una clase Juego.java que herede de Item.java con los siguientes atributos: memoria (int) y tipo (String). Estos
atributos seran privados.
Agregue un constructor con argumentos titulo, descripción, precio, ranking, numero de dias, categoría, memoria y
tipo. Este constructor invocara al constructor de la superclase y luego asignara los dos últimos argumentos a sus
atributos privados.
Agregue todos los métodos set y get para sus dos atributos privados.
Agregue el método toString() que devuelva todos los atributos privados y heredados
Juego.java
public class Juego extends Item {
private int memoria;
private String tipo;
BaseDeDatos.java
public class BaseDeDatos {
private static Cliente[] cliente = new Cliente [4];
private static Items[] item = new Item [4];
public BaseDeDatos() {
cliente[0] = new Cliente("Daneel Olivaw");
//...
item[0] = new Pelicula("La caravana del valor",...);
item[1] = new Pelicula("En las lunas de Endor",...);
item[2] = new Juego("Mu Online",...);
item[3] = new Juego("War Craft",...);
//...
}
La clase Alquiler.java contara con los siguientes atributos: un arreglo de Ítems que se alquilaran (Item) el cliente que
alquila (Cliente) un numero de alquiler id (int), la cantidad de ítems alquilados (int) y la cantidad de dias de alquiler
(int).
Un atributo de clase privado estático entero será el contador de id que iniciara en 500.
Una constante será el máximo numero de ítems a alquilar que es 10.
Una constante será el impuesto del alquiler de 19%.
Un constructor asignara el cliente por argumento y el numero de dias de alquiler. También creara el arreglo de ítems,
y su numero de alquiler.
Un método para agregar ítems al arreglo de ítems del alquiler.
Un método imprimira todo el detalle del alquiler en pantalla.
Alquiler.java
public class Alquiler {
private static int siguienteAlquilerId = 500;
private int alquilerId;
private int numeroDias;
private int clienteId;
private int cantidadItems;
private int[] itemId;
private final static int MAXITEMS = 10;
private final static double IMPUESTO = 0.19;
...
public Alquiler(int clienteId, int numeroDias) {
this.alquilerId = ...
this.clienteId = ...
...
itemId = new int[MAXITEMS];
}
public void agregarItem(int item) {
if (...) {
itemId[...] = item;
cantidadItems++;
}
else System.out.println("Demasiados ítems!");
}
public void imprimirReporte() {
/*
Cliente Id: 2000 Nombre: Salvor Hardin
Dias alquiler: 5
Detalle
1. El Padrino Precio = 1.10
2. Odisea 2001 Precio = 2.20
3. Aeropuerto 77 Precio = 3.30
Importe venta = 33.00
Importe total = 39.27
*/
}
Sirven para modelar objetos de alto nivel, no contienen código, sino solo declaraciones. Todos sus
métodos deben existir en sus clases hijas.
Una clase abstracta no puede ser instanciada (Crear un objeto a partir de ella).
Métodos abstractos
Laboratorio.
Item.java
public abstract class Item {
protected String titulo;
protected float precio = 5.0f;
public abstract boolean esAlquilable();
public float getPrecio() {
return precio;
}
}
Pelicula.java
public class Pelicula extends Item {
public boolean esAlquilable() {
return true;
}
}
Libro.java
public class Libro extends Item {
public float getPrecio() {
return 0.0f;
}
}
Abstracto.java
public class Abstracto {
System.out.println(pelicula.esAlquilable());
System.out.println(pelicula.getPrecio());
System.out.println(libro.esAlquilable());
System.out.println(libro.getPrecio());
6.2. Interfases
Una interfase es totalmente abstracta; todos sus métodos son abstractos, sus atributos son públicos
estáticos y final.
Una interfase define los métodos que otras clases pueden implementar pero no provee ninguna línea de
código.
Una clase solo puede heredar de una superclase.
Una clase puede implementar muchas interfases; por lo que las interfases permiten herencia múltiple.
Ejemplos de interfases:
Conducible
No Conducible
Las interfases describen la conducta que requiere muchas clases. El nombre de una interfase por lo
general es un adjetivo como Conducible, Ordenable, Ubicable.
Aquí se diferencia de una clase que usualmente es un sustantivo como Pelicula, Cliente,
Alquiler
Las clases implementadas por una interfase pueden ser no tener ninguna relación unas con otras.
A diferencia de las clases heredadas de una superclase tiene similitudes.
Las clases que implementan una interface deben definir todos los métodos de la interface.
Conducible.java
public interface Conducible {
public static final int MAXIMO_GIRO = 45;
public abstract void girarIzquierda(int grados);
public abstract void girarDerecha(int grados);
También se puede definir la interfase sin los calificadores public static final abstract, puesto
que son implícitos.
Para declarar que una clase que implementa una interfase se usa implements
Laboratorio
Conducible.java
public interface Conducible {
int MAXIMO_GIRO = 90;
void girarIzquierda(int grados);
void girarDerecha(int grados);
}
NaveArea.java
public class NaveAerea {
protected char direccion;
protected int altura;
public void setDireccion(char direccion) {
this.direccion= direccion;
}
public char getDireccion() {
return this.direccion;
}
}
Globo.java
public class Globo extends NaveAerea implements Conducible {
private int volumenGas;
public void setVolumenGas(int volumenGas) {
this.volumenGas= volumenGas;
}
public int getVolumenGas() {
return this.volumenGas;
}
public void girarDerecha(int grados) {
if (getDireccion()=='N' && grados==90) setDireccion('E');
}
}
Patin.java
public class Patin implements Conducible {
public void girarDerecha(int grados) {
System.out.println("Giro de "+grados+" grados a la derecha");
}
public void girarIzquierda(int grados) {
System.out.println("Giro de "+grados+" grados a la izquierda");
}
}
TestInterface.java
public class TestInterface {
zepelin.setDireccion('N');
zepelin.girarDerecha(90);
System.out.println(zepelin.getDireccion());
EJERCICIO 1
Crear la interfaz PuedeCantar (que es capaz de cantar), un interfaz muy simple que sólo posee un
método cantar.
PuedeCantar.java
public interface PuedeCantar {
public void cantar();
}
Crear la clase Persona que implemente el interfaz Cantable y que cuando cante lo haga con las notas
musicales.
Persona.java
public class Persona implements PuedeCantar {
public void cantar() {
System.out.println("do re mi fa sol la si");
}
}
Crear la clase Canario y Gallo que implemente el interfaz PuedeCantar y que muestre como cantan
Canario.java
... System.out.println("pio pio pio") ...
Gallo.java
... System.out.println("ki ki ri ki") ...
ProgramaInterfaz.java
public class ProgramaInterfaz {
public static void main(String arg[]) {
}
Autor: Ing. Ángel Chata T. 84 Revisado por: José Canchcucaja V.
“Fundamentos de Java” Julio 2008
Ejercicio 2.
Algunos seres pueden caminar y puede nadar estas dos capacidades son interfases
(PuedeCaminar.java y PuedeNadar.java). Los mamiferos son animales que pueden moverse
(Mamifero.java). El gato es un mamifero que puede nadar y moverse (Gato.java).
Un Loro puede caminar pero no puede nadar.
PuedeCaminar.java
public interface PuedeCaminar{
public void caminar();
}
PuedeNadar.java
public interface PuedeNadar {
public void nadar();
}
Mamifero.java
public class Mamifero {
String especie, color;
public void caminar() {
System.out.println("El mamífero camina");
}
}
Gato.java
public class Gato extends Mamifero implements PuedeCaminar, PuedeNadar {
private int numeroPatas = 4;
public void nadar() {
System.out.println("El gato nada");
}
}
Loro.java
public class Loro implements PuedeCaminar...
...System.out.println("El loro camina");
...
Interfaces.java
public class Interfaces {
public static void main(String[] args) {
Gato felix = new Gato();
felix.caminar();
felix.nadar();
Loro pepe = new Loro();
pepe.caminar();
}
}
Por que no se requiere escribir todos los métodos de las interfaces en la clase Gato?
Ejercicio adicional.
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html
int precio ;
System.out.println(precio);
precio = 2;
System.out.println(precio + 5);
Integer objetoPrecio;
objetoPrecio = new Integer(precio);
System.out.println(objetoPrecio.toString());
System.out.println(objetoPrecio);
System.out.println(objetoPrecio+5);
System.out.println(objetoPrecio.intValue());
System.out.println(objetoPrecio.intValue()+5);
7.2. COLECCIONES
Es un conjunto librerías para manipular y almacenar datos. Estas librerías se llaman colecciones.
7.2.1. Arquitectura.
http://java.sun.com/j2se/1.4.2/docs/api/java/util/package-tree.html
Las interfaces y las clases están relacionadas en un armazón (framework) de colecciones para facilitar
su uso.
- Interfaces de colecciones que son definiciones abstractas de los tipos de colecciones.
- Clases que implementan las interfaces.
- Clases abstractas que implementan parcialmente las interfaces.
- Métodos estáticos que son algoritmos (por ejemplo ordenar una lista).
- Interfaces de soporte para las colecciones. (una infraestructura).
Métodos de la interface
add(Object) Añade el objeto en la colección
addAll(Collection) Añade la colección.
clear() Quita todos los elementos de la colección.
contains(Object) ¿El objeto se encuentra en la colección?
containsAll(Collection) ¿Todos esos elementos están en la colección?
equals(Object) ¿Es igual esta colección al argumento?
isEmpty() ¿La colección está vacía?
Iterator iterator() Devuelve un iterador para la colección.
remove(Object) Elimina una aparición del objeto
removeAll(Collection) Elimina todos esos objetos
retainAll(Collection) Se queda sólo con los objetos del argumento
Autor: Ing. Ángel Chata T. 88 Revisado por: José Canchcucaja V.
“Fundamentos de Java” Julio 2008
Métodos de la interface
add(int, Object) Añade el objeto en la posición indicada
add(Object) Añade el objeto al final de la lista
addAll(int, Collection) Añade la colección en la posición
addAll(Collection) Añade la colección al final
clear() Quita todos los elementos de la lista.
contains(Object) ¿El objeto se encuentra en la lista?
containsAll(Collection) ¿Todos esos elementos están en la lista?
equals(Object) ¿Es igual la lista con el argumento?
get(int) Devuelve el objeto en la posición.
indexOf(Object) Devuelve la 1ra posición en la que está el objeto
isEmpty() ¿La lista está vacía?
Iterator iterator() Devuelve un iterador para la coleccion.
lastIndexOf(Object) Devuelve la última posición del objeto
ListIterator listIterator() Devuelve un iterador de lista
ListIterator listIterator(int) Devuelve un iterador de lista para la sublista que inicia en int
remove(int) Quita de la lista el objeto en esa posición
remove(Object) Elimina una aparición del objeto en la lista
removeAll(Collection) Elimina todos esos objetos
retainAll(Collection) Se queda sólo con los objetos del argumento
set(int, Object) Reemplaza el objeto en esa posición por el objeto
que se proporciona
size() Número de elementos en la Colección
List subList(int, int) Devuelve la sublista que comienza en el índice del primer
argumento hasta el indice del segundo argumento.
toArray() Devuelve un arreglo con los objetos de la colección.
Métodos de la interface
clear() Elimina todos los pares del mapa
containsKey(Object) ¿La clave proporcionada se encuentra en el mapa?
containsValue(Object) ¿Hay algún par con el valor proporcionado?
equals(Object) ¿Es igual este mapa y el proporcionado?
get(Object) Devuelve el objeto que se corresponde con la clave dada.
isEmpty() ¿La lista está vacía?
put(Object clave, Object valor) Asocia la clave proporcionada con el valor proporcionado
putAll(Map) Agrega los pares de ese mapa
remove(Object) Quita la clave del mapa junto con su correspondencia.
size() Devuelve el número de pares que hay en el mapa.
El concepto de Polimorfismo aplica para todas las clases que implementan estas interfases.
Las clases que implementan la interfase List son: ArrayList y LinkedList
Las clases que implementan la interfase Set son: HashSet y LinkedHashSet
La clase que implementa la sub-interfase SortedSet es: TreeSet.
- Primero se importan las librerías de java.util.* donde se concentran la gran mayoría de las Clases del
"Collection Framework".
- Se inicia la declaración de la clase seguido de su método principal main.
- Se definen 5 instancias con el constructor de la clase Producto.
- Agregamos estas instancias al ArrayList con el método add
- Mostramos el número de objetos de la colección mediante el método size.
- Se declara una instancia Iterator la cual facilita la extracción de objetos de la colección.
- Se extrae los objetos del ArrayList y se muestran en pantalla.
- Se elimina el objeto con indice 2. Se muestra la lista nuevamente.
- Se eliminan todos los objetos mediante el método clear.
import java.util.*;
public class MercadoLista
{
public static void main(String args[])
{
// Definir 5 instancias de la Clase Producto
Producto pan = new Producto("Pan", 6);
Producto leche = new Producto("Leche", 2);
Producto manzanas = new Producto("Manzanas", 5);
Producto brocoli = new Producto("Brocoli", 2);
// Definir un ArrayList
ArrayList lista = new ArrayList();
Iterator it = lista.iterator();
while ( it.hasNext() ) {
Object objeto = it.next();
Producto producto = (Producto)objeto;
System.out.println(producto);
}
Producto.java
public class Producto {
return false;
}
- Aun cuando se agregaron 6 elementos, la lista solo cuenta con 5. Set no permite duplicados.
- La evaluacion de duplicidad de objetos se realiza mediante los métodos equals y hashCode.
- Un Set no cuenta con indice, por lo que para eliminar un elemento se indica el objeto.
MercadoHashSet.java
import java.util.*;
public class MercadoHashSet
{
public static void main(String args[])
{
// Definir 5 instancias de la Clase Producto
Producto pan = new Producto("Pan", 6);
Producto leche = new Producto("Leche", 2);
Producto manzanas = new Producto("Manzanas", 5);
Producto brocoli = new Producto("Brocoli", 2);
Producto carne = new Producto("Carne", 2);
Producto res = new Producto("Carne", 3);
// Definir un HashSet
HashSet lista = new HashSet();
lista.add(pan);
lista.add(leche);
lista.add(manzanas);
lista.add(brocoli);
lista.add(carne);
lista.add(res);
lista.remove(manzanas);
System.out.println(" Lista del mercado con " + lista.size() +
" productos");
for( Iterator it2 = lista.iterator(); it2.hasNext();) {
Producto producto = (Producto)it2.next();
System.out.println(producto);
}
import java.util.*;
public class Producto implements Comparable {
return false;
}
MercadoTreeSet.java
import java.util.*;
public class MercadoTreeSet
{
public static void main(String args[])
{
// Definir 5 instancias de la Clase Producto
Producto pan = new Producto("Pan", 6);
Producto leche = new Producto("Leche", 2);
Producto manzanas = new Producto("Manzanas", 5);
Producto brocoli = new Producto("Brocoli", 2);
Producto carne = new Producto("Carne", 2);
Producto res = new Producto("Carne", 3);
// Definir un TreeSet
TreeSet lista = new TreeSet();
lista.add(pan);
lista.add(leche);
lista.add(manzanas);
lista.add(brocoli);
lista.add(carne);
lista.add(res);
}
}
MercadoCollections.java
import java.util.*;
public class MercadoCollections
{
public static void main(String args[])
{
// Definir 5 instancias de la Clase Producto
Producto pan = new Producto("Pan", 6);
Producto leche = new Producto("Leche", 2);
Producto manzanas = new Producto("Manzanas", 5);
Producto brocoli = new Producto("Brocoli", 2);
Producto carne = new Producto("Carne", 2);
// Definir un ArrayList
ArrayList lista = new ArrayList();
mostrarLista(lista);
}
}
Producto.java
import java.util.*;
public class Producto implements Comparable {
return false;
}
AgendaHashMap.java
import java.util.*;
public class AgendaHashMap
{
public static void main(String args[])
{
// Definir un HashMap
HashMap agenda = new HashMap();
agenda.put("Oficina", "(304)-5205-8454");
agenda.put("Abogado", "(756)-1205-3454");
agenda.put("Papa", "(55)-9555-3270");
agenda.put("Tienda", "(874)-2400-8600");
AgendaTreeMap.java
import java.util.*;
public class AgendaTreeMap
{
public static void main(String args[])
{
// Definir un TreeMap
TreeMap agenda = new TreeMap();
7.5. EJERCICIO
public class Pelicula6 {
private int codigo;
private String titulo;
private float precio;
private String tipo;
Pelicula(int codigo, String titulo, float precio, String tipo) {
...
}
...
}
public class TestCartelera {
public static void main (String[] args) {
...
}
}
En la clase pelicula agregue los métodos compareTo, equals y hashCode.
En el programa TestCartelera.java cree una lista ordenada (TreeSet) de 5 películas y muestrelas en
orden alfabetico. Muestrelas en orden inverso también.
Agregue dos películas mas y muestre las películas.
Coloque las 7 peliculas en una mapa (TreeMap) el objeto pelicula será la clave y su valor será un String
que almacena el nombre del cliente que lo alquila.
8.1. EXCEPCIONES
8.1.1. Definiciones
8.1.3. Excepciones
Metodo2 Metodo2
Código de error
Metodo3 Metodo3
Código de error
Excepcion
Metodo4 Metodo4
Metodo2 Metodo2
Metodo3 Metodo3
Código de error
Excepcion
Metodo4 Metodo4
8.1.4. Throwable
Throwable
Error Exception
Errores.
Heredan de la clase Error; estos se generan cuando ocurren errores fatales para el programa como por
ejemplo: cuando la memoria esta llena o cuando es imposible encontrar una clase requerida.
Excepciones no controladas
Heredan de la clase RuntimeException.
Estas ocurren cuando por ejemplo se divide entre cero o se intenta acceder a un elemento del arreglo
fuera de sus limites.
Mediante código se puede capturar, manipular o ignorar estas excepciones.
Si no maneja el error, el java terminara el programa indicando el estado del error.
Excepciones controladas
Heredan de la clase Exception.
Estas deben ser capturadas y manejadas en algun lugar de la aplicación.
Las excepciones creadas por el programador seran heredadas de la clase Exception.
Autor: Ing. Ángel Chata T. 102 Revisado por: José Canchcucaja V.
“Fundamentos de Java” Julio 2008
Excepciones controladas
Se puede:
Excepciones no controladas
La documentación del java indicara que excepciones lanza los métodos del java.
Clase : java.io.FileInputStream
Método: public FileInputStream(String name)
throws FileNotFoundException
Método: public int read() throws IOException
http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileInputStream.html
int cantidad;
String cadena = "5";
Autor: Ing. Ángel Chata T. 103 Revisado por: José Canchcucaja V.
“Fundamentos de Java” Julio 2008
try {
cantidad = Integer.parseInt(cadena);
}
catch ( NumberFormatException e) {
System.err.println(cadena + " no es un entero");
}
Laboratorio:
Pruebe este ejemplo en un programa TestException.java. Cambie la cadena por "cinco", "1.1", "2f".
int cantidad= 0;
int divisor = 0;
String cadena = "5";
try {
cantidad = Integer.parseInt(cadena);
System.out.println(cantidad);
int resultado = cantidad / divisor;
System.out.println(resultado);
}
catch ( NumberFormatException e) {
System.err.println(cadena + " no es un entero");
}
catch ( ArithmeticException e) {
System.err.println("Error en "+cantidad+"/"+divisor);
}
}
}
Laboratorio:
Pruebe este ejemplo en un programa TestMultiException.java. Cambie la cadena por "cinco",
"1.1", "5" y divisor cambie por 0, 1, 500
int cantidad= 0;
int divisor = 0;
String cadena = "5";
try {
if (cadena.equals("5"))
return;
cantidad = Integer.parseInt(cadena);
System.out.println(cantidad);
int resultado = cantidad / divisor;
System.out.println(resultado);
}
catch ( NumberFormatException e) {
System.err.println(cadena + " no es un entero");
}
catch ( ArithmeticException e) {
System.err.println("Error en "+cantidad+"/"+divisor);
}
finally {
System.err.println("Se trabajo con "+cadena+" y
"+divisor);
}
}
}
Laboratorio:
Pruebe este ejemplo, cambie la cadena por "cinco", "1.1", "5" y divisor cambie por 0, 1, 500
}
catch (IndexOutOfBoundsException e) {
System.err.println("Error en "+cadena+" "+posicion);
}
}
public static char getLetra(String cadena, int posicion)
throws IndexOutOfBoundsException
{
char c = cadena.charAt(posicion);
return c;
}
}
UserFileException.java
public class UserFileException extends Exception {
public UserFileException (String mensaje) {
super(mensaje);
}
}
8.3. LABORATORIO
Ensaye este ejemplo
8.4. EJERCICIO
Agregue los siguientes métodos al programa TestExcepcionTeclado.java. Cree excepciones para
su control.
TestExcepcionTeclado.java
import java.io.*;
public class TestExcepcionTeclado {
Windows® en general no sabe nada acerca de bases de datos, pero define el estándar
ODBC consistente en un conjunto de primitivas que cualquier driver o fuente ODBC debe ser
capaz de entender y manipular.
Los programadores que a su vez deseen escribir programas para manejar bases de datos
genéricas en Windows utilizan las llamadas ODBC.
Con JDBC ocurre lo mismo: JDBC es una especificación de un conjunto de clases y métodos
de operación que permiten a cualquier programa Java acceder a sistemas de bases de datos
de forma homogénea.
Sólo que JDBC no se limita al Windows® sino que se puede utilizar en cualquier sistema
operativo o plataforma.
Lógicamente, al igual que ODBC, la aplicación de Java debe tener acceso a un driver JDBC
adecuado. Este driver es el que implementa la funcionalidad de todas las clases de acceso a
datos y proporciona la comunicación entre el API JDBC y la base de datos real.
Toda la conectividad de bases de datos de Java se basa en sentencias SQL, por lo que se
hace imprescindible un conocimiento adecuado de SQL para realizar cualquier clase de
operación de bases de datos.
Casi todos los entornos de desarrollo Java ofrecen componentes visuales que proporcionan
una funcionalidad suficientemente potente sin necesidad de que sea necesario utilizar SQL,
aunque para usar directamente el JDK se haga imprescindible.
La especificación JDBC requiere que cualquier driver JDBC sea compatible con al menos el
nivel «de entrada» de ANSI SQL 92 (ANSI SQL 92 Entry Level).
El API JDBC soporta dos modelos diferentes de acceso a Bases de Datos, los modelos de dos
y tres capas.
Este modelo se basa en que la conexión entre la aplicación Java o el applet que se ejecuta
en el navegador, se conectan directamente a la base de datos.
Esto significa que el driver JDBC específico para conectarse con la base de datos, debe
residir en el sistema local. La base de datos puede estar en cualquier otra máquina y se
accede a ella mediante la red. Esta es la configuración de típica Cliente/Servidor: el
programa cliente envía instrucciones SQL a la base de datos, ésta las procesa y envía los
resultados de vuelta a la aplicación.
En este modelo de acceso a las bases de datos, las instrucciones son enviadas a una capa
intermedia entre Cliente y Servidor, que es la que se encarga de enviar las sentencias SQL a
la base de datos y recoger el resultado desde la base de datos. En este caso el usuario no
tiene contacto directo, ni a través de la red, con la máquina donde reside la base de datos.
Este modelo presenta la ventaja de que el nivel intermedio mantiene en todo momento el
control del tipo de operaciones que se realizan contra la base de datos, y además, está la
ventaja adicional de que los drivers JDBC no tienen que residir en la máquina cliente, lo cual
libera al usuario de la instalación de cualquier tipo de driver.
Un driver es una librería .jar por lo general, la que engloba clases totalmente escritas en
Java las que permiten conectarse a una base de datos y trabajar con ellas.
Un driver JDBC puede pertenecer a una de cuatro categorías diferentes en cuanto a la forma
de operar.
1. Puente JDBC-ODBC
2. Java Binario
3. Java Protocolo Nativo
4. Java Protocolo Independiente
Todos estos drivers deben usarse referenciándose la librería .jar en el proyecto Java que los utilice.
Ésta primera categoría de drivers es la utilizada por Sun inicialmente para popularizar JDBC
y consiste en aprovechar todo lo existente, estableciendo un puente entre JDBC y ODBC.
Este driver convierte todas las llamadas JDBC a llamadas ODBC y realiza la conversión
correspondiente de los resultados.
9.2.1 Ventajas
Java dispone de acceso inmediato a todas las fuentes posibles de bases de datos
No hay que hacer ninguna configuración adicional aparte de la ya existente.
9.2.2 Desventajas
La mayoría de los drivers ODBC a su vez convierten sus llamadas a llamadas a una
librería nativa del fabricante DBMS
o La lentitud del driver JDBC-ODBC puede ser exasperante, al llevar dos capas
adicionales que no añaden funcionalidad alguna
Lo anterior implica que para distribuir con seguridad una aplicación Java que use
JDBC habría que limitarse en primer lugar a entornos Windows (donde está definido
ODBC)
9.2.3 Resumen
Esto hace que este tipo de drivers esté descartado en el caso de aplicaciones comerciales, e
incluso en cualquier otro desarrollo, debe ser considerado como una solución transitoria,
porque el desarrollo de drivers totalmente en Java hará innecesario el uso de estos puentes.
Este driver salta la capa ODBC y usa directamente la librería nativa del fabricante del gestor
de base de datos (como pudiera ser DB-Library para Microsoft SQL Server o CT-Lib para
Sybase SQL Server).
Este driver es un driver 100% Java pero aún así necesita la existencia de un código binario
(la librería DBMS) en la máquina del cliente, con las limitaciones y problemas que esto
implica.
9.3.1 Ventajas
9.3.2 Desventajas
9.3.3 Resumen
Esto hace que este tipo de drivers se use ampliamente en casos en que se va a trabajar con
un único gestor base de datos, sin embargo en casos de tener que cambiar de gestor habrá
que conseguir el driver de dicho gestor y se resuelve la dificultad de una manera
relativamente sencilla.
Esta es la opción más flexible, se trata de un driver 100% Java / Protocolo independiente,
que requiere la presencia de un intermediario en el servidor.
En este caso, el driver JDBC hace las peticiones de datos al intermediario en un protocolo de
red independiente del servidor DBMS.
El intermediario a su vez, que está ubicado en el lado del servidor, convierte las peticiones
JDBC en peticiones nativas del sistema DBMS.
9.4.1 Ventajas
9.4.2 Desventajas
9.4.3 Resumen
Si una empresa distribuye una aplicación Java para que sus usuarios puedan acceder a su servidor MS
SQL Server y posteriormente decide cambiar el servidor por Oracle, MySql, PostGres o DB2, no necesita
volver a distribuir la aplicación, sino que únicamente debe reconfigurar la aplicación residente en el
servidor que se encarga de transformar las peticiones de red en peticiones nativas.
IBM DB2
jdbc:db2://<HOST>:<PORT>/<DB>
COM.ibm.db2.jdbc.app.DB2Driver
Oracle Thin
jdbc:oracle:thin:@<HOST>:<PORT>:<SID>
oracle.jdbc.driver.OracleDriver
Cloudscape
jdbc:cloudscape:<DB>
COM.cloudscape.core.JDBCDriver
Cloudscape RMI
jdbc:rmi://<HOST>:<PORT>/jdbc:cloudscape:<DB>
RmiJdbc.RJDriver
IDS Server
jdbc:ids://<HOST>:<PORT>/conn?dsn='<ODBC_DSN_NAME>'
ids.sql.IDSDriver
Oracle OCI 8i
jdbc:oracle:oci8:@<SID>
oracle.jdbc.driver.OracleDriver
Oracle OCI 9i
jdbc:oracle:oci:@<SID>
oracle.jdbc.driver.OracleDriver
Existen una serie de operaciones y procesos que son muy comunes contra una tabla en una base de
datos en disco, la más común es desplegar todos los registros de la tabla que están en la base de datos, a
este proceso le llamaremos SELECCION, consulta o despliegue.
Como se indicó anteriormente la comunicación con la base de datos se tendrán que dar usando el
lenguaje especializado de bases de datos llamado SQL (structured query language), la instrucción SQL
que se usa para resolver este problema tiene el siguiente formato:
El procedimiento que se intenta seguir cuando se construya un programa jsp que tenga que manipular
una tabla en disco deberá seguir los siguientes pasos:
jpwdClave,
jlblClave, basado en
basado en JPasswordField
JLabel
jbtnAceptar, jbtnCancelar,
basado en basado en
JButton JButton
Personalización de Objetos
JFrame jfrmAcceso
title Acceso al sistema
JLabel jlblUsuario
text Usuario
displayedMnemonic U
JLabel jlblClave
text Clave
displayedMnemonic v
JTextField jtxtUsuario
text
JPasswordField jpwdClave
text
JButton jbtnAceptar
text Aceptar
mnemonic A
toolTipText Iniciar la validación
JButton jbtnCancelar
text Cancelar
mnemonic C
toolTipText Cerrar la Ventana
Plan de Eventos
Para implementar el evento clic en el botón jbtnCancelar de clic derecho en él y luego elija
Events, seguido de Actions y finalmente elija actionPerformed. Como se aprecia en la
figura:
this.setVisible(false);
Autenticarse al Oracle
Ir a administración
Deconectarse
Volver a conectarse
Terminar
Introducir datos
Finalizamos
Utilizando el Driver
- Crear una carpeta libs
new Pelicula();