You are on page 1of 13

El Lenguaje de Programacin JAVA Introduccin Java es un lenguaje de programacin general orientado al manejo de objetos (OO).

Fu creado en Sun Microsystems por un equipo de gente encabezado por James Gosling y se empez a difundir a partir de 1995. Aunque se di a conocer originalmente como un lenguaje para crear applets para aplicaciones en WEB, en realidad, se puede utilizar para cualquier tipo de aplicacin. La sintaxis del lenguaje se parece a la de C o C++; sin embargo, es un lenguaje completamente nuevo. Una de sus caracteristicas mas importante es su independencia de plataforma. Al compilar un programa en Java, se genera un pseudocdigo llamado bytecode para una maquina virtual. Es decir, al contar con un interprete de este tipo de cdigo para una computadora particular, cualquier programa compilado en Java corre sin ninguna modificacin. Es posible tambin disear un chip para implementar este pseudocdigo directamente en hardware. Los diseadores de Java tambin pusieron mfasis especial en la seguridad del lenguaje. Los apuntadores de C fueron eliminados ya que el mal uso de ellos puede hacer caer el sistema de cmputo. El interprete de Java tambin efecta una revisin de los bytecodes generados para asegurar que fueron creados por un compilador correcto. Es imposible (en teora), por lo tanto que un programa en Java haga una referencia ilegal en la memoria de la mquina. Dentro de las especificaciones de Java se incluyen una serie de bibliotecas de clases predefinidas para diversos usos como: AWT APPLET IO LANG UTIL NET JDBC etc. herramientas grficas para crear applets para el Web manejo de archivos de entrada/salida objetos bsicos utileras de uso general clases para manipular URLs clases para conectarse a bases de datos SQL

La cantidad de clases predefinidas aumenta en cada versin nueva de Java y por consecuente, el poder del lenguaje. Aunque Java tiene poco tiempo en el mercado, su aceptacin ha sido poco menos que fenomenal. Miles de compaas de desarrollo de software lo han adoptado como estandar y se ve un crecimiento casi sin paralelo. En la medida que salgan bibliotecas con alcances en reas como 3D y herramientas para agilizar el desarrollo de aplicaciones comerciales, Java tendr un impacto an mayor.

Clases y Objetos Java es un lenguaje orientado a objetos (OO). En esta terminologa, un objeto es un modelo computacional de alguna cosa concreta o abstracta que el diseador quiere modelar y manipular. Consiste en una coleccin de datos que representan el estado del objeto y un conjunto de funciones o mtodos que este objeto puede invocar. Estos datos y mtodos se ven encapsulados dentro de una caja negra (el objeto) para ser utilizados por otras partes del sistema. Una clase tiene la definicin de los datos y mtodos de un tipo de objeto y el objeto representa una instancia particular de la clase. Si definiramos una clase llamado Persona, podramos crear un objeto concreto Juan como instancia de Persona. Si se definiera un mtodo en la clase Persona llamado efectuarDepsito, este metodo sera invocado sobre el objeto Juan con la sintaxis: Juan.efectuarDepsito(importe, cuenta); Como un ejemplo, se podra imaginar una videocasetera (VCR) como una clase. Sus datos o estado consistiran en sus propiedades como marca, modelo, etc. as como sus estado - si est prendida o apagada, si se est tocando un casette, rebobinandose , etc. Sus mtodos son las funciones de sus botones (prender/apagar, tocar, rebobinar, etc.). Al usuario de un objeto de esta clase (la videocasetera de la casa), no le importa mucho la manera en que estas funciones estan implementadas dentro del aparato; sino, que trabajen adecuadamente con sus casettes y su televisor. Es decir, los mtodos deben cumplir ciertos estandares previamentos descritos y hasta all. Incluso, la caja de la VCR tiene un mensaje de advertencia de no abrirse o se pierde la garanta. Algunos datos del objeto pueden verse por los usuarios y otros no; por lo general, los mtodos de un objeto son utilizables por cualquiera (pblicos) aunque se puede mantener algunos como privados; los datos de un objeto se suelen dar acceso a travs de mtodos definidos para ese prposito y generalmente son privados. Para el programador, la ventaja de este paradigma de objetos es poder disear ciertas clases con una semblanza al problema a resolver y aislar su mantenimiento a cada una por separada. El usuario del sistema tambin puede entender mejor un diseo presentado en trminos de objetos dentro de su propio vocabulario as como las interacciones entre s (mtodos) que el dilogo tradicional con el analista. A veces cuesta trabajo modelar un sistema en trminos de objetos ya que existen muchas maneras de hacerlo y cada tipo de diseo tiene consecuencias sobre la modularidad y facilidad de futuro mantenimiento. Por lo general, se debe pasar mas tiempo en la fase de diseo y menos tiempo en la implementacin con la utilizacin de objetos. Otra caracteristica de un objeto es su extensibilidad. Una vez definida una clase (ej. Persona), se puede definir otra clase nueva que extiende a la anterior. Si nuestro modelo requiere trabajar con otra clase Polica, Polica puede extender a Persona para incluir datos adicionales (nmero de placa, rango, etc.) y modificar o agregar algunos de los mtodos de Persona. Un mtodo para dibujar una Persona podra sustituirse con otro mtodo para dibujar la persona con un uniforme azul (Polica). A su vez, la clase Polica podra dar lugar a otras extensiones (ej. PolicaMilitar) segun el dominio del problema a

