Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tabla de Contenido.
1 2 3
OBJETIVOS ................................................................................................ 4 CONTENIDO............................................................................................... 5 INTRODUCCION AL LENGUAJE DE PROGRAMACION JAVA. ............... 6 3.1 Historia de java .................................................................................... 6 3.2 Qu es java?...................................................................................... 7 3.3 Cmo trabaja la plataforma Java? ..................................................... 7 3.4 Caractersticas del Lenguaje Java. ...................................................... 8 3.4.1 Simple ........................................................................................... 8 3.4.2 Portable ........................................................................................ 8 3.4.3 Interpretado................................................................................... 9 3.4.4 Orientado a objetos....................................................................... 9 3.4.5 Seguro ........................................................................................ 10 3.4.6 Dinmico ..................................................................................... 10 3.4.7 Multihilo....................................................................................... 10 3.5 Java VS Otros lenguajes.................................................................... 11 4 CONOCIENDO JAVA................................................................................ 12 4.1 Qu es JDK? ................................................................................... 12 4.2 Tipos de aplicaciones en Java ........................................................... 12 4.2.1 Java Applets ............................................................................... 12 4.2.2 Aplicaciones Standalone............................................................. 12 4.2.3 Paquetes (package) .................................................................. 13 4.2.4 Java Servlets .............................................................................. 13 4.2.5 Jsp (Java Server Page) .............................................................. 13 4.2.6 Java Beans ................................................................................. 13 4.3 La API de Java................................................................................... 14 4.3.1 java.lang ..................................................................................... 14 4.3.2 java.lang.io.................................................................................. 14 4.3.3 java.util........................................................................................ 14 4.3.4 java.net ....................................................................................... 14 4.3.5 java.awt....................................................................................... 15 4.3.6 java.applet .................................................................................. 15 5 LENGUAJE DE PROGRAMACION JAVA PARTE I.................................. 16 5.1 Comentarios en Java ......................................................................... 16 5.1.1 Comentario de una lnea............................................................. 16 5.1.2 Comentario de mltiples lneas.................................................. 16 5.2 Palabras reservadas del lenguaje java. ............................................. 16 5.3 Operadores en Java........................................................................... 17 5.4 Variables y tipos de datos. ................................................................. 17 5.5 Nombres validos para las variables. .................................................. 18 5.6 Declaracin de Variables ................................................................... 18 5.7 Control de flujos ................................................................................. 19 5.7.1 Toma de decisiones.................................................................... 19 5.7.2 Buclas ......................................................................................... 22 5.8 Arreglos.............................................................................................. 25 5.8.1 Declaracin de matrices. ............................................................ 26 5.9 Cadenas de Caracteres ..................................................................... 26
5.9.1 Sintaxis de declaracin de cadenas............................................ 26 5.9.2 Operacin de cadenas................................................................ 27 5.10 Estructura de los archivos JavaTM. ................................................... 30 5.10.1 Paquetes..................................................................................... 30 5.10.2 Importar paquetes....................................................................... 31 5.11 Modificadores de acceso. .................................................................. 32 5.11.1 Modificador public. ...................................................................... 32 5.11.2 Modificador private...................................................................... 32 5.11.3 Modificador default...................................................................... 32 5.11.4 Modificador protected. ................................................................ 33 5.11.5 Visibilidad de los modificadores. ................................................. 34 5.11.6 El modificador static.................................................................... 34 6 LENGUAJE DE PROGRAMACION JAVA PARTE II................................. 35 6.1 Herencia............................................................................................. 35 6.2 Polimorfismo ...................................................................................... 37 6.3 Interfaces. .......................................................................................... 41 7 ACCESO A BASE DE DATOS CON JAVA: JDBC.................................... 44 7.1 Qu es JDBC? ................................................................................. 44 7.2 Tipos de controladores JDBC(Java Database Conectivity)................ 44 7.2.1 Nivel 1......................................................................................... 45 7.2.2 Nivel 2......................................................................................... 46 7.2.3 Nivel 3......................................................................................... 47 7.2.4 Nivel 4......................................................................................... 48 7.3 Estructura general de una aplicacin JDBC....................................... 49 7.4 El API java.sql.................................................................................... 49 7.4.1 Clases e Interfaces del paquete java.sql .................................... 49 7.5 Tipos de datos JDBC a tipos de datos Java. ..................................... 52 7.6 Un Programa en Java para el acceso a una Base de Datos.............. 53
1 OBJETIVOS
Conocer acerca de la programacin orientada a objetos con el lenguaje de programacin java. Conocer el manejo de las sentencias bsicas del lenguaje de programacin java. Aprender a construir aplicaciones en java que acceden a bases de datos mediante el uso de JDBC.
2 CONTENIDO
Introduccin al lenguaje de programacin java. Conociendo java. Lenguaje de programacin java parte I. Lenguaje de programacin java parte II. Acceso a base de datos con java: JDBC.
3.2 Qu es java?
Java es una nueva forma de computacin basada en el poder de las redes y en la idea de que el mismo software funcione en diferentes tipos de maquinas sin importar su arquitectura o sistema operativo.
3.4.1 Simple
Desde el nacimiento del lenguaje esa fue su meta. Este lenguaje oculta toda la dificultad que trae el programar en lenguajes orientados a objetos como C++ y Perl y oculta la complejidad del uso de punteros.
3.4.2 Portable
Java es portable debido a su maquina virtual la cual interpreta el cdigo Java y lo ejecuta sin importar el sistema operativo.
Lo anterior tambin se debe a su Compilador el cual genera cdigo transportable entre diferentes plataformas el cual es llamado bytecode o los conocidos .Class Un ejemplo de estos son los estndares en cuanto a el tamao de los datos, en C++ un entero puede tener un tamao 16, 32 o mas bits, siendo la nica limitacin que el entero sea mayor que un short y menor que un longint, mientras que en Java los enteros siempre tendrn el mismo tamao sin importar el sistema operativo.
3.4.3 Interpretado.
La JVM interpreta el bytecode generado por el compilador, a diferencia de leguajes como C o C++ en los cuales las instrucciones son procesadas directamente por el sistema operativo, haciendo que los programas no sean portables. El que java sea interpretado hace que su velocidad sea 7 veces mas baja que leguajes como C++, sin embargo la potencialidad de Java se debe a que es un lenguaje interpretado.
3.4.5 Seguro
En la programacin de componentes distribuidos la seguridad es algo muy importante, java implementa cuatro aspectos de seguridad Polticas de Seguridad. Privacidad. Autenticacin. Seguridad.
3.4.6 Dinmico
Java remueve el manejo de memoria dinmica del programador, el manejo de objetos se hace por medio de referencias, el programador no tiene la dispendiosa tarea de liberar memoria puesto que java implementa un recolector de basura que es encarga de esto.
3.4.7 Multihilo
Que es Multihilo? Es la posibilidad de que un programa haga diferentes tareas al mismo tiempo, la mayora de programas de PC son de un hilo lo que quiere decir que si se lanza una tarea el programa tiene que esperar a que esta termine para seguir con otra. En Java es posible construir aplicaciones que ejecuten diferentes tareas al mismo tiempo. Un ejemplo aplicaciones Multihilos son los sistemas operativos que permiten desarrollar diferentes tareas al mismo tiempo.
4 CONOCIENDO JAVA
4.1 Qu es JDK?
El JDK (Java Developers Kit) Kit de desarrollo de java, son un conjunto de herramientas como un interpretador de java, un compilador, un descompilado, un generador automtico de documentacin HTML entre otros. El JDK proporciona las herramientas bsicas para un programador, pero estas no son del todo productivas por lo cual es necesario utilizar IDE para el desarrollo en java. Actualmente existen entornos de desarrollo gratuitos muy potentes que hacen que Java sea muy productivo, entre los cuales se encuentra eclipse, NetBeans, JDeveloper, Forte y kawa entre otros. No obstante es posible trabajar en java con un simple editor de texto y utilizar el compilador de Java despus de haber escrito el cdigo, utilizando la siguiente sentencia. C:\> Javac miprograma.java
Es una aplicacin que se ejecuta en el lado del servidor lo que quiere decir que esta aplicacin no viaja hasta el cliente para ser ejecutada con la maquina virtual del browser, por el contrario esta es ejecutada en el servidor por la maquina virtual del servidor. Los Servlets se han convertido en la principal herramienta en el desarrollo de aplicaciones Web con java, debido a su simplicidad y velocidad.
4.3.1 java.lang
Este paquete consiste de clases que son el corazn del lenguaje Java. Este paquete incluye no slo envolturas para los tipos de datos bsicos como Integer y String, sino tambin la manera de manejar errores por medio de las clases Throwable y Error.
4.3.2 java.lang.io
El paquete java.io sirve como la biblioteca estndar de entrada y salida para el lenguaje Java. Este paquete le permite un nmero ilimitado de posibilidades de comunicacin al proporcionarle tanto tipos sencillos como la clase StringBufferInputStream o complejos como la clase RandomAccessFile.
4.3.3 java.util
Este paquete es, esencialmente, una variedad de clases tiles que no pertenecen a ningn otro paquete. Entre estas clases prcticas se encuentran la clase Date, diseada para manipular y manejar las operaciones con fechas, la clase Hashtable y los TADs (Tipos Abstractos de Datos), como Stack y Vector.
4.3.4 java.net
Ya que JAVA es un lenguaje basado en red, este relativamente pequeo paquete resulta ser muy til. Sobre todo, le proporciona la capacidad de Comunicarse con otras fuentes de informacin creando o conectndose a sockets o haciendo uso de los URLs y direcciones de Internet.
4.3.5 java.awt
El Abstract Window Toolkit (AWT) de JAVA contiene los recursos que usted necesita para crear interfaces atractivas y tiles para sus applets. El AWT no slo tiene herramientas de control, como el LayoutManager y Container, sino que tambin cuenta con herramientas interactivas concretas, como Button y TextField.
4.3.6 java.applet
El paquete java.applet proporciona una sola clase y tres interfaces, pero es uno de los paquetes ms usados porque es la base de todos los applets. La clase Applet es de suma importancia porque es necesaria cuando se crea un applet. Tambin es til la interfaz AppletContext, la cual se usa para interactuar con el Navegador.
Palabras reservadas
abstract case class do final future implements int new package rest super throw var boolean cast const double ninally generic import interface null private return switch throws void break catch continue else float goto inner long operator protected short synchronized transient volatile byte char default extends for if instanceof native uter public static this try while
Tipo Aritmticos Relacinales Condicionales Desplazamiento Asignacin + > >> += ^= >= << -= <<= *
&& ||
Verdadero
Calif>=3.0
Imprimir Aprobado
Falso
Cdigo en java
if(Calif>=3.0) { System.out.println("Aprobado"); }
Falso
Verdadero
Imprimir Reprobado
Calif>=3.0
Imprimir Aprobado
Cdigo en java
if(Calif>=3.0) { System.out.println("Aprobado"); }else{ System.out.println("Reprobado");
Cdigo en java
switch (valor) { case 1 : System.out.println("Opcion 1"); break; case 2: System.out.println("Opcion 1"); break; case 3: System.out.println("Opcion 1"); break; default : System.out.println("Ninguna Opcion"); break; }
5.7.2 Buclas
5.7.2.1 Bucla for
Cdigo Java
for (int i = 0; i < 10; i++) { System.out.println("Numero de Veces:"+i); }
Codigo Java
while (enumeration.hasMoreElements()) { type element = (type) enumeration.nextElement(); }
Cdigo Java
do { } while (condition);
5.8 Arreglos
Un arreglo es un tipo compuesto de variables del mismo tipo, estas variables pueden ser a su vez de tipos simples (tipos primitivos) o compuestos (objetos). Los arreglos pueden ser de una o ms dimensiones, y cada dimensin se especifica con un par de corchetes.
Sintaxis para declarar arreglos tipo identificador[]; tipo[] identificador; Cdigo java
int numeros[]; String cadenas[];
El tamao del arreglo se debe especificar por medio del operador new como se muestra en el siguiente ejemplo: identificador = new tipo[tamao]; Codigo java
numeros = new int[100]; cadenas= new String[100];
El ndice de un arreglo inicia desde la posicin 0, y este debe ser declarado como un tipo de dato entero (int).
Columnas 2 0 0 0 0 0 0
Filas 3
Existen diferentes formas de declarar las cadenas en Java, en el ejemplo anterior se declara la variable y se le asigna un valor. En el siguiente ejemplo se usa el constructor de la clase String, String(cadena).
String cadena; cadena = new String("Hoy es un da fro");
length() : devuelve la longitud de la cadena charAt(indice): devuelve el carcter en el ndice equals(String): devuelve true si los String son iguales equalsIgnoreCase(String): compara ignorando maysculas y minsculas. startsWith(String): devuelve true si el objeto inicia con el String especificado. endsWith(String): devuelve true si el objeto termina con el String especificado. indexOf(char): determina la posicin de la primera ocurrencia de un carcter. substring(inicio, fin): devuelve un String de una cadena iniciando en la posicin de inicio y terminando una posicin antes del fin. valueOf(tipo primitivo): mtodo esttico que devuelve la cadena correspondiente al tipo que se le pase como argumento.
Ejemplos: En este ejemplo se muestra la declaracin de arreglos de enteros y el manejo de dos tipos de buclas.
public class Arreglos { /** * Constructor for Arreglos. */ public Arreglos() { super(); } public static void main(String[] args) { //Declaracin de un arreglo de enteros int []arreglo; //Declaracin de tamao del arreglo arreglo= new int[10]; //Bucla para llenar el arreglo con numeros pares del 2 al 18 for (int i = 0; i <10; i++) { arreglo[i]=i*2; } //Bucla Para imprimir los valores que se encuentran en el arreglo int j=0; while (j<arreglo.length) { System.out.println(""+arreglo[j]); j=j+1; } } }
En el siguiente ejemplo se hace una breve ilustracin de la declaracin de cadenas, y algunas operaciones con estas.
public class Cadenas { /** * Constructor for Cadenas. */ public Cadenas() { super(); } public static void main(String[] args) { //Declaracion de cadenas de tres formas diferentes String s1,s2,s3; s1= new String("La vida"); s2="es"; s3=null; //Operaciones con cadenas //Tamao de la cadena con el mtodo length() System.out.println("Tamao de la cadena s1:"+s1.length()); //Asignacin de un valor a una cadena s3="Bella"; //Suma de las cadenas s1,s2,s3 el resultado es La vida es bella System.out.println("Suma de Cadenas: "+s1+" "+s2+" "+s3); //Comparacin de cadenas, compara el valor de la cadena s2 con "es" //Si son iguales el mtodo equals retorna true if (s2.equals("es")==true) { System.out.println("Las cadenas son iguales"); } //Imprime la posicin en la que se encuentra la letra d System.out.println("Posicion:"+s1.indexOf("d")); } }
5.10.1
Paquetes.
A travs del comando package se provee una forma para agrupar algunas clases que poseen relaciones por sus caractersticas, la utilidad ms esencial de la utilizacin de esta sentencia es para la creacin de libreras. El nombre del paquete debe coincidir fsicamente con el nombre del directorio donde se pretende almacenar dichas clases. Por ejemplo la clase Ejemplo contenida dentro del paquete com.diegomez.modelo debe ser almacenada dentro de tres directorios as: com/diegomez/modelo/Ejemplo.java
package com.diegomez.modelo; public class Ejemplo { /** * */ public Ejemplo() { super(); // TODO Auto-generated constructor stub } public static void main(String[] args) { } }
5.10.2
Importar paquetes
La sentencia import, es la que se encarga de importar clases pertenecientes a paquetes que se necesitan para la clase que se esta desarrollando. import java.lang.Math; El import anterior es usado para importar la clase Math del API matemtica de Java. Tambin es posible hacer un import de la totalidad de las clases de un paquete con la siguiente instruccin. Import java.lang.*;
5.11.1
Modificador public.
El modificador public es el mas comn y el mas fcil de comprender. Puede aplicarse a una clase, mtodo o variable, este modificador implica que todo el universo puede tener acceso a ese componente, es decir, si se declara una clase publica el resto de clases tiene acceso a ella, si se declara un mtodo publico todos tiene acceso a ese mtodo siempre y cuando se cumplan las reglas de accesibilidad para la clase, lo mismo ocurre con las variables o atributos declaradas publicas.
5.11.2
Modificador private.
Este modificador solo puede ser usado en los mtodos y variables internas. En las clases no se pueden utilizar ya que no tiene sentido crear una clase privada (rompe con los paradigmas orientado a objetos). Algo como esto es incorrecto.
private class Ejemplo {} //Error de compilacin
Cuando se declara una variable o mtodo privado, se esta indicando que solo la misma clase tendr acceso al mtodo o variable.
5.11.3
Modificador default.
El modificador por default se puede utilizar tanto en una clase, mtodo o variable, este modificador indica que solamente podrn acceder al elemento aquellas clases o subclases que pertenecen al mismo paquete, incluida la clase que posee componentes por default. En el siguiente ejemplo dos clases pblicas ClaseA y ClaseB dentro de un paquete. ClaseB llama a un mtodo de la ClaseA que esta declarado por default.
public class ClaseB { public void metodoClaseB(){ ClaseA claseA=new ClaseA(); claseA.metodoClaseA(); } }
Sin embargo, puede ocurrir que por ejemplo se trate de acceder desde fuera del paquete, en ese caso no compilara ya que las reglas del default lo impiden.
package com.diegomez.modelo; import carpeta.ClaseA; public class ClaseC extends ClaseA { public void metodoClaseC(){ metodoClaseA(); } }
5.11.4
Modificador protected.
El modificador protected solamente se aplica a los mtodos, variables y clases o interfaces internas. Java no acepta la declaracin de una clase de tipo protected. Algo como esto no se puede hacer.
protected class Class1(){} //Error de compilacin.
La principal diferencia con el modificador default, es que protected permite acceder al elemento desde una subclase que no pertenece al paquete.
public class ClaseA { protected void metodoClaseA(){ System.out.println("Mtodo clase A"); } } public class ClaseC extends ClaseA { public void metodoClaseC(){ metodoClaseA(); } }
5.11.5
Visibilidad Desde la misma clase. Desde cualquier clase del mismo paquete. Desde una subclase del mismo paquete. Desde una subclase fuera del paquete. Desde cualquier no-subclase fuera del paquete.
5.11.6
El modificador static.
Java acepta que se utilice el modificador static para los mtodos y las variables, las clases no pueden ser declaradas static. Es decir algo como esto no se puede hacer.
static class Clase1(){}//Error de compilacin
Sin embargo se puede decir que una clase es esttica cuando todos sus mtodos y atributos son estticos. La caracterstica del modificador static implica que solamente se creara en memoria un espacio para el elemento declarado, sin importar la cantidad de instancias que se pudiesen obtener de la clase que contenga el elemento.
En este parte del documento estudiaremos la programacin orientada a objetos (OOP, object-oriented programing) y las principales tecnologas que la componen: herencia y poliformismo. Para hacer esta explicacin ms fcil de entender para los lectores usare diagramas en UML y el cdigo asociado a este.
6.1 Herencia
La herencia es una forma de reutilizacin del software en la que se crean nuevas clases a partir de clases ya existentes absorbiendo sus atributos, comportamientos y adornndolos con capacidades que las nuevas clases requieren. Para entrar al concepto de herencia es necesario conocer los conceptos de Superclases y Subclases. Una superclase es la clase padre de una subclase, pero esta a su vez puede ser una superclase de otra subclase, en el siguiente ejemplo la clase Persona es la superclase y Alumno es la subclase de la Superclase Persona.
Superclase
Subclase
Si observas en la parte en que se crea la clase Alumno tiene la palabra extends lo que quiere decir que Alumno extiende de Persona por eso es que la clase Alumno no tiene las variables nombre, sexo, edad pero las recibe y las almacena debido a que la clase base o superclase tiene el manejo de estas, esto es posible mediante el uso del operador super la cual se refiere al constructor de la superclase.
Public class Alumno extends Persona { protected String NoBoleta; //Constructor de la clase Alumno Alumno(String nombre, String sexo, int edad) { super(nombre,sexo,edad); System.out.println("constructor Alumno()"); } public void setNoboleta(String noboleta) { NoBoleta=noboleta; } public String getNoboleta(String noboleta) { return NoBoleta; } }
El ejemplo anterior es un ejemplo trivial pero el programador podra extender de clases mucho ms complejas y con muchos ms mtodos como las clases HttpServlet, Jframe o Applet y crear nuevas funcionalidades que sean necesarias para una necesidad en particular.
6.2 Polimorfismo
El polimorfismo nos permite escribir programas de forma general para manejar una amplia variedad de clases interrelacionadas existentes y por especificar. El poliformismo facilita la adicin de capacidades nuevas a un sistema. La herencia y el polimorfismo son tcnicas eficaces para lidiar con la complejidad del software. Para ser posible implementar el poliformismo es necesario el uso de clases abstract y mtodos abstract, para el caso de las clases abstract nos permiten heredar funcionalidad de esta como cualquier otra clase. Los mtodos abstract en la Superclase son creados pero sin ninguna funcionalidad, debido a que estos deben ser implementados en las subclases con la funcionalidad que sea necesaria para esta. Como en el ejemplo de la herencia presentaremos un diagrama UML y su cdigo en Java.
Subclase Jefe
public class Jefe extends Empleado { private double horas; public double getHoras(){ return horas; } public void setHoras(double horas){ this.horas = horas; } public Jefe (String nombre, String Apellido,double hora) { //Llama al constructor de la clase base o Empleado super(nombre,Apellido); setHoras(hora); } /*Aqu se fija el salario del jefe que tiene una una forma diferente de calcularlo*/ public double calculosalario() { return horas*120000; } //Super edito el mtodo toString public String toString() { return "Jefe:"+getNombre()+" "+getApellido(); } }
Subclase Vendedorcomision
public final class Vendedorcomision extends Empleado{ private double comision; private int totalArticulos; private double salary;
//Constructor public Vendedorcomision(String nombre, String apellidos,double salario, double comision,int articulos) { super(nombre,apellidos); setComision(comision); setSalary(salario); setTotalArticulos(articulos); } public double getComision(){ return comision; } public void setComision(double comision){ this.comision = comision; } public int getTotalArticulos(){ return totalArticulos; } public void setTotalArticulos(int totalArticulos){ this.totalArticulos = totalArticulos; } public double getSalary(){ return salary; } public void setSalary(double salary){ this.salary = salary; } public double calculosalario() { return salary+(comision*totalArticulos); } //Super edito el mtodo toString public String toString() { return "Vendedor Comision:"+getNombre()+" "+getApellido(); } }
Subclase Obrero
public final class Obrero extends Empleado { private double salarioPorPieza; private int cantidadPiezas; public Obrero(String nombre, String apellido,double salporpieza,int cantidadpieza) { super(nombre,apellido); setSalarioPorPieza(salporpieza); setCantidadPiezas(cantidadpieza); } public double getSalarioPorPieza(){ return salarioPorPieza; } public void setSalarioPorPieza(double salarioPorPieza){ this.salarioPorPieza = salarioPorPieza; } public int getCantidadPiezas(){ return cantidadPiezas; } public void setCantidadPiezas(int cantidadPiezas){ this.cantidadPiezas = cantidadPiezas; } public double calculosalario() { return cantidadPiezas*salarioPorPieza; } //Super edito el mtodo toString public String toString() { return "Obrero:"+getNombre()+" "+getApellido(); } }
Como se puede observar para cada subclase la forma de calcular el salario del empleado es diferente y solo la clase sabe como hacerlo, el siguiente cdigo muestra como sacarle provecho a las ventajas que nos ofrece el poliformismo.
public class Polimorfismo { /** * Constructor for Polimorfismo. */ public Polimorfismo() { super(); } public static void main(String[] args) { //Se crea un arreglo de tipo empleado Empleado array[]; array= new Empleado[3]; Jefe jefe; Obrero obrero; Vendedorcomision vendedor; //Se crean tres tipos de empleados diferentes jefe= new Jefe("Pepe","Ventas",24); obrero= new Obrero("Carlos","Carrera",10,20); vendedor = new Vendedorcomision("Diego","Gomez",100,10,50); /* Se almacena jefe, obrero, vendedor en el array de tipo * Empleado*/
array[0]=jefe; array[1]=obrero; array[2]=vendedor; /*Se recorre el arreglo de tipo persona y se imprime el * nombre de cada empleado sin importar el tipo y * se Calcula el salario de cada uno sin importar la forma * en que se calcula esto es posible debido a el polimorfismo*/ for (int i = 0; i < array.length; i++) { System.out.println(""+array[i].toString()); System.out.println("Salario:"+array[i].calculosalario()); } } }
Si usted observa los objetos jefe, obrero y vendedor son de diferentes tipos pero se almacenan en un array de tipo Empleado, esto es posible debido a que la clase Empleado es abstract y los objetos jefe, obrero y vendedor extienden de Empleado. El Array de tipo Empleado toma diferentes formas segn se el caso. Adema si observa la lnea donde se calcula el salario solo se le dice al array que calcule el salario y el sabe como debe calcular este segn el tipo de empleado.
6.3 Interfaces.
Una interfaz es como una clase pero que no permite que ninguno de sus mtodos sea implementado. Adems, con las interfaces se crea el concepto de herencia mltiple en Java. De tal manera, la regla indica que en una interfaz no se debe realizar ninguna implementacin de mtodo, sino proveer la firma con la cual otras clases pueden efectuar la implementacin. La interfaz tiene como caracterstica que las variables que se declaran dentro de ellas son consideradas como constantes y estticas.
public class MiClase implements MiInterface { public static void main(String args[]){ System.out.println(i); } }
Las interfaces son una de las principales herramientas usadas en el concepto de frameworks debido a que permiten la abstraccin de funcionalidades de un conjunto de componentes tales como libreras. El siguiente ejemplo es la implantacin del diseo de un reproductor multimedia de formatos avi, mp3 y wav. El la implantacin se encuentran cuatro componentes el primero es la interfaz reproductor la cual tiene la declaracin de los principales mtodos usados para la funcionalidad del reproductor los mtodos son play, bucle y stop.
package com.diegomez.modelo; public interface Reproductor { // Comienza la reproduccin void play(); // Reproduce el clip en un bucle void bucle(); // Detiene la reproduccin void stop(); }
Los otros tres componentes son la implementacin de la interfaz para la reproduccin de los diferentes formatos, como se puede observar a continuacin.
package com.diegomez.modelo; public class ReproductorAvi implements Reproductor { public ReproductorAvi() { super(); } public void play() { //Implementacin del cdigo reproduccin de AVI } public void bucle() { //Implementacin del cdigo para reducir reproduccin AVI } public void stop() { //Implementacin del cdigo detener reproduccin de AVI } } package com.diegomez.modelo; public class ReproductorMp3 implements Reproductor { public ReproductorMp3() { super(); } public void bucle() { //Implementacin del cdigo para reducir reproduccin MP3 } public void play() { //Implementacin del cdigo reproduccin de MP3 } public void stop() { //Implementacin del cdigo detener reproduccin de MP3 } } package com.diegomez.modelo; public class ReproductorWav implements Reproductor { public ReproductorWav() { super(); }
public void play() { //Implementacin del cdigo reproduccin de WAV } public void bucle() { //Implementacin del cdigo para reducir reproduccin WAV } public void stop() { //Implementacin del cdigo detener reproduccin de WAV } }
En cada una de las clases el programador que implementa la interfaz debe escribir el cdigo para la funcionalidad del componente. El siguiente es el diseo en UML del reproductor.
interface
Reproductor
ReproductorAvi
ReproductorWav
ReproductorMp3
7.1 Qu es JDBC?
JDBC(Java Database Conectivity) es el API estndar de acceso a bases de datos usando el lenguaje de programacin Java. Esta API se incluye con el kit de desarrollo de Java versin 1.1 y posteriores. Java no usa ODBC directamente Sun Microsystems creo una nueva API debido a que ODBC utiliza funciones de bajo nivel que no son compatibles 100% con Java, como lo son los punteros, esto hacia que java perdiera portabilidad. Para poder hacer esto posible Sun se une a Intersolv para desarrollar un puente entre JDBC y ODBC, ya que el acceso a bases de datos con ODBC es un modelo estndar.
7.2.1 Nivel 1
Este fue desarrollado por JavaSoft usa el driver ODBC especfico para la Base de Datos, requiere que el ODBC se encuentre disponible en la mquina cliente donde se ejecuta la aplicacin JAVA. El siguiente grafico muestra la arquitectura del driver de nivel 1.
7.2.2 Nivel 2
Este utiliza JAVA para hacer llamadas al API de acceso (protocolo) del DBMS que debe estar disponible en el cliente. El driver es una implementacin parcialmente hecho en JAVA por JavaSoft. El siguiente grafico muestra la arquitectura del driver de nivel 2.
7.2.3 Nivel 3
Utiliza los protocolos de red que vienen con el JDK para conectarse a un servidor. En el servidor se traducen los requerimientos a transacciones del DBMS. No requiere cdigo ejecutable en el lado del cliente (del API de acceso al DBMS). El protocolo de red que se utiliza es genrico, por lo tanto el mismo driver puede acceder a diferentes DBMS.
7.2.4 Nivel 4.
Driver completamente escrito en JAVA este se comunica directamente a la base de datos con el protocolo de red del DBMS. Esta comunicacin directa se implementa a travs de conexiones de red (sockets). El siguiente grafico muestra la arquitectura del driver de nivel 4.
Los Drivers para conectarse a la bases de datos son provistos por el proveedor de la base de datos o en la siguiente direccin del sitio Java, de Sun Microsystem http://java.sun.com/products/jdbc
Estos pasos se pueden encontrar en cdigo Java al final de esta explicacin con un ejemplo.
Estas clases son usadas para la conexin y manipulacin de bases de datos con Java. Grafica de Interfaces del paquete java.sql
7.4.1.1 Clase SQLExeception Esta clase provee un mecanismo para el control de errores cuando se desea acceder una base de datos. Un objeto del tipo SQLException contiene lo siguiente: Una descripcin del error. Una cadena (SQLState) identificando el error. Un cdigo de error. La clase SQLException es de vital importancia cuando se desea hacer una conexin a una base de datos, debido a que Java no permite hacer conexiones a bases de datos si no existe un bloque para atrapar excepciones. Este es un ejemplo de un bloque para atrapar excepciones en java.
try { // Bloque con sentencias de JDBC } catch(SQLException ex){ System.out.println(Error SQL: +ex.getMessage()); System.out.println(Estado: +ex.getSQLState()); }
JDBC CHAR VARCHAR LONGVARCHAR NUMERIC DECIMAL BIT TINYINT SMALLINT INTEGER BIGINT REAL FLOAT BINARY VARBINARY LONGVARBINARY DATE TIME TIMESTAMP
JAVA String String String java.math.BigDecimal java.math.BigDecimal boolean byte short int long float double byte[] byte[] byte[] java.sql.Date java.sql.Time java.sql.Timestamp
Sql para insertar las notas de los estudiantes INSERT INTO notas (codigoestudiante,nombremateria,nota)VALUES (984682,'Algoritmia',4.5); INSERT INTO notas (codigoestudiante,nombremateria,nota)VALUES (984682,'Calculo',4.5); INSERT INTO notas (codigoestudiante,nombremateria,nota)VALUES (984682,'Ingenieria de Software',4.5); INSERT INTO notas (codigoestudiante,nombremateria,nota)VALUES (982689,'Algoritmia',3.5); INSERT INTO notas (codigoestudiante,nombremateria,nota)VALUES (982689,'Calculo',2.4); INSERT INTO notas (codigoestudiante,nombremateria,nota)VALUES (982689,'Ingenieria de Software',4.0); INSERT INTO notas (codigoestudiante,nombremateria,nota)VALUES (1001245,'Algoritmia',4.5); INSERT INTO notas (codigoestudiante,nombremateria,nota)VALUES (1001245,'Calculo',5.0); INSERT INTO notas (codigoestudiante,nombremateria,nota)VALUES (1001245,'Ingenieria de Software',3.5);
Despus de haber creado la base de datos entraremos al tema de este documento la conexin y manejo de los resultados con JDBC en Java.
Ejemplo 1 Este programa se conecta a la base de datos y saca los datos de los estudiantes que se encuentran en la tabla estudiantes, usando los cinco pasos mencionados anteriormente.
import import import import import java.sql.Connection; java.sql.DriverManager; java.sql.ResultSet; java.sql.SQLException; java.sql.Statement;
/** * @author Diego Armando Gmez */ public class JdbcEjemplo1 { /** * Constructor for JdbcEjemplo1. */ public JdbcEjemplo1() { super(); } public static void main(String[] args) { Connection connection; ResultSet rs; Statement st; String sql="SELECT * FROM estudiantes;"; try { /*En esta linea se carga el driver * JDBC nivel 4 de mySql*/ //Paso 1 Cargar el driver JDBC Class.forName("com.mysql.jdbc.Driver"); } catch (Throwable e) { //Se Atrapa la execption System.out.println("Error Cargando el Driver"+e.toString()); } //Conexion y manipulacion de datos try { //paso 2 Conectarse a la base de datos connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1/seminario","",""); //Paso 3 Crear el objeto Statement st=connection.createStatement(); //Paso 4 Ejecutar la sentencia SQl rs=st.executeQuery(sql); //Paso5 Procesar los resultados while (rs.next()) { System.out.println("Codigo:"+rs.getInt("codigo")); System.out.println("Nombre:"+rs.getString("nombres")); System.out.println("Apellidos:"+rs.getString("apellidos")); System.out.println("email:"+rs.getString("email")); } rs.close(); st.close(); connection.close(); } catch (SQLException se) {
System.out.println("Error:"+se.toString()); } } }
Ejemplo 2. Este programa pide el cdigo de un estudiante, se conecta a la base de datos busca las notas de el estudiante en la base de datos utilizando un PreparedStatement el cual es diferente al Statement debido a que esta es una instruccin precompilada lo que la hace ser mas rpida.
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * @author Diego Armando Gmez */ public class JdbcEjemplo2 { /** * Constructor for JdbcEjemplo2. */ public JdbcEjemplo2() { super(); } public static void main(String[] args) { Connection connection; ResultSet rs; PreparedStatement pst; String sql="SELECT * FROM estudiantes;"; java.io.BufferedReader l =new java.io.BufferedReader(new java.io.InputStreamReader(System.in )); String cod=new String(); try { /*En esta linea se carga el driver * JDBC nivel 4 de mySql*/ //Paso 1 Cargar el driver JDBC Class.forName("com.mysql.jdbc.Driver"); } catch (Throwable e) { //Se Atrapa la execption System.out.println("Error Cargando el Driver"+e.toString()); } //Conexion y manipulacion de datos try { //paso 2 Conectarse a la base de datos connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1/seminario","",""); //Lee de la consola el codigo del estudiante System.out.print("Digite el codigo:"); cod=l.readLine(); //Paso 3 Crear el objeto prepareStatement pst=connection.prepareStatement("SELECT * FROM notas where codigoestudiante=?"); pst.setInt(1,Integer.parseInt(cod));
//Paso 4 Ejecutar la sentencia SQl rs=pst.executeQuery(); //Valida que el rs tenga datos if(rs.next()!=true) { System.out.println("No existe el estudiante"); } //Paso5 Procesar los resultados while (rs.next()) { System.out.println("Nombre Materia:"+rs.getString("nombremateria")); System.out.println("Nota:"+rs.getFloat("nota")); } rs.close(); pst.close(); connection.close(); } catch (Throwable se) { System.out.println("Error:"+se.toString()); } } }
Si puede observar la sentencia connection.prepareStatement la lnea SQL tiene un signo de interrogacin lo que indica que este es un parmetro que posteriormente ser entregado al sql. El parmetro es entregado en la linea pst.setInt(1,Integer.parseInt(cod)); que se encuentra en la parte inferior, esto hace posible que cada vez que se digita un cdigo sea posible utilizar la misma sentencia SQL.