Вы находитесь на странице: 1из 35

INTRODUCCIN A JAVA HISTORIA DE JAVA Java inici su vida bajo un nombre y un propsito diferente a los actuales.

El lenguaje de programacin original fue escrito para aparatos electrodomsticos como tostadores, hornos de microondas, etc. A principios de los 90s la incorporacin de los microprocesadores a los objetos de la vida diaria, fue vista como el inicio de una nueva era. En 1991 Sun MicroSystems fund un proyecto de investigacin interno llamado Green. El equipo de Green, encabezado por James Gosling, rpidamente se dio cuenta de que lenguajes como C y C++ no eran adecuados para la gama de tareas que los dispositivos necesitaban ejecutar. Uno de los problemas anticipados por Green era la dificultad de proveer software para nuevos dispositivos ya que cada vez que apareca un nuevo chip, se tena que recompilar el programa escrito en C o C++ para el chip en particular. A mediados de 1991, James Gosling empez a trabajar en un nuevo lenguaje apropiado, el nombr al lenguaje Oak (Roble) por un roble que vea desde su oficina en Sun. Gosling dise el nuevo lenguaje para ser pequeo, confiable e independiente de arquitectura. El equipo de desarrollo fue incorporado a la nueva compaa FirstPerson. Desafortunadamente, FirstPerson, se vi en una serie de dificultades principalmente porque el mercado para el consumo de dispositivos electrnicos inteligentes no estaba desarrollado como lo haba anticipado Sun La liberacin de NCSA Mosaic y la explosin de la World Wide Web en 1993 salvaron el proyecto. Los desarrolladores de OAK vieron que un lenguaje de arquitectura neutral sera ideal para programar en Internet porque el programa podra correr en cualquier parte. Los desarrolladores hicieron cambios menores al diseo y cambiaron el nombre a Java. Habiendo desarrollado Java para productos electrnicos de consumo este result ser un lenguaje robusto. Cuando el equipo de Java decidi que sera particularmente apropiado para Internet debido a su independencia de plataforma, agregaron funciones para el manejo de red. As fue como Java se convirti en la nueva eleccin de lenguaje para desarrollar aplicaciones cliente/servidor o de red. Sun anunci formalmente Java en la conferencia SunWorld en mayo de 1995. Inmediatamente gener inters porque no era un lenguaje acadmico como Pascal ni diseado por un pequeo grupo para uso local como C o C++. CARACTERSTICAS DE JAVA Sun describe Java como un lenguaje simple, orientado a objetos, distribuido, interpretado, robusto, seguro, de arquitectura neutral, portable, de alto desempeo y multihilos. Cada una de estas palabras es una caracterstica del lenguaje Java. Mientras muchas de estas caractersticas pueden usarse para describir otros lenguajes, esta combinacin en particular es nica en Java y su ambiente. Simple: Se dice que Java es simple porque aunque tiene todas las caractersticas de un lenguaje potente, descarta las caractersticas menos usadas y ms confusas de stos. C y C++ son lenguajes muy conocidos, por eso Java se dise para ser parecido a C++ y as facilitar su aprendizaje. En Java no es necesario liberar memoria, no se usan la aritmtica de punteros, las referencias, registros, definicin de tipos (typedef) ni macros. Orientado a objetos: Desde el punto de vista del usuario la orientacin a objetos no cambia nada. Al correr un programa no importa si est escrito en programacin convencional o en lenguaje orientado a objetos. Pero si se est acostumbrado a programar en lenguajes convencionales como Pascal y C, entonces orientado a objetos significa que sern necesarios mayores ajustes en la planeacin e implementacin de las aplicaciones. Este ajuste es probablemente la parte ms dficil en el aprendizaje de Java. Distribuido: Java viene con una completa biblioteca de aplicaciones de red que facilita al programador el trabajar con protocolos desde bajo nivel como TCP/IP (Transport Control Protocol

and Internet Protocol) o alto nivel como HTTP (Hyper Text Transfert Protocol) y FTP (File Transfer Protocol). Interpretado. La ejecucin de un programa en Java pasa a travs de dos fases.

1. El compilador de java convierte el cdigo fuente en un tipo de lenguaje de bajo nivel lamado bytecode. 2. Para correr el programa se usa un interprete que ejecuta el bytecode compilado. Este interprete es conocido como la JVM (Java Virtual Machine). Robusto: Java no solo verifica el cdigo para encontrar problemas en tiempo de compilacin, tambin busca errores que se puedan presentar en tiempo de ejecucin. La comprobacin de tipos en Java ayuda a detectar errores, lo antes posible, en el ciclo de desarrollo. Entre otras cosas proporciona la comprobacin de punteros, lmites de arreglos, y manejo de excepciones, etc. Seguro: Debido a que Java fue diseado para correr en un ambiente de red tienes restricciones de seguridad. Adems durante la ejecucin el intrprete usa un mecanismo para verificar que el bytecode cargado a travs de la red no viola ninguna restriccin del lenguaje Java. Multihilos: En la actualidad muchas aplicaciones permiten al usuario realizar mltiples tareas en forma simultnea. La capacidad para ejecutar varios procesos al mismo tiempo se conoce como multihilo. Java proporciona paquetes para implementar y aplicaciones multihilo. Dinmico. Java es un lenguaje dinmico porque puede adaptarse a un ambiente cambiante y en desarrollo. Java no intenta conectar todos los mdulos que conforman una aplicacin hasta el tiempo de ejecucin. Las libreras nuevas o actualizadas no paralizarn las aplicaciones actuales Arquitectura Neutral : La internet es la composicin de muchas computadoras nterconectadas con procesadores y sistemas operativos diferentes. Java fue desarrollado con la meta de ser capaz de correr en cualquier tipo de computadora sin tener que recompilar el cdigo. Por esta razn, cuando se compila un programa fuente de Java, el resultado no es un cdigo nativo sino un bytecode de arquitectura neutral de bajo nivel que representa los datos en un formato independiente de la mquina objeto. El interprete de Java puede ms tarde, leer este bytecode y traducirlo a llamadas de sistema dependientes de mquina.

Esta combinacin de caractersticas es la

razn por

la que las aplicaciones de Java pueden correr en cualquier computadora que implementa la Java Virtual Machine. Portable: Ser de arquitectura neutral es slo una parte de ser portable. Java adems implementa otros estndares de portabilidad para facilitar el desarrollo, por ejemplo los enteros son siempre de 32 bits, la construccin de interfaces de usuarios se realiza utilizando las clases del paquete awt (abstract window toolkit) de forma que las ventanas puedan ser implantadas en cualquier entorno. COMPONENTES DE JAVA La plataforma de Java tiene dos componentes: La mquina virtual de Java y el API de Java. El API (Application Programming Interface) es un conjunto de componentes de software, est agrupado en paquetes o libreras de clases.

TIPOS DE PROGRAMAS EN JAVA Los tipos de programas ms comunes en Java son los applets y las aplicaciones standalone. Applet: Es un programa que se apega a ciertas convenciones que le permiten correr en un browser habilitado para Java. Aplicacin Standalone: Es un programa independiente que corre directamente en plataforma Java. Plataformadware