resolver. La redefinicin de mtodos de clases extendidas se llama override al mtodo. En la definicin de una clase, se puede agregar mas de un mtodo con el mismo nombre pero con diferentes tipos de argumentos o valor. Esta posibilidad se llama overload o sobrecargar el mtodo. Una clase, por ejemplo, podra definir un mtodo suma para objetos de tipo Real y otra suma para objetos de tipo Vector. Diferentes clases tambin pueden contener definiciones para mtodos con el mismo nombre. El uso del mismo nombre en diferentes clases para funciones parecidas requiere menos memoria por parte del programador especialmente en sistemas grandes. Dos mtodos (definidos para clases distintos) que tienen el mismo nombre, el mismo nmero de argumentos del mismo tipo y que devuelven el mismo tipo de valor se dice que tienen la misma firma (signature). En los lenguajes orientados a objetos (OOL), se pueden definir ms de un mtodo con el mismo nombre siempre y cuando cuentan con firmas distintas. Una interfase consiste en un conjunto de mtodos con una firma establecida. Dos o ms clases pueden implementar a una interfase si proporcionan mtodos definidos con las mismas firmas. El proceso de diseo basado en objetos puede proporcionar muchos beneficios al analista y tambin al usuario del sistema; sin embargo, efecuar un buen diseo no es facil. Requiere varias iteraciones ya que los primeros intentos casi nunca producen el diseo deseado (an cuando se realize por expertos). Una propiedad importante buscada en el proceso de diseo es que los objetos sean reutilizables. Para lograr este prposito, se trata de definir los mtodos bsicos requeridos o interfase sin preocuparse por la implementacin que eventualmente lleguen a tener. Para apoyar este proceso, los diferentes lenguajes orientados a objetos incluyendo Java proporcionan la posibilidad de definir una clase abstracta. Una clase abstracta cuenta con la declaracin de datos y mtodos esenciales para este tipo de clase, pero no todos los mtodos requieren tener una implementacin. Una clase abstracta, por lo tanto, se define como una base para extenderse a clases concretas ya que ella no puede instanciarse directamente. El proceso de diseo emplea la clase abstracta con el entendimiento que las variables de este tipo sern asignadas a objetos que pertenecen a clases concretas que la extienden. Llegar a pensar en la concepcin de un diseo en estos trminos es dificil y requiere tiempo; sin embargo, en la literatura de diseo basado en objetos, existen muchas tcnicas para ayudar con este proceso. Una de las tcnicas mas sencilla consiste primeramente en describir el problema en castellano de manera concisa. Con esta descripcin, se extrae una lista de los sustantivos utilizados, eliminandolos que no tienen relevancia al problema as como los sinonimos. Esta lista forma un conjunto de los posibles objetos requeridos. Despus se extrae otra lista de los verbos que sera un primer conjunto de los mtodos. Los verbos usualmente involucran dos o mas sustantivos que permite establecer un diagrama de relaciones entre las clases. Incluso, existe una metodologa formulada por Grady Booch (ObjectOriented Analysis and Design with Applications) orientada a estos diagramas a nivel de la estructura de las clases as como el dinamismo de los objetos que intervienen. El siguiente paso consiste en iterar e refinar el diseo preliminar para descubrir las jerarquas de las clases, componentes (objetos de mas complejidad) y mdulos. El proceso termina con la definicion de las clases y mtodos pero no especifica los algoritmos o implementacin de stos.

