lenguaje de programaciÓn java

Upload: baba-wari-osha

Post on 31-Oct-2015

56 views

Category:

Documents


0 download

TRANSCRIPT

REPBLICA BOLIVARIANA DE VENEZUELA

Repblica Bolivariana de Venezuela

UNIVERSIDAD NACIONAL EXPERIMENTAL

SIMN RODRIGUEZ

CONVENIO: U.N.E.S.R. - f.I.E.C. - CAMETRO

CATEDRA: LENGUAJE DE PROGRAMACIN ILENGUAJE DE PROGRAMACIN JAVA Autores:

Samuel Colmenares C.I 17424852

Tutor: Lic. Teresita Pinto Caracas, Diciembre de 2008indice

5INTRODUCCIN

6LENGUAJE JAVA

6Historia

10Versiones del Lenguaje Java

13Filosofa

14Caractersticas Principales

14Simple:

15Orientado a objetos

16Distribuido

16Robusto

17Arquitectura neutral

19Seguro

22Portable

22Interpretado

23Multithreaded

24Dinmico

25Funcionalidad de Java

26Ventajas y desventajas

26Ventajas

28Desventajas

28Plataforma Tecnolgica

31Recursos

31Componentes

32Extensiones y arquitecturas relacionadas

34Identificadores, Variables, Operadores Lgicos y Sentencias

34Identificadores

35Comentarios

37Sentencias

37Bloques de cdigo

38Variables

38Las variables de instancia o miembros dato

39Las variables locales

40Tipos de datos primitivos

41Caracteres

41Variables booleanas

42Variables enteras

42Variables en coma flotante

43Valores constantes

44Las cadenas de caracteres o strings

44Palabras reservadas

45Operadores Aritmticos

46Operador de post y pre incremento

48Operadores de asignacin aritmtica

49Operadores Relacionales

49Operadores Lgicos

51El Flujo de un Programa (Sentencias Condicionales)

51La sentencia if

52La sentencia if...else

53La sentencia switch

55El Flujo de un Programa (Sentencias Iterativas)

55La sentencia for

57La sentencia while

58La sentencia do...while

59La sentencia break

60La Sentencia Continue

60Etiquetas

60Entornos de Funcionamiento

61En dispositivos mviles y sistemas empotrados

61En el navegador web

62En sistemas de servidor

63En aplicaciones de escritorio

64CONCLUSION

65BIBLIOGRAFIA

INTRODUCCINLos lenguajes de programacin estn relacionados con todos los mbitos en los cuales se desarrolla hoy en da un ser humano, sobre todo en facilitar la ejecucin de los procesos dentro de una organizacin. Un principio fundamental es que las aplicaciones son una herramienta y no un instrumento que debe tenerse para utilizar la tecnologa de la informacin; en consecuencia los lenguajes de programacin deben desarrollarse sobre la base de su propia capacidad para mejorar el desempeo de la organizacin, sin embargo estas razones no significan nicamente prdidas y ganancias. La marcha de una empresa incluye tambin beneficios para sus empleados, clientes y otras personas con la que se tienen tratos.

En el transcurso de los aos, se han logrado avances en la automatizacin de procesos; los cuales proporcionan ayudas en el cumplimiento de las funciones dentro de una organizacin, sobre todo en esta poca en la cual se necesita ahorrar tiempo, as como tambin, se requiere el control de los procesos.

El desarrollo de las nuevas tecnologas constituye uno de los factores claves para comprender y aplicar las transacciones polticas, econmicas, sociales y culturales de la ltima dcada.