PROGRAMACION ORIENTADA A OBJETOS OBJETOS Los objetos constituyen el concepto fundamental para entender la tecnologa que se conoce como orientada a objetos. Si miramos a nuestro alrededor podemos ver muchos ejemplos de objetos del mundo real: la mesa de estudio, el ordenador, el bolgrafo, etc. Todos los objetos tienen caractersticas comunes: estado y un comportamiento. Un objeto mantiene su estado en forma de variables miembros e implementa su comportamiento mediante mtodos. Los mtodos permiten crear un cdigo que puede ser llamado desde fuera del objeto y tomar argumentos y, opcionalmente, devolver valores. Un objeto tiene estados, comportamiento e identidad; la estructura y comportamiento de objetos similares estn definidos en su clase comn El estado de un objeto abarca todas las propiedades (normalmente estticas) del mismo ms los valores actuales (normalmente dinmicos) de cada una de sus propiedades. El comportamiento es como acta y reacciona un objeto, en trminos de sus cambios de estado y paso de parmetros. Ningn objeto existe de forma aislada, en vez de eso, los objetos reciben acciones, y ellos mismos actan sobre los objetos. La identidad es aquella propiedad de un objeto que lo distingue de todos los dems objetos. Mensajes Un objeto solo no es til, por lo que frecuentemente aparece acompaado de otros objetos. Es a travs de la interaccin entre estos objetos como se consigue un alto nivel de funcionalidad del programa. Estos objetos interrelacionan y se comunican envindose mensajes unos a otros. El objeto que recibe el mensaje necesita la informacin adecuada para saber que debe hacer. Esta informacin se pasa mediante el nombre del mensaje y sus argumentos o parmetros (mtodos). Un mensaje esta formado por tres componentes El objeto al que se enva el mensaje. El nombre del mtodo a utilizar Los parmetros que necesita el mtodo Un ejemplo es el siguiente c3.suma(c1,c2) en el que C3 es el objeto al que se enva el mensaje, suma es el mtodo a utilizar, mientras que c1 y c2 son los parmetros que necesita el mtodo. Clases En el mundo real, se encuentran muchos objetos del mismo tipo. Por ejemplo. Por ejemplo, mi ordenador es uno de todos los ordenadores del mundo. Utilizando la terminologa orientada a objetos, mi ordenador es un miembro o ejemplar de la clase de objetos conocidos como ordenadores. Objetos similares se reproducen como objetos del mismo tipo, por lo que se puede crear un prototipo para tales objetos, estos prototipos son lo que se conoce como clases. Una clase es un conjunto de objetos que comparten una estructura comn y un comportamiento comn Interfaz e implementacin de una clase El interfaz de una clase proporciona su visin externa y por tanto enfatiza la abstraccin a la vez que oculta su estructura y los secretos de su comportamiento. Este interfaz se compone principalmente de todas las operaciones aplicables a instancias de esta clase, pero tambin puede incluir las declaraciones de otras clases, constantes, variables y excepciones, segn se necesiten para completar la abstraccin. Por consiguiente, la implementacin de 8na clase es su visin interna, que engloba los secretos de su comportamiento. La implementacin de una clase se compone principalmente de la implementacin de todas las operaciones definidas en la interfaz de la misma. Se puede dividir adems el interfaz de una clase en tres partes: Public (publica) Una declaracin accesible a todos los clientes

Protected (protegida) Una declaracin accesible solo a la propia clase, sus subclases, y sus clases amigas. Private (privada) Una declaracin accesible solo a la propia clase y sus clases amigas. Los distintos lenguajes de programacin ofrecen diversas mezclas de partes public, protected y private, entre la que los desarrolladores pueden elegir para establecer derechos especficos de acceso para cada parte del interfaz de una clase y de este modo ejercer un control sobre que pueden ver los clientes y lo que no pueden ver,. Relaciones entre clases Considrense por un momento las analogas y diferencias entre las siguientes clases de objetos: flores, margaritas, rosas rojas, rosas amarillas, ptalos y mariquitas. Pueden hacerse las observaciones siguientes: Una margarita es un tipo de flor Una rosa es un tipo (distinto) de flor Las rosas rojas y las rosas amarillas son tipos de rosas. Un ptalo es una parte de ambos tipos de flores. Las mariquitas se comen a ciertas plagas como los pulgones, que pueden infectar ciertos tipos de flores. Existen tres tipos bsicos de relaciones entre clases. La primera es la generalizacin/especializacin, que denota una relacin <<es un>> (is a). Por ejemplo, una rosa es un tipo de flor, lo que quiere decir que un rosa es una subclase especializada ms general (la de las flores). La segunda es la relacin todo/parte (whole/part), que denota una relacin <<parte de>>. As un ptalo no es un tipo de flor, sino que viene a ser una parte de la flor. La tercera es la asociacin, que denota alguna dependencia semntica entre clases de otro modo independientes. Para comprender el punto de vista orientado a objetos, considere un ejemplo de un objeto del mundo real - la cosa sobre la que esta ahora mismo sentado - una silla. Silla es un miembro (tambin se utiliza el trmino instanciacin) de una clase de objetos mucho mayor denominado muebles. Por ejemplo todo mueble tiene un precio, dimensiones, peso, situacin y color, entre muchos atributos posibles, lo cual se aplica se esta hablando de un sof o de una cmoda. Dada que una silla es un miembro de la clase mueble, hereda todos los atributos definidos de la clase. Una vez que se a definido una clase, se puede reutilizar los atributos creando nuevas instanciaciones o ejemplares de la clase. Por ejemplo se definimos la clase nueva llamada mella (crece entre silla y mueble), este hereda todos los atributos definidos de la clase mueble. Definicin de operaciones. Una operacin cambia un objeto de alguna manera, por ejemplo, cambia valores de uno o ms atributos que estn contenidos en el objeto. Para realizar un primer intento de obtener un conjunto de operaciones para los objetos, el analista ha de volver a estudiar la narrativa del problema y seleccionar aquellas operaciones que corresponda razonablemente a cada objeto. Para hacerlo, se lleva a cabo un anlisis gramatical y se aslan los verbos. Algunos verbos sern operaciones legtimas y se podrn conectar fcilmente con un objeto especfico. Por ejemplo: se desea instalar un sensor para el control dentro de una casa, por tanto cada sensor tiene asignado un nmero y un tipo y se programa una contrasea maestra para activar y desactivar el sistema. Esto significa: Que para cada objeto sensor es relevante una operacin de asignacin. Que se aplicar una operacin programar al objeto sistema. Que activar y desactivar son operaciones que se aplican al sistema. Adems de utilizar el anlisis gramatical, se puede comprender mejor las operaciones considerando la comunicacin que ocurre entre objetos. Los objetos se comunican mediante el paso de mensajes. Por ejemplo realizar una proceso que permita la suma de matrices cuadradas.

PROGRAMACION EN JAVA Origen de Java Sun Microsystems, lder en servidores para Internet, uno de cuyos lemas desde hace mucho tiempo es "the network is the computer" (lo que quiere dar a entender que el verdadero ordenador es la red en su conjunto y no cada mquina individual), es quien ha deusarrollado el lenguaje Java, en un intento de resolver simultneamente todos los problemas que se le plantean a los desarrolladores de software por la proliferacin de arquitecturas incompatibles, tanto entre las diferentes mquinas como entre los diversos sistemas operativos y sistemas de ventanas que funcionaban sobre una misma mquina, aadiendo la dificultad de crear aplicaciones distribuidas en una red como Internet. Clases en Java Las clases son lo ms simple de Java. Todo en Java forma parte de una clase, es una clase o describe como funciona una clase. El conocimiento de las clases es fundamental para poder entender los programas Java. Todas las acciones de los programas Java se colocan dentro del bloque de una clase o un objeto. Todos los mtodos se definen dentro del bloque de la clase, Java no soporta funciones o variables globales. Todos los datos bsicos, como los enteros, se deben declarar en las clases antes de hacer uso de ellos. Tipos de Clases abstract. Una clase abstract tiene al menos un mtodo abstracto. Una clase abstracta no se instancia, sino que se utiliza como clase base para la herencia. Final. Una clase final se declara como la clase que termina una cadena de herencia. No se puede heredar de una clase final. Por ejemplo, la clase Math es una clase final. Public. Las clases public son accesibles desde otras clases, bien sea directamente o por herencia. Son accesibles dentro del mismo paquete en el que se han declarado. Para acceder desde otros paquetes, primero tienen que ser importadas. Synchronizable. Este modificador especifica que todos los mtodos definidos en la clase son sincronizados, es decir, que no se puede acceder al mismo tiempo a ellos desde distintos threads; el sistema se encarga de colocar los flags necesarios para evitarlo. Este mecanismo hace que desde threads diferentes se puedan modificar las mismas variables sin que haya problemas de que se sobreescriban. Declaracin de Clases En la declaracin de una clase debe aparecer, como mnimo, la palabra class y el nombre de la clase que est definiendo. Class NombreClase { =>inicio Cuerpo de la clase } => fin de la clase Los nombres de las clases, por convenio, comienza por maysculas. En la declaracin de una clase se puede: Declarar cul es la superclase de la clase Listar las interfaces implementadas por la clase. Declarar si la clase es pblica, abstracta o final. En java, toda clase tiene una superclase. Si no especificamos una superclase para la clase, se supone que es la clase Object (declarada en el paquete java.lang). Para definir la superclase

