Está en la página 1de 57

PROGRAMACIN ORIENTADA A OBJECTOS CON JAVA.

DIEGO ARMANDO GMEZ MOSQUERA diegomez@jvsoftware.com diegomezusb@yahoo.com diegojava@hotmail.com

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 INTRODUCCION AL LENGUAJE DE PROGRAMACION JAVA.

3.1 Historia de java


A finales de los aos ochenta Sun Microsystems decide introducirse en el mercado de la electrnica de consumo y ms concretamente en los equipos domsticos, incluyendo la televisin interactiva. Java, nace como un lenguaje ideado en sus comienzos para programar electrodomsticos y microcircuitos. En principio se deseaba que java tuviera las siguientes caractersticas: Interfaces cmodas e intuitivas. Fiabilidad y facilidad de desarrollo Portabilidad. Con esta idea en mente comenz a trabajar James Gosling en 1990 liderando un pequeo grupo de desarrollo. Gosling decidi que las ventajas de eficiencia de C++ no compensaban el gran coste de pruebas y depuracin. Por otro lado, lenguajes como C y C++ deben ser compilados para un chip, y si se cambia el chip, todo el software debe compilarse de nuevo. Este era un problema clave en el campo de la electrnica de consumo. Gosling decide crear un nuevo lenguaje de programacin ms apropiado. Ese lenguaje llegara a convertirse en lo que hoy da se conoce como JAVA.

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.3 Cmo trabaja la plataforma Java?


Los programas escritos en java corren en diferentes plataformas debido a la maquina virtual de java o JVM (Java Virtual Machine). Este es una capa intermedia que se encarga de interpretar las instrucciones java y ejecutarlas. Es por esto que Java es Independiente de la plataforma.

3.4 Caractersticas del Lenguaje Java.


Java es conocido por las siguientes siete caractersticas. Simple Portable Interpretado Orientado a Objetos Seguro Dinmico Multihilo

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.4 Orientado a objetos


Es un lenguaje orientado a objetos debido a que implementa todas las caractersticas de los lenguajes orientados a objetos. Caractersticas tales como Clases, Objetos, Encapsulamiento, Herencia, Polimorfismo, etc.

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.

3.5 Java VS Otros lenguajes.


Java Simple OO Robusto Seguro Interpretado Dinmico Portable Neutral Multihilo Rec. Basura Excepciones Rendimiento S S S S S S S S S S S Alto SmallTalk S S S Regular S S Regular Regular No S S Medio Perl Regular S S S S Si No S S No S Medio C Regular No No No No No Regular No No No No Muy Alto C++ No Regular S S No No Regular No No No S Muy Alto

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

4.2 Tipos de aplicaciones en Java


Java Applets Aplicaciones Standalone. Paquetes (package) Java Servlets Jsp Java Beans

4.2.1 Java Applets


Son aplicaciones muy pequeas que se ejecutan al lado del cliente, utilizando un browser.

4.2.2 Aplicaciones Standalone.


Son aplicaciones que no necesariamente necesitan un Browser para ser ejecutadas, estas son ejecutadas a travs de la JVM.

4.2.3 Paquetes (package)


Un paquete es un repositorio en el cual se encuentran un conjunto de clases, las cuales tiene un propsito comn. Un ejemplo de esto es el java.awt o java.util de Java de las cuales hablaremos ms adelante.

4.2.4 Java Servlets

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.2.5 Jsp (Java Server Page)


Una pagina JSP es un archivo de texto simple que consiste en contenido HTML o XML con contenido java embebido esta es compilado en el servidor al igual que los servlets.

4.2.6 Java Beans


Un Java Bean es un componente utilizado en Java que permite agrupar funcionalidades para formar parte de una aplicacin. Los Java Beans son utilizados para hacer productiva la programacin de aplicaciones.

4.3 La API de Java


La Interfaz de Programa de Aplicaciones de Java o API son un conjunto de clases desarrolladas por Sun para ser usadas por el lenguaje de programacin Java. Las clases en Java se agrupan en paquetes entre las cuales tenemos. java.lang java.corba java.awt java.io java.sql java.util java.applet

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.

5 LENGUAJE DE PROGRAMACION JAVA PARTE I

5.1 Comentarios en Java


En Java existen dos tipos de comentarios, los de una linea y los de mltiples lneas

5.1.1 Comentario de una lnea


//Este es un comentario de una lnea

5.1.2 Comentario de mltiples lneas


/*Este cometario tiene Varias lneas */

5.2 Palabras reservadas del lenguaje java.