Java: El Lenguaje Java puede manejar datos de dos tipos bsicos, datos primitivos y objetos. En este momento, existen ocho tipos de datos primitivos, que son: boolean char byte short int long float double (true o false) Unicode 1.1 (16 bits) entero de 8 bits con signo entero de 16 bits con signo entero de 32 bits con signo entero de 64 bits con signo punto flotante de 32 bits (IEEE 754-1985) punto flotante de 64 bits (IEEE 754-1985)

Las operaciones aritmticas sobre enteros se realiza en base a complemento a 2. Todos los demas datos son objetos y provienen de instancias de clases definidas. Es importante sealar que el tipo char o character as como las cuerdas de tipo String son de 16 bits con el estandar UNICODE y permite codificar caracteres utilizados en la mayora de los paises del mundo. An cuando se escribe un programa en ASCII, el programa es convertido a UNICODE antes de su compilacin. Un programa en Java consiste en una lista de definiciones de clases de la siguiente manera: class Nombre1 { <definicin de datos> <definicin de mtodos> } class Nombre2 { <datos> <mtodos> } etc. La definicin de datos consiste de una lista de declaraciones de variables especificando su tipo de dato respectivo. Como ejemplo: int i, j, k; boolean b1 = false; double d[] = new double[20]; Thread thread1, thread2; // Thread es una clase predefinida de Java En estos ejemplos, se ve que una variable puede tener un valor inicial (como b1 o d) o ser un arreglo de datos como d. Al poner // en una lnea significa que todo el resto de la lnea

es comentario y es ignorado por el compilador. Siguiendo la sintaxis de C, otra forma de indicar texto comentario es con el uso de los smbolos /* y */. Es decir, al encontrar la combinacin de caracteres /* en un programa de Java (o C), todos los dems caracteres encontrados son ignorados como comentario hasta encontrar a la combinacin */. Los mtodos son una lista de declaraciones de funciones especificando el tipo de valor que devuelve la funcin, el nombre de la funcin, su lista de argumentos y el cdigo que debe ejecutar. Como ejemplo: int cuadrado(int n) { return n*n; } Aqu, el mtodo "cuadrado" devuelve un valor de tipo entero que es el cuadrado de su argumento de tipo entero. A una funcin que no devuelve un valor, se le declara el tipo de valor void. Por lo tanto, todo mtodo debe tener su declaracin de tipo. El ejemplo de un programa en Java mas sencillo que se suele utilizar es un programa que imprime "Hola, Mundo" en la pantalla; este programa en Java tomara esta forma: class Hola { public static void main(String[] args) { System.out.println("Hola, Mundo"); } } Este programa estara guardado en un archivo llamado Hola.java; se compilara con el comando: C> javac Hola.java [ $ javac Hola.java en ambiente Unix]

El compilador javac dejara un archivo Hola.class y se ejecutara con el comando: java Hola que imprimira Hola, Mundo en la pantalla. El mtodo println es un mtodo predefinido del objeto System.out. Java, como C, ejecuta el mtodo main que debe estar definido dentro de la clase invocada por el interprete java con el comando java Hola. Como se ve en el ejemplo, el mtodo main tiene un argumento (args) que debe estar declarado como un arreglo de cuerdas (String[]).