explcitamente, se pone la palabra extends y el nombre de la superclase entre el nombre de la clase que est declarando y la llave que aabre el cuerpo de la misma. Por ejemplo: class NombreClase extends NombreSuperClase { } Si se pone antes de una clase la palabra clave final, se declara que la clase es final, es decir, que no puede crease subclases de ella: final class NombreClase{ } El cuerpo de una clase contiene dos secciones diferentes: la declaracin de variables miembro y la definicin de los mtodos asociados a dicha clase. Las variables definen el estado de un objeto definido por esta clase, y los mtodos corresponden a los mensajes que pueden ser enviados a un objeto e indican cmo responder a ellos. Generalmente se declaran las variables miembro de la clase y luego las declaraciones de los mtodos y su implantacin. Class NombreClase{ declaracin de variables miembro declaracin de mtodos } Como mnimo, en la declaracin de una variable deben aparecer dos componentes: el tipo de dato de la variable y su nombre, por ejemplo tipo variableNombre; Tambin se puede especificar que objetos tienen acceso a dicha variable, mediante las palabras reservadas public, protect, etc., o si se trata de una constante. La declaracin de una variable miembro (atributo de la clase) se define dentro de la clase y no del mtodo. Por ejemplo: public class circulo { int posx, posy,color; boolean estado; . } Los mtodos declarados dentro de una clase tiene acceso completo a todos las variables miembro de dicha clase y pueden acceder a ellas como si estuvieran definidas dentro del mtodo. En la declaracin del mtodo, adems del nombre, puede ir una cierta informacin, como: El valor de retorno del mtodo (el tipo de valor que devuelve). El nmero y tipo de argumentos requeridos por dicho mtodo. Qu otras clases y objetos pueden llamar tambin al mtodo. Si un mtodo no devuelve ningun valor, debe declararse como void, y si devuelve un valor, debe utilizar la sentencia return para devolver. public class MiClase { int i; public MiClase() { => constructor o inicializador de la clase i = 10; } public void Suma_a_i( int j ) { i = i + j; } } La clase MiClase contiene una variable (i) y dos mtodos, MiClase que es el constructor de la clase y Suma_a_i( int j ).