Las palabras reservadas son aquellas que no pueden ser usadas por el programador como variables ni ningn otro uso para el cual no fueron hechas.

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

5.3 Operadores en Java


En java existen operadores unarios y binarios, los unarios son los que tiene un solo operador y los binarios son los que tiene dos operadores. Un operador unario es el + y un Binario es el &&. En java existen los siguientes tipos de operadores: Aritmticos. Relacinales Condicionales Desplazamiento Asignacin

Lista de diferentes operadores en Java.

Tipo Aritmticos Relacinales Condicionales Desplazamiento Asignacin + > >> += ^= >= << -= <<= *

Operador / % ++ != ^ ~ -< ! >>> *= >>= & /= |= | >>>= %= &= <= ==

&& ||

5.4 Variables y tipos de datos.


Todas las variables en el lenguaje Java deben tener un tipo de dato. El tipo de la variable determina los valores que la variable puede contener y las operaciones que se pueden realizar con ella. Existen dos categoras de datos principales en el lenguaje Java: los tipos primitivos y los tipos referenciados. Los tipos primitivos contienen un slo valor e incluyen tipos como los enteros, flotantes, caracteres, etc. Los tipos referencia son los objetos, ya sean los creados por el programador o los propios de java como los String.

Tipos de datos primitivos


Tipo byte short int long float double char boolean Tamao 8 bits 16 bits 32 bits 64 bits 32 bits 64 bits 16 bits 1 bit Descripcin Entero 1 byte Entero corto Entero Entero largo Pres. simple Pres. doble 1 carcter true/false

5.5 Nombres validos para las variables.


Debe ser un identificador legal de Java comprendido en una serie de caracteres Unicode. Unicode es un sistema de codificacin que soporta texto escrito en distintos lenguajes humanos. Unicode permite la codificacin de 34.168 caracteres. El nombre a utilizar no puede ser el mismo que una palabra clave o el nombre de un valor booleano (true or false). Tampoco deben tener el mismo nombre que otras variables cuyas declaraciones aparezcan en el mismo mbito.

5.6 Declaracin de Variables


Sintaxis TipoDeDato identicador=valorInicial; Ejemplo Declaracin de Variables con tipos Nativos. int i=0; long j; float f,l,k; Declaracin de variables con tipos referenciados String s= new String(La vida es Bella); String cadena=Hola Mundo; Usuario= new Usuario;

5.7 Control de flujos


Las sentencias de control de flujo determinan el orden en que se ejecutarn las otras sentencias dentro del programa. El lenguaje Java soporta varias sentencias de control de flujo, incluyendo: Toma de decisiones Ciclos o bucles Excepciones Rompimiento de flujo

5.7.1 Toma de decisiones


5.7.1.1 La estructura de seleccin if

Verdadero

Calif>=3.0

Imprimir Aprobado

Falso

Cdigo en java
if(Calif>=3.0) { System.out.println("Aprobado"); }

5.7.1.2 La estructura de control if-else

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");

5.7.1.3 La estructura switch

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); }

5.7.2.2 Bucla while

Codigo Java
while (enumeration.hasMoreElements()) { type element = (type) enumeration.nextElement(); }

5.7.2.3 Bucla do while

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).

5.8.1 Declaracin de matrices.


En este caso el primer valor de los corchetes especifica que la matriz tiene 3 filas, y el segundo valor declara que la matriz tiene 2 columnas.
float matriz[][]; matriz = new float[3][2];

Columnas 2 0 0 0 0 0 0

Filas 3

5.9 Cadenas de Caracteres


En Java las cadenas de caracteres son manejadas por la clase String, los literales tipo cadena son en realidad instancias de esta clase, por eso estas permite realizar operaciones con las cadenas, tales como determinar su longitud, trabajar con cada uno de los caracteres, extraer subcadenas, etc.

5.9.1 Sintaxis de declaracin de cadenas.


String identificador="valor inicial"; Codigo Java
String cadena="Hoy es un da fro";

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");

5.9.2 Operacin de cadenas

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 Estructura de los archivos JavaTM.


Lo primero que se debe tener en cuenta es que la estructura de construccin de un archivo fuente de Java es la siguiente: package import class y/o interface Ese orden debe permanecer intacto, sino se van a obtener errores de compilacin. En Java existe la posibilidad de crear varias clases en un mismo archivo mientras que ninguna de las clases sea pblica, es posible darle cualquier nombre al archivo que almacena las clases.

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 Modificadores de acceso.


