Vous êtes sur la page 1sur 44

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas

UNIDAD 3. CLASES Y HERENCIA EN LA PROGRAMACION ORIENTADA A OBJETOS CAPITULO 5. Clases En La Poo Una clase es el ncleo en java para la construccin lgica en la programacin de este lenguaje. La clase construye la base de programacin orientada a objetos en java. La clase define un nuevo tipo de dato. Las clases son el centro de la Programacin Orientada a Objetos (OOP Object Oriented Programming). Algunos de los conceptos ms importantes de la POO son los siguientes: Encapsulacin. Las clases pueden ser declaradas como pblicas (public) y como package (accesibles slo para otras clases del paquete). Las variables miembro y los mtodos pueden ser public, private, protected y package. De esta forma se puede controlar el acceso y evitar un uso inadecuado. Herencia. Una clase puede derivar de otra (extends), y en ese caso hereda todas sus variables y mtodos. Una clase derivada puede aadir nuevas variables y mtodos y/o redefinir las variables y mtodos heredados. Polimorfismo. Los objetos de distintas clases pertenecientes a una misma jerarqua o que implementan una misma interface pueden tratarse de una forma general e individualizada, al mismo tiempo. 5.1 Conceptos Bsicos 5.1.1 Concepto de Clase Una clase es una agrupacin de datos (variables o campos) y de funciones (mtodos) que operan sobre esos datos. La definicin de una clase se realiza en la siguiente forma: [public] class Class name { // definicin de variables y mtodos ... } Donde la palabra public es opcional: si no se pone, la clase tiene la visibilidad por defecto, esto es, slo es visible para las dems clases del paquete. Todos los mtodos y variables deben ser definidos dentro del bloque {...} de la clase.

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
Un objeto (en ingls, instance) es un ejemplar concreto de una clase. Las clases son como tipos de variables, mientras que los objetos son como variables concretas de un tipo determinado. Classname unObjeto; ClassnameotroObjeto; 5.1.2 Caractersticas Importantes De Las Clases: Todas las variables y funciones de Java deben pertenecer a una clase. No hay variables y funciones globales. Si una clase deriva de otra (extends), hereda todas sus variables y mtodos. Java tiene una jerarqua de clases estndar de la que pueden derivar las clases que crean los usuarios. Una clase slo puede heredar de una nica clase (en Java no hay herencia mltiple). Si al definir una clase no se especifica de qu clase deriva, por defecto la clase deriva de Object. La clase Object es la base de toda la jerarqua de clases de Java. En un archivo se pueden definir varias clases, pero en un archivo no puede haber ms que una clase public. Este archivo se debe llamar como la clase public que contiene con extensin *.java. Con algunas excepciones, lo habitual es escribir una sola clase por archivo. Si una clase contenida en un archivo no es public, no es necesario que el archivo se llame como la clase. Los mtodos de una clase pueden referirse de modo global al objeto de esa clase al que se aplican por medio de la referencia this. Las clases se pueden agrupar en paquetes, introduciendo una lnea al comienzo del archivo (paquete Nombrepaquete;). Esta agrupacin en paquetes est relacionada con la jerarqua de directorios y archivos en la que se guardan las clases. 5.1.3 Concepto de Interface Una interface es un conjunto de declaraciones de funciones. Si una clase implementa (implements) una interface, debe definir todas las funciones especificadas por la interface. Las interfaces pueden definir tambin variables finales (constantes). Una clase

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
puede implementar ms de una interface, representando una alternativa a la herencia mltiple. En algunos aspectos los nombres de las interfaces pueden utilizarse en lugar de las clases. Por ejemplo, las interfaces sirven para definir referencias a cualquier objeto de cualquiera de las clases que implementan esa interface. Con ese nombre o referencia, sin embargo, slo se pueden utilizar los mtodos de la interface. ste es un aspecto importante del polimorfismo. Una interface puede derivar de otra o incluso de varias interfaces, en cuyo caso incorpora las declaraciones de todos los mtodos de las interfaces de las que deriva (a diferencia de las clases, las interfaces de Java s tienen herencia mltiple). 5.2. Ejemplo De Definicin De Una Clase A continuacin se reproduce como ejemplo la clase Crculo. // archivo Circulo.java public class Circulo extends Geometria { static int numCirculos = 0; public static final double PI=3.14159265358979323846; public double x, y, r; public Circulo(double x, double y, double r) { this.x=x; this.y=y; this.r=r; numCirculos++; } public Circulo(double r) { this(0.0, 0.0, r); } public Circulo(Circulo c) { this(c.x, c.y, c.r); } public Circulo() { this(0.0, 0.0, 1.0); }

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
public double perimetro() { return 2.0 * PI * r; } public double area() { return PI * r * r; } // mtodo de objeto para comparar crculos public Circulo elMayor(Circulo c) { if (this.r>=c.r) return this; else return c; } // mtodo de clase para comparar crculos public static Circulo elMayor(Circulo c, Circulo d) { if (c.r>=d.r) return c; else return d; } } // fin de la clase Circulo. En este ejemplo se ve cmo se definen las variables miembro y los mtodos (cuyos nombres se han resaltado en negrita) dentro de la clase. Dichas variables y mtodos pueden ser de objeto o de clase (static). Se puede ver tambin cmo el nombre del archivo coincide con el de la clase public con la extensin *.java. 5.3. Variables miembro A diferencia de la programacin algortmica clsica, que estaba centrada en las funciones, la programacin orientada a objetos est centrada en los datos. Una clase est constituida por unos datos y unos mtodos que operan sobre esos datos.

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
5.3.1 Variables miembro de objeto Cada objeto, es decir cada ejemplar concreto de la clase, tiene su propia copia de las variables miembro. Las variables miembro de una clase (tambin llamadas campos) pueden ser de tipos primitivos (boolean, int, long, double, ?) o referencias a objetos de otra clase (composicin). Un aspecto muy importante del correcto funcionamiento de los programas es que no haya datos sin inicializar. Por eso las variables miembro de tipos primitivos se inicializan siempre de modo automtico, incluso antes de llamar al constructor (false para boolean, el carcter nulo para char y cero para los tipos numricos). De todas formas, lo ms adecuado es inicializarlas tambin en el constructor. Las variables miembro pueden tambin inicializarse explcitamente en la declaracin, como las variables locales, por medio de constantes o llamadas a mtodos (esta inicializacin no est permitida en C++). Por ejemplo, long nDatos = 100; Las variables miembro se inicializan en el mismo orden en que aparecen en el cdigo de la clase. Esto es importante porque unas variables pueden apoyarse en otras previamente definidas. Cada objeto que se crea de una clase tiene su propia copia de las variables miembro. Por ejemplo, cada objeto de la clase Circulo tiene sus propias coordenadas del centro x e y, y su propio valor del radio r. Los mtodos de objeto se aplican a un objeto concreto poniendo el nombre del objeto y luego el nombre del mtodo, separados por un punto. A este objeto se le llama argumento implcito. Por ejemplo, para calcular el rea de un objeto de la clase Circulo llamado c1 se escribir: c1.area();. Las variables miembro del argumento implcito se acceden directamente o precedidas por la palabra this y el operador punto. Las variables miembro pueden ir precedidas en su declaracin por uno de los modificadores de acceso: public, private, protected y package (que es el valor por defecto y puede omitirse). Junto con los modificadores de acceso de la clase (public y package), determinan qu clases y mtodos van a tener permiso para utilizar la clase y sus mtodos y variables miembro. Existen otros dos modificadores (no de acceso) para las variables miembro: Transient: indica que esta variable miembro no forma parte de la persistencia (capacidad de los objetos de mantener su valor cuando termina la ejecucin de un programa) de un objeto y por tanto no debe ser serializada

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
(convertida en flujo de caracteres para poder ser almacenada en disco o en una base de datos) con el resto del objeto. Volatile: indica que esta variable puede ser utilizada por distintas threads sincronizadas que el compilador no debe realizar optimizaciones con esta variable. Al nivel de estos apuntes, los modificadores transient y volatile no sern utilizados. Variables miembro de clase (static) Una clase puede tener variables propias de la clase y no de cada objeto. A estas variables se les llama variables de clase o variables static. Las variables static se suelen utilizar para definir constantes comunes para todos los objetos de la clase (por ejemplo PI en la clase Circulo) o variables que slo tienen sentido para toda la clase (por ejemplo, un contador de objetos creados como numCirculos en la clase Circulo). Las variables de clase son lo ms parecido que Java tiene a las variables globales de C/C++. Las variables de clase se crean anteponiendo la palabra static a su declaracin. Para llamarlas se suele utilizar el nombre de la clase (no es imprescindible, pues se puede utilizar tambin el nombre de cualquier objeto), porque de esta forma su sentido queda ms claro. Por ejemplo, Circulo.numCirculos es una variable de clase que cuenta el nmero de crculos creados. Si no se les da valor en la declaracin, las variables miembro static se inicializan con los valores por defecto para los tipos primitivos (false para boolean, el carcter nulo para char y cero para los tipos numricos), y con null si es una referencia. Las variables miembro static se crean en el momento en que pueden ser necesarias: cuando se va a crear el primer objeto de la clase, en cuanto se llama a un mtodo static o en cuanto se utiliza una variable static de dicha clase. Lo importante es que las variables miembro static se inicializan siempre antes que cualquier objeto de la clase. 5.3.2 Variables Finales Una variable de un tipo primitivo declarada como final no puede cambiar su valor a lo largo de la ejecucin del programa. Puede ser considerada como una constante, y equivale a la palabra const de C/C++.

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
Java permite separar la definicin de la inicializacin de una variable final. La inicializacin puede hacerse ms tarde, en tiempo de ejecucin, llamando a mtodos o en funcin de otros datos. La variable final as definida es constante (no puede cambiar), pero no tiene por qu tener el mismo valor en todas las ejecuciones del programa, pues depende de cmo haya sido inicializada. Adems de las variables miembro, tambin las variables locales y los propios argumentos de un mtodo pueden ser declarados final. Declarar como final un objeto miembro de una clase hace constante la referencia, pero no el propio objeto, que puede ser modificado a travs de otra referencia. En Java no es posible hacer que un objeto sea constante. 5.4 Abstraccin El elemento esencial de la programacin orientada a objetos en java es la abstraccin. Nosotros normalmente miramos la complejidad a travs de la abstraccin. Por ejemplo como se puede observar en la figura vemos un conjunto de miles de partes individuales. Donde es un objeto bien definido con un comportamiento propio nico. Una forma poderosa de gestionar la abstraccin es utilizando clasificaciones jerrquicas; esto nos permite dividir en niveles la semntica de los sistemas complejos, obteniendo sistemas ms manejables. Por ejemplo el paisaje desde el exterior es un sistema sencillo a simple vista pero una vez dentro, podemos ver que este sistema esta compuesto por varios subsistemas: el clima, la vegetacin, los animales, el medio ambiente ect.. Como podemos ver la importancia de la abstraccin es que se puede controlar la complejidad de un sistema utilizando abstracciones jerrquicas. En la programacin se puede utilizar en los programas de algortmicos tradicionales se pueden transformar mediante la abstraccin en objetos. Realizando una secuencia de pasos don de un proceso se puede convertir en un conjunto de mensajes entre otros objetos donde cada uno de ellos tiene su propio comportamiento. Esta es la esencia de la programacin orientada a objetos. Los conceptos orientada a objetos forma el corazn de java, estos conceptos se aplican en la programacin cuando por ejemplo se nos presenta un problema de la vida real se realiza una clasificacin jerrquica para poderlo resolver satisfactoriamente.

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
Ejemplo:

Desde el exterior el cuadro es un objeto sencillo, una vez dentro podemos ver esta compuesto por varios subsistemas: las nubes, los rboles, etc. 5.5 Encapsulado Es el proceso de compartimentalizacin de los elementos de una abstraccin que constituyen su estructura y comportamiento. La Encapsulacin sirve para separar la interface de una abstraccin y su implementacin.
Es

un concepto complementario al de abstraccin. La Encapsulacin esconde la implementacin del objeto que no contribuye a sus caractersticas esenciales. La Encapsulacin da lugar a que las clases se dividan en dos partes: a. Interfase: captura la visin externa de una clase, abarcando la abstraccin del comportamiento comn a los ejemplos de esa clase. b. Implementacin: comprende la representacin de la abstraccin, as como los mecanismos que conducen al comportamiento deseado. Se conoce tambin como ocultamiento o privacidad de la informacin. 5.6 Arreglos y cadenas Uno de los problemas ms comunes en los diversos sistemas de informacin es el tratamiento o procesamiento de un gran volumen de datos o de informacin. Las variables usadas hasta ahora reciben propiamente el nombre de variable escalares, porque solo permiten almacenar o procesar un dato a la vez.

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
Por ejemplo si quiere almacenar nombre y edad de 15 personas con el mtodo tradicional se ocuparan de 30 variables y slo es nombre y edad de 15 personas, agreguen ms datos y ms personas y ya es tiempo de empezar otro tipo de variables. Es decir, en problemas que exigen manejar mucha informacin o datos a la vez, variables escalares no son suficientes ya que su principal problema es que slo permiten almacenar y procesar un dato a la vez; se ocupan entonces variables que sean capaces de almacenar y , manipular conjuntos de datos a al vez Variables de tipo arreglo si permiten almacenar conjuntos de datos del mismo tipo a la vez. Cada dato dentro del arreglo se le conoce como elemento del arreglo y se simboliza y procesa (captura, operacin despliegue) usando el nombre del arreglo respectivo y un subndice indicando la posicin relativa del elemento con respecto a los dems elementos del arreglo, slo recordar que en vcpp la primera posicin elemento o rengln es el 0(cero). Ejemplo: NOMBRES Juan----- nombres(0) Pedro---- nombres(1) Rosa ----nombres(2) Camilo--nombres(3) Sin embargo sus problemas son similares a los de variables normales es decir hay que declararlos, capturarlos, hacer operaciones con ellos, compilarlos, etc., 5.7 Flujo de E/S en java Java proporciona una E/s completa y flexible para archivos y redes. El sistema de E/S de java es coherente y consistente a la vez que se entienden sus fundamentos, el resto del sistema de E/s es bastante sencillo. Flujos: los programas de java realizan las E/S a travs de flujos (streams) donde un flujo es una abstraccin que produce o consume informacin y est relacionado con dispositivos fsicos a travs del sistema de java, los flujos se comportan de la misma forma aunque estn relacionados con diferentes dispositivos fsicos. Por esta razn se pueden aplicar las mismas clases y mtodos de E/S al cualquier tipo de dispositivo, donde el flujo de entrada puede abstraer distintos tipos de entrada desde un archivo de disco a un teclado de conexin de red. Del mismo modo el destino de salida puede ser una consola, un archivo de disco. Los flujos son una forma

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
de limpia de tratar con la E/S sin necesitar que todo el cdigo comprenda la diferencia entre un teclado y una red. La E/S por consola de java es bastante limitada y no es fcil de usar, incluso en programas sencillos. La E/S basada en texto no es importante en la programacin en java. Java implementa los flujos dentro de una jerarqua de clases definida en el paquete java.io. En la parte superior de la jerarqua hay dos clases abstracta. 1. Estas clases definen algunos mtodos que las otras clases 2. Implementan. Dos de los mtodos ms importantes son: 3. InputStream read( ) y write ( ), respectivamente lee y escribe byte de 4. OutputStream datos. Ambos mtodos estn declarados como abstractos 5. Dentro de InputStream y OutputStram

5.8 Gestin De Excepciones Y Errores 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. Durante este captulo estudiaremos la gestin de excepciones y errores, sin pretender profundizar demasiado, pero s fijando la base conceptual de lo que este modo de programacin supone. Mediante la gestin de excepciones se prescindir de sentencias de control de errores del tipo: if ( error == true ) return ERROR; 5.8.1 Tipos de excepciones Existen varios tipos fundamentales de excepciones:

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
Error:

Excepciones que indican problemas muy graves, que suelen ser no recuperables y no deben casi nunca ser capturadas. Exception: Excepciones no definitivas, pero que se detectan fuera del tiempo de ejecucin. RuntimeException: Excepciones que se dan durante la ejecucin del programa.

5.8.1.1 Herencia de excepciones Java Todas las excepciones tienen como clase base la clase Throwable, que est incluida en el paquete java.lang, y sus mtodos son:
Trowable(

String mensaje ); Constructor. La cadena es opcional Throwable fillInStackTrace(); Llena la pila de traza de ejecucin. String getLocalizedMessage(); Crea una descripcin local de este objeto. String getMessage(); Devuelve la cadena de error del objeto. void printStackTrace( PrintStream_o_PrintWriter s ); Imprime este objeto y su traza en el flujo del parmetro s, o en la salida estndar (por defecto). String toString; Devuelve una breve descripcin del objeto. 5.8.2 Funcionamiento 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.

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
5.8.2.1 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 } 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 por ejemplo se intentase capturar primero una excepcin Throwable, nunca llegaramos a gestionar una excepcin Runtime, puesto que cualquier clase hija de Runtime es tambin hija de Throwable, por herencia. Si no se ha lanzado ninguna excepcin el cdigo contina sin ejecutar ninguna sentencia catch. Pero, y si quiero realizar una accin comn a todas las opciones?. Para insertar fragmentos de cdigo que se ejecuten tras la gestin de las excepciones. Este cdigo

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
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 match } 5.8.2.2 Lanzamiento de excepciones: throw - throws Muchas veces el programador dentro de un determinado mtodo deber comprobar si alguna condicin de excepcin se cumple, y si es as lanzarla. Para ello se utilizan las palabras reservadas throw y throws. Por una parte la excepcin se lanza mediante la sentencia throw: if ( condicion_de_excepcion == true ) throw new miExcepcion(); Se puede observar que hemos creado un objeto de la clase miExcepcion, puesto que las excepciones son objetos y por tanto debern ser instanciadas antes de ser lanzadas. Aquellos mtodos que pueden lanzar excepciones, deben cules son esas excepciones en su declaracin. Para ello se utiliza la sentencia throws: tipo_devuelto miMetodoLanzador() throws miExcep1, miExcep2 { // Codigo capaz de lanzar excepciones miExcep1 y miExcep2 } Se puede observar que cuando se pueden lanzar en el mtodo ms de una excepcin se deben indicar en su declaracin separadas por comas. 5.8.2.3 Ejemplo de gestin de excepciones Ahora que ya sabemos cmo funciona este sistema, conviene ver al menos un pequeo ejemplo, que ilustre al lector en el uso de las excepciones: // Creacin de una excepcin personalizada class MiExcepcion extends Exception { MiExcepcion() {

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
super(); // constructor por defecto de Exception } MiExcepcion( String cadena ) { super( cadena ); // constructor param. de Exception } } // Esta clase lanzar la excepcin class Lanzadora { void lanzaSiNegativo( int param ) throws MiExcepcion { if ( param < 0 ) throw new MiExcepcion( "Numero negativo" ); } } class Excepciones { public static void main( String[] args ) { // Para leer un fichero Lanzadora lanza = new Lanzadora(); FileInputStream entrada = null; int leo; try { entrada = new FileInputStream( "fich.txt" ); while ( ( leo = entrada.read() ) != -1 ) lanza.lanzaSiNegativo( leo ); entrada.close(); System.out.println( "Todo fue bien" ); } catch ( MiExcepcion e ){ // Personalizada System.out.println( "Excepcion: " + e.getMessage() ); } catch ( IOException e ){ // Estndar System.out.println( "Excepcion: " + e.getMessage() ); }finally { if ( entrada != null ) try

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
{ entrada.close(); // Siempre queda cerrado } catch ( Exception e ) { System.out.println( "Excepcion: " + e.getMessage() ); } System.out.println( "Fichero cerrado." ); } } } class Excepciones { public static void main( String[] args ) { // Para leer un Archivo FileInputStream entrada = null; Lanzadora lanza = new Lanzadora(); int leo; try { entrada = new FileInputStream("fich.txt"); while ( ( leo = entrada.read() ) != -1 ) 80 lanza.lanzaSiNegativo( leo ); System.out.println( "Todo fue bien" ); } catch ( MiExcepcion e ){ // Personalizada System.out.println( "Excepcion: " + e.getMessage() ); } catch ( IOException e ){ // Estndar System.out.println( "Excepcion: " + e.getMessage() ); } finally { entrada.close(); // As el fichero siempre queda cerrado System.out.println( "Fichero cerrado" ); } } } Este programa lee un Archivo (fichero.txt), y lee su contenido en forma de nmeros. Si alguno de los nmeros ledos es negativo, lanza una excepcin MiExcepcion,

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
Adems gestiona la excepcin IOException, que es una excepcin de las que Java incluye y que se lanza si hay algn problema en una operacin de entrada/salida. Ambas excepciones son gestionadas, imprimiendo su contenido (cadena de error) por pantalla. La salida de este programa, suponiendo un nmero negativo sera: Excepcin: Numero negativo Archivo cerrado En el caso de que no hubiera ningn nmero negativo sera: Todo fue bien Archivo cerrado En el caso de que se produjese un error de E/S, al leer el primer nmero, sera: Excepcin: java.io.IOException Archivo cerrado 5.8.3 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 ); }

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
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):serf void metodoVacio( ) { }; 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; } 5.8.4 La instanciacin de las clases: Los objetos 5.8.4.1 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.

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas

5.8.4.2 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. Se llama al mtodo constructor justo despus de crear la instancia y antes de que new devuelva el control al punto de la llamada.

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas

As, cuando ejecutamos el siguiente programa: 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 Para crear un programa Java que contenga ese cdigo, se debe de crear una clase que contenga un mtodo main(). El intrprete java se ejecutar el mtodo main de la clase que se le indique como parmetro. 5.8.4.3 El 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. Hay una distincin crtica entre la forma de manipular los tipos simples y las clases en Java: Las referencias a objetos realmente no contienen a los objetos a los que referencian. De esta forma se pueden crear mltiples referencias al mismo objeto, como por ejemplo: MiPunto p3 =p2; Aunque tan slo se cre un objeto MiPunto, hay dos variables (p2 y p3) que lo referencian. Cualquier cambio realizado en el objeto referenciado por p2 afectar al objeto referenciado por p3. La asignacin de p2 a p3 no reserva memoria ni modifica el objeto. De hecho, las asignaciones posteriores de p2 simplemente desengancharn p2 del objeto, sin afectarlo: p2 = null; // p3 todava apunta al objeto creado con new

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
Aunque se haya asignado null a p2, p3 todava apunta al objeto creado por el operador new. Cuando ya no haya ninguna variable que haga referencia a un objeto, Java reclama automticamente la memoria utilizada por ese objeto, a lo que se denomina recogida de basura. Cuando se realiza una instancia de una clase (mediante new) se reserva en la memoria un espacio para un conjunto de datos como el que definen los atributos de la clase que se indica en la instanciacin. A este conjunto de variables se le denomina variables de instancia. La potencia de las variables de instancia es que se obtiene un conjunto distinto de ellas cada vez que se crea un objeto nuevo. Es importante el comprender que cada objeto tiene su propia copia de las variables de instancia de su clase, por lo que los cambios sobre las variables de instancia de un objeto no tienen efecto sobre las variables de instancia de otro. El siguiente programa crea dos objetos MiPunto y establece los valores de x e y de cada uno de ellos de manera independiente para mostrar que estn realmente separados. 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 5.8.5. Acceso al objeto 5.8.5.1 El 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

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
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. 5.8.5.2 La 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.

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
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!!! } 5.8.6. La destruccin del objeto 5.8.6.1 La destruccin de los objetos Cuando un objeto no va a ser utilizado, el espacio de memoria de dinmica que utiliza ha de ser liberado, as como los recursos que posea, permitiendo al programa disponer de todos los recursos posibles. A esta accin se la da el nombre de destruccin del objeto. En Java la destruccin se puede realizar de forma automtica o de forma personalizada, en funcin de las caractersticas del objeto. 5.8.6.2 La destruccin por defecto: Recogida de basura El intrprete de Java posee un sistema de recogida de basura, que por lo general permite que no nos preocupemos de liberar la memoria asignada explcitamente. El recolector de basura ser el encargado de liberar una zona de memoria dinmica que haba sido reservada mediante el operador new, cuando el objeto ya no va a ser

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
utilizado ms durante el programa (por ejemplo, sale del mbito de utilizacin, o no es referenciado nuevamente). El sistema de recogida de basura se ejecuta peridicamente, buscando objetos que ya no estn referenciados. 5.8.6.3 La destruccin personalizada: finalize A veces una clase mantiene un recurso que no es de Java como un descriptor de archivo o un tipo de letra del sistema de ventanas. En este caso sera acertado el utilizar la finalizacin explcita, para asegurar que dicho recurso se libera. Esto se hace mediante la destruccin personalizada, un sistema similar a los destructores de C++. Para especificar una destruccin personalizada se aade un mtodo a la clase con el nombre finalize: class ClaseFinalizada { ClaseFinalizada() { // Constructor // Reserva del recurso no Java o recurso compartido } protected void finalize() { // Liberacin del recurso no Java o recurso compartido } } El intrprete de Java llama al mtodo finalize(), si existe cuando vaya a reclamar el espacio de ese objeto, mediante la recogida de basura. Debe observarse que el mtodo finalize() es de tipo protected void y por lo tanto deber de sobreescribirse con este mismo tipo. 5.8.7 Herramientas De Java Con cada una de las versiones que Sun lanza del JDK, se acompaa de una serie de bibliotecas con clases estndar que valen como referencia para todos los programadores en Java.

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
Estas clases se pueden incluir en los programas Java, sin temor a fallos de portabilidad. Adems, estn bien documentadas (mediante pginas Web), y organizadas en paquetes y en un gran rbol de herencia. A este conjunto de paquetes (o bibliotecas) se le conoce como la API de Java (Application Programming Interface). A continuacin se explicara los paquetes basicos de la API de JAVA, aunque algunos de ellos tienen subpaquetes. 5.8.7.1 Paquetes de utilidades
java.lang: java.io:

Fundamental para el lenguaje. Incluye clases como String o StringBuffer. Para la entrada y salida a travs de flujos de datos, y ficheros del sistema. java.util: Contiene colecciones de datos y clases, el modelo de eventos, facilidades horarias, generacin aleatoria de nmeros, y otras clases de utilidad. java.math: Clases para realizar aritmtica con la precisin que se desee. java.text: Clases e interfaces para manejo de texto, fechas, nmeros y mensajes de una manera independiente a los lenguajes naturales. java.security: Clases e interfaces para seguridad en Java: Encriptacin RSA.. 5.8.7.2 Paquetes para el desarrollo grfico
java.applet:

Para crear applets y clases que las applets utilizan para comunicarse con

su contexto. java.awt: Para crear interfaces con el usuario, y para dibujar imgenes y grficos. javax.swing: Conjunto de componentes grficos que funcionan igual en todas las plataformas que Java soporta. javax.accesibility: Da soporte a clases de accesibilidad para personas discapacitadas. java.beans: Para el desarrollo de JavaBeans. 5.8.7.3 Paquetes para el desarrollo en red
java.sql:

Paquete que contiene el JDBC, para conexin de programas Java con Bases

de datos. java.rmi: Paquete RMI, para localizar objetos remotos, comunicarse con ellos e incluso enviar objetos como parmetros de un objeto a otro. org.omg.CORBA: Facilita la posibilidad de utilizar OMG CORBA, para la conexin entre objetos distribuidos, aunque est codificados en distintos lenguajes.

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
CAPITULO 6. Herencia y Extensin de Clases 6.1 La 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. 6.2 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. 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.

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
6.3 Herencia mltiple 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, que estudiaremos ms adelante. 6.4 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. 6.5 Limitaciones en la herencia Todos los campos y mtodos de una clase son siempre accesibles para el cdigo de la misma clase.

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
Para controlar el acceso desde otras clases, y para controlar la herencia por las 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() { return nacidoHace; } private int getSaldo() { return dineroDisponible; } } class Hija extends Padre { // Definicin } class Visita { // Definicin }

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
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 (sera una indiscrecin, no?). 6.6. La clase Object La clase Object es la superclase de todas las clases da Java. Todas las clases derivan, directa o indirectamente de ella. Si al definir una nueva clase, no aparece la clusula extends, Java considera que dicha clase desciende directamente de Object. La clase Object aporta una serie de funciones bsicas comunes a todas las clases:
public

boolean equals( Object obj ): Se utiliza para comparar, en valor, dos objetos. Devuelve true si el objeto que recibe por parmetro es igual, en valor, que el objeto desde el que se llama al mtodo. Si se desean comparar dos referencias a objeto se pueden utilizar los operadores de comparacin == y !=. public int hashCode(): Devuelve un cdigo hash para ese objeto, para poder almacenarlo en una Hashtable. protected Object clone() throws CloneNotSupportedException: Devuelve una copia de ese objeto. public final Class getClass(): Devuelve el objeto concreto, de tipo Class, que representa la clase de ese objeto. protected void finalize() throws Trowable: Realiza acciones durante la recogida de basura. E/S caracteres Organizacin del cdigo Utilizacin de Sentencias en Java Sentencias de seleccin Sentencias de repeticin Principios de los applets

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
6.7 Extensin De Clases 6.7.1 Composicin De Objetos Extendido 6.7.1.1subclase Es una versin especializada de una superclase, que hereda todas las variables de instancia y los mtodos definidos por a superclase y que aade sus propios elementos. Ejemplo: Este ejemplo crea una superclase llamada A y una subclase B entonces tenemos: // ejemplo de herencia // crea una superclase. class A { int i, j; void showij(); system.out.println (i y j:+i+ +j); } } // crea una subclase extendiendo la clase A class B extend a { int k; void show ();{ system.out.println(k: +k); } void sum(); { System.out.println (i+ j+k: +(i+j+k)); } } class SimpleInheritance { public static void main (string args[ ]){ A superOb = new A (); B superOb = new b (); //La superclase se puede usarse as misma.

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
SuperOb.i = 10; SuperOb.j = 20; System.out.println (Contenido de SuperOb: ); SuperOb.showij(); System.out.println(); /* la subclase tiene acceso a todos los miembros pblicos de la superclase.*/ SuperOb.i = 7; SuperOb.j = 8; SuperOb.k = 9; System.out.println (Contenido de SubOb: ); SuperOb.showij ( ); SuperOb.showk ( ); System.out.println ( ); System.out.println ( suma de i, j y k en subOb: ); subOb.sum ( ); } } La salida de este programa debe ser la siguiente; Contenido de la superOb: I y j: 10 ,20 Contenido de la subOb: I y j: 7,8 K: 9 Suma de i, j y k en subOb: I+j+k: 24 6.7.2 Relacin de tipo de herencia Existen 2 tipos de herencia simple, cuando depende de un solo padre y mltiple cuando hereda de varios padres.

