Capacitación JAVA
Capacitación JAVA
Capacitación JAVA
Capacitacin JAVA
INTRODUCCIN
Java es un lenguaje de programacin de alto nivel con el que se pueden escribir tanto programas convencionales como para internet. Java incluye dos elementos un compilador y un intrprete. El compilador (Programa traductor) produce un cdigo de bytes que se almacena en un fichero para ser ejecutado por el interprete de Java denominado maquina virtual.
Fundamentos de Java
IDENTIFICADORES
Los identificadores son tokens que representan nombres asignables a variables, mtodos y clases para identificarlos de forma nica ante el compilador y darles nombres con sentido para el programador. Todos los identificadores de Java diferencian entre maysculas y minsculas (Java es Case Sensitive o Sensible a maysculas) y deben comenzar con una letra, un subrayado(_) o smbolo de dlar($). Los caracteres posteriores del identificador pueden incluir las cifras del 0 al 9. Como nombres de identificadores no se pueden usar palabras claves de Java. Es una prctica estndar de Java denominar:
Las clases: Clase o MiClase. Las interfaces: Interfaz o MiInterfaz. Los mtodos: metodo() o metodoLargo(). Las variables: altura o alturaMedia.
PALABRAS CLAVE
Las palabras claves son aquellos identificadores reservados por Java para un objetivo determinado y se usan slo de la forma limitada y especfica. Las siguientes palabras son palabras reservadas de Java: abstact case const else float if int null protected static throw var Boolean Cast Continue Extends For implements Interface Operator Public Super Throws Void Break Catch Default False Future Import Long Outer Rest Switch Transient Volatile byte char do final generic inner native package return syncroniced true while Byvalue Class Doubl Finally Goto Instanceof New Prvate Short This Try
OPERADORES
Conocidos tambin como operandos, indican una evaluacin o computacin para ser realizada en objetos o datos, y en definitiva sobre identificadores o constantes. Los operadores admitidos por Java son: + >>>= &= == >> ! & ^ . <<= += >>> < <= ~ * [ ^= = *= ++ >= && / ] != ) %= << || % ( |
As por ejemplo el siguiente fragmento de cdigo incrementa el valor de una variable en dos unidades, mediante la utilizacin del operador aritmtico + que se utiliza para la suma:
int miNumero=0; miNumero = miNumero + 2;
PRECEDENCIA DE OPERADORES
Cuando en una sentencia aparecen varios operadores el compilador deber de elegir en qu orden aplica los operadores. A esto se le llama precedencia. Los operadores con mayor precedencia son evaluados antes que los operadores con una precedencia relativa menor. Cuando en una sentencia aparecen operadores con la misma precedencia: Los operadores de asignacin son evaluados de derecha a izquierda. Los operadores binarios, (menos los de asignacin) son evaluados de izquierda a derecha.
La siguiente tabla muestra la precedencia asignada a los operadores de Java. Los operadores de la tabla estn listados en orden de precedencia: cuanto ms arriba aparezca un operador, mayor es su precedencia. Los operadores en la misma lnea tienen la misma precedencia: Tipo de operadores Operadores posfijos Operadores unarios Creacin o conversin Multiplicacin Suma Desplazamiento Operadores de este tipo [ ] . (parametros) expr++ expr-++expr --expr +expr -expr ~ ! new (tipo) expr */% +<<
Se ignoran todos los caracteres entre /* */. Proviene del C Se ignoran todos los caracteres detrs de // hasta el fin de lnea. Proviene del C++ /**comentario*/ Lo mismo que /* */ pero se podrn utilizar para documentacin automtica. Por ejemplo la siguiente lnea de cdigo presenta un comentario:
int alturaMinima = 150; // No menos de 150 centmetros
TIPOS DE DATOS
Los tipos de datos se clasifican en tipos: Primitivos y referenciados. Primitivos: *Numricos: # Enteros: byte, short, int, long y char # Reales: float y double *boolean
Byte
ESTRUCTURAS DE CONTROL
ESTRUCTURAS DE CONTROL
Nos sirven para ejecutar una accin o una determinada decisin, tambin para ejecutar bloques de sentencias repetidas veces. El lenguaje Java soporta las estructuras de control: Sentencia Toma de decisin Bucle Miscelneo Clave if-else, switch-case for, while, do-while break, goto continue, label:, return,
Se pueden anidar expresiones if-else, para poder implementar aquellos casos con mltiples acciones. Esto es lo que se suele denominar como sentencias else if.
LA SENTENCIA SWITCH
Mediante la sentencia switch se puede seleccionar entre varias sentencias segn el valor de cierta expresin. La forma general de switch es la siguiente: switch ( expresionMultivalor ) { case valor1 : conjuntoDeSentencias; break; case valor2 : conjuntoDeSentencias; break; case valor3: conjuntoDeSentencias; break; default: conjuntoDeSentencias; break; }
switch evala la expresinMultivalor y ejecuta el conjuntoDeSentencias que aparece junto a la clusula case cuyo valor corresponda con el de la expresinMultivalor.
La sentencia
BUCLE DO-WHILE
El bucle do-while es similar al bucle while, pero en el bucle while la expresin se evala al principio del bucle y en el bucle do-while la evaluacin se realiza al final. La forma general del bucle do-while es la siguiente: do { sentencias; } while ( expresinBooleana );
BUCLE FOR
Permite ejecutar una o ms expresiones, repetidamente un numero de veces conocido. La forma general de la sentencia for es la siguiente: for ( iniciacin ; terminacin ; incremento ) sentencias; La iniciacin es una sentencia que se ejecuta una vez antes de entrar en el bucle. La terminacin es una expresin que determina cundo se debe terminar el bucle. Esta expresin se evala al final de cada iteracin del bucle. Cuando la expresin se evala a falso, el bucle termina. El incremento es una expresin que es invocada en cada iteracin del bucle. En realidad puede ser una accin cualquiera, aunque se suele utilizar para incrementar una variable contador. Se debe utilizar el bucle for cuando se conozcan las restricciones del bucle (su instruccin de iniciacin, criterio de terminacin e instruccin de incremento). Por ejemplo, los bucles for son utilizados comnmente para iterar sobre los elementos de una matriz, o los caracteres de una cadena:
Un archivo de Java debe tener el mismo nombre que la clase que contiene, y se les suele asignar la extensin ".java". Por ejemplo la clase MiPunto se guardara en un fichero que se llamase MiPunto.java. Hay que tener presente que en Java se diferencia entre maysculas y minsculas; el nombre de la clase y el de archivo fuente han de ser exactamente iguales. Aunque la clase MiPunto es sintcticamente correcta, es lo que se viene a llamar una clase vaca, es decir, una clase que no hace nada. Las clases tpicas de Java
LOS ATRIBUTOS
Los datos se encapsulan dentro de una clase declarando variables dentro de las llaves de apertura y cierre de la declaracin de la clase, variables que se conocen como atributos. Se declaran igual que las variables locales de un mtodo en concreto. Por ejemplo, este es un programa que declara una clase MiPunto, con dos atributos enteros llamados x e y.
LOS MTODOS
Los mtodos son subrutinas que definen la interfaz de una clase, sus capacidades y comportamiento. Un mtodo ha de tener por nombre cualquier identificador legal distinto de los ya utilizados por los nombres de la clase en que est definido. Los mtodos se declaran al mismo nivel que las variables de instancia dentro de una definicin de clase. En la declaracin de los mtodos se define el tipo de valor que devuelven y a una lista formal de parmetros de entrada, de sintaxis tipo identificador separadas por comas. La forma general de una declaracin de mtodo es:
tipo_devuelto nombre_de_mtodo( lista-formal-de-parmetros ) {
En el caso de que no se desee devolver ningn valor se deber indicar como tipo la palabra reservada void. As mismo, si no se desean parmetros, la declaracin del mtodo debera incluir un par de parntesis vacos (sin void):
void metodoVacio( ) { };
Este constructor denominado constructor por defecto, por no tener parmetros, establece el valor -1 a las variables de instancia x e y de los objetos que construya. El compilador, por defecto, llamar al constructor de la superclase Object() si no se especifican parmetros en el constructor. Este otro constructor, sin embargo, recibe dos parmetros:
MiPunto( int paraX, int paraY ) { inicia( paramX, paramY ); }
La lista de parmetros especificada despus del nombre de una clase en una sentencia new se utiliza para pasar parmetros al constructor.
OPERADOR NEW
El operador new crea una instancia de una clase (objetos) y devuelve una referencia a ese objeto. Por ejemplo:
MiPunto p2 = new MiPunto(2,3);
Este es un ejemplo de la creacin de una instancia de MiPunto, que es controlador por la referencia a objeto p2. El siguiente ejemplo se crea dos objetos MiPunto y establece los valores de x e y de cada uno de ellos de manera independiente.
MiPunto p4 = new MiPunto( 10, 20 ); MiPunto p5 = new MiPunto( 42, 99 ); System.out.println("p4.- x = " + p4.x + " y = " + p4.y); System.out.println("p5.- x = " + p5.x + " y = " + p5.y);
Cuando se ejecuta este programa, se observa la siguiente salida: p6.- 1. X=10 , Y=20 p6.- 2. X=30 , Y=40 Durante las impresiones (mtodo println()) se accede al valor de las variables mediante p6.x y p6.y, y entre una impresin y otra se llama al mtodo inicia(), cambiando los valores de las variables de instancia. Este es uno de los aspectos ms importantes de la diferencia entre la programacin orientada a objetos y la programacin estructurada. Cuando se llama al mtodo p6.inicia(), lo primero que se hace en el mtodo es sustituir los nombres de los atributos de la clase por las correspondientes variables de instancia del objeto con que se ha llamado. As por ejemplo x se convertir en p6.x. Si otros objetos llaman a inicia(), incluso si lo hacen de una manera concurrente, no se producen efectos laterales, ya que las variables de instancia sobre las que trabajan son distintas.
En Java se permite declarar variables locales, incluyendo parmetros formales de mtodos, que se solapen con los nombres de las variables de instancia. No se utilizan x e y como nombres de parmetro para el mtodo inicia, porque ocultaran las variables de instancia x e y reales del mbito del mtodo. Si lo hubisemos hecho, entonces x se hubiera referido al parmetro formal, ocultando la variable de instancia x:
void inicia2( int x, int y ) { x = x; // Ojo, no modificamos la variable de instancia!!! this.y = y; // Modificamos la variable de instancia!!! }
JERARQUA
La herencia es el mecanismo fundamental de relacin entre clases en la orientacin a objetos. Relaciona las clases de manera jerrquica; una clase padre o superclase sobre otras clases hijas o subclases.
Los descendientes de una clase heredan todas las variables y mtodos que sus ascendientes hayan especificado como heredables, adems de crear los suyos propios. La caracterstica de herencia, nos permite definir nuevas clases derivadas de otra ya existente, que la especializan de alguna manera. As logramos definir una jerarqua de clases, que se puede mostrar mediante un rbol de herencia.
HERENCIA SIMPLE
En la orientacin a objetos, se consideran dos tipos de herencia, simple y mltiple. En el caso de la primera, una clase slo puede derivar de una nica superclase. Para el segundo tipo, una clase puede descender de varias superclases. En Java slo se dispone de herencia simple, para una mayor sencillez del lenguaje, si bien se compensa de cierta manera la inexistencia de herencia mltiple con un concepto denominado interface.
DECLARACIN
Para indicar que una clase deriva de otra, heredando sus propiedades (mtodos y atributos), se usa el trmino extends, como en el siguiente ejemplo:
public class SubClase extends SuperClase { // Contenido de la clase }
Por ejemplo, creamos una clase MiPunto3D, hija de la clase ya mostrada MiPunto:
class MiPunto3D extends MiPunto { int z; MiPunto3D( ) { x = 0; // Heredado de MiPunto y = 0; // Heredado de MiPunto z = 0; // Nuevo atributo
La palabra clave extends se utiliza para decir que deseamos crear una subclase de la clase que es nombrada a continuacin, en nuestro caso MiPunto3D es hija de MiPunto.
LIMITACIONES EN LA HERENCIA
Todos los campos y mtodos de una clase son siempre accesibles para el cdigo de la misma clase. Para controlar el acceso desde otras clases, y para controlar la herencia por la subclase, los miembros (atributos y mtodos) de las clases tienen tres modificadores posibles de control de acceso:
Por ejemplo:
class Padre { // Hereda de Object // Atributos private int numeroFavorito, nacidoHace, dineroDisponible; // Mtodos public int getApuesta() { return numeroFavorito; } protected int getEdad() {
En este ejemplo, un objeto de la clase Hija, hereda los tres atributos (numeroFavorito, nacidoHace y dineroDisponible) y los tres mtodos (getApuesta(), getEdad() y getSaldo() ) de la clase Padre, y podr invocarlos. Cuando se llame al mtodo getEdad() de un objeto de la clase Hija, se devolver el valor de la variable de instancia nacidoHace de ese objeto, y no de uno de la clase Padre. Sin embargo, un objeto de la clase Hija, no podr invocar al mtodo getSaldo() de un objeto de la clase Padre, con lo que se evita que el Hijo conozca el estado de la cuenta corriente de un Padre. La clase Visita, solo podr acceder al mtodo getApuesta(), para averiguar el nmero favorito de un Padre, pero de ninguna manera podr conocer ni su saldo, ni su edad.
La clase abstracta claseA ha implementado el mtodo concreto metodoConcreto(), pero el mtodo metodoAbstracto() era abstracto y por eso ha tenido que ser redefinido en la clase hija claseB.
claseA referenciaA = new claseB(); referenciaA.metodoAbstracto(); referenciaA.metodoConcreto();
La salida de la ejecucin del programa es: En el metodo abstracto de claseB En el metodo concreto de claseA
SOBRESCRITURA DE UN MTODO
Durante una jerarqua de herencia puede interesar volver a escribir el cuerpo de un mtodo, para realizar una funcionalidad de diferente manera dependiendo del nivel de abstraccin en que nos encontremos. A esta modificacin de funcionalidad se le llama sobrescritura de un mtodo. Por ejemplo, en una herencia entre una clase SerVivo y una clase hija Persona; si la clase SerVivo tuviese un mtodo alimentarse(), debera volver a escribirse en el nivel de Persona, puesto que una persona no se alimenta ni como un Animal, ni como una Planta... La mejor manera de observar la diferencia entre sobrescritura y sobrecarga es mediante un ejemplo. A continuacin se puede observar la implementacin de la sobrecarga de la distancia en 3D y la sobrescritura de la distancia en 2D.
class MiPunto3D extends MiPunto {
Los mtodos se seleccionan en funcin del tipo de la instancia en tiempo de ejecucin, no a la clase en la cual se est ejecutando el mtodo actual. A esto se le llama seleccin dinmica de mtodo.
SOBRECARGA DE MTODO
Es posible que necesitemos crear ms de un mtodo con el mismo nombre, pero con listas de parmetros distintas. A esto se le llama sobrecarga del mtodo. La sobrecarga de mtodo se utiliza para proporcionar a Java un comportamiento
polimrfico.
Un ejemplo de uso de la sobrecarga es por ejemplo, el crear constructores alternativos en funcin de las coordenadas, tal y como se haca en la clase MiPunto:
Se llama a los constructores basndose en el nmero y tipo de parmetros que se les pase. Al nmero de parmetros con tipo de una secuencia especfica se le llama signatura de tipo. Java utiliza estas signaturas de tipo para decidir a qu mtodo llamar. Para distinguir entre dos mtodos, no se consideran los nombres de los parmetros formales sino sus tipos:
MiPunto p1 = new MiPunto(); // Constructor por defecto MiPunto p2 = new MiPunto( 5, 6 ); // Constructor parametrizado
Con una sentencia super.metodoSuma(x, y) se llamara al mtodo metodoSuma() de la superclase de la instancia this. Por el contrario con super() llamamos al constructor de la superclase.
Para que el sistema de gestin de excepciones funcione, se ha de trabajar en dos partes de los programas: Definir qu partes de los programas crean una excepcin y bajo qu condiciones. Para ello se utilizan las palabras reservadas throw y throws. Comprobar en ciertas partes de los programas si una excepcin se ha producido, y actuar en consecuencia. Para ello se utilizan las palabras reservadas try, catch y finally.
En el ejemplo se observa que se pueden anidar sentencias catch, pero conviene hacerlo indicando en ltimo lugar las excepciones ms generales (es decir, que se encuentren ms arriba en el rbol de herencia de excepciones), porque el intrprete Java ejecutar aquel bloque de cdigo catch cuyo parmetro sea del tipo de una excepcin lanzada. Si no se ha lanzado ninguna excepcin el cdigo contina sin ejecutar ninguna sentencia catch. Para insertar fragmentos de cdigo que se ejecuten tras la gestin de las excepciones. Este cdigo se ejecutar tanto si se ha tratado una excepcin ( catch) como sino. Este tipo de cdigo se inserta en una sentencia finally, que ser ejecutada tras el bloque try o catch:
try { } catch( Exception e ) { } finally { // Se ejecutara tras try o catch
Matrices
VECTORES Y MATRICES
Una matriz es una construccin que proporciona almacenaje a una lista de elementos del mismo tipo, ya sea simple o compuesto. Si la matriz tiene solo una dimensin, se la denomina vector. En Java los vectores se declaran utilizando corchetes ( [ y ] ), tras la declaracin del tipo de datos que contendr el vector. Por ejemplo, esta sera la declaracin de un vector de nmeros enteros (int):
int vectorNumeros[ ]; // Vector de nmeros
Se observa la ausencia de un nmero que indique cuntos elementos componen el vector, debido a que Java no deja indicar el tamao de un vector vaco cuando le declara. La asignacin de memoria al vector se realiza de forma explcita en algn momento del programa. Para ello o se utiliza el operador new:
int vectorNumeros = new int[ 5 ]; // Vector de 5 nmeros
Se puede observar que los corchetes son opcionales en este tipo de declaracin de vector, tanto despus del tipo de variable como despus del identificador. Si se utiliza la forma de new se establecer el valor 0 a cada uno de los elementos del vector.