Los modificadores son palabras reservadas en Java que restringen la visibilidad de las clases, mtodos y atributos. En total son 12 modificadores de acceso, default (no se escribe nada), public, private, protected, final, abstract, static, volatile, transient, native, synchronized y strictfp. En este tutorial solo se estudiaran los modificadores public, private, protected default y static.

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 ClaseA { void metodoClaseB(){ System.out.println("Mtodo clase A"); } }

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 de los modificadores.


public Si Si Si Si Si protected Si Si Si Si No default Si Si Si No No private Si No No No No

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.

6 LENGUAJE DE PROGRAMACION JAVA PARTE II

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

El cdigo Java asociado al diagrama anterior es el siguiente La Superclase.


public class Persona { protected String nombre; protected String sexo; protected int edad; //Constructor de la clase persona Persona (String nombre, String sexo, int edad) { this.nombre = nombre; this.sexo = sexo; this.edad = edad; System.out.println("constructor Persona()"); } }

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.

Cdigo Java. Superclase Empleado


public abstract class Empleado { private String apellido; private String nombre; public Empleado(String Nombre, String Apellido) { this.nombre= new String(Nombre); this.apellido= new String(Apellido); } public String getApellido(){ return apellido; } public void setApellido(String apellido){ this.apellido = apellido; } public String getNombre(){ return nombre; } public void setNombre(String nombre){ } /*Mtodos abstractos que deben ser implementados para cada tipo de empleado*/ abstract double calculosalario(); }

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

+play:void +bucle:void +stop:void

ReproductorAvi

ReproductorWav

ReproductorMp3

+ReproductorAvi +play:void +bucle:void +stop:void

+ReproductorWav +play:void +bucle:void +stop:void

+ReproductorMp3 +bucle:void +play:void +stop:void

7 ACCESO A BASE DE DATOS CON JAVA: JDBC.

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 Tipos de controladores JDBC(Java Database Conectivity)


Existen cuatro niveles de controladores JDBC. Nivel 1: Puente JDBC-ODBC. Nivel 2: Parcialmente hecho en Java. Nivel 3: Protocolo de Red. 100% Java. Nivel 4: Protocolo Nativo de la BD. 100% Java.

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.

El siguiente grafico muestra la arquitectura del driver de nivel 3.

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

7.3 Estructura general de una aplicacin JDBC.


Cuando se desea hacer una conexin a una base de datos y procesar sus datos se deben seguir los pasos que se muestran en el siguiente grafico.

Estos pasos se pueden encontrar en cdigo Java al final de esta explicacin con un ejemplo.

7.4 El API java.sql


El API java.sql proporciona un conjunto de clases e interfaces hechas en java para hacer mas fcil las conexiones a las bases de datos.

7.4.1 Clases e Interfaces del paquete java.sql


Driver DriverManager DriverPropertyInfo Connection DatabaseMetadata Statement PreparedStatement CallableStatement ResultSet ResultSetMetadata

Jerarqua de Clases del paquete java.sql

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()); }

7.5 Tipos de datos JDBC a tipos de datos Java.


En el siguiente cuadro se ilustra el tipo que se debe usar en java segn sea la necesidad del tipo usado en la base de dato.

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

7.6 Un Programa en Java para el acceso a una Base de Datos.


El siguiente ejemplo se hace una conexin a una base de datos y se muestran los datos de la tabla Usuarios en pantalla. En aras de simplificar nuestro ejemplo creare una base de datos en mySql con el nombre de seminario, la cual tendr dos tablas, una con el nombre de estudiante y otra con el nombre de notas. Sql para crear la tabla estudiantes CREATE TABLE estudiantes( codigo int(9) PRIMARY KEY, nombres varchar(30) NOT NULL, apellidos varchar(30) NOT NULL, email varchar(30) NOT NULL ); Sql para crear la tabla notas CREATE TABLE notas( codigoestudiante int(9) NOT NULL REFERENCES estudiantes, nombremateria varchar(30) NOT NULL, nota float(4) NOT NULL ); Sql para insertar los estudiantes INSERT INTO estudiantes (codigo,nombres,apellidos,email)VALUES (982689,'Francisco','Pineda','franpi@yahoo.com'); INSERT INTO estudiantes (codigo,nombres,apellidos,email)VALUES (984682,'Diego Armando','Gomez Mosquera','diegomezusb@yahoo.com'); INSERT INTO estudiantes (codigo,nombres,apellidos,email)VALUES (1001245,'Jorge Ivan','Marmolejo Hurtado','jimarmol@yahoo.com');

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.

También podría gustarte