Constantes En Java, no existe la construccin #define de C. Constantes son definidos como variables con los atributos final static. Como ejemplo: class Matemticas { final static double PI = 3.1415975358979; final static int TRES = 3; } El modificador final significa que el valor de la variable no puede modificarse y el modificador static significa que la variable est asociada a la clase en s y no a cada objeto o instancia de la clase. Ejemplo de una Lista Ligada Par definir una clase para representar una lista ligada de objetos podramos definir una clase Lista como: class Lista { private Object cosa; private Lista cola; public Object valor() { return cosa; } public Lista proxma() { if (lista != null) return(cola); else return null; public void ponValor(Object x) { cosa = x; } public void ponCola(Lista lista) { cola = lista; } } // fin de clase Lista En esta definicin, la clase Lista contiene dos datos: un objeto llamado cosa y un objeto de tipo Lista llamado cola. Estos datos tienen el atributo private que no permite otros objetos acceso directo a ellos sino a travs de los cuatro mtodos publicos valor, prxima, ponValor y ponCola. Para probar esta clase, podramos definir otra clase Prueba: public class Prueba { public static void main(String[] args) { Lista lista = new Lista(), temp; lista.ponValor("A");

lista.ponCola(temp = new Lista()); temp.ponValor("B"); temp.ponCola(temp = new Lista()); temp.ponValor("C"); temp = lista; while (temp != null) { System.out.println(temp.valor()); temp = temp.prxima(); } // fin de main } // fin de Prueba Se puede poner Prueba y Lista en un solo archivo Prueba.java o en archivos separados. Al compilarse, javac genera dos archivos Prueba.class y Lista.class. Al correr la clase Prueba con el comando : java Prueba el resultado son tres lneas dse impresin: A B C Dentro de la clase Prueba, la variable lista es asignada un valor inicial con la construccin new Lista(). Esta construccin asigna memoria para los datos cosa y cola y lista es asignado a la direccin (o referencia) de este objeto nuevo; cosa y cola inicialmente tienen el valor inicial null. Posteriormente, la variable temp es asignada a dos objetos nuevos de tipo Lista y se insertan en la lista al final. En la utilizacin de este tipo de lista ligada, es posible que algunos objetos creados quedan aislados; es decir sin que ninguna variable hace referencia a ellos. Para este problema, Java cuenta con un recolector de basura (Garbage Collector) que devuelve esta memoria al interprete para reutilizarse posteriormente. Esta funcin no existe en C y es necesario devolver objetos no requeridos a la memoria por un un proceso llamado free. Constructores En la definicin de una clase, se puede incorporar uno o mas mtodos con el mismo nombre de la clase llamados constructores. Estos constructores pueden tener diferentes tipos de argumentos y son usualmente utilizados para asignar valores iniciales a algunos datos del objeto en proceso de creacin. Utilizando el ejemplo de la lista ligada, podemos agregar un constructor: class Lista { private Object cosa; private Lista cola; Lista(Object c, Lista p) {

cosa = c; cola = p; } public Object valor() { return cosa; } public Lista proxma() { if (lista != null) return(cola); else return null; public void ponValor(Object x) { cosa = x; } public void ponCola(Lista lista) { cola = lista; } } // fin de clase Lista La clase Prueba se simplifica como sigue: public class Prueba { public static void main(String[] args) { Lista lista = new Lista("A", new Lista("B", new Lista("C", null))), temp; temp = lista; while (temp != null) { System.out.println(temp.valor()); temp = temp.prxima(); } } // fin de Prueba Se nota que el constructor Lista no debe especificar ningn tipo de valor, (tampoco void). Si hay mas de un constructor para una clase, cada uno debe tener un nmero diferente de argumentos o bin que exista una diferencia en los tipos de argumentos. De otra manera, Java no podra saber cual constructor a invocar. El Objeto String Para el manejo de cuerdas de caracteres, Java provee una clase predefinida llamada String. Como ejemplo, podramos definir una cuerda s como: String s = "abc"; Esta declaracin define s como una variable de tipo (o clase) String con un valor inicial de tres caracteres (Unicode) abc. Las comillas "" delimitan los caracteres del contenido. La clase String es de uso tan comn que Java provee angunas reglas bsicas de sintaxis para su manipulacin. Normalmente, para crear un objeto de una clase, se requiere emplear la construccin "new". En el ejemplo anterior, se ve que basta utilizar la cuerda entre comillas. Otra diferencia en la sintaxis de objetos de tipo String ocurre con el

