Capacitación JAVA

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 33

Plus Integral Consultores 2011

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.

Plus Integral Consultores 2011


Las constantes: CONSTATE o CONSTANTE_LARGA. Los paquetes: java.paquete.subpaquete.

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: + >>>= &= == >> ! & ^ . <<= += >>> < <= ~ * [ ^= = *= ++ >= && / ] != ) %= << || % ( |

Plus Integral Consultores 2011


> ?!! /= >>

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 */% +<<

Plus Integral Consultores 2011


Comparacin Igualdad AND a nivel de bit OR a nivel de bit XOR a nivel de bit AND lgico OR lgico Condicional Asignacin < <= = instanceof == != & ^ | && || ?: = += -= *= /= %= &= ^= |= <<= = =

COMENTARIOS Y ESPACIOS EN BLANCO


El compilador de Java reconoce y elimina los espacios en blanco, tabuladores, retornos de carro y comentarios durante el anlisis del cdigo fuente. Los comentarios se pueden presentar en tres formatos distintos: Formato /*comentario*/ //comentario Uso

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

Plus Integral Consultores 2011


EXPRESIONES
Los operadores, variables y las llamadas a mtodos pueden ser combinados en secuencias conocidas como expresiones. El comportamiento real de un programa Java se logra a travs de expresiones, que se agrupan para crear sentencias. Una expresin es una serie de variables, operadores y llamadas a mtodos (construida conforme a la sintaxis del lenguaje) que se evala a un nico valor. Por ejemplo, la siguiente sentencia es una expresin:
int contador=1; contador++;

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

CONVERSIN DE TIPOS DE DATOS


Por ello se establece la norma de que "en las conversiones el tipo destino siempre debe ser igual o mayor precisin que el tipo fuente": Tipo Origen Tipo Destino

Byte

double, float, long, int, char, short

Plus Integral Consultores 2011


short char int long float double, float, long, int double, float, long, int double, float, long double, float double

Plus Integral Consultores 2011

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,

LAS SENTENCIAS CONDICIONALES: IF Y SWITCH LA SENTENCIA IF - ELSE


La sentencia if-else de Java dota a los programas de la habilidad de ejecutar distintos conjuntos de sentencias segn algn criterio. La sintaxis de la sentencia if-else es: if ( condicin ) Bloque de cdigo a ejecutar si la condicin es cierta else Bloque de cdigo a ejecutar si la condicin es falsa Ejemplo:
// La respuesta es Aceptar o Cancelar if (respuesta == Aceptar) {

Plus Integral Consultores 2011


// cdigo para realizar la accin Aceptar System.out.println( "Su peticion esta siendo atendida" ); } else { // cdigo para realizar la accin Cancelar System.out.println( "Cancelando accion" ); }

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

Plus Integral Consultores 2011


Cada sentencia case debe ser nica y el valor que evala debe ser del mismo tipo que el devuelto por la expresinMultivalor de la sentencia switch. Las sentencias break que aparecen tras cada conjuntoDeSentencias provocan que el control salga del switch y contine con la siguiente instruccin al switch. Las sentencias break son necesarias porque sin ellas se ejecutaran secuencialmente las sentencias case siguientes. Existen ciertas situaciones en las que se desea ejecutar secuencialmente algunas o todas las sentencias case, para lo que habr que eliminar algunos break. Finalmente, se puede usar la sentencia default para manejar los valores que no son explcitamente contemplados por alguna de las sentencias case. Su uso es altamente recomendado. Ejemplo:
int meses; switch ( meses ){ case 1: System.out.println( "Enero" ); break; case 2: System.out.println( "Febrero" ); break; case 3: System.out.println( "Marzo" ); break; //Demas meses // . . . case 12: System.out.println( "Diciembre" ); break; default: System.out.println( "Mes no valido" ); break; }

Plus Integral Consultores 2011


SENTENCIAS DE ITERACIN O BUCLES: FOR, DO, WHILE BUCLE WHILE
El bucle while es el bucle bsico de iteracin. Sirve para realizar una accin sucesivamente mientras se cumpla una determinada condicin. La forma general del bucle while es la siguiente: while ( expresinBooleana ) { sentencias; }; Las sentencias se ejecutan mientras la expresinBooleana tenga un valor de verdadero. Ejemplo:
int i = 1; while ( i <= 100 ) { i = i * 2; }

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

Plus Integral Consultores 2011


Ejemplo:
int c; do { c = System.in.read( ); // Sentencias para tratar el carcter c } while ( c != -1 ); // No se puede leer ms (Fin fichero)

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:

Plus Integral Consultores 2011


// cad es una cadena (String) for ( int i = 0; i < cad.length() ; i++){ // hacer algo con el elemento i-simo de cad }

Plus Integral Consultores 2011

Programacin Orientada a Objetos


CLASES Y OBJETOS
Es un modelo de programacin que utiliza objetos, ligados mediante mensajes, para la solucin de problemas. La idea central es simple: Organizar los programas a imagen y semejanza de la organizacin de los objetos en el mundo real. Durante todo este captulo se va a trabajar en la construccin de una clase MiPunto, que modeliza un punto en un espacio plano:
class MiPunto{ int x, y; int metodoSuma( int paramX, int paramY ) { return ( paramX + paramY ); } double distancia(int x, int y) { int dx= this.x pX; int dy = this.y pY; return Math.sqrt(dx*dx + dy*dy); } void metodoVacio( ) { } void inicia( int paramX, int paramY ) { x = paramX; y = paramY; } void inicia2( int x, int y ) { x = x; // Ojo, no modificamos la variable de instancia!!!

Plus Integral Consultores 2011


this.y = y; // Modificamos la variable de instancia!!! } MiPunto( int paramX, int paramY ) { this.x = paramX; // Este this se puede omitir y = paramY; // No hace falta this } MiPunto() { inicia(-1,-1); //Por defecto ; this(-1,-1) hace lo mismo } }

DEFINICIN DE UNA CLASE


El elemento bsico de la programacin orientada a objetos en Java es la clase. Una clase define la forma y comportamiento de un objeto. Para crear una clase slo se necesita un archivo fuente que contenga la palabra clave reservada class seguida de un identificador legal y un bloque delimitado por dos llaves para el cuerpo de la clase.
class MiPunto { }

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

Plus Integral Consultores 2011


incluirn variables y mtodos de instancia. Los programas en Java completos constarn por lo general de varias clases de Java en distintos archivos fuente. Una clase es una plantilla para un objeto. Por lo tanto define la estructura de un objeto y su interfaz funcional, en forma de mtodos. Cuando se ejecuta un programa en Java, el sistema utiliza definiciones de clase para crear instancias de las clases, que son los objetos reales. Los trminos instancia y objeto se utilizan de manera indistinta. La forma general de una definicin de clase es:
class Nombre_De_Clase { tipo_de_variable nombre_de_atributo1; tipo_de_variable nombre_de_atributo2; // . . . tipo_devuelto nombre_de_mtodo1( lista_de_parmetros ) { cuerpo_del_mtodo1; } tipo_devuelto nombre_de_mtodo2( lista_de_parmetros ) { cuerpo_del_mtodo2; } // . . . }

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.

Plus Integral Consultores 2011


class MiPunto { int x; int 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 ) {

cuerpo_del_mtodo; } Por ejemplo el siguiente mtodo devuelve la suma de dos enteros:


int metodoSuma( int paramX, int paramY ) { return ( paramX + paramY ); }

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

Plus Integral Consultores 2011


Los mtodos son llamados indicando una instancia individual de la clase, que tendr su propio conjunto nico de variables de instancia, por lo que los mtodos se pueden referir directamente a ellas. El mtodo inicia() para establecer valores a las dos variables de instancia sera el siguiente:
void inicia( int paramX, int paramY ) { x = paramX; y = paramY; }

REFERENCIAS A OBJETO E INSTANCIAS


Los tipos simples de Java describan el tamao y los valores de las variables. Cada vez que se crea una clase se aade otro tipo de dato que se puede utilizar igual que uno de los tipos simples. Por ello al declarar una nueva variable, se puede utilizar un nombre de clase como tipo. A estas variables se las conoce como referencias a objeto. Todas las referencias a objeto son compatibles tambin con las instancias de subclases de su tipo. Del mismo modo que es correcto asignar un byte a una variable declarada como int, se puede declarar que una variable es del tipo MiClase y guardar una referencia a una instancia de este tipo de clase: MiPunto p; Esta es una declaracin de una variable p que es una referencia a un objeto de la clase MiPunto, de momento con un valor por defecto de null. La referencia null es una referencia a un objeto de la clase Object, y se podr convertir a una referencia a cualquier otro objeto porque todos los objetos son hijos de la clase Object.

Plus Integral Consultores 2011


CONSTRUCTORES
Las clases pueden implementar un mtodo especial llamado constructor. Un constructor es un mtodo que inicia un objeto inmediatamente despus de su creacin. De esta forma nos evitamos el tener que iniciar las variables explcitamente para su iniciacin. El constructor tiene exactamente el mismo nombre de la clase que lo implementa; no puede haber ningn otro mtodo que comparta su nombre con el de su clase. Una vez definido, se llamar automticamente al constructor al crear un objeto de esa clase (al utilizar el operador new). El constructor no devuelve ningn tipo, ni siquiera void. Su misin es iniciar todo estado interno de un objeto (sus atributos), haciendo que el objeto sea utilizable inmediatamente; reservando memoria para sus atributos, iniciando sus valores. Por ejemplo:
MiPunto( ) { inicia( -1, -1 ); }

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.

Plus Integral Consultores 2011


Se llama al mtodo constructor justo despus de crear la instancia y antes de que new devuelva el control al punto de la llamada. As, cuando ejecutamos la siguiente sentencia:
MiPunto p1 = new MiPunto(10, 20); System.out.println( "p1.- x = " + p1.x + " y = " + p1.y );

Se muestra en la pantalla: p1.- x = 10 y = 20

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

Este es el aspecto de salida cuando lo ejecutamos. p4.- x = 10 y = 20 p5.- x = 42 y = 99

Plus Integral Consultores 2011


OPERADOR PUNTO (.)
El operador punto (.) se utiliza para acceder a las variables de instancia y los mtodos contenidos en un objeto, mediante su referencia a objeto: referencia_a_objeto.nombre_de_variable_de_instancia referencia_a_objeto.nombre_de_mtodo( lista-de-parmetros ); Hemos creado un ejemplo completo que combina los operadores new y punto para crear un objeto MiPunto, almacenar algunos valores en l e imprimir sus valores finales:
MiPunto p6 = new MiPunto( 10, 20 ); System.out.println ("p6.- 1. X=" + p6.x + " , Y=" + p6.y); p6.inicia( 30, 40 ); System.out.println ("p6.- 2. X=" + p6.x + " , Y=" + p6.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.

Plus Integral Consultores 2011


REFERENCIA THIS
Java incluye un valor de referencia especial llamado this, que se utiliza dentro de cualquier mtodo para referirse al objeto actual. El valor this se refiere al objeto sobre el que ha sido llamado el mtodo actual. Se puede utilizar this siempre que se requiera una referencia a un objeto del tipo de una clase actual. Si hay dos objetos que utilicen el mismo cdigo, seleccionados a travs de otras instancias, cada uno tiene su propio valor nico de this. Un refinamiento habitual es que un constructor llame a otro para construir la instancia correctamente. El siguiente constructor llama al constructor parametrizado MiPunto(x,y) para terminar de iniciar la instancia:
MiPunto() { this( -1, -1 ); // Llama al constructor parametrizado }

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!!! }

Plus Integral Consultores 2011


HERENCIA
La verdadera potencia de la programacin orientada a objetos radica en su capacidad para reflejar la abstraccin que el cerebro humano realiza automticamente durante el proceso de aprendizaje y el proceso de anlisis de informacin. Las personas percibimos la realidad como un conjunto de objetos interrelacionados. Dichas interrelaciones, pueden verse como un conjunto de abstracciones y generalizaciones que se han ido asimilando desde la niez. As, los defensores de la programacin orientada a objetos afirman que esta tcnica se adecua mejor al funcionamiento del cerebro humano, al permitir descomponer un problema de cierta magnitud en un conjunto de problemas menores subordinados del primero. La capacidad de descomponer un problema o concepto en un conjunto de objetos relacionados entre s, y cuyo comportamiento es fcilmente identificable, puede ser muy til para el desarrollo de programas informticos.

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.

Plus Integral Consultores 2011


En todo lenguaje orientado a objetos existe una jerarqua, mediante la que las clases se relacionan en trminos de herencia. En Java, el punto ms alto de la jerarqua es la clase Object de la cual derivan todas las dems clases.

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

Plus Integral Consultores 2011


} }

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:

public: Los miembros declarados public son accesibles en cualquier lugar en


que sea accesible la clase, y son heredados por las subclases. private: Los miembros declarados private son accesibles slo en la propia clase. protected: Los miembros declarados protected son accesibles slo para sus subclases

Por ejemplo:
class Padre { // Hereda de Object // Atributos private int numeroFavorito, nacidoHace, dineroDisponible; // Mtodos public int getApuesta() { return numeroFavorito; } protected int getEdad() {

Plus Integral Consultores 2011


return nacidoHace; } private int getSaldo() { return dineroDisponible; } } class Hija extends Padre { // Definicin } class Visita { // Definicin }

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.

Plus Integral Consultores 2011


OPERACIONES AVANZADAS EN LAS CLASES
La programacin orientada a objetos en Java va mucho ms all de las clases, los objetos y la herencia. Java presenta una serie de capacidades que enriquecen el modelo de objetos que se puede representar en un programa Java entre ellos:

CLASES Y MTODOS ABSTRACTOS: ABSTRACT


Hay situaciones en las que se necesita definir una clase que represente un concepto abstracto, y por lo tanto no se pueda proporcionar una implementacin completa de algunos de sus mtodos. Se puede declarar que ciertos mtodos han de ser sobrescritos en las subclases, utilizando el modificador de tipo abstract. A estos mtodos tambin se les llama responsabilidad de subclase. Cualquier subclase de una clase abstract debe implementar todos los mtodos abstract de la superclase o bien ser declarada tambin como abstract. Cualquier clase que contenga mtodos declarados como abstract tambin se tiene que declarar como abstract, y no se podrn crear instancias de dicha clase (operador new). Por ltimo se pueden declarar constructores abstract o mtodos abstract static. Veamos un ejemplo de clases abstractas:
abstract class claseA { abstract void metodoAbstracto(); void metodoConcreto() { System.out.println("En el metodo concreto de claseA"); } } class claseB extends claseA {

Plus Integral Consultores 2011


void metodoAbstracto(){ System.out.println("En el metodo abstracto de claseB"); } }

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 {

Plus Integral Consultores 2011


int x,y,z; double distancia(int pX, int pY) { // Sobrescritura int retorno=0; retorno += ((x/z)-pX)*((x/z)-pX); retorno += ((y/z)-pY)*((y/z)-pY); return Math.sqrt( retorno ); } }

Se inician los objetos mediante las sentencias:


MiPunto p3 = new MiPunto(1,1); MiPunto p4 = new MiPunto3D(2,2);

Y llamando a los mtodos de la siguiente forma:


p3.distancia(3,3); //Mtodo MiPunto.distancia(pX,pY) p4.distancia(4,4); //Mtodo MiPunto3D.distancia(pX,pY)

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:

Plus Integral Consultores 2011


MiPunto( ) { //Constructor por defecto inicia( -1, -1 ); } MiPunto( int paramX, int paramY ) { // Parametrizado this.x = paramX; y = paramY; }

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

ACCESO A LA PROPIA CLASE: THIS


Aunque ya se explic el uso de la referencia this como modificador de mbito, tambin se la puede nombrar como ejemplo de polimorfismo Adems de hacer continua referencia a la clase en la que se invoque, tambin vale para sustituir a sus constructores, utilizndola como mtodo: this(); // Constructor por defecto this( int paramX, int paramY ); // Constructor parametrizado

Plus Integral Consultores 2011


ACCESO A LA SUPERCLASE: SUPER
Ya hemos visto el funcionamiento de la referencia this como referencia de un objeto hacia s mismo. En Java existe otra referencia llamada super, que se refiere directamente a la superclase. La referencia super usa para acceder a mtodos o atributos de la superclase. Podamos haber implementado el constructor de la clase MiPunto3D (hija de MiPunto) de la siguiente forma:
MiPunto3D( int x, int y, int z ) { super( x, y ); // Aqu se llama al constructor de MiPunto this.z = super.metodoSuma( x, y ); // Mtodo de la superclase }

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.

Plus Integral Consultores 2011

GESTIN DE EXCEPCIONES Y ERRORES


MANEJO DE ERRORES Y EXCEPCIONES
El control de flujo en un programa Java puede hacerse mediante las ya conocidas sentencias estructuradas (if, while, return). Pero Java va mucho ms all, mediante una tcnica de programacin denominada gestin de excepciones. Mediante las excepciones se podr evitar repetir continuamente cdigo, en busca de un posible error, y avisar a otros objetos de una condicin anormal de ejecucin durante un programa. Mediante la gestin de excepciones se prescindir de sentencias de control de errores del tipo:
if ( error == true ) return ERROR;

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.

MANEJO DE EXCEPCIONES: TRY - CATCH - FINALLY


Cuando el programador va a ejecutar un trozo de cdigo que pueda provocar una excepcin (por ejemplo, una lectura en un fichero), debe incluir este fragmento de cdigo dentro de un bloque try:
try { // Cdigo posiblemente problemtico }

Plus Integral Consultores 2011


Pero lo importante es cmo controlar qu hacer con la posible excepcin que se cree. Para ello se utilizan las clausulas catch, en las que se especifica que accin realizar:
try { // Cdigo posiblemente problemtico } catch( tipo_de_excepcion e) { // Cdigo para solucionar la excepcin e } catch( tipo_de_excepcion_mas_general e) { // Cdigo para solucionar la excepcin e }

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

Plus Integral Consultores 2011

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

O se asigna una lista de elementos al vector:


int vectorIni = { 2, 5, 8}; // == int vectorIni[3]=new int[3];

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.

También podría gustarte