6.7.2.1 Mtodos Forma general de un mtodo: Tipo nombre_de_mtodo(lista_de_parmetros) { //cuerpo_del_mtodo }

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas

Aqu, tipo especifica el tipo de dato devuelto por el mtodo. Puede ser cualquier tipo vlido, incluidos los tipos de clase. Si el mtodo no devuelve ningn valor, el tipo devuelto debe ser void. El nombre del mtodo puede ser cualquier identificador vlido distinto de los ya utilizados por otros elementos del mbito actual. La lista de parmetros son variables que reciben el valor de los argumentos que se pasan al mtodo. Si el mtodo no tiene parmetros, entonces la lista de parmetros estar vaca.. Los mtodos que devuelven un tipo distinto de void, devuelve un valor a la rutina llamante utilizando la siguiente forma de la sentencia return. Return valor. Java proporciona un mecanismo para la llamada a funciones C y C++ desde nuestro cdigo fuente java. Para definir como funciones C o C++ se utiliza la palabra clave native. Ejemplo Public class fecha { Int ahora; Public fecha() { Ahora =time(); } private native int time(); static{ system.loadLibrary(time); } } una vez escrito el cdigo Java, se necesitan ejecutar los pasos para poder integrar el cdigo C oC++: Utilizar javah para crear un fichero de cabecera (.h) Utilizar javah para crear un fichero de stubs, es decir, contiene la declaracin de las funciones. Escribir el cdigo del mtodo nativo en C o C++, es decir, rellenar el cdigo de la funcin, completando el trabajo de javah al crear el fichero de stubus Compilar el fichero de stubs y el fichero .c en una librera de carga dinmica(DLL en Windows 95 o lobXX.so en UniX) Ejecutar la aplicacin con el appletviwer

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
6.7.2.2 Sobrecarga De Mtodo Java utiliza la sobrecarga de mtodos para implementar polimorfismos, al invocar un mtodo sobrecargado, java utiliza el nmero de argumentos para determinar la versin del mtodo sobrecargado el cual debe llamar. Ejemplo: // Ejemplo de sobrecarga de mtodos class overloadDemo void test() { System.out.println ( Sin parmetros); } //Sobrecarga del mtodo test con un parmetro enteros. System.out.println (a: +a); } // Sobrecarga el mtodo test con un parmetro con dos parmetros //enteros. Void test (int a, int b) { System.out.println (a y b: +a+ + b); } // sobrecarga del mtodo test con un parmetro double double test(double a) { System.out.println (a double: +a); Return a*a; } } class overload { public static void main (string args[ ]) { overloadDemo ob=new overloadDemo( ); double result; // llama a todas las versiones de test ( ) ob.test ( ); ob.test (10 ); ob.test ( 10,20); result = ob.test (123 .2 );

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
system. Out. Println (Resultado de ob.test(123 .2): + result); } } EL PROGRAMA GENERA LA SIGUIENTE SALIDA Sin parmetros a : 10 a y b: 10 20 a double: 123 .2 Resultado de ob.test(123.2): 15178.2 Clase object y cdigos genricos: La clase object es definida por java, esta clase es la superclase de las dems clases, donde esta clase puede referenciar a un objeto de otra clase; teniendo en cuenta que las matrices se implementan como las clases una variable de tipo object puede referenciar a una matriz. La clase object define los siguientes mtodos: Object clone ( ): crea un nuevo objeto igual al que est siendo duplicado Bolean equeal(object objeto): determina si un objeto es igual a otro. Void finalize ( ): llamada que se realiza antes de que un objeto se reciclado Class get (): obtiene en tiempo de ejecucin la clase de un tiempo Int hashCode: Devuelve el cdigo hash asociado al objeto llamante. 6.8. Applest Y Web 6.8.1 Applets Programas elementales incluidos en pginas HTML a travs de la etiqueta app y que se despliega en el visualizador tras cargarse la pgina. Cuando un usuario solicita un applet construido con java ocurre: El usuario solicita un documento HTML al servidor de informacin. El servidor enva el documento al visualizador del cliente, este documento tienen una etiqueta app que identifica la referencia a un applet El bytecode (obtenido por compilacin de cdigo java) del applet se transfiere al cliente. El visualizador del cliente, que funciona con Java (tiene una VM) interpreta el Bytecode y despliega el applet .

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
Como cdigo del applet contiene toda la informacin necesaria, el usuario tiene una interaccin total con el applet sin relacionarse de nuevo con el servidor. 6.8.2 HTML para Java HTML es una forma de definir la organizacin lgica de la informacin que a travs de enlaces, llamados enlaces de hipertexto e hiperenlaces, permite acceder a otra informacin relacionada, el enlace hipertexto es un enlace a otro documento con hipertexto que puede estar en la mquina local de cualquier otra parte de la red. El elemento que define un documento con hipertexto es que se puede leer de una forma no lineal, donde el usuario puede elegir distintos caminos a travs de los enlaces, pudiendo acceder a otros documentos relacionados. La nica conexin que tiene HTML con java es que proporcional la etiqueta applet que permite ejecutar applest. Por lo tanto, es imposible introducir instrucciones de java en un documento HTML para hacer que se ejecute una applet. 6.8.3 Protocolos Para Trabajo En La Red Un protocolo es un lenguaje que se usa para ejecutar tareas muy especficas. Por ejemplo el protocolo para conectar un cliente con un servidor a travs de Internet. Este protocolo se denomina TPC/IP. Internet es un conexin de varias redes a travs de las cuales podemos comunicarnos para obtener informacin, escuchar msica o ver videos, enviar y recibir datos, leer noticias, hacer reservaciones en hoteles, negocios, establecer comunicaciones con otras personas, hacer publicidad, etc., Intranet es una red al interior de una empresa para establecer una comunicacin entre todos los departamentos u oficinas dentro de una empresa. Script ejecutable: es un archivo ejecutable que se crea para poder ejecutar una applet en Internet. 6.8.4 Que Es Un Applet Los applets (miniaplicacin) son programas escritos en Java que sirven para "dar vida" a las pginas Web (interaccin en tiempo real, inclusin de animaciones, sonidos...), de ah su potencia.

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
Los applets son programas que se incluyen en las pginas Web y son ejecutados en la mquina cliente, con lo que no existen ralentizaciones por la saturacin del mdem o del ancho de banda. Permiten cargar a travs de la red una aplicacin portable que se ejecuta en el navegador. Para que esto ocurra tan slo hace falta que el navegador sea capaz de interpretar Java. A las pginas que contienen applets se las denomina pginas Java-Powered. Los applets pueden ser visualizadas con la herramienta appletviewer, incluido en el JDK de Java. Los applets no son exactamente aplicaciones Java, ya que presentan las siguientes diferencias respecto a las aplicaciones normales Java: Se cargan mediante un navegador, no siendo lanzados por el intrprete Java. Son cargados a travs de la red por medio de pginas HTML y no residen en el disco duro de la mquina que los ejecuta. Poseen un ciclo de vida diferente; mientras que una aplicacin se lanza una vez, un applet se arranca (inicia) cada vez que el usuario recarga la pgina en la que se encuentra la applet. Tienen menos derechos que una aplicacin clsica, por razones de seguridad. De modo predeterminado en el puesto que los ejecuta no pueden ni leer ni escribir ficheros, ni lanzar programas, ni cargar DLLs. Slo pueden comunicarse con el servidor Web en que se encuentra la pgina Web que las contiene. 6.8.4.1 Consideraciones sobre la seguridad en las applets Los applets tienen una serie de restricciones de programacin que los hacen "seguros". Estas restricciones de seguridad son especialmente importantes, ya que evitarn que se cargue por error un applet que destruya datos de la mquina, que obtenga informacin restringida, o que produzca otros daos inesperados. Los applets no dejan de ser "ejecutables" que funcionan dentro de una aplicacin, como puede ser un visualizador de pginas Web (browser). Este ejecutable puede obtenerse de una red, lo que significa que hay cdigo posiblemente no fiable que se ejecuta dentro de la aplicacin.

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
Java tiene muchas salvaguardas de seguridad que minimizan el riesgo de la ejecucin de applets, pero estas salvaguardas tambin limitan a los programadores de applets en su capacidad de programacin. El modelo de seguridad para las applets en Java trata una applet como cdigo no fiable ejecutndose dentro de un entorno fiable. Por ejemplo, cuando un usuario instala una copia de un navegador Web en una mquina se est fiando de que su cdigo ser funcional en el entorno. Normalmente los usuarios tienen cuidado de qu instalan cuando proviene de una red. Una applet, por el contrario, se carga desde la red sin ninguna comprobacin de su fiabilidad. El lenguaje Java y los applets son escritos para que eviten los applets no fiables. Estas salvaguardas son implementadas para verificar que los cdigos de byte de las clases de los applets, no rompen las reglas bsicas del lenguaje ni las restricciones de acceso en tiempo de ejecucin. Slo cuando estas restricciones son satisfechas se le permite al applet ejecutar su cdigo. Cuando se ejecuta, se le marca para sealar que se encuentra dentro del intrprete. Esta marca permite a las clases de tiempo de ejecucin determinar cundo a una fraccin del cdigo se le permite invocar a cierto mtodo. Por ejemplo, una applet est restringida en los hosts en los que se puede abrir una conexin de red o en un conjunto de URLs a las que puede acceder. En su conjunto estas restricciones constituyen una poltica de seguridad. En el futuro, Java tendr polticas ms ricas, incluyendo algunas que usen encriptacin y autentificacin para permitir a las applets una mayor capacidad. La actual poltica de seguridad afecta a los recursos que una applet puede usar, cuyos principales puntos son: Los accesos que pueden realizar los applets a los ficheros son restringidos. En particular escribir en ficheros y/o leerles no ser una capacidad estndar que se pueda realizar en los navegadores que soporten applets de Java. Las conexiones de red sern restringidas a conectar solo con el host del que proviene el applet. Un applet no es capaz de usar ningn mtodo que pueda resultar en una ejecucin arbitraria, cdigo no revisado o ambos. Esto incluye mtodos que ejecuten programas arbitrarios (mtodos nativos) as como la carga de bibliotecas dinmicas. Se anticipa en cualquier caso que en el futuro los modelos de seguridad permitirn a los applets autentificadas superar estas restricciones.

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
6.8.5 La Clase Applet 6.8.5 .1 Situacin de la clase Applet en la API de Java La clase Applet Java, de la cual han de heredar todos los programas Java que vayan a actuar como applets, es la nica clase que contiene el paquete java.applet de la API de Java. Esta clase hereda de Object (como todas las clases Java), pero adems hereda de Component y Container, que son dos clases del paquete grfico AWT. Esto ya perfila las posibilidades grficas de este tipo de aplicaciones Java. 6.8.5.2 Mtodos del ciclo de vida Como ya se ha indicado una applet no tiene un ciclo de vida tan "sencillo" como el de una aplicacin, que simplemente se ejecuta hasta que finaliza su mtodo main(). La siguiente figura modela el ciclo de vida de una applet:

Cada crculo representa una fase en el ciclo de vida de la applet. Las flechas representan transiciones y el texto representa la accin que causa la transicin. Cada fase est marcada con una invocacin a un mtodo de la applet: void init(); Es invocado cuando se carga la applet. Aqu se suelen introducir las iniciaciones que la applet necesite. void start();Es invocado cuando la applet, despus de haber sido cargada, ha sido parada (cambio de pgina Web, minimizacin del navegador,...), y de nuevo activada

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
(vuelta a la pgina, restauracin del navegador,...). Se informa a la applet de que tiene que empezar su funcionamiento. void stop(); Es invocado para informar al applet de que debe de parar su ejecucin. As una applet que utilice threads, debera detenerlos en el cdigo de este mtodo. void destroy();Es invocado para informar a la applet de que su espacio est siendo solicitado por el sistema, es decir el usuario abandona el navegador. El applet debe de aprovechar este momento para liberar o destruir los recursos que est utilizando. void paint(); Es invocado cada vez que hay que el navegador redibuja el applet. Al crear una applet no es necesario implementar todos estos mtodos. De hecho habr applets que no los necesiten. Cuando un navegador carga una pgina Web que contiene una applet, suele mostrar en su parte inferior un mensaje como: initializing... starting... Esto indica que la applet, se est cargando: 1. Una instancia de la clase applet es creada. 2. El applet es iniciado, mediante su mtodo init(). 3. El applet empieza a ejecutarse, mediante su mtodo start(). Cuando el usuario se encuentra con una pgina Web, que contiene una applet y salta a otra pgina, entonces el applet se detiene invocando a su mtodo stop(). Si el usuario retorna a la pgina donde reside el applet, sta vuelve a ejecutarse nuevamente invocando a su mtodo start(). Cuando el usuario sale del navegador el applet tiene un tiempo para finalizar su ejecucin y hacer una limpieza final, mediante el mtodo destroy(). 6.8.6 La Clase Url Un URL (Uniform Resource Locator) es una direccin de Internet. Cada recurso (fichero, pgina Web, imagen...) tiene uno propio. En Java existe una clase denominada URL que modeliza esta clase de objetos. La clase URL pertenece al paquete java.net, y tiene una cierta importancia en el desarrollo de los applets, puesto que muchos de los mtodos de la clase Applet la utilizan para acceder a determinado recurso de Internet o para identificarse.

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
Podemos especificar un URL de manera absoluta: URL URLabsoluto = new URL("http://www.host.com/dir/fich.htm"); O bien podemos especificar un URL de manera relativa: URL URLhost = new URL("http://www.Javasoft.com/"); URL URLrelativo = new URL( URLhost, "dir/fich.htm"); Ambos ejemplos corresponderan al URL "http://www.host.com/dir/fich.htm". 6.8.7 Inclusin de la applet en una pgina Web Para incluir una applet en una pgina Web, una vez compilada la applet, debe incluirse entre el cdigo HTML de la pgina Web una etiqueta <APPLET>, que como mnimo ha de presentar los siguientes tres parmetros: code: Especifica el URL del fichero de clase Java (*.class) que contiene la applet. width: Especifica la anchura inicial de la applet (en pixels). heigth: Especifica la altura inicial de la applet (en pixels). Adems, de la etiqueta inicial, una applet puede tener parmetros que se especificarn mediante etiquetas <PARAM>, que como mnimo han de presentar dos parmetros: name: Indica el nombre del parmetro de la applet al que esta etiqueta hace referencia. value: Establece este valor al parmetro indicado en name de la misma etiqueta. As un ejemplo de esto sera: <applet code="AppletDiagonal.class" width=200 height=200> <param name=Parametro1 value=Valor1> <param name=Parametro2 value=Valor2> </applet> En este ejemplo la applet puede entender los parmetros Parametro1 y Parametro2, mediante los mtodos que se describen en el siguiente apartado, y obtendra Valor1 y Valor2 respectivamente. Se observa que adems de la etiqueta <applet> en el cdigo HTML tambin aparece una etiqueta </applet>. Esto sucede porque HTML es un lenguaje pareado, en el que casi todas las etiquetas de inicio de elemento (<etiq>) tienen una etiqueta de fin (</etiq>).

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
6.8.7.1 Obtencin de los parmetros de la applet Cuando se incluye una applet en una pgina Web ha de hacerse mediante la etiqueta HTML <applet>. Las etiquetas HTML permiten utilizar parmetros, y la etiqueta <applet> hace lo propio, permitiendo a la applet recibir parmetros de ejecucin, tal y como una aplicacin los recibe en el parmetro (un vector de cadenas) de su mtodo main(Strings). Los siguientes mtodos se utilizan para extraer informacin de los parmetros que recibi el applet cuando fue llamado desde el cdigo HTML: URL getDocumentBase(); Devuelve el URL del documento que contiene la apple,K VKVKKLBKK KV KKLVLV.URL getCodeBase(); Devuelve el URL de la applet. String getParameter(String name); Devuelve el valor de un parmetro (etiquetas <param>) que aparezca en el documento HTML. Si por ejemplo se llamase a una applet, con el cdigo HTML: <applet code="AppletParam.class" width=50 height=50> <param name=Color value="red"> </applet> Una llamada en esta applet al mtodo getParameter("Color") devolver "red". 6.8.7.2 Obtencin de informacin sobre una applet Algunos mtodos de los applet se utilizan para comunicar informacin o mostrar mensajes en la pantalla referentes al applet: boolean isActive(); Comprueba si la applet est activa. void showStatus(String status); Muestra una cadena del estado en la pantalla. String getAppletInfo(); Devuelve informacin relativa a la applet como el autor, Copyright o versin. String[ ][ ] getParameterInfo(); Devuelve un vector que describe algn parmetro especfico de la applet. Cada elemento en el vector es un vector de tres cadenas que tienen la forma: {nombre, tipo, comentario}. Un ejemplo de como definir este mtodo para una applet que permita un solo parmetro, color, sera: public String[][] getParameterInfo()

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
{ String info[][] = { {"Color","String","foreground color"} }; return info; } 6.8.7.3 Manipulacin del entorno de una applet Algunas applets pueden afectar al entorno en que estn ejecutndose. Para ello se utilizan los mtodos: AppletContext getAppletContext(); Devuelve un AppletContext, que permite a la applet afectar a su entorno de ejecucin. void resize( int ancho, int largo); Solicita que se modifique el tamao de la applet. Tambin permite recibir un nico parmetro Dimension. Locale getLocale(); Devuelve el Locale de la applet si fue establecido. void setStub( AppletStub s ); Establece el stub de esta applet. 6.8.8 Ejemplo De Construccin De Una Applet 6.8.8.1 Cdigo Para crear un applet normalmente ser necesario importar al menos las bibliotecas java.awt.* y la java.applet.*. La clase que represente a la applet se ha de declarar como una subclase de la clase Applet, para poder sobreescribir los mtodos de la clase Applet. Siempre conviene sobreescribir al menos el mtodo paint() que ser llamado por los navegadores que soporten applets para mostrarles por pantalla. Vamos a construir un applet denominada AppletDiagonal que simplemente dibuje una lnea diagonal. Un posible cdigo para este applet sera: import java.awt.*; import java.applet.*; public class AppletDiagonal extends Applet { public void paint(Graphics g) {

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas
g.setColor( Color.red ); g.drawLine(0, 0, getWidth(), getHeight() ); } } Como funciona este cdigo: El mtodo paint() recibe un objeto de la clase Graphics. La clase Graphics, incluida en el AWT, contiene mtodos para mostrar varios tipos de grficos. Mediante el mtodo setColor() de la clase Graphics se establece el color de primer plano a rojo, que es uno de los colores predefinidos de la clase Color. Por ltimo, mediante drawLine() se dibuja una lnea dadas las coordenadas de su esquina superior izquierda y de la inferior derecha. En este caso se indican la esquina superior izquierda de la applet mediante las coordenadas (0,0), y la esquina inferior derecha se obtiene mediante dos mtodos de la clase Dimension (getWidth(), getHeight() ) . 6.8.8.2 Ejecucin Para ejecutar el applet, una vez compilado el archivo, se introduce el llamado al applet en una pgina Web (por ejemplo AppletDiagonal.htm), introduciendo entre su cdigo HTML lo siguiente: <applet code="AppletDiagonal.class" width=200 height=200> </applet> Cuando se cargue esta pgina Web en un navegador compatible con Java o mediante el visualizador de applets que viene con el JDK (appletviewer) se ver algo como:

Universidad Nacional Abierta y a Distancia - UNAD Escuela de Ciencias Bsica Tecnologa e Ingeniera Programa de Ingeniera de Sistemas

Se podra dibujar un rectngulo con cambiar la lnea de cdigo de drawLine() por otra que llamase al mtodo drawRect(): g.drawRect(10, 10, r.width 20, r.height 20);