mtodo concatenacin formar una cuerda nueva que consiste en los caracteres de la primera cuerda seguido por los caracteres de la segunda. La clase String contiene un mtodo concat para ste prposito. Es decir, el cdigo: String s = "abc", q = "def"; s = s.concat(q); deja como resultado en s la cuerda abcdef. Aqu, cabe notar que el objeto "abc", originalmente asignado a la variable s se pierde despus de la concatenacon y su espacio ser reutilizado a travs de una coleccin de basura. Extendiendo (sobrecargando) el significado del operador '+', Java permite hacer esta misma operacin como: s = s + q; // concatena la cuerda s y q. A su vez, cada objeto en Java cuenta con una operacin o mtodo toString para convertir el objeto en una representacin de cuerda (este mtodo frequentemente se redefine). El cdigo: String s = "x"; s = s + 5; produce como resultado la cuerda x5 como valor de s. Al definir una clase Persona: class Persona { String nombre; Persona(String n) { nombre = n; } String toString() { return nombre; } } Persona p = new Persona("Pedro"); el cdigo: String s = "Juan " + p; dejara en s la cuerda "Juan Pedro" invocando de manera automtica el mtodo toString a la variable p. La clase String cuenta con varios mtodos de utilizacin frequente como length(), substring(m, n) y charAt(n). Si s es una variable de tipo String, entonces:

s.length() devuelve la longitud de la cuerda (int). s.substring(1, 3) devuelve como valor una cuersa nueva que consiste en los caracteres de s de la posicin 1 al 3 (donde la primera posicin de s tiene ndice 0). s.charAt(n) devuelve el caractr de s en la posicin n. Arreglos Para poder manejar un grupo de objetos o datos a travs de ndices, Java ofrece la construccin de array o arreglo. Para definir un arreglo n10 de 10 enteros de tipo int, se emplea la declaracin: int n10[] = new int[10]; En esta declaracin, la variable n10 tiene el tipo (objeto) de un arreglo de enteros (int) y es asignado a un arreglo nuevo de valores de tipo entero originalmente puestos en cero. En cambio, la declaracin: int a[]; indica que la variable a es un objeto ("arreglo de enteros") originalmente puesto en null para asignarse posteriormente como: a = new int[300]; Para asignar o cambiar el valor de un elemento de un arreglo, se hace referencia a a travs de corchetes como: a[7] = 25; a[i + 1] = b[j] + 3; Cada arreglo definido cuenta con un campo predefinido llamado length que devuelve la longitud del arreglo; int a[] = new int[45]; System.out.println(a.length); imprime el valor 45 a la pantalla.. Se puede declarar arreglos de mas de una dimensin. Para contar con un arreglo de dos dimensiones de enteros, se puede declarar: byte b[][] = new byte[4][5];

10

y asignar un valor: b [2][3] = (byte) 3; El arreglo b[][] es en realidad un arreglo de una dimensin cuyos objetos o elementos son arreglos del tipo b[]. Arreglos de Constantes Para definir un arreglo de constantes, se espefican los valores entre corchetes como: int sietePrimos[] p7 = {1, 2, 3, 5, 7, 11, 13}; La matrz a: a 1 3 5 8 2 -1 se puede definir como: int[][] a = {{1, 3, 5}, {8, 2, -1}}; Campos y Mtodos Estticos (static) En la definicin de un campo o mtodo de una clase, se le puede atribuir el atributo static. En este caso, el dato o mtodo se refiere a la clase en s ms que a una instancia (objeto) particular de la clase. Como ejemplo, si definiramos una clase Sun para representar a las computadoras fabricadas por Sun Microsystems, se figuran dos datos importantes: el nmero de serie de cada computadora fabricada (objeto) y el ltimo nmero de serie asignado (clase). El nmero de serie de la computadora sera un dato normal (posiblemente de tipo int) pero el ltimo nmero de serie asignado es una propiedad de la clase en s y no de un objeto (computadora) especial. La definicin de la clase Sun tendra dos campos: public class Sun { static int ltimoSerie; int nmeroSerie; } El dato ltimoSerie no forma parte de un objeto de tipo Sun sino de la clase Sun. El constructor de Sun problemente tenga cdigo del tipo: Sun() { nmeroSerie = ++ltimoSerie; } que asignara al dato nmeroSerie el ltimo nmero de serie asignado ms uno al nmeroSerie del nuevo objeto y este valor quedara en la variable nmeroSerie de