Ambito de una variable Los bloques de sentencias compuestas en Java se delimitan con dos llaves. Las variables de Java slo son vlidas desde el punto donde estn declaradas hasta el final de la sentencia compuesta que la engloba. Se pueden anidar estas sentencias compuestas, y cada una puede contener su propio conjunto de declaraciones de variables locales. Sin embargo, no se puede declarar una variable con el mismo nombre que una de mbito exterior. El siguiente ejemplo intenta declarar dos variables separadas con el mismo nombre. Class Ambito { int i = 1; // mbito exterior { // crea un nuevo mbito int i = 2; // error de compilacin } } Constructores Los mtodos son funciones que pueden ser llamadas dentro de la clase o por otras clases. El constructor es un tipo especfico de mtodo que siempre tiene el mismo nombre que la clase. Cuando se declara una clase en Java, se pueden declarar uno o ms constructores opcionales que realizan la inicializacin cuando se instancia (se crea una ocurrencia) un objeto de dicha clase. Utilizando el cdigo de ejemplo anterior, cuando se crea una nueva instancia de MiClase, se crean (instancian) todos los mtodos y variables, y se llama al constructor de la clase: MiClase mc; mc = new MiClase(); La palabra clave new se usa para crear una instancia de la clase (crear un objeto). Antes de ser instanciada con new no consume memoria, simplemente es una declaracin de tipo. Despus de ser instanciado un nuevo objeto mc, el valor de i en el objeto mc ser igual a 10. Se puede referenciar la variable (de instancia) i con el nombre del objeto: mc.i++; // incrementa la instancia de i de mc Al tener mc todas las variables y mtodos de MiClase, se puede usar la primera sintaxis para llamar al mtodo Suma_a_i() utilizando el nuevo nombre de clase mc: mc.Suma_a_i( 10 ); y ahora la variable mc.i vale 21. Finalizadores Java no utiliza destructores (al contrario que C++) ya que tiene una forma de recoger automticamente todos los objetos que se salen del alcance. No obstante proporciona un mtodo que, cuando se especifique en el cdigo de la clase, el reciclador de memoria (garbage collector) llamar: // Cierra el canal cuando este objeto es reciclado protected void finalize() { close(); } ALCANCE DE OBJETOS Y RECICLADO DE MEMORIA Los objetos tienen un tiempo de vida y consumen recursos durante el mismo. Cuando un objeto no se va a utilizar ms, debera liberar el espacio que ocupaba en la memoria de forma que las aplicaciones no la agoten (especialmente las grandes). En Java, la recoleccin y liberacin de memoria es responsabilidad de un thread llamado automatic garbage collector (recolector automtico de basura). Este thread monitoriza el alcance de los objetos y marca los objetos que se han salido de alcance. Veamos un ejemplo: String s; // no se ha asignado todava s = new String( "abc" ); // memoria asignada s = "def"; // se ha asignado nueva memoria

// (nuevo objeto) En esencia se crean dos objetos: Objeto String "abc" Objeto String "def" Al final de la tercera sentencia, el primer objeto creado de nombre s que contiene "abc" se ha salido de alcance. No hay forma de acceder a l. Ahora se tiene un nuevo objeto llamado s y contiene "def". Es marcado y eliminado en la siguiente iteracin del thread reciclador de memoria.

INTRODUCCIN A LA PROGRAMACIN EN JAVA ESTRUCTURA DE UN PROGRAMA UNA APLICACIN INDEPENDIENTE (STAND ALONE) Paquetes de Clases

PRIMER PROGRAMA EN JAVA

En java las clases se agrupan en paquetes, para utilizar las clases de un paquete a un programa se tiene que indicar al compilador a travs de la lnea import java.lang; La lnea public class Ejemplo declara la clase llamada Ejemplo. La clase y el archivo donde sta se grabar deben llevar el mismo nombre, solo que el archivo tendr la extensin java; esto es Ejemplo.java. Se acostumbra que la llave que marca el inicio de la clase se escriba inmediatamente despus de la declaracin de la clase. En Java todo est agrupado en clases, no se puede definir una variable o una funcin que no pertenezca a una clase. La lnea public static void main(String args[]) define el mtodo principal de la aplicacin, dicho mtodo siempre lleva el nombre main y es el punto de partida desde el cual se llama a los otros mtodos de la aplicacin. El mtodo main va acompaado de los siguiente modificadores public: indica que este mtodo puede ser utilizada por cualquier clase. static: indica que es un mtodo de clase, es decir, un mtodo que puede ser utilizado aunque no se haya creado ningn objeto de la clase Ejemplo.

void: indica que este main no regresa valores. Enseguida del nombre del mtodo aparecen los argumentos o parmetros. En el caso de main() el argumento es siempre un vector o arreglo de objetos de la clase String. La lnea System.out.printl("Hola"); enva a la pantalla el mensaje Hola. out es el nombre de un objeto de la clase System. Este objeto contiene el mtodo esttico println que se encarga de enviar mensajes a la pantalla. En java las llaves marcan el inicio y final de un bloque. EDICIN, COMPILACIN Y EJECUCIN DE PROGRAMAS .JAVA. Edicin. Los programas Java pueden generarse en cualquier editor de texto, por ejemplo Edit, Notepad, Wordpad y Notepad ++ , etc. Solo se requiere que el archivo sea grabado como tipo texto. El nombre del archivo no puede incluir espacios. Compilacin: Para que el sistema operativo localice y ejecute el compilador se debe agregar a la variable de ambiente PATH, la ruta donde se encuentra el compilador javac.exe. La lnea set PATH despliega en pantalla el contenido de PATH. Si la ruta de javac.exe no esta includa como en la figura, ser necesario agregarla en forma manual.

Para agregar javac.exe %;C:\JDK1.4.2_05\BIN

Path

ejecute

la

lnea

de

comando

SET

PATH=%PATH

Ahora ya puede compilar el programa con la lnea javac Ejemplo.java. Cabe mencionar que el nombre del archivo debe escribirse de igual tal como fue nombrado el archivo .java ya que Java es sensible al uso de maysculas y minsculas.

Si el compilador encontr errores los mostrar en la pantalla. Si no hay errores entonces Javac produce un archivo del mismo nombre que el compilado, pero con extensin .class, este el bytecode. El programa .class se ejecuta a travs de la mquina virtual de java (JRE Java Runtime Environment) con la lnea java Ejemplo. Ntese que aqu ya no requiere la extensin del archivo. IDENTIFICADORES Los nombres de variables, objetos, clases, etc. son case sensitive, esto es, son sensibles a maysculas y minsculas. De esta forma, casa, Casa y CASA se considera como tres variables

distintas entre s. Las reglas del lenguaje respecto a la nomenclatura de variables son muy amplias, pero para facilitar la lectura y las tareas de mantenimiento, comnmente se siguen ciertas normas: 1. Los nombres de variables se escriben generalmente con minsculas, pero si el nombre consta de ms de una palabra se escriben una seguida de la otra sin espacios, usando mayscula para la marcar el inicio de la siguiente palabra. Por ejemplo: calcularSueldoDiario, verificarFechaDeExpedicion, abrirVentana, etc. 2. Los identificadores no pueden ser palabra reservadas como main, true, false, public, etc. 3. No deben tener el mismo nombre que otras variables declaradas en el mismo mbito. 4. Los nombres de objetos, mtodos y variables miembro comienzan con minscula, ejemplos: main(), imprimir(), encuentraMayor(), sueldoDiario, diasTrabajados,etc. 5. Los nombres de clases e interfaces comienzan siempre con mayscula. Ejemplos: MiClase, Circulo, Graphics, etc. 6. Las constantes se escriben con mayscula. Por ejemplo PI, IVA, etc. PALABRAS RESERVADAS Existe una serie de palabras reservadas las cuales tienen un significado especial para Java y por lo tanto no se pueden utilizar como nombres de variables. Dichas palabras son:

(*) son palabras reservadas, pero no se utilizan en la actual implementacin del lenguaje Java. COMENTARIOS Un comentario es informacin que el programador agrega al programa con el fin de identificar el programa, autor, mdulo; explicar una parte del programa, proporcionar ayuda para una modificacin posterior. Los comentarios pueden ser de dos tipos: BLOQUE DE COMENTARIOS. El bloque de comentarios est formado por una o ms lneas. El inicio del bloque se marca con /* y el final se marca con */. LNEA DE COMENTARIOS. Inician con // y terminan al final de la lnea. VARIABLES. Java almacena datos a travs de variables y objetos. Una variable almacena solo un dato a la vez, en cambio un objeto es una instancia de una clase que puede o no contener mas de una variable de diferente tipo. Las variables tienen una existencia y alcance limitadas al mtodo en que fueron creadas; es decir la variable solamente puede ser utilizada dentro del mtodo en que fue creada y existir mientras el mismo mtodo exista. TIPOS DE DATOS. Adems de las referencias a objetos existen 8 tipos de datos primitivos:

Los tipos primitivos de Java tienen algunas caractersticas importantes que se resumen a continuacin: 1. El tipo boolean no es un numrico: slo admite true o false. No se identifica con el igual o diferente de cero, como en C/C++. 2. El tipo char contiene caracteres en cdigo UNICODE (incluye el cdigo ASCII). 3. byte, short, int y long son enteros que positivos o negativos. En Java no hay enteros unsigned. 4. Los tipos float y double son valores de punto flotante con 6-7 y 15 cifras decimales equivalentes, respectivamente. 5. Existen extensiones de Java 1.5 para aprovechar la arquitectura de los procesadores Intel, que permiten realizar operaciones de punto flotante con una precisin extendida de 80 bits. DEFINICIN E INICIALIZACIN DE VARIABLES SIMPLES Una variable se define especificando su tipo y nombre. Estas variables pueden ser de tipos primitivos o referencias a objetos. Las variables de tipo referencia se inicializan a null, para que tengan un valor es necesario que crear un objeto con el operador new. Este operador reserva en la memoria espacio para el objeto incluyendo sus variables y mtodos. La sintaxis para definir una variable es: <tipo> < nombre_variable>; ejemplo: int alumnos; La inicializacin de una variable al momento de declararla es opcional, la sintaxis es la siguiente: <tipo> < nombre_variable>=<valor>; ejemplos float dolar=11.30; Ejemplo de declaracin e inicializacin de variables class DeclaraVariables{ public static void main(String[] args) { int entero=0; char letra='a'; String cadena=null; double doble=0; boolean logica=true; System.out.println("Entero= "+entero); System.out.println("La variable char contiene al iniciar " + letra); System.out.println("La variable logica tiene "+ logica); System.out.println("La variable doble tiene "+ doble); System.out.println("La referencia a un objeto es " +cadena);

} } Ejemplo de declaracin e inicializacin de Literales class CreaLiterales{ public static void main(String[] args) { char letra1='a'; char letra2='\u0057'; char letra3=(char)87; char letra4='\r'; System.out.println("Letra1=" + letra1); System.out.println("Letra2=" + letra2); System.out.println("Letra3=" + letra3); System.out.println("Letra4=" + letra4); } } DECLARACIN E INICIALIZACIN DE ARREGLOS Un arreglo es un conjunto de variables del mismo tipo con el mismo nombre, identificadas por un ndice. Las variables ocupan posiciones de memoria consecutivas. Pasos para declarar un arreglo 1) Declaracin. Especificar el tipo de dato que guardara el arreglo. 2) Alojar en memoria. El operador new se encarga de hacer la peticin de memoria de tamao suficiente para alojar el arreglo. La sintaxis para declarar un arreglo es: <tipo> <nombre><[tamao]>; Ejemplo: int dias[]; En el ejemplo anterior el arreglo dias an no ha sido alojado en memoria. Para eso es necesario definirlo con el operador new. Definicin: dias= new int[20]; Ahora el arreglo dias esta formado por un conjunto de 20 enteros consecutivos. La declaracin y definicin de un arreglo se puede llevar a cabo en un slo paso: int dias[]=new int[20]; Ejemplo de Declaracin e inicializacin de Arreglos Unidimensionales class CreaArreglos { public static void main(String [] Args) { int vector[]; vector=new int[5]; int arreglo1 []= new int[5]; // Se inicializa con ceros int arreglo2 [] ={5,67,40,84,686}; for (int i=0;i<5;i++) System.out.println("Vector["+ i + "]= "+ vector[i]); for (int i=0;i<5;i++) System.out.println("Arreglo1["+i+"]= " + arreglo1[i]); for (int i=0;i<5;i++) System.out.println("Arreglo2["+i+"]= " + arreglo2[i]); } } Ejemplo de Declaracin e inicializacin de Arreglos Bidimensionales class CreaMatriz{

public static void main(String args[]){ int i, j, ren=3, col=4; int matriz1[][]= new int[ren][col]; int matriz2[][]={{2,4,6,8},{10,12,14,16},{18,20,22,24}}; System.out.println("Matriz 1"); for (i=0;i<ren;i++) for (j=0;j<col;j++){ System.out.println("Elemento("+i+","+j+")= "+matriz1[i][j]); } System.out.println("Matriz 2"); for (i=0;i<ren;i++) for (j=0;j<col;j++) System.out.println("Elemento("+i+","+j+")= "+ matriz2[i][j]); } } OPERADORES DE JAVA Java tiene una gran variedad de operadores, casi idnticos a los de C/C++. 1 Operadores Aritmticos Se dice que son operadores binarios porque requieren de dos operandos. Realizan las operaciones aritmticas:

2 Operadores De Asignacin El operador de asignacin es el smbolo igual (=). La forma general de asignacin con este operador es: variable = valor o expresin; Ejemplos: a=3; x=y+z; 3 Operadores Acumulativos Los operadores acumulativos realizan la operacin considerando como primer operador el valor a la izquierda de la expresin y como segundo operador el valor que se escriba a la derecha. El resultado se guarda en la variable de la izquierda; es decir el operador de la izquierda tiene una doble funcin: es el primero operando y es la variable donde se guarda el resultado.

Si x=3;y y=2 al ejecutar x+=y el valor final de x sera 5.

4 Operadores Unarios ++ Y Los operadores se pueden utilizar de dos formas: 1. Precediendo a la variable. Primero se incrementa la variable y luego se utiliza en la expresin en la que aparece. 2. Siguiendo a la variable . En este caso primero se utiliza la variable en la expresin y luego se incrementa. Ejemplo de operadores aritmticos, unarios y acumulativos public class Operadores { public static void main(String[] args) { int a=5,b=10; int j = 1; int c= a + b; System.out.println("Operadores Aritmeticos"); System.out.println(a + "+" +b + " = " + c); c= a -b; System.out.println(a + "-" +b + " = " + c); c= a * b; System.out.println(a + "*" +b + " = " + c); c= a / b; System.out.println(a + "/" +b + " = " + c); c=b % a; System.out.println(b + " modulo " + a + " = " + c); b+=3; c=b % a; System.out.println(b + " modulo " + a + " = " + c); System.out.println("Operadores Unarios"); System.out.println("Valor inicial de a " + a); System.out.println("Con +a= " + ++a); System.out.println("Valor inicial de b " + b); System.out.println("Con b--= " + b--); } } 5 Operador Condicional ? Este operador heredado de C/C++, permite evaluar condiciones sencillas. Su sintaxis es: Condicin ? accin1 : accin2; donde se evala Condicin si la condicin se cumple se ejecuta la accin1 y si no se cumple entonces se ejecuta la accin2. Es el nico operador ternario de Java. Como todo operador que devuelve un valor, puede ser utilizado en una expresin. Por ejemplo en las lneas: x=1 ; y=5; z = (x<y)? 3: 8; z tendra el valor 8 porque la condicin no se cumple. Ejemplo de Operador Ternario public class OperadorTernario{ public static void main(String Args[]){ int a=16,b=10, x=0; x=(a>b)? 3:5; System.out.println("X= " +x);

} } 6 Operadores Relacionales Los operadores relacionales son >,<,<=,<=,!=,==.El resultado de estos operadores es siempre un valor booleano.

7 Operadores Lgicos

8. Operador De Concatenacin De Cadenas (+) El operador ms (+) se utiliza tambin para concatenar cadenas de caracteres. Por ejemplo: System.out.println("El total asciende a "+result + " unidades"); 9. Jerarqua de los Operadores El orden en que se realizan las operaciones muchas veces determina el resultado de una expresin. La siguiente lista muestra el orden en que se ejecutan los distintos operadores en un instrucciones:

En Java, todos los operadores binarios, excepto los operadores de asignacin, se evalan de izquierda a derecha. Los operadores de asignacin se evalan de derecha a izquierda, lo que significa que el valor de la derecha se copia sobre la variable de la izquierda. 10 Entrada de datos String desde teclado La mejor forma de leer desde el teclado es usar la clase BufferedReader, la cual soporta un flujo de entrada desde un buffer de memoria, pero no se puede construir un BufferedReader directamente de System.in. Primero debe convertirse a un flujo de caracteres a travs de la clase InputStreamReader. El cdigo sera el siguiente: import java.io.*; public class LeeTeclado { public static void main(String[] args) {

InputStreamReader teclado = new InputStreamReader(System.in); BufferedReader lector = new BufferedReader(teclado); String nombre=new String(); System.out.println("Como te llamas"); try{ nombre = lector.readLine(); } catch (IOException excep) { System.out.println("Error de IO"); } System.out.println("Hola "+ nombre ); } } En Java al igual que en otros lenguajes de programacin, la lectura de un flujo puede generar un error. A estos errores en Java se les conoce como excepciones. Las excepciones pueden ser tratadas de varias formas, una de ellas es con el bloque try-catch, el bloque try contiene el bloque que pudiera generar la excepcin, el bloque catch contiene las instrucciones a seguir. Si no se genera ninguna excepcin entonces la ejecucin continua en la lnea que siga al bloque catch. 11 Entrada de datos numrica public class LeeNumeros { public static void main(String[] args) { InputStreamReader teclado = new InputStreamReader(System.in); BufferedReader lector = new BufferedReader(teclado); String auxiliar=new String(); int e=0; System.out.println("Cuantos aos tienes?"); try{ auxiliar = lector.readLine(); Integer edad=new Integer(auxiliar); e=edad.intValue(); } catch (IOException excep) { System.out.println("Error"); } System.out.println("Hola "+ e*12); } } El procedimiento de lectura es exactamente igual al de lectura de cadenas, lo que cambia es que despus de leer la cadena, esta se usa como argumento para construir un objeto entero Entero, en la siguiente lnea el mtodo intValue extrae del objeto Integer el valor int que el usuario escribi y es asignado a una variable int para su posterior uso. 12 Estructuras de Control. En la mayor parte de los lenguajes de programacin, las de estructuras son similares en cuanto al concepto, aunque la sintaxis puede cambiar de un lenguaje a otro. La sintaxis de Java similar a la de C y C++, lo que significa que para un programador de C y C++ la sintaxis de Java no tiene dificultad. Instruccin: Una instruccin es una expresin que acaba en punto y coma (;). Se permite incluir varias instrucciones en una lnea, aunque lo habitual es utilizar una lnea para cada instruccin. Por ejemplo: i =0;j =5;x =i +j;// Lnea compuesta de tres instruccioness

3.12.1 Condicin simple If: Esta estructura permite ejecutar un conjunto de instrucciones en funcin del valor que tenga la expresin de comparacin (se ejecuta si la expresin de comparacin tiene valor true). Tiene la forma siguiente: if (Condicin){ instrucciones; } Las llaves no son necesarias si slo hay una instrucciones dentro del if. La estructura if tiene una parte opcional que se ejecutar cuando la condicin no se cumple (false). if (Condicin{ instrucciones1; } else { instrucciones2; } Ejemplo del uso de la Estructura If import java.io.*; import java.util.Random; public class EstructuraIf{ public static void main(String[] args) { InputStreamReader teclado = new InputStreamReader(System.in); BufferedReader lector = new BufferedReader(teclado); String auxiliar=new String(); Random azar=new Random(); int aleatorio=azar.nextInt(1000); int usuario=0; System.out.println("Escribe un numero"); try{ auxiliar = lector.readLine(); Integer objetoEntero=new Integer(auxiliar); usuario=objetoEntero.intValue(); } catch (IOException excep) { System.out.println("Error"); } if (aleatorio>usuario) System.out.println(aleatorio + " es mayor que " + usuario); else System.out.println(usuario + " es mayor que " + aleatorio); } }

Ejemplo de If Anidados import java.util.Random; public class EstructuraIfAnidado{ public static void main(String[] args) { Random azar=new Random(); int a=azar.nextInt(10); int b=azar.nextInt(10); int c=azar.nextInt(10); System.out.println("Los lados del triangulo son a= " +a + " b= "+b+" c= " + c); if (a==b&&b==c) System.out.println("Es un Triangulo Equilatero"); else if(a!=b && b!=c) System.out.println("Es un Triangulo Escaleno"); else System.out.println("Es un Triangulo Isosceles"); } } Condicin Mltiple Switch-Case Switch case es una alternativa a un conjunto de if-else anidados cuando se evala la misma condicin con distintos valores. Su forma general es la siguiente: switch (expresin) { case valor1: instrucciones1; break; case valor2: instrucciones 2; break; case valor3: instrucciones 3; break; case valor4: instrucciones 4; break; default: instrucciones 7; } No se pueden establecer rangos o condiciones sino que se debe comparar con valores concretos. Si ningn caso se cumple entonces se ejecuta el case default, el cual es opcional. Ejemplo del uso de la Estructura Switch-Case import java.io.*; public class EstructuraSwitchCase{ public static void main(String args[]){ InputStreamReader teclado = new InputStreamReader(System.in); BufferedReader lector = new BufferedReader(teclado); String auxiliar=new String(); int opc=0; System.out.println("1) Saludo "); System.out.println("2) Numeros"); System.out.println("3) Salida"); System.out.println("Opcion "); try{ auxiliar = lector.readLine(); Integer objetoEntero=new Integer(auxiliar); opc=objetoEntero.intValue(); } catch (IOException excep) { System.out.println("Error "); }

switch( opc){ case 1: System.out.println("Bajo Construccion"); break; case 2: System.out.println("Bajo Construccion"); break; case 3: System.out.println(" Adios "); break; default: System.out.println(" Opcion Invalida"); } } } Estructuras Iterativas 1 Ciclo while En el ciclo while la condicin se evala siempre antes de ejecutar las instrucciones. Si la condicin se cumple se ejecuta el bloque; si la condicin es falsa el ciclo termina. En este ciclo puede ocurrir que la condicin de entrada no se cumpla y las instrucciones no se ejecuten ni una sola vez; debido a esto al ciclo while se le conoce tambin como ciclo por centinela. while (condicin) { instruccion1; instruccin2; instruccin3; ... instruccinN } Ejemplo de la Estructura Iterativa while El siguiente programa genera la serie ULAM, esta serie sostiene que a partir de cualquier nmero entero positivo se puede obtener el nmero 1 de acuerdo a los siguientes criterios: -Si el nmero es par se divide entre 2. -Si el nmero es impar se multiplica por 3 y se le suma 1. import java.io.*; public class EstructuraWhile{ public static void main(String[] args) { InputStreamReader teclado = new InputStreamReader(System.in); BufferedReader lector = new BufferedReader(teclado); String auxiliar=new String(); int numero=1; System.out.println("Escribe un numero"); try{ auxiliar = lector.readLine(); Integer objetoEntero=new Integer(auxiliar); numero=objetoEntero.intValue(); } catch (IOException excep) { System.out.println("Error"); } while (numero>1) { if ( numero%2==0) numero/=2; else

numero=numero*3+1; System.out.println(numero); } } } 2 Ciclo for Al igual que for, evala la condicion antes de cada iteracin si esta se cumple ejecuta las instrucciones en caso contrario el ciclo termina. La forma general del Ciclo for es la siguiente: for (inicializacin; expresin; cambio) { instrucciones; } donde: inicializacin: el valor inicial que se le da a la variable de control. Puede haber mas de una variable de control. expresin: Es una condicin que determina el final del ciclo, puede estar formada por ms de una expresin unidas con operadores lgicos. cambio: Es la variacin positiva o negativa que tendrn la(s) variable(s) de control. 1 Ejemplo de la Estructura Iterativa for El siguiente ejemplo calcula y muestra el factorial de un nmero entero proporcionado por el usuario. import java.io.*; public class EstructuraFor{ public static void main(String[] args) { InputStreamReader teclado = new InputStreamReader(System.in); BufferedReader lector = new BufferedReader(teclado); String auxiliar=new String(); int numero=1; System.out.println("Escribe un numero"); try{ auxiliar = lector.readLine(); Integer objetoEntero=new Integer(auxiliar); numero=objetoEntero.intValue(); } catch (IOException excep) { System.out.println("Error"); } long factorial=1; for (int i=numero; i>1; i--) factorial*=i; System.out.println("El factorial de "+ numero + " es " + factorial); } } 3 Ciclo do-while Es similar al Ciclo while pero con la particularidad de que la evaluacin de la condicin se hace al final del Ciclo, por lo que esta garantizado que las instrucciones se ejecutan al menos la primera vez. do-while ejecuta las instrucciones luego se evala la condicin: si resulta verdadera se vuelven a ejecutar las instrucciones; si la condicin es falsa entonces finaliza el ciclo. Este ciclos se utiliza con frecuencia para la implementacin de un men. do {

instruccin1; instruccin2; ... instruccinN; } while (Expresin); Ejemplo de la Estructura Iterativa do-while import java.io.*; import java.util.Random; public class EstructuraDoWhile{ public static void main(String[] args) { InputStreamReader teclado = new InputStreamReader(System.in); BufferedReader lector = new BufferedReader(teclado); String auxiliar=new String(); Random azar=new Random(); int maquina=azar.nextInt(1000); int usuario=1, intentos=0; do{ System.out.println("Escribe un numero"); try{ auxiliar = lector.readLine(); Integer objetoEntero=new Integer(auxiliar); usuario=objetoEntero.intValue(); } catch (IOException excep) { System.out.println("Error"); } intentos++; if (usuario!=maquina) if( usuario> maquina) System.out.println("El numero de la maquina es menor"); else System.out.println("El numero de la maquina es mayorr"); }while(usuario!=maquina); System.out.println("Adivinaste en " + intentos + " intentos"); } }

CLASES Las clases son lo ms simple de Java. Todo en Java forma parte de una clase, es una clase o describe como funciona una clase. El conocimiento de las clases es fundamental para poder entender los programas Java. Todas las acciones de los programas Java se colocan dentro del bloque de una clase o un objeto. Todos los mtodos se definen dentro del bloque de la clase, Java no soporta funciones o variables globales. Esto puede despistar a los programadores de C++, que pueden definir mtodos fuera del bloque de la clase, pero esta posibilidad es ms un intento de no separarse mucho y ser compatible con C, que un buen diseo orientado a objetos. As pues, el esqueleto de cualquier aplicacin Java se basa en la definicin de una clase. Todos los datos bsicos, como los enteros, se deben declarar en las clases antes de hacer uso de ellos. En C la unidad fundamental son los ficheros con cdigo fuente, en Java son las clases. De hecho son pocas las sentencias que se pueden colocar fuera del bloque de una clase. La palabra clave import (equivalente al #include) puede colocarse al principio de un fichero, fuera del bloque de la clase. Sin embargo, el compilador reemplazar esa sentencia con el contenido del fichero que se indique, que consistir, como es de suponer, en ms clases.

Tipos de Clases

Hasta ahora slo se ha utilizado la palabra clave public para calificar el nombre de las clases que hemos visto, pero hay tres modificadores ms. Los tipos de clases que podemos definir son: abstract Una clase abstract tiene al menos un mtodo abstracto. Una clase abstracta no se instancia, sino que se utiliza como clase base para la herencia.

final Una clase final se declara como la clase que termina una cadena de herencia. No se puede heredar de una clase final. Por ejemplo, la clase Math es una clase final.

public Las clases public son accesibles desde otras clases, bien sea directamente o por herencia. Son accesibles dentro del mismo paquete en el que se han declarado. Para acceder desde otros paquetes, primero tienen que ser importadas.

synchronizable Este modificador especifica que todos los mtodos definidos en la clase son sincronizados, es decir, que no se puede acceder al mismo tiempo a ellos desde distintos threads; el sistema se encarga de colocar los flags necesarios para evitarlo. Este mecanismo hace que desde threads

diferentes se puedan modificar las mismas variables sin que haya problemas de que se sobreescriban. VARIABLES Y METODOS DE INSTANCIA Una clase en Java puede contener variables y mtodos. Las variables pueden ser tipos primitivos como int, char, etc. Los mtodos son funciones. Por ejemplo, en el siguiente trozo de cdigo podemos observarlo: public MiClase { int i; public MiClase() { i = 10; } public void Suma_a_i( int j ) { i = i + j; } }

La clase MiClase contiene una variable (i) y dos mtodos, MiClase que es el constructor de la clase y Suma_a_i( int j ).

Ambito de una variable Los bloques de sentencias compuestas en Java se delimitan con dos llaves. Las variables de Java slo son vlidas desde el punto donde estn declaradas hasta el final de la sentencia compuesta que la engloba. Se pueden anidar estas sentencias compuestas, y cada una puede contener su propio conjunto de declaraciones de variables locales. Sin embargo, no se puede declarar una variable con el mismo nombre que una de mbito exterior. El siguiente ejemplo intenta declarar dos variables separadas con el mismo nombre. En C y C++ son distintas, porque estn declaradas dentro de mbitos diferentes. En Java, esto es ilegal. Class Ambito { int i = 1; // mbito exterior { // crea un nuevo mbito int i = 2; // error de compilacin } }

Mtodos y Constructores Los mtodos son funciones que pueden ser llamadas dentro de la clase o por otras clases. El constructor es un tipo especfico de mtodo que siempre tiene el mismo nombre que la clase.

Cuando se declara una clase en Java, se pueden declarar uno o ms constructores opcionales que realizan la inicializacin cuando se instancia (se crea una ocurrencia) un objeto de dicha clase. Utilizando el cdigo de ejemplo anterior, cuando se crea una nueva instancia de MiClase, se crean (instancian) todos los mtodos y variables, y se llama al constructor de la clase: MiClase mc; mc = new MiClase();

La palabra clave new se usa para crear una instancia de la clase. Antes de ser instanciada con new no consume memoria, simplemente es una declaracin de tipo. Despus de ser instanciado un nuevo objeto mc, el valor de i en el objeto mc ser igual a 10. Se puede referenciar la variable (de instancia) i con el nombre del objeto: mc.i++; // incrementa la instancia de i de mc

Al tener mc todas las variables y mtodos de MiClase, se puede usar la primera sintaxis para llamar al mtodo Suma_a_i() utilizando el nuevo nombre de clase mc: mc.Suma_a_i( 10 );

y ahora la variable mc.i vale 21.

Finalizadores

Java no utiliza destructores (al contrario que C++) ya que tiene una forma de recoger automticamente todos los objetos que se salen del alcance. No obstante proporciona un mtodo que, cuando se especifique en el cdigo de la clase, el reciclador de memoria (garbage collector) llamar: // Cierra el canal cuando este objeto es reciclado protected void finalize() { close(); }

<Imagen: linea2> <Imagen: menu>Tutorial de Java

ALCANCE DE OBJETOS Y RECICLADO DE MEMORIA Los objetos tienen un tiempo de vida y consumen recursos durante el mismo. Cuando un objeto no se va a utilizar ms, debera liberar el espacio que ocupaba en la memoria de forma que las aplicaciones no la agoten (especialmente las grandes). En Java, la recoleccin y liberacin de memoria es responsabilidad de un thread llamado automatic garbage collector (recolector automtico de basura). Este thread monitoriza el alcance de los objetos y marca los objetos que se han salido de alcance. Veamos un ejemplo: String s; // no se ha asignado todavia s = new String( "abc" ); // memoria asignada s = "def"; // se ha asignado nueva memoria // (nuevo objeto)

Ms adelante veremos en detalle la clase String, pero una breve descripcin de lo que hace esto es; crear un objeto String y rellenarlo con los caracteres "abc" y crear otro (nuevo) String y colocarle los caracteres "def". En esencia se crean dos objetos: Objeto String "abc" Objeto String "def"

Al final de la tercera sentencia, el primer objeto creado de nombre s que contiene "abc" se ha salido de alcance. No hay forma de acceder a l. Ahora se tiene un nuevo objeto llamado s y contiene "def". Es marcado y eliminado en la siguiente iteracin del thread reciclador de memoria.

HERENCIA La Herencia es el mecanismo por el que se crean nuevos objetos definidos en trminos de objetos ya existentes. Por ejemplo, si se tiene la clase Ave, se puede crear la subclase Pato, que es una especializacin de Ave. class Pato extends Ave { int numero_de_patas; }

La palabra clave extends se usa para generar una subclase (especializacin) de un objeto. Una Pato es una subclase de Ave. Cualquier cosa que contenga la definicin de Ave ser copiada a la clase Pato, adems, en Pato se pueden definir sus propios mtodos y variables de instancia. Se

dice que Pato deriva o hereda de Ave. Adems, se pueden sustituir los mtodos proporcionados por la clase base. Utilizando nuestro anterior ejemplo de MiClase, aqu hay un ejemplo de una clase derivada sustituyendo a la funcin Suma_a_i(): import MiClase; public class MiNuevaClase extends MiClase { public void Suma_a_i( int j ) { i = i + ( j/2 ); } }

Ahora cuando se crea una instancia de MiNuevaClase, el valor de i tambin se inicializa a 10, pero la llamada al mtodo Suma_a_i() produce un resultado diferente: MiNuevaClase mnc; mnc = new MiNuevaClase(); mnc.Suma_a_i( 10 );

En Java no se puede hacer herencia mltiple. Por ejemplo, de la clase aparato con motor y de la clase animal no se puede derivar nada, sera como obtener el objeto toro mecnico a partir de una mquina motorizada (aparato con motor) y un toro (aminal). En realidad, lo que se pretende es copiar los mtodos, es decir, pasar la funcionalidad del toro de verdad al toro mecnico, con lo cual no sera necesaria la herencia mltiple sino simplemente la comparticin de funcionalidad que se encuentra implementada en Java a travs de interfaces. CONTROL DE ACCESO Cuando se crea una nueva clase en Java, se puede especificar el nivel de acceso que se quiere para las variables de instancia y los mtodos definidos en la clase: public public void CualquieraPuedeAcceder(){}

Cualquier clase desde cualquier lugar puede acceder a las variables y mtodos de instacia pblicos. protected protected void SoloSubClases(){}

Slo las subclases de la clase y nadie ms puede acceder a las variables y mtodos de instancia protegidos.

private private String NumeroDelCarnetDeIdentidad; Las variables y mtodos de instancia privados slo pueden ser accedidos desde dentro de la clase. No son accesibles desde las subclases. friendly (sin declaracin especfica) void MetodoDeMiPaquete(){}

Por defecto, si no se especifica el control de acceso, las variables y mtodos de instancia se declaran friendly (amigas), lo que significa que son accesibles por todos los objetos dentro del mismo paquete, pero no por los externos al paquete. Es lo mismo que protected.

Los mtodos protegidos (protected) pueden ser vistos por las clases derivadas, como en C++, y tambin, en Java, por los paquetes (packages). Todas las clases de un paquete pueden ver los mtodos protegidos de ese paquete. Para evitarlo, se deben declarar como private protected, lo que hace que ya funcione como en C++ en donde slo se puede acceder a las variables y mtodos protegidos de las clases derivadas. VARIABLES Y METODOS ESTATICOS En un momento determinado se puede querer crear una clase en la que el valor de una variable de instancia sea el mismo (y de hecho sea la misma variable) para todos los objetos instanciados a partir de esa clase. Es decir, que exista una nica copia de la variable de instancia. Se usar para ello la palabra clave static. class Documento extends Pagina { static int version = 10; }

El valor de la variable version ser el mismo para cualquier objeto instanciado de la clase Documento. Siempre que un objeto instanciado de Documento cambie la variable version, sta cambiar para todos los objetos. De la misma forma se puede declarar un mtodo como esttico, lo que evita que el mtodo pueda acceder a las variables de instancia no estticas:

class Documento extends Pagina { static int version = 10; int numero_de_capitulos; static void annade_un_capitulo() { numero_de_capitulos++; // esto no funciona } static void modifica_version( int i ) { version++; // esto si funciona } }

La modificacin de la variable numero_de_capitulos no funciona porque se est violando una de las reglas de acceso al intentar acceder desde un mtodo esttico a una variable no esttica. Todas las clases que se derivan, cuando se declaran estticas, comparten la misma pgina de variables; es decir, todos los objetos que se generen comparten la misma zona de memoria. Las funciones estticas se usan para acceder solamente a variables estticas. class UnaClase { int var; UnaClase() { var = 5; } UnaFuncion() { var += 5; } }

En el cdigo anterior, si se llama a la funcin UnaFuncion a travs de un puntero a funcin, no se podra acceder a var, porque al utilizar un puntero a funcin no se pasa implcitamente el puntero al propio objeto (this). Sin embargo, s se podra acceder a var si fuese esttica, porque siempre estara en la misma posicin de memoria para todos los objetos que se creasen de UnaClase. this Y super Al acceder a variables de instancia de una clase, la palabra clave this hace referencia a los miembros de la propia clase. Volviendo al ejemplo de MiClase, se puede aadir otro constructor de la forma siguiente: public class MiClase { int i; public MiClase() { i = 10; } // Este constructor establece el valor de i public MiClase( int valor ) {

this.i = valor; // i = valor } public void Suma_a_i( int j ) { i = i + j; } }

Aqu this.i se refiere al entero i en la clase MiClase. Si se necesita llamar al mtodo padre dentro de una clase que ha reemplazado ese mtodo, se puede hacer referencia al mtodo padre con la palabra clave super: import MiClase; public class MiNuevaClase extends MiClase { public void Suma_a_i( int j ) { i = i + ( j/2 ); super.Suma_a_i( j ); } }

En el siguiente cdigo, el constructor establecer el valor de i a 10, despus lo cambiar a 15 y finalmente el mtodo Suma_a_i() de la clase padre (MiClase) lo dejar en 25: MiNuevaClase mnc; mnc = new MiNuevaClase(); mnc.Suma_a_i( 10 ); CLASES ABSTRACTAS Una de las caractersticas ms tiles de cualquier lenguaje orientado a objetos es la posibilidad de declarar clases que definen como se utiliza solamente, sin tener que implementar mtodos. Esto es muy til cuando la implementacin es especfica para cada usuario, pero todos los usuarios tienen que utilizar los mismos mtodos. Un ejemplo de clase abstracta en Java es la clase Graphics: public abstract class Graphics { public abstract void drawLine( int x1,int y1,int x2, int y2 ); public abstract void drawOval( int x,int y,int width, int height ); public abstract void drawArc( int x,int y,int width, int height,int startAngle,int arcAngle ); ... }

Los mtodos se declaran en la clase Graphics, pero el cdigo que ejecutar el mtodo est en

algn otro sitio: public class MiClase extends Graphics { public void drawLine( int x1,int y1,int x2,int y2 ) { <cdigo para pintar lneas -especfico de la arquitectura-> } }

Cuando una clase contiene un mtodo abstracto tiene que declararse abstracta. No obstante, no todos los mtodos de una clase abstracta tienen que ser abstractos. Las clases abstractas no pueden tener mtodos privados (no se podran implementar) ni tampoco estticos. Una clase abstracta tiene que derivarse obligatoriamente, no se puede hacer un new de una clase abstracta. Una clase abstracta en Java es lo mismo que en C++ virtual func() = 0; lo que obliga a que al derivar de la clase haya que implementar forzosamente los mtodos de esa clase abstracta. INTERFACES Los mtodos abstractos son tiles cuando se quiere que cada implementacin de la clase parezca y funcione igual, pero necesita que se cree una nueva clase para utilizar los mtodos abstractos. Los interfaces proporcionan un mecanismo para abstraer los mtodos a un nivel superior. Un interface contiene una coleccin de mtodos que se implementan en otro lugar. Los mtodos de una clase son public, static y final. La principal diferencia entre interface y abstract es que un interface proporciona un mecanismo de encapsulacin de los protocolos de los mtodos sin forzar al usuario a utilizar la herencia. Por ejemplo: public interface VideoClip { // comienza la reproduccion del video void play(); // reproduce el clip en un bucle void bucle(); // detiene la reproduccion void stop(); }

Las clases que quieran utilizar el interface VideoClip utilizarn la palabra implements y proporcionarn el cdigo necesario para implementar los mtodos que se han definido para el interface: class MiClase implements VideoClip { void play() { <cdigo>

} void bucle() { <cdigo> } void stop() { <cdigo> }

Al utilizar implements para el interface es como si se hiciese una accin de copiar-y-pegar del cdigo del interface, con lo cual no se hereda nada, solamente se pueden usar los mtodos. La ventaja principal del uso de interfaces es que una clase interface puede ser implementada por cualquier nmero de clases, permitiendo a cada clase compartir el interfaz de programacin sin tener que ser consciente de la implementacin que hagan las otras clases que implementen el interface. class MiOtraClase implements VideoClip { void play() { <cdigo nuevo> } void bucle() { <cdigo nuevo> } void stop() { <cdigo nuevo> } PAQUETES La palabra clave package permite agrupar clases e interfaces. Los nombres de los paquetes son palabras separadas por puntos y se almacenan en directorios que coinciden con esos nombres. Por ejemplo, los ficheros siguientes, que contienen cdigo fuente Java: Applet.java, AppletContext.java, AppletStub.java, AudioClip.java

contienen en su cdigo la lnea: package java.applet;

Y las clases que se obtienen de la compilacin de los ficheros anteriores, se encuentran con el nombre nombre_de_clase.class, en el directorio: java/applet

Import Los paquetes de clases se cargan con la palabra clave import, especificando el nombre del paquete como ruta y nombre de clase (es lo mismo que #include de C/C++). Se pueden cargar varias clases utilizando un asterisco. import java.Date; import java.awt.*;

Si un fichero fuente Java no contiene ningn package, se coloca en el paquete por defecto sin nombre. Es decir, en el mismo directorio que el fichero fuente, y la clase puede ser cargada con la sentencia import: import MiClase; Paquetes de Java El lenguaje Java proporciona una serie de paquetes que incluyen ventanas, utilidades, un sistema de entrada/salida general, herramientas y comunicaciones. En la versin actual del JDK, los paquetes Java que se incluyen son:

java.applet Este paquete contiene clases diseadas para usar con applets. Hay una clase Applet y tres interfaces: AppletContext, AppletStub y AudioClip.

java.awt El paquete Abstract Windowing Toolkit (awt) contiene clases para generar widgets y componentes GUI (Interfaz Grfico de Usuario). Incluye las clases Button, Checkbox, Choice, Component, Graphics, Menu, Panel, TextArea y TextField.

java.io El paquete de entrada/salida contiene las clases de acceso a ficheros: FileInputStream y FileOutputStream.

java.lang Este paquete incluye las clases del lenguaje Java propiamente dicho: Object, Thread, Exception, System, Integer, Float, Math, String, etc.

java.net Este paquete da soporte a las conexiones del protocolo TCP/IP y, adems, incluye las clases Socket, URL y URLConnection.

java.util Este paquete es una miscelnea de clases tiles para muchas cosas en programacin. Se incluyen, entre otras, Date (fecha), Dictionary (diccionario), Random (nmeros aleatorios) y Stack (pila FIFO).

Вам также может понравиться