Con este propsito se realiz la investigacin del lenguaje de programacin Java, ya que hoy en da se requiere estar a la par de los nuevos tiempos tecnolgicos, mas aun cuando se habla de la autopista de la informacin como es Internet y de la interfaz grfica con el usuario, para lo cual Java presenta herramientas que proporcionan una forma diferente de hacer que a travs de un navegador se ejecuten programas.LENGUAJE JAVAEl lenguaje de programacin Java, fue diseado por la compaa Sun Microsystems Inc., con el propsito de crear un lenguaje que pudiera funcionar en redes computacionales heterogneas (redes de computadoras formadas por ms de un tipo de computadora, ya sean PC, MAC's, estaciones de trabajo, etc.), y que fuera independiente de la plataforma en la que se vaya a ejecutar. Esto significa que un programa de Java puede ejecutarse en cualquier mquina o plataforma.HistoriaEn Diciembre de 1950 Patrick Naughton, ingeniero de Sun Microsystems, reclut a varios colegas entre ellos James Gosling y Mike Sheridan para trabajar sobre un nuevo proyecto conocido como "El proyecto verde".

Con la ayuda de otros ingenieros, empezaron a trabajar en una pequea oficina en Sand Hill Road en Menlo Park, California. Y as interrumpi todas las comunicaciones regulares con Sun y trabaj sin descanso durante 18 meses.

Intentaban desarrollar una nueva tecnologa para programar la siguiente generacin de dispositivos inteligentes, en los que Sun vea un campo nuevo a explorar. Crear un lenguaje de programacin fcil de aprender y de usar.

En un principio se consideraba C++ como lenguaje a utilizar, pero tanto Gosling como Bill Joy lo encontraron inadecuado. Gosling intent primero extender y modificar C++ resultando el lenguaje C++ ++ - (++ - porque se aadan y eliminaban caractersticas a C++), pero lo abandon para crear un nuevo lenguaje desde cero al que llam Oak (roble en ingls, segn la versin mas aceptada, por el roble que vea a travs de la ventana de su despacho).

El resultado fue un lenguaje que tena similitudes con C, C++ y Objetive C y que no estaba ligado a un tipo de CPU concreta.

Mas tarde, se cambiara el nombre de Oak a Java, por cuestiones de propiedad intelectual, al existir ya un lenguaje con el nombre de Oak. Se supone que le pusieron ese nombre mientras tomaban caf (Java es nombre de un tipo de caf, originario de Asia), aunque otros afirman que el nombre deriva de las siglas de James Gosling, Arthur Van Hoff, y Andy Bechtolsheim.

En Agosto de 1991 Oak ya corra sus primeros programas.

Para 1992, el equipo ya haba desarrollado un sistema en un prototipo llamado Star7 (*7), dispositivo parecido a una PDA, cuyo nombre vena de la combinacin de teclas del telfono de la oficina del Proyecto Green que permita a los usuarios responder al telfono desde cualquier lugar.

Por su parte, el presidente de la compaa Sun, Scott McNealy, se dio cuenta de forma oportuna y estableci el Proyecto Verde como una subsidiaria de Sun.

Despus de mostrar a Scott McNealy y Bill Joy los prototipos de bajo nivel del sistema, continan con el desarrollo, incluyendo sistema operativo, Green OS; el lenguaje Oak, las libreras, alguna aplicacin bsica y el hardware, hasta que el 3 de septiembre de 1992 se termina el desarrollo y con ello el Proyecto Verde.

De 1993 a 1994, el equipo de Naughton se lanz en busca de nuevas oportunidades en el mercado, mismas que se fueron dando mediante el sistema operativo base.

La incipiente subsidiaria fracas en sus intentos de ganar una oferta con Time-Warner, sin embargo el equipo concluy que el mercado para consumidores electrnicos smart y las cajas Set-Up en particular, no eran del todo eficaces. La subsidiaria Proyecto verde fue amortizada por la compaa Sun a mediados de 1994.

Afortunadamente, el cese del Proyecto Verde coincidi con el nacimiento del fenmeno mundial WEB. Al examinar las dinmicas de Internet, lo realizado por el ex equipo verde se adecuaba a este nuevo ambiente.

Patrick Naughton procedi a la construccin del lenguaje de programacin Java que se accionaba con un browser prototipo. El 29 de septiembre de 1994 se termina el desarrollo del prototipo de HotJava. Cuando se hace la demostracin a los ejecutivos de Sun, esta vez, se reconoce el potencial de Java y se acepta el proyecto.

Con el paso del tiempo HotJava se convirti en un concepto prctico dentro del lenguaje Java y demostr que podra proporcionar multiplataformas para que el cdigo pueda ser bajado y corrido del Host del World Wide Web y que de otra forma no son seguros.

Una de las caractersticas de HotJava fue su soporte para los "applets", que son las partes de Java que pueden ser cargadas mediante una red de trabajo para despus ejecutarlo localmente y as lograr soluciones dinmicas en computacin acordes al rpido crecimiento del ambiente WEB.

El 23 de mayo de 1995, en la conferencia SunWorld `95, John Gage, de Sun Microsystems, y Marc Andreessen, cofundador y vicepresidente de Netscape, anunciaban la versin alpha de Java, que en ese momento solo corra en Solaris, y el hecho de que Java iba a ser incorporado en Netscape Navigator, el navegador mas utilizado de Internet.

Con la segunda alpha de Java en Julio, se aade el soporte para Windows NT y en la tercera, en Agosto, para Windows 95.

En enero de 1995 Sun forma la empresa Java Soft para dedicarse al desarrollo de productos basados en la tecnologa Java, y as trabajar con terceras partes para crear aplicaciones, herramientas, sistemas de plataforma y servicios para aumentar las capacidades del lenguaje. Ese mismo mes aparece la versin 1.0 del JDK.

Netscape Communications decide apoyar a Java applets en Netscape Navigator 2.0. Ese fue el factor clave que lanz a Java a ser conocido y famoso.

Y como parte de su estrategia de crecimiento mundial y para favorecer la promocin de la nueva tecnologa, Java Soft otorg permisos para otras compaas para que pudieran tener acceso al cdigo fuente y al mismo tiempo mejorar sus navegadores. Tambin les permita crear herramientas de desarrollo para programacin Java y los facultaba para acondicionar mquinas virtuales Java (JVM), a varios sistemas operativos. Muy pronto las licencias o permisos contemplaban prestigiosas firmas como: IBM, Microsoft, Symantec, Silicon Graphics, Oracle, Toshiba y Novell.

Los apples Java (basados en JDK 1.02) son apoyados por los dos ms populares navegadores web (Nestcape Navigator 3.0 y Microsoft Internet Explorer 3.0. I.B.M./Lotus, Computer Asociates, Symantec, Informix, Oracle, Sybase y otras poderosas empresas de software estn construyendo Software 100% puro JAVA, por ejemplo el Corel Office que actualmente est en versin Beta.

Los nuevos proyectos de Java son co-patrocinados por cientos de millones de dlares en capital disponible de recursos tales como la Fundacin Java, un fondo comn de capital formado el verano pasado por 11 compaas, incluyendo Cisco Systems, IBM, Netscape y Oracle.

Hoy en da, puede encontrar la tecnologa Java en redes y dispositivos que comprenden desde Internet y superordenadores cientficos hasta porttiles y telfonos mviles; desde simuladores de mercado en Wall Street hasta juegos de uso domstico y tarjetas de crdito: Java est en todas partes.Versiones del Lenguaje Javaa)JDK 1.0 (23 de enero de 1996)

b)JDK 1.1 (19 de febrero de 1997). Una reestructuracin intensiva del modelo de eventos AWT (Abstract Windowing Toolkit), clases internas (inner classes), JavaBeans, JDBC (Java Database Connectivity), para la integracin de bases de datos, RMI (Remote Method Invocation).

c)J2SE 1.2 (8 de diciembre de 1998 - Nombre clave Playground. Esta y las siguientes versiones fueron recogidas bajo la denominacin Java 2 y el nombre "J2SE" (Java 2 Platform, Standard Edition), reemplaz a JDK para distinguir la plataforma base de J2EE (Java 2 Platform, Enterprise Edition) y J2ME (Java 2 Platform, Micro Edition).

La palabra reservada (keyword) strictfp.

Reflexin en la programacin.

La API grfica (Swing) fue integrada en las clases bsicas.

La mquina virtual (JVM) de Sun fue equipada con un compilador JIT (Just in Time) por primera vez.

Java Plug-in.

Java IDL, una implementacin de IDL (Interfaz para Descripcin de Lenguaje) para la interoperabilidad con CORBA

Colecciones (Collections)

d)2SE 1.3 (8 de mayo de 2000) - Nombre clave Kestrel.

La inclusin de la mquina virtual de HotSpot JVM (la JVM de HotSpot fue lanzada inicialmente en abril de 1999, para la JVM de J2SE 1.2)

RMI fue cambiado para que se basara en CORBA.

JavaSound

Se incluy el Java Naming and Directory Interface (JNDI) en el paquete de libreras principales (anteriormente disponible como una extensin).

Java Platform Debugger Architecture (JPDA)

e)J2SE 1.4 (6 de febrero de 2002) - Nombre Clave Merlin.

Este fue el primer lanzamiento de la plataforma Java desarrollado bajo el Proceso de la Comunidad Java como JSR 59. Los cambios ms notables fueron: comunicado de prensalista completa de cambios.

Palabra reservada assert (Especificado en JSR 41.)

Expresiones regulares modeladas al estilo de las expresiones regulares Perl.

Encadenacin de excepciones Permite a una excepcin encapsular la excepcin de bajo nivel original.

Non-blocking NIO (New Input/Output) (Especificado en JSR 51.)

Logging API (Specified in JSR 47.)

API I/O para la lectura y escritura de imgenes en formatos como JPEG o PNG

Parser XML integrado y procesador XSLT (JAXP) (Especificado en JSR 5 y JSR 63.)

Seguridad integrada y extensiones criptogrficas (JCE, JSSE, JAAS) Java Web Start incluido (El primer lanzamiento ocurri en Marzo de 2001 para J2SE 1.3) (Especificado en JSR 56.)

f)J2SE 5.0 (30 de septiembre de 2004) - Nombre clave: Tiger. (Originalmente numerado 1.5, esta notacin an es usada internamente.[4]) Desarrollado bajo JSR 176, Tiger aadi un nmero significativo de nuevas caractersticas comunicado de prensa. Plantillas (genricos) - provee conversin de tipos (type safety) en tiempo de compilacin para colecciones y elimina la necesidad de la mayora de conversin de tipos (type casting). (Especificado por JSR 14.)

Metadatos, tambin llamados anotaciones, permite a estructuras del lenguaje como las clases o los mtodos, ser etiquetados con datos adicionales, que puedan ser procesados posteriormente por utilidades de proceso de metadatos. (Especificado por JSR 175.)

Autoboxing/unboxing, conversiones automticas entre tipos primitivos (Como los int) y clases de envoltura primitivas (Como Integer). (Especificado por JSR 201.)

Enumeraciones, la palabra reservada enum crea una typesafe, lista ordenada de valores (como Dia.LUNES, Dia.MARTES, etc.). Anteriormente, esto solo poda ser llevado a cabo por constantes enteras o clases construidas manualmente (enum pattern). (Especificado por JSR 201.)

Varargs (nmero de argumentos variable), El ltimo parmetro de un mtodo puede ser declarado con el nombre del tipo seguido por tres puntos (e.g. void drawtext(String... lines)). En la llamada al mtodo, puede usarse cualquier nmero de parmetros de ese tipo, que sern almacenados en un array para pasarlos al mtodo.

Bucle for mejorado, La sintaxis para el bucle for se ha extendido con una sintaxis especial para iterar sobre cada miembro de un array o sobre cualquier clase que implemente Iterable, como la clase estndar Collection, de la siguiente forma:

Void displayWidgets (Iterable widgets) { for (Widget w : widgets) { w.display(); } } Este ejemplo itera sobre el objeto Iterable widgets, asignando, en orden, cada uno de los elementos a la variable w, y llamando al mtodo display() de cada uno de ellos. (Especificado por JSR 201.)

g)Java SE 6 (11 de diciembre de 2006) - Nombre clave Mustang. Estuvo en desarrollo bajo la JSR 270. En esta versin, Sun cambi el nombre "J2SE" por Java SE y elimin el ".0" del nmero de versin.[5]. Est disponible en http://java.sun.com/javase/6/. Los cambios ms importantes introducidos en esta versin son:

Incluye un nuevo marco de trabajo y APIs que hacen posible la combinacin de Java con lenguajes dinmicos como PHP, Python, Ruby y JavaScript.

Incluye el motor Rhino, de Mozilla, una implementacin de Javascript en Java.

Incluye un cliente completo de Servicios Web y soporta las ltimas especificaciones para Servicios Web, como JAX-WS 2.0, JAXB 2.0, STAX y JAXP.

Mejoras en la interfaz grfica y en el rendimiento.

h)Java SE 7 - Nombre clave Dolphin. En el ao 2006 an se encontraba en las primeras etapas de planificacin. Se espera que su desarrollo d comienzo en la primavera de 2006, y se estima su lanzamiento para 2008.

Soporte para XML dentro del propio lenguaje

Un nuevo concepto de superpaquete

Soporte para closures

Introduccin de anotaciones estndar para detectar fallos en el software.

Adems de los cambios en el lenguaje, con el paso de los aos se han efectuado muchos ms cambios dramticos en la librera de clases de Java (Java class library) que ha crecido de unos pocos cientos de clases en JDK 1.0 hasta ms de tres mil en J2SE 5.0. APIs completamente nuevas, como Swing y Java2D, han sido introducidas y muchos de los mtodos y clases originales de JDK 1.0 estn desaprobados.

Filosofa

El lenguaje java se cre con cinco objetivos principales:1.Debera usar la metodologa de la programacin orientada a objetos. 2.Debera permitir la ejecucin de un mismo programa en mltiples sistemas operativos. 3.Debera incluir por defecto soporte para trabajo en red. 4.Debera disearse para ejecutar cdigo en sistemas remotos de forma segura. 5.Debera ser fcil de usar y tomar lo mejor de otros lenguajes orientados a objetos, como c++. Para conseguir la ejecucin de cdigo remoto y el soporte de red, los programadores de java a veces recurren a extensiones como corba (common object request broker architecture), internet communications engine o osgi respectivamente.Caractersticas Principales

Las caractersticas principales que nos ofrece java respecto a cualquier otro lenguaje de programacin, son:Simple:Java ofrece toda la funcionalidad de un lenguaje potente, pero sin las caractersticas menos usadas y ms confusas de stos. c++ es un lenguaje que adolece de falta de seguridad, pero c y c++ son lenguajes ms difundidos, por ello java se dise para ser parecido a c++ y as facilitar un rpido y fcil aprendizaje.Java elimina muchas de las caractersticas de otros lenguajes como c++, para mantener reducidas las especificaciones del lenguaje y aadir caractersticas muy tiles como el garbage collector (reciclador de memoria dinmica). No es necesario preocuparse de liberar memoria, el reciclador se encarga de ello y como es un thread de baja prioridad, cuando entra en accin, permite liberar bloques de memoria muy grandes, lo que reduce la fragmentacin de la memoria.Java reduce en un 50% los errores ms comunes de programacin con lenguajes como C y C++ al eliminar muchas de las caractersticas de stos, entre las que destacan: Aritmtica de punteros No existen referencias Registros (struct) Definicin de tipos (typedef) Macros (#define) Necesidad de liberar memoria (free) Aunque, en realidad, lo que hace es eliminar las palabras reservadas (struct, typedef), ya que las clases son algo parecido.

Adems, el intrprete completo de Java que hay en este momento es muy pequeo, solamente ocupa 215 Kb de RAM.

Orientado a objetos

Java implementa la tecnologa bsica de C++ con algunas mejoras y elimina algunas cosas para mantener el objetivo de la simplicidad del lenguaje. Java trabaja con sus datos como objetos y con interfaces a esos objetos. Soporta las tres caractersticas propias del paradigma de la orientacin a objetos: encapsulacin, herencia y polimorfismo. Las plantillas de objetos son llamadas, como en C++, clases y sus copias, instancias. Estas instancias, como en C++, necesitan ser construidas y destruidas en espacios de memoria.

Java incorpora funcionalidades inexistentes en C++ como por ejemplo, la resolucin dinmica de mtodos. Esta caracterstica deriva del lenguaje Objective C, propietario del sistema operativo Next. En C++ se suele trabajar con libreras dinmicas (DLLs) que obligan a recompilar la aplicacin cuando se retocan las funciones que se encuentran en su interior. Este inconveniente es resuelto por Java mediante una interfaz especfica llamada RTTI (RunTime Type Identification) que define la interaccin entre objetos excluyendo variables de instancias o implementacin de mtodos. Las clases en Java tienen una representacin en el runtime que permite a los programadores interrogar por el tipo de clase y enlazar dinmicamente la clase con el resultado de la bsqueda.

Distribuido

Java se ha construido con extensas capacidades de interconexin TCP/IP. Existen libreras de rutinas para acceder e interactuar con protocolos como http y ftp. Esto permite a los programadores acceder a la informacin a travs de la red con tanta facilidad como a los ficheros locales.

La verdad es que Java en s no es distribuido, sino que proporciona las libreras y herramientas para que los programas puedan ser distribuidos, es decir, que se corran en varias mquinas, interactuando.

Robusto

Java realiza verificaciones en busca de problemas tanto en tiempo de compilacin como en tiempo de ejecucin. La comprobacin de tipos en Java ayuda a detectar errores, lo antes posible, en el ciclo de desarrollo. Java obliga a la declaracin explcita de mtodos, reduciendo as las posibilidades de error. Maneja la memoria para eliminar las preocupaciones por parte del programador de la liberacin o corrupcin de memoria.

Tambin implementa los arrays autnticos, en vez de listas enlazadas de punteros, con comprobacin de lmites, para evitar la posibilidad de sobreescribir o corromper memoria resultado de punteros que sealan a zonas equivocadas. Estas caractersticas reducen drsticamente el tiempo de desarrollo de aplicaciones en Java.

Adems, para asegurar el funcionamiento de la aplicacin, realiza una verificacin de los byte-codes, que son el resultado de la compilacin de un programa Java. Es un cdigo de mquina virtual que es interpretado por el intrprete Java. No es el cdigo mquina directamente entendible por el hardware, pero ya ha pasado todas las fases del compilador: anlisis de instrucciones, orden de operadores, etc., y ya tiene generada la pila de ejecucin de rdenes.Java proporciona, pues:

Comprobacin de punteros

Comprobacin de lmites de arrays

Excepciones

Verificacin de byte-codes

Arquitectura neutral

Para establecer Java como parte integral de la red, el compilador Java compila su cdigo a un fichero objeto de formato independiente de la arquitectura de la mquina en que se ejecutar. Cualquier mquina que tenga el sistema de ejecucin (run-time) puede ejecutar ese cdigo objeto, sin importar en modo alguno la mquina en que ha sido generado. Actualmente existen sistemas run-time para Solaris 2.x, SunOs 4.1.x, Windows 95, Windows NT, Linux, Irix, Aix, Mac, Apple y probablemente haya grupos de desarrollo trabajando en el porting a otras plataformas.

Fuente: Lenguaje de programacin Java de www.wikipedia.com, la enciclopedia libreEl cdigo fuente Java se "compila" a un cdigo de bytes de alto nivel independiente de la mquina. Este cdigo (byte-codes) est diseado para ejecutarse en una mquina hipottica que es implementada por un sistema run-time, que s es dependiente de la mquina.

En una representacin en que tuvisemos que indicar todos los elementos que forman parte de la arquitectura de Java sobre una plataforma genrica, obtendramos una figura como la siguiente:

Fuente: Lenguaje de programacin Java de www.wikipedia.com, la enciclopedia libreEn ella podemos ver que lo verdaderamente dependiente del sistema es la Mquina Virtual Java (JVM) y las libreras fundamentales, que tambin nos permitiran acceder directamente al hardware de la mquina. Adems, habr APIs de Java que tambin entren en contacto directo con el hardware y sern dependientes de la mquina, como ejemplo de este tipo de APIs podemos citar:

Java 2D: grficos 2D y manipulacin de imgenes

Java Media Framework: Elementos crticos en el tiempo: audio, video...

Java Animation: Animacin de objetos en 2D

Java Telephony: Integracin con telefona

Java Share: Interaccin entre aplicaciones multiusuario

Java 3D: Grficos 3D y su manipulacin

Seguro

La seguridad en Java tiene dos facetas. En el lenguaje, caractersticas como los punteros o el casting implcito que hacen los compiladores de C y C++ se eliminan para prevenir el acceso ilegal a la memoria. Cuando se usa Java para crear un navegador, se combinan las caractersticas del lenguaje con protecciones de sentido comn aplicadas al propio navegador.

El lenguaje C, por ejemplo, tiene lagunas de seguridad importantes, como son los errores de alineacin. Los programadores de C utilizan punteros en conjuncin con operaciones aritmticas. Esto le permite al programador que un puntero referencie a un lugar conocido de la memoria y pueda sumar (o restar) algn valor, para referirse a otro lugar de la memoria. Si otros programadores conocen nuestras estructuras de datos pueden extraer informacin confidencial de nuestro sistema. Con un lenguaje como C, se pueden tomar nmeros enteros aleatorios y convertirlos en punteros para luego acceder a la memoria:

printf( "Escribe un valor entero: " );

scanf( "%u",&puntero );

printf( "Cadena de memoria: %s\n",puntero );

Otra laguna de seguridad u otro tipo de ataque, es el Caballo de Troya. Se presenta un programa como una utilidad, resultando tener una funcionalidad destructiva. Por ejemplo, en UNIX se visualiza el contenido de un directorio con el comando ls. Si un programador deja un comando destructivo bajo esta referencia, se puede correr el riesgo de ejecutar cdigo malicioso, aunque el comando siga haciendo la funcionalidad que se le supone, despus de lanzar su carga destructiva.

Por ejemplo, despus de que el caballo de Troya haya enviado por correo el /etc/shadow a su creador, ejecuta la funcionalidad de ls persentando el contenido del directorio. Se notar un retardo, pero nada inusual.

El cdigo Java pasa muchos tests antes de ejecutarse en una mquina. El cdigo se pasa a travs de un verificador de byte-codes que comprueba el formato de los fragmentos de cdigo y aplica un probador de teoremas para detectar fragmentos de cdigo ilegal -cdigo que falsea punteros, viola derechos de acceso sobre objetos o intenta cambiar el tipo o clase de un objeto.

Si los byte-codes pasan la verificacin sin generar ningn mensaje de error, entonces sabemos que:

a) El cdigo no produce desbordamiento de operandos en la pila

b) El tipo de los parmetros de todos los cdigos de operacin son conocidos y correctos.

c) No ha ocurrido ninguna conversin ilegal de datos, tal como convertir enteros en punteros.

d) El acceso a los campos de un objeto se sabe que es legal: public, private, protected.

e) No hay ningn intento de violar las reglas de acceso y seguridad establecidas

El Cargador de Clases tambin ayuda a Java a mantener su seguridad, separando el espacio de nombres del sistema de ficheros local, del de los recursos procedentes de la red. Esto limita cualquier aplicacin del tipo Caballo de Troya, ya que las clases se buscan primero entre las locales y luego entre las procedentes del exterior.

Las clases importadas de la red se almacenan en un espacio de nombres privado, asociado con el origen. Cuando una clase del espacio de nombres privado accede a otra clase, primero se busca en las clases predefinidas (del sistema local) y luego en el espacio de nombres de la clase que hace la referencia. Esto imposibilita que una clase suplante a una predefinida.

En resumen, las aplicaciones de Java resultan extremadamente seguras, ya que no acceden a zonas delicadas de memoria o de sistema, con lo cual evitan la interaccin de ciertos virus. Java no posee una semntica especfica para modificar la pila de programa, la memoria libre o utilizar objetos y mtodos de un programa sin los privilegios del kernel del sistema operativo. Adems, para evitar modificaciones por parte de los crackers de la red, implementa un mtodo ultraseguro de autentificacin por clave pblica. El Cargador de Clases puede verificar una firma digital antes de realizar una instancia de un objeto. Por tanto, ningn objeto se crea y almacena en memoria, sin que se validen los privilegios de acceso. Es decir, la seguridad se integra en el momento de compilacin, con el nivel de detalle y de privilegio que sea necesario.

Dada, pues la concepcin del lenguaje y si todos los elementos se mantienen dentro del estndar marcado por Sun, no hay peligro. Java imposibilita, tambin, abrir ningn fichero de la mquina local (siempre que se realizan operaciones con archivos, stas trabajan sobre el disco duro de la mquina de donde parti el applet), no permite ejecutar ninguna aplicacin nativa de una plataforma e impide que se utilicen otros ordenadores como puente, es decir, nadie puede utilizar nuestra mquina para hacer peticiones o realizar operaciones con otra. Adems, los intrpretes que incorporan los navegadores de la Web son an ms restrictivos. Bajo estas condiciones (y dentro de la filosofa de que el nico ordenador seguro es el que est apagado, desenchufado, dentro de una cmara acorazada en un bunker y rodeado por mil soldados de los cuerpos especiales del ejrcito), se puede considerar que Java es un lenguaje seguro y que los applets estn libres de virus.Respecto a la seguridad del cdigo fuente, no ya del lenguaje, JDK proporciona un desemsamblador de byte-code, que permite que cualquier programa pueda ser convertido a cdigo fuente, lo que para el programador significa una vulnerabilidad total a su cdigo. Utilizando java no se obtiene el cdigo fuente original, pero s desmonta el programa mostrando el algoritmo que se utiliza, que es lo realmente interesante. La proteccin de los programadores ante esto es utilizar llamadas a programas nativos, externos (incluso en C o C++) de forma que no sea descompilable todo el cdigo; aunque as se pierda portabilidad. Esta es otra de las cuestiones que Java tiene pendientes.Portable

Ms all de la portabilidad bsica por ser de arquitectura independiente, Java implementa otros estndares de portabilidad para facilitar el desarrollo. Los enteros son siempre enteros y adems, enteros de 32 bits en complemento a 2. Adems, Java construye sus interfaces de usuario a travs de un sistema abstracto de ventanas de forma que las ventanas puedan ser implantadas en entornos Unix, Pc o Mac.

Interpretado

El intrprete Java (sistema run-time) puede ejecutar directamente el cdigo objeto. Enlazar (linkar) un programa, normalmente, consume menos recursos que compilarlo, por lo que los desarrolladores con Java pasarn ms tiempo desarrollando y menos esperando por el ordenador. No obstante, el compilador actual del JDK es bastante lento. Por ahora, que todava no hay compiladores especficos de Java para las diversas plataformas, Java es ms lento que otros lenguajes de programacin, como C++, ya que debe ser interpretado y no ejecutado como sucede en cualquier programa tradicional.

Se dice que Java es de 10 a 30 veces ms lento que C, y que tampoco existen en Java proyectos de gran envergadura como en otros lenguajes. La verdad es que ya hay comparaciones ventajosas entre Java y el resto de los lenguajes de programacin, y una ingente cantidad de folletos electrnicos que supuran fanatismo en favor y en contra de los distintos lenguajes contendientes con Java. Lo que se suele dejar de lado en todo esto, es que primero habra que decidir hasta que punto Java, un lenguaje en pleno desarrollo y todava sin definicin definitiva, est maduro como lenguaje de programacin para ser comparado con otros; como por ejemplo con Smalltalk, que lleva ms de 20 aos en cancha.

La verdad es que Java para conseguir ser un lenguaje independiente del sistema operativo y del procesador que incorpore la mquina utilizada, es tanto interpretado como compilado. Y esto no es ningn contrasentido, me explico, el cdigo fuente escrito con cualquier editor se compila generando el byte-code. Este cdigo intermedio es de muy bajo nivel, pero sin alcanzar las instrucciones mquinas propias de cada plataforma y no tiene nada que ver con el p-code de Visual Basic. El byte-code corresponde al 80% de las instrucciones de la aplicacin. Ese mismo cdigo es el que se puede ejecutar sobre cualquier plataforma. Para ello hace falta el run-time, que s es completamente dependiente de la mquina y del sistema operativo, que interpreta dinmicamente el byte-code y aade el 20% de instrucciones que faltaban para su ejecucin. Con este sistema es fcil crear aplicaciones multiplataforma, pero para ejecutarlas es necesario que exista el run-time correspondiente al sistema operativo utilizado.

Multithreaded

Al ser multithreaded (multihilvanado, en mala traduccin), Java permite muchas actividades simultneas en un programa. Los threads (a veces llamados, procesos ligeros), son bsicamente pequeos procesos o piezas independientes de un gran proceso. Al estar los threads contruidos en el lenguaje, son ms fciles de usar y ms robustos que sus homlogos en C o C++.

El beneficio de ser miltithreaded consiste en un mejor rendimiento interactivo y mejor comportamiento en tiempo real. Aunque el comportamiento en tiempo real est limitado a las capacidades del sistema operativo subyacente (Unix, Windows, etc.), an supera a los entornos de flujo nico de programa (single-threaded) tanto en facilidad de desarrollo como en rendimiento.

Cualquiera que haya utilizado la tecnologa de navegacin concurrente, sabe lo frustrante que puede ser esperar por una gran imagen que se est trayendo. En Java, las imgenes se pueden ir trayendo en un thread independiente, permitiendo que el usuario pueda acceder a la informacin en la pgina sin tener que esperar por el navegador.

Dinmico

Java se beneficia todo lo posible de la tecnologa orientada a objetos. Java no intenta conectar todos los mdulos que comprenden una aplicacin hasta el tiempo de ejecucin. Las libreras nuevas o actualizadas no paralizarn las aplicaciones actuales (siempre que mantengan el API anterior).

Fuente: Lenguaje de programacin Java de www.wikipedia.com, la enciclopedia libreJava tambin simplifica el uso de protocolos nuevos o actualizados. Si su sistema ejecuta una aplicacin Java sobre la red y encuentra una pieza de la aplicacin que no sabe manejar, tal como se ha explicado en prrafos anteriores, Java es capaz de traer automticamente cualquiera de esas piezas que el sistema necesita para funcionar.Java, para evitar que los mdulos de byte-codes o los objetos o nuevas clases, haya que estar trayndolos de la red cada vez que se necesiten, implementa las opciones de persistencia, para que no se eliminen cuando de limpie la cach de la mquina.Funcionalidad de JavaUna de las caractersticas ms importantes es que los programas "ejecutables", creados por el compilador de Java, son independientes de la arquitectura. Se ejecutan indistintamente en una gran variedad de equipos con diferentes microprocesadores y sistemas operativos.

De momento, es pblico y puede conseguirse un JDK (Java Developers Kit) o Kit de desarrollo de aplicaciones Java gratis en http://java.sun.com/. Permite escribir Applets (pequeos programas que se insertan en una pgina HTML) y se ejecutan en el ordenador que la est visualizando.

Se pueden escribir aplicaciones para intranets, aplicaciones cliente/servidor, aplicaciones distribuidas en redes locales y en Internet. Es fcil de aprender y est bien estructurado. Las aplicaciones son fiables. Puede controlarse su seguridad frente al acceso a recursos del sistema y es capaz de gestionar permisos y criptografa. Tambin, segn Sun, la seguridad frente a virus a travs de redes locales e Internet est garantizada, aunque, al igual que ha ocurrido con otras tecnologas y aplicaciones, se han descubierto, y posteriormente subsanado, "agujeros" en la seguridad de Java que han sido solucionados ms tarde.

Java tiene una gestin de memoria automtica que reduce la complejidad de la tarea de programacin; la memoria no es accesible directamente, lo que reduce la cantidad de virus y bugs en el programa. Los navegadores actuales incorporan los mecanismos para poder conceder permisos extraordinarios a algunos applets que vengan firmados digitalmente por entidades de confianza (certificados digitales como los empleados en Espaa por la Fbrica de Moneda y Timbre para facilitar la entrega de la declaracin de la renta). Ventajas y desventajas

Ventajas a. No debes volver a escribir el cdigo si quieres ejecutar el programa en otra mquina. Un solo cdigo funciona para todos los browsers compatibles con Java o donde se tenga una Mquina Virtual de Java (Mac's, PC's, Sun's, etc).

b. Java es un lenguaje de programacin orientado a objetos, y tiene todos los beneficios que ofrece esta metodologa de programacin (ms adelante doy una pequea introduccin a la filosofa de objetos).

c. Un browser compatible con Java deber ejecutar cualquier programa hecho en Java, esto ahorra a los usuarios tener que estar insertando "plug-ins" y dems programas que a veces nos quitan tiempo y espacio en disco.

d. Java es un lenguaje y por lo tanto puede hacer todas las cosas que puede hacer un lenguaje de programacin: Clculos matemticos, procesadores de palabras, bases de datos, aplicaciones grficas, animaciones, sonido, hojas de clculo, etc.

e. Si lo que me interesa son las pginas de Web, ya no tienen que ser estticas, se le pueden poner toda clase de elementos multimedia y permiten un alto nivel de interactividad, sin tener que gastar en paquetes carsimos de multimedia.f. La velocidad, los programas hechos en Java no tienden a ser muy rpidos, supuestamente se est trabajando en mejorar esto. Como los programas de Java son interpretados nunca alcanzan la velocidad de un verdadero ejecutable.

g. Java es un lenguaje de programacin. Esta es otra gran limitante, por ms que digan que es orientado a objetos y que es muy fcil de aprender sigue siendo un lenguaje y por lo tanto aprenderlo no es cosa fcil. Especialmente para los no programadores.

h. Java es nuevo. En pocas palabras todava no se conocen bien todas sus capacidades.i. El JDK es una herramienta libre de licencias (sin costo), creada por Sun.- Est respaldado por un gran nmero de proveedores.

j. Existe soporte dado por Sun.

k. Debido a que existen diferentes productos de Java, hay ms de un proveedor de servicios.

l. Sun saca al mercado cada 6 meses una nueva versin del JDK.

m. Es independiente de la plataforma de desarrollo.

n. Existen dentro de su librera clases grficas como AWT y Swing, las cuales permiten crear objetos grficos comunes altamente configurables y con una arquitectura independiente de la plataforma.

o. Java permite a los desarrolladores aprovechar la flexibilidad de la Programacin Orientada a Objetos en el diseo de sus aplicaciones.

p. El conocimiento sobre tecnologa Java est en alto crecimiento en el mercado.

q. Se puede acceder a bases de datos fcilmente con JDBC, independientemente de la plataforma utilizada.r. El manejo de las bases de datos es uniforme, es decir transparente y simple.

s. Existen las herramientas Crystal Reports o herramientas libres como Itext que los genera en formato pdf.t. La API que utilizan estas herramientas en Java, es la ms recomendable para generar reportes en Web.Desventajasa. La velocidad, los programas hechos en Java no tienden a ser muy rpidos, supuestamente se est trabajando en mejorar esto. Como los programas de Java son interpretados nunca alcanzan la velocidad de un verdadero ejecutable.

b. Java es un lenguaje de programacin. Esta es otra gran limitante, por ms que digan que es orientado a objetos y que es muy fcil de aprender sigue siendo un lenguaje y por lo tanto aprenderlo no es cosa fcil., especialmente para los no programadores.

c. Java es nuevo. En pocas palabras todava no se conocen bien todas sus capacidades.Plataforma TecnolgicaLa independencia de la plataforma, significa que programas escritos en el lenguaje Java pueden ejecutarse igualmente en cualquier tipo de hardware. Es lo que significa ser capaz de escribir un programa una vez y que pueda ejecutarse en cualquier dispositivo, tal como reza el axioma de Java, write once, run everywhere.

Para ello, se compila el cdigo fuente escrito en lenguaje Java, para generar un cdigo conocido como bytecode (especficamente Java bytecode), instrucciones mquinas simplificadas especficas de la plataforma Java. Esta pieza est a medio camino entre el cdigo fuente y el cdigo mquina que entiende el dispositivo destino. El bytecode es ejecutado entonces en la mquina virtual (VM), un programa escrito en cdigo nativo de la plataforma destino (que es el que entiende su hardware), que interpreta y ejecuta el cdigo. Adems, se suministran libreras adicionales para acceder a las caractersticas de cada dispositivo (como los grficos, ejecucin mediante hebras o threads, la interfaz de red) de forma unificada. Se debe tener presente que, aunque hay una etapa explcita de compilacin, el bytecode generado es interpretado o convertido a instrucciones mquina del cdigo nativo por el compilador JIT (Just In Time).

Hay implementaciones del compilador de Java que convierten el cdigo fuente directamente en cdigo objeto nativo, como GCJ. Esto elimina la etapa intermedia donde se genera el bytecode, pero la salida de este tipo de compiladores slo puede ejecutarse en un tipo de arquitectura.

La licencia sobre Java de Sun insiste que todas las implementaciones sean compatibles. Esto dio lugar a una disputa legal entre Microsoft y Sun, cuando ste ltimo aleg que la implementacin de Microsoft no daba soporte a las interfaces RMI y JNI adems de haber aadido caractersticas dependientes de su plataforma. Sun demand a Microsoft y gan por daos y perjuicios (unos 20 millones de dlares) as como una orden judicial forzando la acatacin de la licencia de Sun. Como respuesta, Microsoft no ofrece Java con su versin de sistema operativo, y en recientes versiones de Windows, su navegador Internet Explorer no admite la ejecucin de applets sin un conector (o plugin) aparte. Sin embargo, Sun y otras fuentes ofrecen versiones gratuitas para distintas versiones de Windows.

Las primeras implementaciones del lenguaje usaban una mquina virtual interpretada para conseguir la portabilidad. Sin embargo, el resultado eran programas que se ejecutaban comparativamente ms lentos que aquellos escritos en C o C++. Esto hizo que Java se ganase una reputacin de lento en rendimiento. Las implementaciones recientes de la JVM dan lugar a programas que se ejecutan considerablemente ms rpido que las versiones antiguas, empleando diversas tcnicas, aunque sigue siendo mucho ms lento que otros lenguajes.

La primera de estas tcnicas es simplemente compilar directamente en cdigo nativo como hacen los compiladores tradicionales, eliminando la etapa del bytecode. Esto da lugar a un gran rendimiento en la ejecucin, pero tapa el camino a la portabilidad. Otra tcnica, conocida como compilacin JIT (Just In Time, o compilacin al vuelo), convierte el bytecode a cdigo nativo cuando se ejecuta la aplicacin. Otras mquinas virtuales ms sofisticadas usan una recompilacin dinmica en la que la VM es capaz de analizar el comportamiento del programa en ejecucin y recompila y optimiza las partes crticas. La recompilacin dinmica puede lograr mayor grado de optimizacin que la compilacin tradicional (o esttica), ya que puede basar su trabajo en el conocimiento que de primera mano tiene sobre el entorno de ejecucin y el conjunto de clases cargadas en memoria. La compilacin JIT y la recompilacin dinmica permiten a los programas Java aprovechar la velocidad de ejecucin del cdigo nativo sin por ello perder la ventaja de la portabilidad.

La portabilidad es tcnicamente difcil de lograr, y el xito de Java en ese campo ha sido dispar. Aunque es de hecho posible escribir programas para la plataforma Java que acten de forma correcta en mltiples plataformas de distinta arquitectura, el gran nmero de estas con pequeos errores o inconsistencias llevan a que a veces se parodie el eslogan de Sun, "Write once, run anywhere" como "Write once, debug everywhere" (o Escrbelo una vez, ejectalo en cualquier parte por Escrbelo una vez, depralo en todas partes)

El concepto de independencia de la plataforma de Java cuenta, sin embargo, con un gran xito en las aplicaciones en el entorno del servidor, como los Servicios Web, los Servlets, los Java Beans, as como en sistemas empotrados basados en OSGi, usando entornos Java empotrados.

Recursos

El JRE (Java Runtime Environment, o Entorno en Tiempo de Ejecucin de Java) es el software necesario para ejecutar cualquier aplicacin desarrollada para la plataforma Java. El usuario final usa el JRE como parte de paquetes software o plugins (o conectores) en un navegador Web. Sun ofrece tambin el SDK de Java 2, o JDK (Java Development Kit) en cuyo seno reside el JRE, e incluye herramientas como el compilador de Java, Javadoc para generar documentacin o el depurador. Puede tambin obtenerse como un paquete independiente, y puede considerarse como el entorno necesario para ejecutar una aplicacin Java, mientras que un desarrollador debe adems contar con otras facilidades que ofrece el JDK.

Componentes

Bibliotecas de Java, que son el resultado de compilar el cdigo fuente desarrollado por quien implementa la JRE, y que ofrecen apoyo para el desarrollo en Java. Algunos ejemplos de estas libreras son:

a) Las bibliotecas centrales, que incluyen: Una coleccin de bibliotecas para implementar estructuras de datos como listas, arrays, rboles y conjuntos.

b) Bibliotecas para anlisis de XML.

c) Seguridad.

d) Bibliotecas de internacionalizacin y localizacin.

e) Bibliotecas de integracin, que permiten la comunicacin con sistemas externos. Estas libreras incluyen:

La API para acceso a bases de datos JDBC (Java DataBase Conectivity). La interfaz JNDI (Java Naming and Directory Interface) para servicios de directorio.

RMI (Remote Method Invocation) y CORBA para el desarrollo de aplicaciones distribuidas.

f) Bibliotecas para la interfaz de usuario, que incluyen:

El conjunto de herramientas nativas AWT (Abstract Windowing Toolkit), que ofrece componentes GUI (Graphical User Interface), mecanismos para usarlos y manejar sus eventos asociados.

g) Las Bibliotecas de Swing, construidas sobre AWT pero ofrecen implementaciones no nativas de los componentes de AWT.

APIs para la captura, procesamiento y reproduccin de audio.

Una implementacin dependiente de la plataforma en que se ejecuta de la mquina virtual de Java (JVM), que es la encargada de la ejecucin del cdigo de las libreras y las aplicaciones externas.

Plugins o conectores que permiten ejecutar applets en los navegadores Web.

Java Web Start, para la distribucin de aplicaciones Java a travs de Internet.

Documentacin y licencia.

Extensiones y arquitecturas relacionadas

Las extensiones de Java estn en paquetes que cuelgan de la raz javax: javax.*. No se incluyen en la JDK o el JRE. Algunas de las extensiones y arquitecturas ligadas estrechamente al lenguaje Java son:

Java EE (Java Platform, Enterprise Edition; antes J2EE), para aplicaciones distribuidas orientadas al entorno empresarial.

Java ME (Java Platform, Micro Edition; antes J2ME), para dispositivos de recursos limitados como telfonos mviles y PDAs

JMF (Java Media Framework)

JavaHelp

JavaMail

JNDI (Java Naming and Directory Interface)

JSML (Java Speech API Markup Language)

JDBC (Java Database Connectivity)

JDO (Java Data Objects)

JAI (Java Advanced Imaging)

JAIN (Java API for Integrated Networks)

JDMK (Java Dynamic Management Kit)

Jini (una arquitectura de red para la construccin de sistemas distribuidos

Jiro

Java Card

JavaSpaces

JML (Java Modeling Language)

JMI (Java Metadata Interface)

JMX (Java Management Extensions)

JSP (JavaServer Pages)

JSF (JavaServer Faces)

JNI (Java Native Interface)

JXTA (Protocolos abiertos para redes virtuales Peer-to-Peer o P2P)

Java 3D (Una API de alto nivel para programacin grfica en 3D)

JOGL (Java OpenGL, una API de bajo nivel para programacin grfica usando OpenGL)

LWJGL (Light Weight Java Game Library, una API de bajo nivel para acceso a OpenGL, OpenAL y varios dispositivos de entrada)

MARF (Modular Audio Recognition Framework)

OSGi (Dynamic Service Management and Remote Maintenance)Identificadores, Variables, Operadores Lgicos y SentenciasLa sintaxis de un lenguaje define los elementos de dicho lenguaje y cmo se combinan para formar un programa. Los elementos tpicos de cualquier lenguaje son los siguientes:

a) Identificadores: los nombres que se dan a las variables

b) Tipos de datos

c) Palabras reservadas: las palabras que utiliza el propio lenguaje

d) Sentencias

e) Bloques de cdigo

f) Comentarios

g) Expresiones

h) Operadores

Identificadores

Un identificador es un nombre que identifica a una variable, a un mtodo o funcin miembro, a una clase. Todos los lenguajes tienen ciertas reglas para componer los identificadores:

Todos los identificadores han de comenzar con una letra, el carcter subrayado ( _ ) o el carcter Dollar ( $ ).

Puede incluir, pero no comenzar por un nmero

No puede incluir el carcter espacio en blanco

Distingue entre letras maysculas y minsculas

No se pueden utilizar las palabras reservadas como identificadores

Adems de estas restricciones, hay ciertas convenciones que hacen que el programa sea ms legible, pero que no afectan a la ejecucin del programa. La primera y fundamental es la de encontrar un nombre que sea significativo, de modo que el programa sea lo ms legible posible. El tiempo que se pretende ahorrar eligiendo nombres cortos y poco significativos se pierde con creces cuando se revisa el programa despus de cierto tiempo.Tipo de identificadorConvencinEjemplo

Nombre de una claseComienza por letra maysculaString, Rectngulo, CinematicaApplet

Nombre de funcinComienza con letra minsculacalcularArea, getValue, setColor

Nombre de variableComienza por letra minscularea, color, appletSize

Nombre de constanteEn letras maysculasPI, MAX_ANCHO

Comentarios

Un comentario es un texto adicional que se aade al cdigo para explicar su funcionalidad, bien a otras personas que lean el programa, o al propio autor como recordatorio. Los comentarios son una parte importante de la documentacin de un programa. Los comentarios son ignorados por el compilador, por lo que no incrementan el tamao del archivo ejecutable; se pueden por tanto, aadir libremente al cdigo para que pueda entenderse mejor.

La programacin orientada a objetos facilita mucho la lectura del cdigo, por lo que lo que no se precisa hacer tanto uso de los comentarios como en los lenguajes estructurados. En Java existen tres tipos de comentarios

Comentarios en una sola lnea

Comentarios de varias lneas

Comentarios de documentacin

Como podemos observar un comentario en varias lneas es un bloque de texto situado entre el smbolo de comienzo del bloque /*, y otro de terminacin del mismo */. Teniendo encuentra este hecho, los programadores disean comentarios como el siguiente: (C) Angel Franco Garca

Fecha: Marzo 1999

Programa: PrimeroApp.java Los comentarios de documentacin son un bloque de texto situado entre el smbolo de comienzo del bloque /**, y otro de terminacin del mismo */. El programa javadoc utiliza estos comentarios para generar la documentacin del cdigo.

/** Este es el primer programa de una serie dedicada a explicar los fundamentos del lenguaje Java */

Habitualmente, se usuan comentarios en una sola lnea //, ya que no tiene el inconveniente de aprender los smbolos de comienzo y terminacin del bloque o se olvida poner este ltimo, dando lugar a un error en el momento de la compilacin. En la ventana de edicin del Entorno Integrado de Desarrollo (IDE) los comentarios se distinguen del resto del cdigo por el color del texto.

public class PrimeroApp{

public static void main(String[] args) {

//imprime un mensaje

System.out.println("El primer programa"); }

}

Un procedimiento elemental de depuracin de un programa consiste en anular ciertas sentencias de un programa mediante los delimitadores de comentarios. Por ejemplo, se puede modificar el programa y anular la sentencia que imprime el mensaje, poniendo delante de ella el delimitador de comentarios en una sola lnea.

//System.out.println("El primer programa");

Al correr el programa, se observar que no imprime nada en la pantalla.

La sentencia System.out.println() imprime un mensaje en la consola, una ventana DOS que se abre en el escritorio de Windows 95. La funcin println tiene un slo argumento una cadena de caracteres u objeto de la clase String.

Sentencias

Una sentencia es una orden que se le da al programa para realizar una tarea especfica, esta puede ser: mostrar un mensaje en la pantalla, declarar una variable (para reservar espacio en memoria), inicializarla, llamar a una funcin, etc. Las sentencias acaban con ;. este carcter separa una sentencia de la siguiente. Normalmente, las sentencias se ponen unas debajo de otras, aunque sentencias cortas pueden colocarse en una misma lnea. He aqu algunos ejemplos de sentencias

int i=1;

import java.awt.*;

System.out.println("El primer programa");

rect.mover(10, 20);

En el lenguaje Java, los caracteres espacio en blanco se pueden emplear libremente, es muy importante para la legibilidad de un programa la colocacin de unas lneas debajo de otras empleando tabuladores. El editor del IDE nos ayudar plenamente en esta tarea sin apenas percibirlo.

Bloques de cdigoUn bloque de cdigo es un grupo de sentencias que se comportan como una unidad. Un bloque de cdigo est limitado por las llaves de apertura { y cierre }. Como ejemplos de bloques de cdigo tenemos la definicin de una clase, la definicin de una funcin miembro, una sentencia iterativa for, los bloques try, catch, para el tratamiento de las excepciones, etc.

Expresiones

Una expresin es todo aquello que se puede poner a la derecha del operador asignacin =. Por ejemplo:

x=123;

y=(x+100)/4;

rea=circulo.calcularArea(2.5);

Rectngulo r=new Rectngulo(10, 10, 200, 300);

La primera expresin asigna un valor a la variable x.

La segunda, realiza una operacin

La tercera, es una llamada a una funcin miembro calcularArea desde un objeto circulo de una clase determinada

La cuarta, reserva espacio en memoria para un objeto de la clase Rectngulo mediante la llamada a una funcin especial denominada constructor.

Variables

Una variable es un nombre que se asocia con una porcin de la memoria del ordenador, en la que se guarda el valor asignado a dicha variable. Hay varios tipos de variables que requieren distintas cantidades de memoria para guardar datos.Todas las variables han de declararse antes de usarlas, la declaracin consiste en una sentencia en la que figura el tipo de dato y el nombre que asignamos a la variable. Una vez declarada se le podr asignar valores.

Java tiene tres tipos de variables:

De Instancia De Clase Locales Las variables de instancia o miembros datose usan para guardar los atributos de un objeto particular.

Las variables de clase o miembros dato estticos son similares a las variables de instancia, con la excepcin de que los valores que guardan son los mismos para todos los objetos de una determinada clase. En el siguiente ejemplo, PI es una variable de clase y radio es una variable de instancia. PI guarda el mismo valor para todos los objetos de la clase Crculo, pero el radio de cada crculo puede ser diferente

class Circulo{

static final double PI=3.1416;

double radio;

//...

}

Las variables locales Se utilizan dentro de las funciones miembro o mtodos. En el siguiente ejemplo rea es una variable local a la funcin calcularArea en la que se guarda el valor del rea de un objeto de la clase Crculo. Una variable local existe desde el momento de su definicin hasta el final del bloque en el que se encuentra.class Circulo{

//...

double calcularArea(){

double area=PI*radio*radio;

return area;

}

}

En el lenguaje Java, las variables locales se declaran en el momento en el que son necesarias. Es una buena costumbre inicializar las variables en el momento en el que son declaradas. Veamos algunos ejemplos de declaracin de algunas variables

int x=0;

String nombre="Angel";

double a=3.5, b=0.0, c=-2.4;

boolean bNuevo=true;

int[] datos;

Delante del nombre de cada variable se ha de especificar el tipo de variable que hemos destacado en letra negrita. Las variables pueden ser

Un tipo de dato primitivo

El nombre de una clase

Un array

El lenguaje Java utiliza el conjunto de caracteres Unicode, que incluye no solamente el conjunto ASCII sino tambin caracteres especficos de la mayora de los alfabetos. As, podemos declarar una variable que contenga la letra

int ao=1999;

Se ha de poner nombres significativos a las variables, generalmente formados por varias palabras combinadas, la primera empieza por minscula, pero las que le siguen llevan la letra inicial en maysculas. Se debe evitar en todos los casos nombres de variables cortos como xx, i, etc.

double radioCirculo=3.2;

Las variables son uno de los elementos bsicos de un programa, y se deben:

Declarar

Inicializar

Usar

Tipos de datos primitivos

TipoDescripcin

boolean Tiene dos valores true o false.

charCaracteres Unicode de 16 bits Los caracteres alfa-numricos son los mismos que los ASCII con el bit alto puesto a 0. El intervalo de valores va desde 0 hasta 65535 (valores de 16-bits sin signo).

byteTamao 8 bits. El intervalo de valores va desde -27 hasta 27 -1 (-128 a 127)

shortTamao 16 bits. El intervalo de valores va desde -215 hasta 215-1 (-32768 a 32767)

intTamao 32 bits. El intervalo de valores va desde -231 hasta 231-1 (-2147483648 a 2147483647)

longTamao 64 bits. El intervalo de valores va desde -263 hasta 263-1 (-9223372036854775808 a 9223372036854775807)

floatTamao 32 bits. Nmeros en coma flotante de simple precisin. Estndar IEEE 754-1985 (de 1.40239846e45f a 3.40282347e+38f)

double Tamao 64 bits. Nmeros en coma flotante de doble precisin. Estndar IEEE 754-1985. (de 4.94065645841246544e324d a 1.7976931348623157e+308d.)

Los tipos bsicos que utilizaremos en la mayor parte de los programas sern boolean, int y double.

Caracteres

En Java los caracteres no estn restringidos a los ASCII sino son Unicode. Un carcter est siempre rodeado de comillas simples como 'A', '9', '', etc. El tipo de dato char sirve para guardar estos caracteres.

Un tipo especial de carcter es la secuencia de escape, similares a las del lenguaje C/C++, que se utilizan para representar caracteres de control o caracteres que no se imprimen. Una secuencia de escape est formada por la barra invertida (\) y un carcter. En la siguiente tabla se dan las secuencias de escape ms utilizadas.

CarcterSecuencia de escape

Retorno de carro\r

Tabulador horizontal\t

Nueva lnea\n

Barra invertida\\

Variables booleanas

En el lenguaje C/C++ el valor 0 se toma como falso y el 1 como verdadero. En el lenguaje Java existe el tipo de dato boolean. Una variable booleana solamente puede guardar uno de los dos posibles valores: true (verdadero) y false (falso).

Boolean encontrado=false;

{...}

encontrado=true;

Variables enterasUna variable entera consiste en cualquier combinacin de cifras precedidos por el signo ms (opcional), para los positivos, o el signo menos, para los negativos. Son ejemplos de nmeros enteros:

12, -36, 0, 4687, -3598

Como ejemplos de declaracin de variables enteras tenemos:

int numero=1205;

int x,y;

long m=30L;

int es la palabra reservada para declarar una variable entera. En el primer caso, el compilador reserva una porcin de 32 bits de memoria en el que guarda el nmero 1205. Se accede a dicha porcin de memoria mediante el nombre de la variable, nmero. En el segundo caso, las porciones de memoria cuyos nombres son x e y, guardan cualquier valor entero si la variable es local o cero si la variable es de instancia o de clase. El uso de una variable local antes de ser convenientemente inicializada puede conducir a consecuencias desastrosas. Por tanto, declarar e inicializar una variable es una prctica aconsejable.

En la tercera lnea 30 es un nmero de tipo int por defecto, le ponemos el sufijo L en maysculas o minsculas para indicar que es de tipo long.

Existen como vemos en la tabla varios tipos de nmeros enteros (byte, short, int, long), y tambin existe una clase denominada BigInteger cuyos objetos pueden guardar un nmero entero arbitrariamente grande.

Variables en coma flotante

Las variables del tipo float o double (coma flotante) se usan para guardar nmeros en memoria que tienen parte entera y parte decimal.

double PI=3.14159;

double g=9.7805, c=2.9979e8;

El primero es una aproximacin del nmero real , el segundo es la aceleracin de la gravedad a nivel del mar, el tercero es la velocidad de la luz en m/s, que es la forma de escribir 2.9979 108. El carcter punto '.', separa la parte entera de la parte decimal, en vez del carcter coma ',' que usamos habitualmente en nuestro idioma.

Otros ejemplos son los siguientes

float a=12.5f;

float b=7f;

double c=7.0;

double d=7d;

En la primera lnea 12.5 lleva el sufijo f, ya que por defecto 12.5 es double. En la segunda lnea 7 es un entero y por tanto 7f es un nmero de tipo float. Y as el resto de los ejemplos.

Conceptualmente, hay infinitos nmeros de valores entre dos nmeros reales. Ya que los valores de las variables se guardan en un nmero prefijado de bits, algunos valores no se pueden representar de forma precisa en memoria. Por tanto, los valores de las variables en coma flotante en un ordenador solamente se aproximan a los verdaderos nmeros reales en matemticas. La aproximacin es tanto mejor, cuanto mayor sea el tamao de la memoria que reservamos para guardarlo. De este hecho, surgen las variables del tipo float y double. Para nmeros de precisin arbitraria se emplea la clase BigDecimal.

Valores constantes

Cuando se declara una variable de tipo final, se ha de inicializar y cualquier intento de modificarla en el curso de la ejecucin del programa da lugar a un error en tiempo de compilacin.

Normalmente, las constantes de un programa se suelen poner en letras maysculas, para distinguirlas de las que no son constantes. He aqu ejemplos de declaracin de constantes.

final double PI=3.141592653589793;

final int MAX_DATOS=150;

Las cadenas de caracteres o strings

Adems de los ocho tipos de datos primitivos, las variables en Java pueden ser declaradas para guardar una instancia de una clase.

Las cadenas de caracteres o strings son distintas en Java y en el lenguaje C/C++, en este ltimo, las cadenas son arrays de caracteres terminados en el carcter '\0'. Sin embargo, en Java son objetos de la clase String.

String mensaje="El primer programa";

Empleando strings, el primer programa quedara de la forma equivalente

public class PrimeroApp{

public static void main(String[] args) {

//imprime un mensaje

String mensaje="El primer programa";

System.out.println(mensaje);

}

}

En una cadena se pueden insertar caracteres especiales como el carcter tabulador '\t' o el de nueva lnea '\n'

String texto="Un string con \t un carcter tabulador y \n un salto de lnea";

Palabras reservadas

En el siguiente cuadro se listan las palabras reservadas, aquellas que emplea el lenguaje Java, y que el programador no puede utilizar como identificadores. Las palabras reservadas sealadas con un asterisco (*) no se utilizan.abstractbooleanbreakbytebyvalue*

casecast*catchcharclass

const*continuedefaultdodouble

elseextendsfalsefinalfinally

floatforfuture*generic*goto*

ifimplementsimportinner*instanceof

intinterfacelongnativenew

nulloperator*outer*packageprivate

protectedpublicrest*returnshort

sataticsuperswitchsynchronizedthis

throwtransienttruetryvar*

voidvolatilewhile

Las palabras reservadas se pueden clasificar en las siguientes categoras:

Tipos de datos: boolean, float, double, int, char

Sentencias condicionales: if, else, switch

Sentencias iterativas: for, do, while, continue

Tratamiento de las excepciones: try, catch, finally, throw

Estructura de datos: class, interface, implements, extends

Modificadores y control de acceso: public, private, protected, transient

Otras: super, null, this.Operadores Aritmticos

El lenguaje cuenta con los operadores aritmticos bsicos, ms los operadores parntesis () para dar cierta prioridad a operaciones que lo requieran.

( + , - , * , / ) = (adicin, sustraccin, multiplicacin, divisin)

*nota: % = operador mdulo o resto de la divisin.

(En algoritmos puede aparecer como MOD() o como RESTO() )

int result, a = 8, b = 2;

result = a % b; /* result = 0 */

result = a - b; /* result = 6 */

b = 3;

result = a % b; /* 8 % 3 --> result = 2 */

result = a / 5; /* 8 / 5 --> result = 1 */

* Notar que la sentencia de asignacin, termina con un punto y coma, y las variables se declaran slo una vez (caso de la variable b).

Diferencias de la divisin segn el tipo de los operandosa) Si uno o ms de los operandos es una variable de tipo punto flotante (double, float), entonces la divisin es real.

b) Si los dos operandos son variables enteras (int, long, short, byte), entonces la divisin es entera. Tipo de DivisinResultadoEjemplo

int / intint 3 / 2 = 1

int / doubledouble 3.0 / 2.0 = 1.5

double / intdouble 1.0 / 2 = 0.5

double / doubledouble 6.0 / 5.0 = 1.2

Fuente: Lenguaje de programacin Java de www.wikipedia.com, la enciclopedia libreOperador de post y pre incremento

Generalmente en un programa, se tienen que hacer incrementos o decrementos de una unidad para variables enteras de la manera: var = var + 1; o var = var - 1; En Java como tambin en otros lenguajes de programacin, se ha incluido el operador ++ y -- para realizar estas asignaciones de manera ms corta.

variable++ , ++variable : variable = variable + 1

variable-- , --variable : variable = variable - 1

La mayor diferencia de estos mtodos, se encuentra en la asignacin de variables. En primer lugar, veremos este tipo de asignacin cuando en la sentencia no existe otra variable involucrada.

Ej : int a = 5; /* la variable a, toma como valor 5*/

a++; /* la variable se post incrementa y toma el valor 6 */

++a; /* la variable se pre incrementa y toma el valor 7*/

El post y pre incremento en estas condiciones, producen el mismo efecto.Tambin es vlido para var-- y --var y slo es vlido para variables de tipo entero.

Ahora bien, cuando este tipo de incrementos no son independientes, o sea hay otra(s) variable(s) involucrada(s) se deben seguir ciertas reglas, que se ejemplifican a continuacin:

Post-incremento

int a = 7, b; /* a = 7 y b = 0 */

b = a++; /* primero b = 7 y luego a = a + 1 --> 8 */

La variable b toma el valor de a (o sea b = 7). Luego de la asignacin, la variable a se incrementa, tomando un valor final de 8.

Pre-incremento

a = 8;

b = ++a;

En este caso, lo primero que se hace es incrementar la variable a (a = 8), para luego asignar ese valor, a la variable b (o sea b = 9).

* Todo lo anterior es vlido para variables enteras y para el operador de decremento

Operadores de asignacin aritmtica

Continuando con la idea de contraer ciertas operaciones aritmticas, se usan abreviaciones para la asignacin de una variable, cuando est involucrada como operador. ExpresinEquivalente

a += b;a = a + b;

a -= b;a = a - b;

a *= b;a = a * b;

a /= b;a = a / b;

a %= b;a = a * b;

Fuente: Lenguaje de programacin Java de www.wikipedia.com, la enciclopedia libreEjemplo: int a = 2, b = 3; /* Se declaran dos variables enteras a = 2, b = 3 */

a += b; /* a = a + b = 2 + 3 = 5 */

*Nota: Para mayor orden en el seguimiento de los valores, se escribe

la expresin equivalente y a continuacin se evalan los valores.

b *= 5; /* b = b * 5 = 3 * 5 = 15 */

a = ++b; /* b = b + 1 = 15 + 1 = 16 ; a = b = 16 */

Como existe una variable que se est pre-incrementando, lo primero que se hace es

modificar el valor de esa variable. Despus de haber hecho esto, se evalan los valores.

b += --a + 5; /* a = a - 1 = 16 - 1 = 15 ; b = b + a + 5 = 16 + 15 + 5 = 36 */

Despus de incrementar la variable a, se escribe y evala la expresin equivalente.

a += b--; /* a = a + b = 15 + 36 = 51 ; b = b - 1 = 36 - 1 = 35 */

Como ahora b, se est post-incrementando, lo primero que se hace es evaluar la expresin equivalente, y despus finalmente incrementar la variable b. Valores finales: a = 51, b = 35.

Operadores Relacionales

Los siguientes operadores son fundamentales para implementar las condiciones de las sentencias de control.El resultado de una comparacin es un valor true o false.

OperadorDescripcinEjemplo

=mayor o igual p >= 0.01

==igual a%2 == 0

!=distinto t != true

Fuente: Lenguaje de programacin Java de www.wikipedia.com, la enciclopedia libreOperadores Lgicos

Java proporciona operadores lgicos que se usan para simular los conceptos Y, O y NO del lgebra de Boole.Estos se conocen con el nombre de conjuncin, disyuncin y negacin respectivamente, y los operadores correspondientes son &&, || y!. La precedencia de la conjuncin y la disyuncin es lo suficientemente baja como para que no sea necesario utilizar parntesis. El operador && tiene mayor precedencia que el operador ||, mientras que ! se agrupa con los dems operadores. Los argumentos y resultados de estos operadores lgicos son valores de tipo boolean.

OperadorDescripcinEjemplo

&&AND (y) f > 0.0 && f 7 || 8 > 0 && 1 == 2)

resp : a = true, b : false , c : false, d : trueEl Flujo de un Programa (Sentencias Condicionales)Del mismo modo que en la vida diaria, en un programa es necesario tomar decisiones basadas en ciertos hechos y actuar en consecuencia. El lenguaje Java tiene una sentencia bsica denominada if (si condicional) que realiza un test y permite responder de acuerdo al resultado.

La sentencia ifLa sentencia if, acta como cabra esperar. Si la condicin es verdadera, la sentencia se ejecuta, de otro modo, se salta dicha sentencia, continuando la ejecucin del programa con otras sentencias a continuacin de sta. La forma general de la sentencia if es:

if (condicin)

Sentencia;

Si el resultado del test es verdadero (true) se ejecuta la sentencia que sigue a continuacin de if, en caso contrario, falso (false), se salta dicha sentencia, tal como se indica en la figura. La sentencia puede consistir a su vez, en un conjunto de sentencias agrupadas en un bloque.

if (condicin){

sentencia1;

sentencia2;

}

En el siguiente ejemplo, si el nmero del boleto que hemos adquirido coincide con el nmero aparecido en el sorteo, nos dicen que hemos obtenido un premio.

if(numeroBoleto==numeroSorteo)

System.out.println("has obtenido un premio");

La sentencia if...else

La sentencia if...else completa la sentencia if, para realizar una accin alternativa

if (condicin)

sentencia1;

else

sentencia2

Las dos primeras lneas indican que si la condicin es verdadera se ejecuta la sentencia 1. La palabra clave else, significa que si la condicin no es verdadera se ejecuta la sentencia 2, tal como se ve en la figura..

Dado que las sentencias pueden ser simples o compuestas la forma general de if...else es

if (condicin){

sentencia1;

sentencia2;

}else{

sentencia3

sentencia4;

sentencia5;

}Existe una forma abreviada de escribir una sentencia condicional if...else como la siguiente:

if (numeroBoleto==numeroSoreteo)

premio=1000;

else

premio=0;

en una sola lnea

premio=(numeroBoleto==numeroSoreteo) ? 1000 : 0;

Un ejemplo significativo es el siguiente: el signo de un nmero elevado a una potencia par es positivo, y es negativo cuando est elevado a una potencia impar.

int signo=(exponente%2==0)?1:-1;

La condicin entre parntesis es la siguiente: un nmero es par, cuando el resto de la divisin entera de dicho nmero entre dos vale cero.La sentencia switch

La sentencia if...else tiene dos ramas, el programa va por una u otra rama dependiendo del valor verdadero o falso de la expresin evaluada. A veces, es necesario, elegir entre varias alternativas, como se muestra en la siguiente figura:

Por ejemplo, considrese las siguientes series de sentencias if...else

if(expresion==valor1)

sentencia1;

else if(expresion==valor2)

sentencia2;

else if(expresion==valor3)

sentencia3;

else

sentencia4;

El cdigo resultante puede ser difcil de seguir y confuso incluso para el programador avanzado. El lenguaje Java proporciona una solucin elegante a este problema mediante la sentencia condicional switch para agrupar a un conjunto de sentencias if...else.

switch(expresion){

case valor1:

sentencia1;

break;

//sale de switch

case valor2:

sentencia2;

break;

//sale switch

case valor3:

sentencia3;

break;

//sale de switch

default:

sentencia4;

}

En la sentencia switch, se compara el valor de una variable o el resultado de evaluar una expresin, con un conjunto de nmeros enteros valor1, valor2, valor3, .. o con un conjunto de caracteres, cuando coinciden se ejecuta el bloque de sentencias que estn asociadas con dicho nmero o carcter constante. Dicho bloque de sentencias no est entre llaves sino que empieza en la palabra reservada case y termina en su asociado break. Si el compilador no encuentra coincidencia, se ejecuta la sentencia default, si es que est presente en el cdigo.El Flujo de un Programa (Sentencias Iterativas)La sentencia for

Esta sentencia se encuentra en la mayora de los lenguajes de programacin. El bucle for se emplear cuando conocemos el nmero de veces que se ejecutar una sentencia o un bloque de sentencias, tal como se indica en la figura. La forma general que adopta la sentencia for es

for(inicializacin; condicin; incremento)

sentencia;

El primer trmino inicializacin, se usa para inicializar una variable ndice, que controla el nmero de veces que se ejecutar el bucle. La condicin representa la condicin que ha de ser satisfecha para que el bucle contine su ejecucin. El incremento representa la cantidad que se incrementa la variable ndice en cada repeticin.

Ejemplo: Escribir un programa que imprima los primeros 10 primeros nmeros enteros empezando por el cero

for (int i = 0; i < 10; i++) {

System.out.println(i);

}

El resultado ser: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

La variable ndice i se declara y se inicializa en el trmino inicializacin, la condicin se expresa de modo que i se debe mantener estrictamente menor que 10; la variable i se incrementa una unidad en cada repeticin del bucle. La variable i es local al bucle, por lo que deja de existir una vez que se sale del bucle.

Ejemplo: Escribir un programa que imprima los nmeros pares positivos menores o iguales que 20

for (int i=2; i