11

la clase Sun. Se puede obtener el valor ltimoSerie en cualquier lado haciendo referencia al dato: int nSerie = Sun.ltimoSerie; Cabe mencionar que, al crear un nuevo objeto de tipo Sun, este objeto no tiene el valor ltimoSerie en su estructura de datos aunque los mtodos de Sun pueden tener acceso a el sin necesidad de anteponer Sun. De igual manera, se puede definir mtodos estticos en la declaracin de una clase. Estos mtodos pertenecen a la clase y no pueden tener acceso a las variables normales (no estticas) de un objeto o instancia. Un ejemplo ya visto de un mtodo esttico es la funcin main de la clase Prueba (de una lista ligada). Al invocar java Prueba, Java invoca a Prueba.main(args) sin necesidad de crear un objeto concreto de tipo Prueba. La clase Math, predefinida en Java, cuenta con constantes (final static) PI y E as como varios mtodos estticos como sqrt, sin, cos, exp, tan, etc., que se invocan con la referencia a la clase: double x = Math.cos(.341), y = Math.tan(Math.PI / 6.); Java provee una manera de inicializar a las variables estticas de una clase. Al incluir la proposicin: static { p1; pn; } en la definicin de una clase, esta proposicin ejecuta las proposiciones p1, , pn para asignar valores a algunas de las variables estatcas de la clase. Por ejemplo, si una clase Euler requeriera contener un arreglo de las potencias de e (2.718281828), se podra inicializar este arreglo como: public class Euler { final static int nE = 30; // nE es una constante de acuerdo a la necesidades static double[] pE = new double[nE]; static { pE[0] = 1.; for (int i = 1; i < nE; i++) pE[i] = pE[i 1] * Math.E; } // otras variables y mtodos } // end Euler Mtodos, Proposiciones y Expresiones

12

Para formalizar mejor la sintaxis de Java, se ha visto que un programa de Java consiste en un conjunto de declaraciones de clases. Cada clase, a su vez, consiste en un conjunto de declaraciones de variables y mtodos. Aunque no importa el orden de las declaraciones, por mejor legibilidad y estandarizacin, la convencin es declarar primeramente las variables y despus los mtodos. La declaracin de una variable consiste en la espeficacin del tipo de variable, con algunos artributos (static, final, public, etc.), sequido por una lista de variables (de este tipo) con una inicializacin opcional para cada una que consiste de <variable> = <expresin>. Si la variable no lleva una inicializacin, su valor inicial se le asigna null , false, o 0 dependiendo del tipo. La declaracin de un mtodo consiste en la especificacin de su tipo de valor, su nombre, una lista de argumentos sequido por '{', un conjunto de proposiciones finalizado por un caracter '}'. La excepcin es la declaracin de un constructor que no lleva ni tipo de valor ni modificadores (un constructor siempre devuelve el tipo de valor de su clase por definicin). La lista de argumentos de un mtodo consiste en un '(', cero o mas declaracaciones de variables locales, separadas con ',' y al final un ')'. La finalidad de una expresin es devolver un valor y la finalidad de una proposicin es realizar una accin. Sin embargo, al devolver un valor, se puede realizar muchas acciones y al realizar una accin, se pueden evaluar a muchas expresiones.

13

You might also like