Академический Документы
Профессиональный Документы
Культура Документы
Extreme Guide:
Usando Java
Usa
Be free… I'm free, I use Linux… Close your Windows, open your mind!!!
Editorial Mi-K-sita
1ª Edición (en español)
Ejemplares impresos: 1
Derechos reservados
Ver 200804
Extreme Guide: Usando Java Introducción
Bue
Ver 200804 3
Extreme Guide: Usando Java Java
1.2. Historia
Java
Java comenzó como un proyecto lla y su objetivo inicial era
1. Java crear un lenguaje que fuera capaz d en electrodomésticos que
tuvieran microprocesadores, pe uenta que ese tipo de
Para trabajar, o programar, en el entorno denominado Java debemos tecnología estaba aún muy lejos existir.
empezar por iniciar dicha aplicación. Para esto sigamos los siguientes
pasos: El proyecto dio como resu enguaje muy parecido a C / C++, al cual
le llamaron "Oak" (en refe roble que se encontraba en el exterior
Java es un lenguaje de programación orientado a objetos desarrollado por de las oficinas de osystems), por James Gosling en junio de 1.991,
Sun Microsystems a principios de los años 1990. Las aplicaciones Java están para usarse de receptor digital externo, pero descubrieron
típicamente compiladas en un bytecode1 , aunque la compilación en código que ya ex e con este nombre. Luego alguien sugirió el
máquina nativo también es posible. En el tiempo de ejecución, el nombre de cree que es por un tipo de café y otros piensan que son
bytecode es normalmente interpretado o compilado a código nativo para siglas) y fue ese nombre el que quedó.
la ejecución, aunque la ejecución directa por hardware del bytecode por
un procesador Java también es posible. La implementación pública fue Java v1.0 en 1.995. Prometía
na vez, ejecutar en cualquier parte" ("write once, run
El lenguaje en sí mismo toma mucha de su sintaxis de C y C++, pero tiene here"), proporcionando ningún coste extra en el tiempo de ejecución
un modelo de objetos más simple y elimina herramientas de bajo ni l s plataformas populares. Era bastante seguro y su seguridad era
como punteros. JavaScript , un lenguaje interpretado2 , comparte configurable, permitiendo restringir el acceso a archivos o a una red.
nombre similar y una sintaxis similar, pero no está dir
relacionado con Java. Los principales navegadores web pronto incorporaron la capacidad de
ejecutar "applets11" Java seguros dentro de páginas web. Java adquirió
Sun Microsystems proporciona una implementación GNU3 popularidad rápidamente. Con la llegada de "Java 2", las nuevas versiones
License de un compilador Java y una máquina e a las tuvieron múltiples configuraciones pensadas para diferentes tipos de
especificaciones del Java Community Process eca de plataformas. Por ejemplo, J2EE12 era para aplicaciones de empresa y la
clases que se requiere para ejecutar los prog va no es sof tware versión reducida J2ME13 era para aplicaciones para móviles. J2SE era la
libre4 . designación para la Edición Estándar. En 2.006, las nuevas versiones "J2"
fueron renombradas a Java EE, Java ME y Java SE, respectivamente.
1.1. Generalidades
En 1.997, Sun se dirigió al cuerpo de estándares ISO / IEC JTC1 y más tarde
Paradigma: Orientado a o a Ecma International para formalizar Java, pero pronto se retiró del
Apareció en: 1990s proceso. Java permanece como un estándar de facto propietario que está
Diseñado por: Sun Microsyst controlado a través del Java Community Process. Sun hace disponibles la
Tipo de dato: Fuert mayoría de sus implementaciones Java sin cargo alguno, generando los
Implementaciones: do por: Objective-C5 , C++, Smalltalk6 , ingresos con productos especializados como el Java Enterprise System. Sun
do: C#8 , J#9 , JavaScript 10 . distingue entre su Sof tware Development Kit (SDK) y su Java Runtime
Ver 200804 4
Extreme Guide: Usando Java Java
Environment (JRE) que es un subconjunto del SDK, siendo la principal • macros (#define)
distinción que en el JRE no está presente el compilador. • necesidad de liberar memoria (f )
El 13 de noviembre de 2.006, Sun liberó partes de Java como sof tware Aunque, en realidad, lo que hace las palabras reservadas
libre de código abierto, bajo la GNU General Public License (GPL). La (struct , typedef), ya que las clase do.
publicación del código fuente completo bajo la GPL se esperaba que
ocurriera en la primera mitad de 2.007. Además, el intérprete com ue hay en este momento es muy
pequeño, solamente ocup de RAM.
1.3. Características
b. Orientado a o
Las características principales que nos ofrece Java respecto a cualquier
otro lenguaje de programación, son: Java imple ología básica de C++ con algunas mejoras y
elimina alg as para mantener el objetivo de la simplicidad del
a. Simple lenguaje. Java trabaja con sus datos como objetos y con interfaces a esos
ob oporta las tres características propias del paradigma de la
Java ofrece toda la funcionalidad de un lenguaje potente, pero sin las ori a objetos: encapsulación, herencia y polimorfismo. Las
características menos usadas y más confusas de éstos. C++ es un lenguaje e objetos son llamadas, como en C++, clases y sus copias,
que adolece de falta de seguridad, pero C y C++ son lenguajes más cias. Estas instancias, como en C++, necesitan ser construidas y
difundidos, por ello Java se diseñó para ser parecido a C++ y así facili idas en espacios de memoria.
un rápido y fácil aprendizaje.
Java incorpora funcionalidades inexistentes en C++ como por ejemplo, la
Java elimina muchas de las características de otros lenguajes resolución dinámica de métodos. Esta característica deriva del lenguaje
para mantener reducidas las especificaciones del lenguaje Objective C, propietario del sistema operativo Next . En C++ se suele
características muy útiles como el Garbage Collecto or de trabajar con librerías dinámicas (DLLs) que obligan a recompilar la
memoria dinámica). No es necesario preocupa ria, el aplicación cuando se retocan las funciones que se encuentran en su
reciclador se encarga de ello, y como es un oridad, interior. Este inconveniente es resuelto por Java mediante una interfaz
cuando entra en acción, permite liberar bloque moria muy grandes, específica llamada RTTI (RunTime Type Identification) que define la
lo que reduce la fragmentación de la memoria. interacción entre objetos excluyendo variables de instancias o
implementación de métodos. Las clases en Java tienen una representación
Java reduce en un 50% los errores más comunes de programación con en el runtime que permite a los programadores interrogar por el tipo de
lenguajes como C y C++ al eliminar muchas de las características de éstos, clase y enlazar dinámicamente la clase con el resultado de la búsqueda.
entre las que destacan:
c. Distribuido
• aritmética de puntero
• no existen referencia Java se ha construido con extensas capacidades de interconexión TCP / IP.
• registros (struct Existen librerías de rutinas para acceder e interactuar con protocolos como
• definición de ti ht tp y f tp. Esto permite a los programadores acceder a la información a
Ver 200804 5
Extreme Guide: Usando Java Java
través de la red con tanta facilidad como a los ficheros locales. Java en sí Linux, Irix, Aix, Mac, Apple y probablemen grupos de desarrollo
no es distribuido, sino que proporciona las librerías y herramientas para trabajando en el porting a otras plataformas
que los programas puedan ser distribuidos, es decir, que se corran en
varias máquinas, interactuando. f. Seguro
Además, para asegurar el funcionamiento de la aplicación, r Otra laguna de seguridad u otro tipo de ataque, es el Caballo de Troya. Se
verificación de los bytecodes, que son el resultado de la compila presenta un programa como una utilidad, resultando tener una
programa Java. Es un código de máquina virtual que es in por el funcionalidad destructiva. Por ejemplo, en Linux se visualiza el contenido
intérprete Java. No es el código máquina dire por el de un directorio con el comando ls. Si un programador deja un comando
hardware, pero ya ha pasado todas las fases isis de destructivo bajo esta referencia, se puede correr el riesgo de ejecutar
instrucciones, orden de operadores, etc., y ya enerada la pila de código malicioso, aunque el comando siga haciendo la funcionalidad que se
ejecución de órdenes. le supone, después de lanzar su carga destructiva. Después de que el
caballo de Troya haya enviado por correo el / etc / shadow a su creador,
e. Arquitectura neutral ejecuta la funcionalidad de ls presentando el contenido del directorio. Se
notará un retardo, pero nada inusual.
Para establecer Java como parte a red, el compilador Java
compila su código a un fichero ormato independiente de la El código Java pasa muchos tests antes de ejecutarse en una máquina. El
arquitectura de la máqui tará. Cualquier máquina que código se pasa a través de un verificador de bytecodes que comprueba el
tenga el sistema de ejecu e ejecutar ese código objeto, formato de los fragmentos de código y aplica un probador de teoremas
sin importar en m máquina en que ha sido generado. para detectar fragmentos de código ilegal (código que falsea punteros,
Actualmente existe ime para Solaris, SunOS, Windows, viola derechos de acceso sobre objetos o intenta cambiar el tipo o clase de
Ver 200804 6
Extreme Guide: Usando Java Java
• El código no produce desbordamiento de operandos en la pila. Dada pues, la concepción del , y si todos los elementos se
• El tipo de los parámetros de todos los códigos de operación son mantienen dentro del es por Sun, no hay peligro. Java
conocidos y correctos. imposibilita, también, ab fichero de la máquina local (siempre
• No ha ocurrido ninguna conversión ilegal de datos, tal como convertir que se realizan operacio archivos, éstas trabajan sobre el disco
enteros en punteros. duro de la máqui nde partió la aplicación), no permite ejecutar
• El acceso a los campos de un objeto se sabe que es legal: public, ninguna ap e una plataforma e impide que se utilicen otros
private, protected. ordenadore es decir, nadie puede utilizar nuestra máquina
• No hay ningún intento de violar las reglas de acceso y seguridad para hace nes o realizar operaciones con otra. Además, los
establecidas. intérpretes que incorporan los navegadores de la web son aún más
res
El Cargador de Clases (classloader) también ayuda a Java a mantener su
seguridad, separando el espacio de nombres del sistema de ficheros local condiciones (y dentro de la filosofía de que el único ordenador
del de los recursos procedentes de la red. Esto limita cualquier aplicación o es el que está apagado, desenchufado, dentro de una cámara
del tipo Caballo de Troya, ya que las clases se buscan primero entre zada en un bunker y rodeado por mil soldados de los cuerpos
locales y luego entre las procedentes del exterior. especiales del ejército), se puede considerar que Java es un lenguaje
seguro y que los applets y aplicaciones están libres de virus.
Las clases importadas de la red se almacenan en un espacio d
privado, asociado con el origen. Cuando una clase del espacio d g. Portable o independiente de la plataforma
privado accede a otra clase, primero se busca en las c finidas
(del sistema local) y luego en el espacio de no e hace Más allá de la portabilidad básica por ser de arquitectura independiente,
la referencia. Esto imposibilita que una clase su nida. Java implementa otros estándares de portabilidad para facilitar el
desarrollo. Los enteros son siempre enteros y además, enteros de 32 bits
En resumen, las aplicaciones de Java resultan e mente seguras, ya en complemento a 2. Además, Java construye sus interfaces de usuario a
que no acceden a zonas delicadas de memoria tema, con lo cual través de un sistema abstracto de ventanas de forma que las ventanas
evitan la interacción de ciertos virus. Java no posee una semántica puedan ser implantadas en entornos Unix, PC o Mac.
específica para modificar la pila de programa, la memoria libre o utilizar
objetos y métodos de un programa ilegios del kernel del sistema h. Interpretado
operativo. Además, para evitar mo s por parte de los crackers de
la red, implementa un m de autentificación por clave El intérprete Java (sistema runtime) puede ejecutar directamente el
pública. código objeto. Enlazar (linkar) un programa, normalmente, consume
menos recursos que compilarlo, por lo que los desarrolladores con Java
El Cargador de Cla ar una firma digital antes de realizar pasarán más tiempo desarrollando y menos esperando por el ordenador. No
Ver 200804 7
Extreme Guide: Usando Java Java
obstante, el compilador actual del JDK es bastante lento. Por ahora, que simultáneas en un programa. Los threads s llamados procesos
todavía no hay compiladores específicos de Java para las diversas ligeros), son básicamente pequeños proceso as independientes de
plataformas, Java es más lento que otros lenguajes de programación, un gran proceso. Al estar los threa en el lenguaje, son más
como C++, ya que debe ser interpretado y no ejecutado como sucede en fáciles de usar y más robustos que s en C o C++.
cualquier programa tradicional.
El beneficio de ser multithrea iste en un mejor rendimiento
Se dice que Java es de 10 a 30 veces más lento que C, y que tampoco interactivo y mejor co en tiempo real. Aunque el
existen en Java proyectos de gran envergadura como en otros lenguajes. comportamiento en tiem está limitado a las capacidades del
La verdad es que ya hay comparaciones ventajosas entre Java y el resto de sistema operativo subyac ix, Windows, etc.), aún supera a los
los lenguajes de programación, y una ingente cantidad de folletos entornos de flujo programa (singlethreaded) tanto en facilidad de
electrónicos que supuran fanatismo en favor y en contra de los distintos desarrollo c ento.
lenguajes contendientes con Java.
Cualquiera a utilizado la tecnología de navegación concurrente,
Lo que se suele dejar de lado en todo esto, es que primero habría que sabe lo frustrante que puede ser esperar por una gran imagen que se está
decidir hasta que punto Java, un lenguaje en pleno desarrollo y todavía sin tra En Java, las imágenes se pueden ir trayendo en un thread
definición definitiva, está maduro como lenguaje de programación para ser ind nte, permitiendo que el usuario pueda acceder a la información
comparado con otros; como por ejemplo con Smalltalk, que lleva más de a sin tener que esperar por el navegador.
20 años en cancha.
Java también simplifica el uso de protocolos nuevos o actualizados. Si su recolector de basura de Java borra el objeto do así la memoria que
sistema ejecuta una aplicación Java sobre la red y encuentra una pieza de ocupaba previniendo posibles fugas (eje n objeto creado y
la aplicación que no sabe manejar, tal como se ha explicado en párrafos únicamente usado dentro de un mé e entidad dentro de éste;
anteriores, Java es capaz de traer automáticamente cualquiera de esas al salir del método el objeto es e n así, es posible que se
piezas que el sistema necesita para funcionar. produzcan fugas de memoria si na referencias a objetos
que ya no son necesarios, es de en aún ocurrir, pero en un nivel
Java, para evitar que los módulos de bytecodes o los objetos o nuevas conceptual superior. En de ector de basura de Java permite
clases, haya que estar trayéndolos de la red cada vez que se necesiten, una fácil creación y ón de objetos, mayor seguridad y
implementa las opciones de persistencia, para que no se eliminen cuando frecuentemente más rápid C++.
de limpie la caché de la máquina.
La recolecc e Java es un proceso prácticamente invisible al
k. Recolector de basura desarrollad final de la aplicación que se haga en él). Es
decir, el p or no tiene conciencia de cuándo la recolección de
Un argumento en contra de lenguajes como C++ es que los programadores basura tendrá lugar, ya que ésta no tiene necesariamente que guardar
se encuentran con la carga añadida de tener que administrar la memoria rel n las acciones que realiza el código fuente.
de forma manual. En C++, el desarrollador debe asignar memoria en una
zona conocida como heap (montículo) para crear cualquier objeto, y ajas de Java
posteriormente desalojar el espacio asignado cuando desea borrarlo. Un
olvido a la hora de desalojar memoria previamente solicitada, o si no o se debe volver a escribir el código si quieres ejecutar el programa
hace en el instante oportuno, puede llevar a una fuga de memoria, ya q en otra máquina. Un solo código funciona para todos los browsers
el sistema operativo piensa que esa zona de memoria está sie compatibles con Java o donde se tenga una Máquina Virtual de Java
por una aplicación cuando en realidad no es así. Así, un pro (Mac's, PC's, Sun's, etc).
diseñado podría consumir una cantidad desproporcionada de • Java es un lenguaje de programación orientado a objetos, y tiene
Además, si una misma región de memoria es desaloj ces el todos los beneficios que ofrece esta metodología de programacion
programa puede volverse inestable y lleva cemos (más adelante doy una pequeña introducción a la filosofía de objetos).
coloquialmente, un eventual "cuelgue" del siste • Un browser compatible con Java deberá ejecutar cualquier programa
hecho en Java, esto ahorra a los usuarios tener que estar insertando
En Java (y lenguajes como de programación c #), este problema "plug-ins" y demás programas que a veces nos quitan tiempo y espacio
potencial es evitado en gran medida por el or automático de en disco.
basura (o automatic garbage collector). El programador determina cuándo • Java es un lenguaje y por lo tanto puede hacer todas las cosas que
se crean los objetos y el entorno en tiempo de ejecución de Java (el Java puede hacer un lenguaje de programación: Cálculos matemáticos,
runtime) es el responsable de ges o de vida de los objetos (y procesadores de palabras, bases de datos, aplicaciones gráficas,
por supuesto, de cuando recupera a que ocupan los objetos). animaciones, sonido, hojas de cálculo, etc.
• Si lo que me interesa son las páginas de Web, ya no tienen que ser
El programa, u otros obje ocalizado un objeto mediante estáticas, se le pueden poner toda clase de elementos multimedia y
una referencia a és n punto de vista de bajo nivel, es una permiten un alto nivel de interactividad, sin tener que gastar en
dirección de memo quedan referencias a un objeto, el paquetes carísimos de multimedia.
Ver 200804 9
Extreme Guide: Usando Java Java
• La velocidad. Los programas hechos en Java no tienden a ser muy El proyecto Java ha visto muchas ve adas. Desde 1.997, estas
rápidos, supuestamente se está trabajando para mejorar esto. Como son:
los programas de Java son interpretados nunca alcanzan la velocidad
de un verdadero ejecutable. • JDK 1.1.4 (Sparkler) 12 de se de 1.997
• Java es un lenguaje de programación. Esta es otra gran limitante, por o JDK 1.1.5 (Pu embre de 1.997
más que digan que es orientado a objetos y que es muy fácil de o JDK 1.1.6 (Ab e abril de 1.998
aprender sigue siendo un lenguaje y por lo tanto aprenderlo no es cosa o JDK 1.1.7 (Bru e septiembre de 1.998
fácil. Especialmente para los no programadores. o JDK 1. sea) 8 de abril de 1.999
• Java es nuevo. En pocas palabras todavía no se conocen bien todas sus • J2SE 1. de diciembre de 1.998
capacidades. Pero en general Java posee muchas ventajas y se pueden o guno) 30 de marzo de 1.999
hacer cosas muy interesantes con esto. Hay que prestar especial o 2 (Cricket) 8 de julio de 1.999
atención a lo que está sucediendo en el mundo de la computación, a • J2SE 1.3 (Kestrel) 8 de mayo de 2.000
pesar de que Java es relativamente nuevo, posee mucha fuerza y es J2SE 1.3.1 (Ladybird) 17 de mayo de 2.001
tema de moda en cualquier medio computacional. • 4.0 (Merlin) 13 de febrero de 2.002
J2SE 1.4.1 (Hopper) 16 de septiembre de 2.002
1.6. Filosofía o J2SE 1.4.2 (Mantis) 26 de junio de 2.003
SE 5.0 (1.5.0) (Tiger) 29 de septiembre de 2.004
El lenguaje Java se creó con cinco objetivos principales: • Java SE 6 (1.6.0) (Mustang) 11 de diciembre de 2.006
• Java SE 7 (1.7.0) (Dolphin) previsto para mediados del 2.008
1. Debería usar la metodología de la programación orientada a
sea, que cumpla con el paradigma de la programación o 1.8. Java y DB
objetos en un 100%).
2. Debería permitir la ejecución de un mis ltiples Muchos programadores quizás tengan mayor interés en realizar
sistemas operativos. programación en conjunto con Bases de Datos. Pues Java no se queda
3. Debería incluir por defecto soporte para tra ed. atrás. Java no implementa Bases de Datos, ya que solo es un lenguaje de
4. Debería diseñarse para ejecutar código en remotos de forma programación, pero implementa funciones que permiten al programador
segura. realizar conexiones entre la interfaz de usuario y el Gestor de Base de
5. Debería ser fácil de usar, y tomar lo mejor de otros lenguajes Datos. Java permite conectarse por medio de puentes JDBC o a través de
orientados a objetos, como C++ (aunque en estos momentos, Java se Driver's a programas gestores de bases de datos. Su independencia entre
parece más a C# que a C++). ambos permite al usuario mantener siempre un enfoque, separando el
diseño de la Base de Datos y el de la interfaz, en dos mundos de
Para conseguir la ejecució d oto y el soporte de red, los pensamientos diferentes: el mundo de los datos y el mundo de las
programadores de Java a extensiones como CORBA interfaces.
(Common Object R chitecture), Internet Communications
Engine o OSGi respe Java es orientado a objetos, por ende da solidez a la aplicación evitando
Ver 200804 10
Extreme Guide: Usando Java Java
cortes bruscos del programa y permitiendo continuar de esta manera con tecnológico. Dos semanas más tarde, la versión de Java fue
la aplicación. Java permite Applets, lo que permite montar cualquier publicada.
aplicación con Bases de Datos a través de la red de forma segura y sólida.
1.10. Java y otros lenguajes de pro
1.9. Java e Internet
Tip
Entre Junio y Julio de 1.994, tras una sesión maratónica de tres días entre Lenguaje Paradigma mplementaciones Influido por
John Gaga, James Gosling, Joy Naughton, Wayne Rosing y Eric Schmidt, el
Objetive C,
equipo reorientó la plataforma hacia la web. Sintieron que la llegada del
Orient e, C++,
navegador web Mosaic, propiciaría que internet se convirtiese en un medio Java Numerosas
objeto estático Smaltalk,
interactivo, como el que pensaban era la televisión por cable. Naughton Eiffel
creó entonces un prototipo de navegador, WebRunner, que más tarde sería Débil,
C al Múltiples B
conocido como HotJava14 . estático
Orientado a GNU Compiler,
Ese año renombraron el lenguaje como Java tras descubrir que "Oak" era objetos, Microsof t VC++,
Fuerte, C,
ya una marca comercial registrada para adaptadores de tar jetas gráficas. C++ imperativo, Borland C++Builder,
estático Simula
El término Java fue acuñado en una cafetería frecuentada por algunos de programación Dev-C++,
genérica C-Free
los miembros del equipo. Pero no está claro si es un acrónimo o no,
Java,
aunque algunas fuentes señalan que podría tratarse de las iniciales de
Orientado a Fuerte, Visual C#, C++,
creadores: James Gosling, Arthur Van Hoff, y Andy Bechtolsheim. Ot C#
objetos estático Mono Delphi,
abogan por el siguiente acrónimo, Just Another Vague Acronym Eiffel
acrónimo ambiguo más"). La hipótesis que más fuerza tiene es l Basado en
debe su nombre a un tipo de café disponible en la cafetería c prototipos,
Débil,
pequeño signo que da fuerza a esta teoría es que los 4 p tes (el JavaScript Programación Numerosas Java
dinámico
número mágico) de los archivos .class que ge son en orientada a
hexadecimal, 0xCAFEBABE. objetos
Simula,
Orientado a
Smalltalk Dinámico Multiples Sketchpad,
En Octubre de 1.994, se les hizo una dem de HotJava y la objetos
LISP
plataforma Java a los ejecutivos de Sun. Java o descargarse por
Orientado a
primera vez en 1.994, pero hubo que esperar al 23 de mayo de 1.995, objetos, Fuerte,
durante las conferencias de SunWorld a que vieran la luz pública Java y Lisp Múl tiples
Funcional, dinámico
HotJava, el navegador web. El o fue anunciado por John Declarativo
Gage, el director científico d rosystems. El acto estuvo ABC,
acompañado por una peq ñ onal: el anuncio por parte de CPython, TCL,
Fuerte,
Marc Andreessen, vicepr de Netscape, que Java sería Pitón Multiparadigma Jython, IronPython, Perl,
dinámico
soportado en sus na e Enero del año siguiente, 1.996, Sun PyPy Modula-3,
fundó el grupo emp para que se encargase del desarrollo Smalltalk
Ver 200804 11
Extreme Guide: Usando Java Java
Tipos de
Lenguaje Paradigma Implementaciones Influido por
Datos
AWK,
BASIC-Plus,
C, C++,
PHP Mul tiparadigma Dinámico Múltiples Lisp,
Pascal,
sed,
Unix shell
Imperativo
Pascal Múltiples Algol
(estructurado)
AWK,
BASIC-Plus,
Perl, C, C++,
Perl Mul tiparadigma Dinámico mod_perl, Lisp,
embperl Pascal,
sed,
Unix shell
Orientado a Fuerte, C,
ObjectiveC Numerosas
objetos dinámico Smalltalk
Ver 200804 12
E Extreme Guide: Usando Java Programación en Java
Java es un lenguaje con control fuerte de tipos (Strongly Typed). Esto Una variable es un área moria que tiene un nombre y un tipo
significa que cada variable y cada expresión tienen un tipo que es conocido asociado. El tipo es o bien rimitivo o una referencia.
en el momento de la compilación. El tipo limita los valores que una
variable puede contener, limita las operaciones soportadas sobre esos Es obligato variables antes de usarlas. Para declararlas se
valores y determina el significado de las operaciones. El control fuerte de indica su no de la siguiente forma:
tipos ayuda a detectar errores en tiempo de compilación.
tipo_variable nombre;
En Java existen dos categorías de tipos:
Eje
2.1.1. Tipos primitivos
; // Declaración de un entero
Los tipos primitivos son los que permiten manipular valores numéricos (c letra; // Declaración de un carácter
distintos grados de precisión), caracteres y valores booleanos (verdader boolean flag; // Declaración de un booleano
falso). Los tipos primitivos son:
• El ";" es el separador de sentencias en Java.
boolean Puede contener los valores true o false.
• El símbolo " / / " indica comentarios de línea.
byte Enteros. Tamaño 8-bits. Valores entre -128 y
• En Java las mayúsculas y minúsculas son significativas. No es lo mismo
short Enteros. Tamaño 16-bits. Entre -32 el nombre let ra que Let ra.
int Enteros. Tamaño 32-bits. Entre -21 47. • Todas las palabras reservadas del lenguaje van en minúsculas.
long Enteros. Tamaño 64-bits. Entre -92 854775808 y
9223372036854775807. Se pueden asignar valores a las variables mediante la instrucción de
float Números en coma flotante. Tamaño asignación. Por ejemplo:
double Números en coma flotante. Tamaño 64-bits.
char Caracteres. Tamaño 16 bits Unicode. Desde '\u0000' a '\uffff' i = 5; // la variable i se le asigna el valor 5
inclusive. Esto es desd letra = 'c'; // la variable letra se le asigna el valor 'c'
flag = false; // la variable flag se le asigna el valor false
El tamaño de los tipos de e la implementación de Java.
Son siempre los mismos… variable de tipo entero, por
La declaración y la combinación se pueden combinar en una sola
ejemplo, siempre t independientemente bajo que o cual
expresión:
sistema operativo s el programa.
Ver 200804 13
E Extreme Guide: Usando Java Programación en Java
Ver 200804 14
E Extreme Guide: Usando Java Programación en Java
Tipos Grupo de operadores Operadores double float long int short byt
!= (distinto)
Operadores + (unario, positivo) Se deben tener en cuenta estas co la hora de mirar en qué
numéricos, que - (unario, negativo) tipo de variable guardamos el resul eración; ésta debe ser, al
devuelven un valor + (suma) menos, de una jerarquía mayo jerarquía de la máxima
float o doublé - (resta) variable involucrada en la opera ciertas excepciones a la norma
* (multiplicación) aquí descrita: Java solo de operadores enteros: uno que
/ (división) aplica para operar datos d g, y otro que emplea para operar datos
% (resto) de tipo int . De este modo operemos un byte con un byte, un short
++ (incremento) con un short o un un byte Java empleará para dicha operación el
-- (decremento) operador d int , por lo que el resultado de dicha operación
Booleanos Operadores boléanos == (igual) será un int
!= (distinto)
! (complemento) Para indicar que una constante es de tipo long se debe indicar con una L,
& (AND) po o: 23L. Para indicar que una constante es flotante: 2.3, se debe
| (OR) esc 3F, sino por defecto será double.
^ (XOR)
&& (AND condicional) sible convertir un dato de jerarquía "superior" a uno con jerarquía
| | (OR condicional) or", arriesgándonos a perder información en el cambio. Este tipo de
operación (almacenar el contenido de una variable de jerarquía superior
2.5. Conversión entre tipos numéricos en una de jerarquía inferior) se denomina cast . Ejemplo:
Las normas de conversión entre tipos numéricos son las habitu public class ejemplo1 {
lenguaje de programación: si en una operación se involu datos public static void main(String[] args) {
numéricos de distintos tipos, todos ellos se con to que int i = 9,k;
permite una mayor precisión y rango de represe í: float j = 47.9F;
System.out.println("i: " + i + " j: " + j);
• Si cualquier operando es double todos se co n en double. k = (int)j; // empleo de un cast
• Si cualquier operando es float y no hay gú double todos se System.out.println("j: " + j + " k: " + k);
convertirán a float . j = k; // no necesita cast
• Si cualquier operando es l hay datos reales todos se System.out.println("j: " + j + " k: " + k);
convertirán en long. float m = 2.3F;
// float m = 2.3; daría error al compilar.
Del mismo modo estas no para int , short y byte. System.out.println("m: " + m);
}
La "jerarquía" en la mayor a menor es: }
Ver 200804 15
E Extreme Guide: Usando Java Programación en Java
En Java toda la lógica de programación (algoritmos) está agrupada en El hecho de que un método devuelv r es opcional. En caso de
funciones o métodos. que devuelva un valor, se declara e uelve. Pero si no necesita
ningún valor, se declara como tip el to, la palabra reservada
Un método es: void. Por ejemplo:
En el ejemplo, la cláu se usa para finalizar el método Obsérvese que como la función tampoco devuelve ningún valor, no se
devolviendo el valo (en este caso, por supuesto). asigna a ninguna variable (no hay nada que asignar).
Ver 200804 16
E Extreme Guide: Usando Java Programación en Java
2.8. Clases Los objetos se manipulan con referencias. U encia es una variable
que apunta a un objeto. Las referencias se d gual que las variables
Las clases son el mecanismo por el que se pueden crear nuevos tipos en de tipos primitivos. Los objetos se c ncian) con el operador de
Java. Las clases son el punto central sobre el que giran la mayoría de los instanciación new.
conceptos de la Orientación a Objetos.
Ejemplo:
Una clase es una agrupación de datos y de código que actúa sobre esos
datos, a la que se le da un nombre. Una clase contiene: Punto p;
p = new Punto();
• Datos (se denominan Datos Miembro). Estos pueden ser de tipos
primitivos o referencias. La primera plo declara una referencia (p) que es de tipo
• Métodos (se denominan Métodos Miembro). Punto. La r o apunta a ningún sitio. En la segunda línea se crea
un objeto unto y se hace que la referencia p apunte a él. Se
La sintaxis general para la declaración de una clase es: puede hacer ambas operaciones en la misma expresión:
class Punto {
En el ejemplo, se puede poner:
int x;
int y;
p.x = 1;
}
p.y = 3;
Ver 200804 17
E Extreme Guide: Usando Java Programación en Java
Es importante señalar que en el ejemplo, p no es el objeto, sino que es • Existe un Objeto Punto para cada instan clase Circulo (que se
una referencia que apunta al objeto. crea cuando se crea el objeto Ci l )
Los métodos miembro se declaran dentro de la declaración de la clase, tal 2.10. Conceptos básicos
como se ha visto en el capítulo anterior. Por ejemplo:
• Una Clase es una definición d vo tipo, al que se da un nombre.
class Circulo • Una Clase contiene Da Métodos Miembro que configuran
{ el estado y las operac puede realizar.
Punto centro; // dato miembro. Referencia a un objeto punto • Un Objeto es la mat ón (instanciación) de una clase. Puede
int radio; // dato miembro. Valor primitivo haber tantos O e una Clase como resulte necesario.
• Los Obj e les asigna memoria) con el Operador new.
float superficie() // método miembro • Los Obj anipulan con Referencias.
{ • Una Re es una Variable que apunta a un Objeto.
return 3.14 * radio * radio;
• El acceso a los elementos de un Objeto (Datos o Métodos) se hace con
} // fin del método superficie ador "." (punto): nombre_referencia.miembro
} // fin de la clase Circulo
tructores
El acceso a métodos miembros es igual que el que ya se ha visto para datos
miembro. En el ejemplo: Cuando se crea un objeto (se instancia una clase), es posible definir un
proceso de inicialización que prepare el objeto para ser usado. Esta
Circulo c = new Circulo(); inicialización se lleva a cabo invocando un método especial denominado
c.centro.x = 2; constructor. Esta invocación es implícita y se realiza automáticamente
c.centro.y = 3; cuando se utiliza el operador new. Los constructores tienen algunas
c.radio = 5; características especiales:
float s = c.superficie();
• El nombre del constructor tiene que ser igual al de la clase.
Es importante observar en el ejemplo: • Puede recibir cualquier número de argumentos de cualquier tipo,
como cualquier otro método.
• Los datos miembro pueden ser tanto primitivos como referencias. La • No devuelve ningún valor (en su declaración no se declara ni siquiera
clase Circulo contiene un dato miembro de tipo Punto (que es el de tipo void).
centro del círculo).
• El acceso a los datos miembro centro se hace encadenando El constructor no es un miembro más de una clase. Sólo es invocado
el operador "." en la expresió x que se podría leer como 'el cuando se crea el objeto (con el operador new). No puede invocarse
miembro x del objeto objeto (Circulo) c'. explícitamente en ningún otro momento.
• Aunque el mét d no recibe ningún argumento los
paréntesis son o nguen los datos de los métodos). Continuando con los ejemplos del capítulo anterior, se podría escribir un
Ver 200804 18
E Extreme Guide: Usando Java Programación en Java
class Punto Una clase puede definir varios cons objeto puede inicializarse
{ de varias formas). Para cada inst usa el que coincide en
int x, y; número y tipo de argumentos. Si oincidente se produce un
error en tiempo de compilación.
Punto(int a, int b)
{ Por ejemplo:
x = a;
y = b; class Punto
} {
} int x,
Con este constructor se crearía un objeto de la clase Punto de la siguiente Punto(int a, int b)
forma:
Ver 200804 19
E Extreme Guide: Usando Java Programación en Java
Cuando se declaran varios constructores para una misma clase, estos El acceso a las variables estáticas desde fuera de la clase donde se definen
deben distinguirse en la lista de argumentos, bien en el número, bien en el se a través del nombre de la clase y no del nombre del objeto,
tipo. co e con las variables miembros normales (no estáticas). En el
terior puede escribirse:
Esta característica de definir métodos con el mismo nombre se denomina
sobrecarga y es aplicable a cualquier método miembro de una clase. = Punto.numPuntos;
2.12. Datos estáticos No obstante también es posible acceder a las variables estáticas a través
de una referencia a un objeto de la clase. Un ejemplo de esto lo podremos
Un dato estático es una variable miembro que no se asocia a ver a continuación:
(instancia) de una clase, sino que se asocia a la clase m ay una
copia del dato para cada objeto sino una sola c da por Punto p = new Punto();
todos los objetos de la clase. Por ejemplo: ó
int x = p.numPuntos;
class Punto {
int x, y;
Las variables estáticas de una clase existen, se inicializan y pueden usarse
static int numPuntos = 0;
antes de que se cree ningún objeto de la clase… mantenga esto siempre en
Punto(int a, int b) {
mente.
x = a;
y = b; 2.13. Métodos estáticos
numPuntos++;
} Para los métodos, la idea es la misma que para los datos: los métodos
} estáticos se asocian a una clase, no a una instancia. Veamos esto mediante
Ver 200804 20
E Extreme Guide: Usando Java Programación en Java
static { bloque_codigo }
Dado que los métodos est o a nivel de clase y no a nivel
de objeto (instanc estáticos no pueden acceder a datos
miembros que no se Por ejemplo:
Ver 200804 21
E Extreme Guide: Usando Java Programación en Java
class Punto Las variables miembro son inicializadas auto ente, de la siguiente
{ forma:
int x, y;
static int numPuntos; • Las numéricas a 0.
• Las booleanas a false.
static • Las char al carácter nulo (he l 0).
{ • Las referencias a null
numPuntos = 0;
} Nota: null es un literal qu eferencia nula.
Punto(int a, int b) Las variabl eden inicializarse con valores distintos de los
{ anteriores e n.
x = a;
y = b; Las variables locales no se inicializan automáticamente. Se debe asignarles
numPuntos++; un tes de ser usadas. Si el compilador detecta una variable local
} qu antes de que se le asigne un valor produce un error. Por
Ver 200804 22
E Extreme Guide: Usando Java Programación en Java
2.14.1. Ámbito de las variables porque ya no tienen referencias activas que ten. El recolector de
basura actúa cuando la JVM lo determi e un mecanismo de
El ámbito de una variable es el área del programa donde la variable existe actuación no trivial).
y puede ser utilizada. Fuera de ese ámbito, la variable o bien no existe o
no puede ser usada (que viene a ser lo mismo). En ocasiones es necesario realiz asociada a la acción de
liberar la memoria asignada al como por ejemplo liberar otros
El ámbito de una variable miembro (que pertenece a un objeto) es el de la recursos del sistema, com de ficheros). Esto puede hacerse
usabilidad de un objeto. Un objeto es utilizable desde el momento en que codificando un método fin debe declararse como:
se crea y mientras existe una referencia que apunte a él.
protected void () throws Throwable
Cuando la última referencia que lo apunta sale de su ámbito el objeto {
queda 'perdido' y el espacio de memoria ocupado por el objeto puede ser }
recuperado por la JVM cuando lo considere oportuno. Esta recuperación de
espacio en memoria se denomina 'recogida de basura'. El método f inalize es invocando por la JVM antes de liberar la memoria por
el r de basura, o antes de terminar la JVM. No existe un momento
El ámbito de las variables locales es el bloque de código donde se co que las áreas de memoria son liberadas, sino que lo determina
declaran. Fuera de ese bloque la variable es desconocida. Ejemplo: mento la JVM en función de sus necesidades de espacio.
{ Sobrecarga de métodos
int x; // empieza el ámbito de x (x es conocida y utilizab
{ Una misma clase puede tener varios métodos con el mismo nombre
int q; // empieza el ámbito de q. x sigue siendo c siempre que se diferencien en el tipo o número de los argumentos. Cuando
... esto sucede se dice que el método está sobrecargado. Por ejemplo, una
} // finaliza el ámbito de q (termina el bloqu go) misma clase podría tener los métodos:
... // q ya no es utilizable
} // finaliza el ámbito de x int metodoSobrecargado()
{
2.15. Recogida de basura ...
}
Cuando ya no se necesita un objeto simplemente puede dejar de int metodoSobrecargado(int x)
referenciarse. No existe una oper ió lí ita para 'destruir' un objeto o {
liberar el área de memoria usada ...
}
La liberación de memor colector de basura (garbage
collector), que es una fu ecolector revisa toda el área Sin embargo no se puede sobrecargar cambiando sólo el tipo del valor
de memoria del pr ina que objetos pueden ser borrados devuelto. Por ejemplo:
Ver 200804 23
E Extreme Guide: Usando Java Programación en Java
Ver 200804 25
E Extreme Guide: Usando Java Programación en Java
2.21.2. Salida por pantalla en Java 2.21.4. Salida por archivo en Java
Se usan los métodos print() y println() de System.out para imprimir Es habitual introducir un objeto File BufferedWriter que a su
cadenas de caracteres; suponen la existencia de un método toString() para vez se introduce en un PrintWriter étodos print() y println()
convertir objetos en cadenas de caracteres. para escribir en la salida:
"\n" avanza a una nueva línea; print ln() también produce un salto de línea PrintWriter fsal = new Prin feredWriter(
después de producir la salida.
ew FileWriter(nombreFich)));
Ver 200804 26
E Extreme Guide: Usando Java Programación en Java
2.21.8. Clases comunes de Entrada/Salida Para abrir un FileInputSt ream sobre un fichero, se le da al constructor un
St ring o un objeto File:
Además de la entrada por teclado y salida ecesita
entrada / salida por fichero, como son: FileInpu DataInputSt ream, FileInputStream miFicheroSt;
FileOutputSt ream, DataOutputSt ream. miFicheroSt = new FileInputStream("/etc/kk");
También existen otras clases, para aplicaciones más específicas, que no También se puede utilizar:
vamos a tratar en la presente guía por ser de un uso muy concreto y
particular, como lo son las clases , si usted lo desea, siéntase File miFichero;
libre para investigar sus usos… no malo saber al menos lo básico FileInputStream miFicheroSt;
de estas clases ream, St reamTokenizer,
Buf feredInputSt ream, m, PushBackInputSt ream, miFichero = new File("/etc/kk");
Buf feredOutputSt re miFicheroSt = new FileInputStream(miFichero);
Ver 200804 27
E Extreme Guide: Usando Java Programación en Java
Ver 200804 28
E Extreme Guide: Usando Java Programación en Java
La contrapartida necesaria de la lectura de datos es la escritura de datos. Una vez abierto el fichero, se pued es de datos utilizando el
Como con los Streams de entrada, las clases de salida están ordenadas método wri te(). Como con el méto los streams de entrada,
jerárquicamente: tenemos tres posibilidades:
• Cierre utputStream
Examinaremos las clases FileOutputSt ream y DataOutputSt ream para
complementar los streams de entrada que se han visto.
Ce stream de salida es similar a cerrar streams de entrada. Se
pu ar el método explícito:
• Objetos FileOutputStream
heroSt.close();
Los objetos FileOutputSt ream son útiles para la escritura de ficheros d
texto. Como con los ficheros de entrada, primero se necesita abrir
O, se puede dejar que el sistema cierre el fichero cuando se recicle el
fichero para luego escribir en él.
objeto (en este caso), miFicheroSt .
• Apertura de un FileOutputStream
Ejemplo: Almacenamiento de Información. Este programa (que podremos
llamar Telefonos. java), pregunta al usuario una lista de nombres y
Para abrir un objeto FileOutputSt ream, se tien idades
números de teléfono. Cada nombre y número se añade a un fichero situado
que para abrir un fichero stream de entrada. tor un
en una localización fi ja. Para indicar que se ha introducido toda la lista, el
St ring o un objeto File.
usuario especifica "Fin" ante la solicitud de entrada del nombre. Una vez
que el usuario ha terminado de teclear la lista, el programa creará un
FileOutputStream miFicheroSt;
miFicheroSt = new FileOutputStream("/etc/kk"); fichero de salida que se mostrará en pantalla o se imprimirá. El código
fuente del programa es el siguiente:
Como con los streams de entrada, puede utilizar:
import java.io.*;
File miFichero;
FileOutputStream miFi class Telefonos {
static FileOutputStream fos;
miFichero = new ;
miFicheroSt = ne eam(miFichero);
Ver 200804 29
E Extreme Guide: Usando Java Programación en Java
public static final int longLinea = 81; while ((i < (longLinea - 1)) &&
((b = System.in.read()) != '\n')) e)b;
public static void main(String args[]) throws IOException { linea[i] = (byte)0;
byte t fno[] = new byte[longLinea]; }
byte nombre[] = new byte[longLinea]; }
Ver 200804 31
E Extreme Guide: Usando Java Programación en Java
expresion_booleana es una expresión que se evalua como true o false (es expresion_booleana es una expresión que se evalúa antes de la ejecución
decir, de tipo booleano). Si el re e la ejecución bifurca a la de la sentencia, o bloque de sentencias, para cada iteración. La sentencia
sentencia que sigue al i f . En caso se bifurca a la sentencia que o bloque de sentencias se ejecutan mientras que la expresion_booleana se
sigue al else. evalúe como cierta. Es opcional.
Los corchetes en rior indican que la clausula else es step es una sentencia que se ejecuta cada vez que se llega al final de la
opcional. sentencia o bloque de sentencias. Es opcional.
Ver 200804 32
E Extreme Guide: Usando Java Programación en Java
Una utilización clásica de un bucle de tipo for se muestra a continuación expresión entera de la clausula swi tch. Se e sta que se encuentra
para evaluar un contador un número fi jo de veces: una sentencia break o se llega al final del s ningún valor de case
coincide con el resultado de la ex a, se ejecuta el bloque
for (int i = 1; i <= 10; i++) sentencia; defaul t (si está presente). defaul t y cionales.
Obsérvese que se pueden omitir las clausulas pero no los separadores (;). va ser del tipo declarado en el método. valor es opcional. No debe
ex do el método se declara de tipo void. En este caso, la cláusula
2.25. Evaluación múltiple nal del método es opcional, pero puede usarse para devolver el
ol al llamador en cualquier momento.
El formato es:
2.27. Expresiones
switch (expresion_entera) {
case valor_entero: La mayor parte del trabajo en un programa se hace mediante la evaluación
sentencia; de expresiones, bien por sus efectos tales como asignaciones a variables,
break; bien por sus valores, que pueden ser usados como argumentos u operandos
case valor_entero: en expresiones mayores, o afectar a la secuencia de ejecución de
sentencia; instrucciones.
break;
... Cuando se evalúa una expresión en un programa, el resultado puede
default: denotar una de tres cosas:
sentencia;
} • Una variable (si por ejemplo es una asignación).
• Un valor (por ejemplo una expresión aritmética, booleana, una
llamada a un método, etc.)
En el swi tch la expresión que se e una expresión booleana como
• Nada (por ejemplo una llamada a un método declarado void).
en el i f-else, sino una exp
Si la expresión denota una variable o un valor, entonces la expresión tiene
Se ejecuta el bloq alor coincida con el resultado de la
siempre un tipo conocido en el momento de la compilación. Las reglas
Ver 200804 33
E Extreme Guide: Usando Java Programación en Java
para determinar el tipo de la expresión varían dependiendo de la forma de En el momento de la creación del array s siona el mismo y se
las expresiones pero resultan bastante naturales. Por ejemplo, en una reserva la memoria necesaria.
expresión aritmética con operandos de diversas precisiones el resultado es
de un tipo tal que no se produzca pérdida de información, realizándose También puede crearse de forma e ando valores a todos los
internamente las conversiones necesarias. El análisis pormenorizado de las elementos del array en el mom aración, de la siguiente
conversiones de tipos, evaluaciones de expresiones, etc., queda fuera del forma:
ámbito de estos apuntes. En general puede decirse que es bastante similar
a otros lenguajes, en particular C, teniendo en cuenta la característica int[ ] a = {5, 3, 2};
primordial de Java de tratarse de un lenguaje con control fuerte de tipos.
El acceso a los ele el array se realiza indicando entre corchetes el
2.28. Arrays elemento d e desea, teniendo en cuenta que siempre el
primer elem a ay es el índice 0. En este ejemplo los índices del
Un array es una colección ordenada de elementos del mismo tipo, que son array de tr ntos son 0, 1 y 2. Si se intenta usar un índice que está
accesibles a través de un índice. Un array puede contener datos primitivos fuera del rango válido para ese array se produce un error (en realidad una
o referencias a objetos. exc En el ejemplo anterior se produce esta excepción si el índice
es ue 0 o mayor que 2.
Los arrays se declaran de la siguiente manera:
ede conocer el número de elementos de un array usando la variable
[modificadores] tipo_variable[ ] nombre; g h. En el ejemplo a.length contiene el valor 3.
Por ejemplo: Un array, como cualquier otra referencia, puede formar parte de la lista
de parámetros o constituir el valor de retorno de un método. En ambos
int[ ] a; casos se indica que se trata de un array con los corchetes que siguen al
Punto[ ] p; tipo. Por ejemplo:
Ver 200804 34
E Extreme Guide: Usando Java Programación en Java
Es posible declarar arrays de más de una dimensión. Los conceptos son los Un St ring puede crearse como se c otro objeto de cualquier
mismos que para los arrays monodimensionales (o mejor conocido como clase; mediante el operador new:
vectores).
String s = new String("Esto cadena de caracteres");
Por ejemplo:
Obsérvese que los litera adena de caracteres se indican entre
int[ ][ ] a = { {1, 2}, {3, 4}, {5, 6} }; comillas dobles (") a dif e los caracteres, que utilizan comillas
int x = a[1][0]; // contiene 3 simples (').
int y = a[2][1]; // contiene 6
Sin embarg es posible crear un St ring directamente, sin usar el
Se pueden recorrer los elementos de un array multidimensional, de la operador n endo una asignación simple (como si se tratara de un
siguiente forma: dato primitivo):
La clase St ring forma pac age java.lang y se describe da como resultado el St ring "ConcatenarCadenas".
completamente en del API del JDK.
Ver 200804 35
E Extreme Guide: Usando Java Programación en Java
Ver 200804 36
Extreme Guide: Usando Java Modificadores
Si alguien, desde una clase externa a Punto, intenta lo siguiente, obtendrá complementan a los otros dos. El primero mportante cuando se
un error del compilador: utilizan relaciones de herencia entre las c el segundo establece
relaciones de "confianza" entre cla ntro del mismo package.
... Así, la pertenencia de las clases a u age es algo más que una
Punto p = new Punto(0, 0); clasificación de clases por cuestio
p.x = 5;
... Cuando se diseñan clases pararse a pensar en términos de
quien debe tener acceso é cosas son parte de la implantación y
3.2. Modificadores de acceso para clases deberían ocultarse (y en do), y que cosas forman parte de la
interface y debería blicas.
Las clases en sí mismas pueden declararse:
En anteriores ejemplos se ha visto que una clase tiene datos miembros que public void aumentar int porcentaje) {
son instancias de otras clases. Por ejemplo:
sueldo += (int)(su aumento / 100);
}
class Circulo {
Punto centro;
public g() {
int radio;
return empleado " + numEmpleado +
" Nombre: " + nombre +
float superficie() {
" Sueldo: " + sueldo;
return 3.14 * radio * radio;
}
}
Ver 200804 39
Extreme Guide: Usando Java Herencia, Clases y Objetos
Atención: Un Ejecut ivo ES un Empleado, pero lo contrario no es cierto. Si 4.2.1. Inicialización de clases derivadas
escribimos:
Cuando se crea un objeto de una clase derivada se crea implícitamente un
Empleado curri = new Emplead Comex Plota", 100); objeto de la clase base que se inicializa con su constructor
curri.asignarPresupuesto(500 or correspondiente. Si en la creación del objeto se usa el constructor no-args,
entonces se produce una llamada implícita al constructor no-args para la
clase base. Pero si se usan otros constructores es necesario invocarlos
se producirá un err , pues en la clase Empleado no existe
explícitamente.
ningún método llam puesto.
Ver 200804 40
Extreme Guide: Usando Java Herencia, Clases y Objetos
En nuestro ejemplo dado que la clase método define un constructor, class Empleado
necesitaremos también un constructor para la clase Ejecut ivo, que {
podemos completar así: protected int sueldo;
...
class Ejecutivo extends Empleado }
{
int presupuesto; Entonces, desde la clase puede acceder al dato miembro
sueldo, mientras que si se private no.
Ejecutivo(String n, int s) {
super(n, s); 4.2.3. Up-casting -casting
}
Siguiendo jemplo de los apartados anteriores, dado que un
void asignarPresupuesto(int p) { Ejecut ivo E leado se puede escribir la sentencia:
presupuesto = p;
} Em mp = new Ejecutivo("Máximo Dueño" , 2000);
Cuando se realiza este tipo de operaciones, hay que tener cuidado porque
Obsérvese que el constructor de Ejecut ivo invoca nte al para la referencia emp no existen los miembros de la clase Ejecut ivo,
constructor de Empleado mediante super(argum esultar aunque la referencia apunte a un objeto de este tipo. Así, las expresiones:
necesaria la invocación al constructor de la sup rimera
sentencia del constructor de la subclase. emp.aumentarSueldo(3); // ok. aumentarSueldo es de Empleado
emp.asignarPresupuesto(1500); // error de compilación
4.2.2. El modificador de acceso protected
En la primera expresión no hay error porque el método aumentarSueldo
El modificador de acceso protecte mbinación de los accesos que está definido en la clase Empleado. En la segunda expresión se produce un
proporcionan los modificadores p vate. protected proporciona error de compilación porque el método asignarPresupuesto no existe para
acceso público para las clases de ceso privado (prohibido) para la clase Empleado.
el resto de clases.
Por último, la situación para el método toSt ring es algo más compleja. Si
Por ejemplo, si en l definimos: se invoca el método:
Ver 200804 41
Extreme Guide: Usando Java Herencia, Clases y Objetos
El método que resultará llamado es el de la clase Ejecut ivo. toSt ring En Java existe una clase base que la jerarquía y de la cual
existe tanto para Empleado como para Ejecut ivo, por lo que el compilador heredan todas, aunque no se diga te mediante la clausula
Java no determina en el momento de la compilación que método va a extends. Esta clase base se lla ontiene algunos métodos
usarse. Sintácticamente la expresión es correcta. El compilador retrasa la básicos. La mayor parte de e hacen nada, pero pueden ser
decisión de invocar a un método o a otro al momento de la ejecución. Esta redefinidos por las clase implementar comportamientos
técnica se conoce con el nombre de dinamic binding o late binding. En el específicos.
momento de la ejecución la JVM comprueba el contenido de la referencia
emp. Si apunta a un objeto de la clase Empleado invocará al método Los métodos decla la clase Object son los siguientes:
toSt ring de esta clase. Si apunta a un objeto Ejecut ivo invocará por el
contrario al método toSt ring de Ejecut ivo. public class
public final C ass() {...}
public String toSt g() {...}
4.2.4. Operador cast
pub an equals(Object obj) {...}
pub shCode() {...}
Si se desea acceder a los métodos de la clase derivada teniendo una pro ject clone() throws CloneNotSupportedException {...}
referencia de una clase base, como en el ejemplo del apartado anterior, oid wait() throws IllegalMonitorStateException,
hay que convertir explícitamente la referencia de un tipo a otro. Esto se InterruptedException {...}
hace con el operador de cast de la siguiente forma: p final void wait(long millis) throws IllegalMonitorStateException,
InterruptedException {...}
Empleado emp = new Ejecutivo("Máximo Dueño", 2000); public final void wait(long millis, int nanos) throws IllegalMonitorStateException,
InterruptedException { ...}
Ejecutivo ej = (Ejecutivo)emp; / / se convierte la referencia de tipo
public final void notify() throws IllegalMonitorStateException {...}
ej .asignarPresupuesto(1500); public final void notifyAll() throws IllegalMonitorStateException {...}
protected void finalize() throws Throwable {...}
La expresión de la segunda línea convierte la r pleado
asignándola a una referencia de tipo Ejecut el compilador es Las cláusulas f inal y throws se verán en otros apartados más delante de
correcto porque Ejecut ivo es una clase derivad pleado. En tiempo esta guía. Como puede verse, toSt ring es un método de la clase Object ,
de ejecución la JVM convertirá la referencia si mente emp apunta que puede ser redefinido en las clases derivadas (mediante el uso de
a un objeto de la clase Ejecut ivo. Si se intenta: polimorfismo). Los métodos wai t , not ify y not i fyAll tienen que ver con la
gestión de los hilos (threads) de la JVM. El método f inalize ya se ha
Empleado emp = new Empleado( das", 2000); comentado, al hablar del recolector de basura, en un apartado anterior de
Ejecutivo ej = (Ejecutivo)em esta misma guía.
Para que un método lance una excepción, se debe declarar el tipo de ver una descripción completa de la clase Exc
excepción que lanza con la cláusula throws en su declaración. Debe lanzar
la excepción, en el punto del código adecuado con la sentencia throw. De esta forma se pueden construir m eneren excepciones.
void nuevoEmpleado(String nombre, int sueldo) throws CapacidadEmpresaExcedida Con la primera versión voEmpleado (sin excepción) se
{ invocaría este método de te forma:
if (totalEmpleados < listaEmpleados.length)
Empresa em = ne a("La Mundial");
{
em.nuevoEm Primero", 500);
listaEmpleados[ totalEmpleados++] = new Empleado(nombre, sueldo);
} else throw new CapacidadEmpresaExcedida(nombre); Si se utili e formato en el segundo caso (con excepción) el
} compilador produciría un error indicando que no se ha capturado la
exc erificada lanzada por el método nuevoEmpleado. Para capturar
Además, necesitamos escribir la clase CapacidadEmpresaExcedida. Sería la n es utiliza la construcción t ry / catch, de la siguiente forma:
algo así:
sa em = new Empresa("La Mundial");
public class CapacidadEmpresaExcedida extends Exception
{ Try
CapacidadEmpresaExcedida(String nombre) {
{ em.nuevoEmpleado("Adán Primero", 500);
super("No es posible añadir el empleado " + nombre }
} catch (CapacidadEmpresaExcedida exc)
. . . {
} System.out.println(exc.toString());
System.exit(1);
}
La sentencia throw, en este ejemplo, cre jeto de la clase
CapacidadEmpresaExcedida. El constructor tiene un argumento (el nombre
del empleado). El constructor simplemente llama al constructor de la • Se encierra el código que puede lanzar la excepción en un bloque t ry
superclase pasándole como argum o explicativo del error (y el / catch.
nombre del empleado que no se h adir). • A continuación del catch se indica que tipo de excepción se va a
capturar.
La clase de la excepción s métodos o guardar datos de • Después del catch se escribe el código que se ejecutará si se lanza la
depuración que se ortunos. El único requisito es que excepción.
extienda de la clas sultar la documentación del API para • Si no se lanza la excepción, el bloque catch no se ejecuta.
Ver 200804 45
Extreme Guide: Usando Java Excepciones
El formato general del bloque t ry / catch es: excepción como si no. Puede servir para limp estado interno de los
objetos afectados o para liberar recurso os (descriptores de
try { fichero, por ejemplo). La sintaxis gl e t ry / catch / finally es:
. . .
} catch (Clase_Excepcion nombre) { try {
. . . . . .
} catch (Clase_Excepcion nombre) { } catch (Clase_Excepci
. . . . . .
} } catch (Clase_Excepci re) {
. . . . . .
} finally
Obsérvese que se puede capturar más de un tipo de excepción declarando . . .
más de una sentencia catch. También se puede capturar una excepción }
genérica (clase Except ion) que engloba a todas las demás. . . .
En ocasiones es muy conveniente poder tratar los datos primitivos (int , • Byte para byte.
boolean, etc.) como objetos. Por ejemplo, los contenedores definidos por • Shor t para short .
el API en el package java.ut il (Arrays dinámicos, listas enlazadas, • Integer para int .
colecciones, conjuntos, etc.), utilizan como unidad de almacenamiento la • Long para long.
clase Object . Dado que Object es la raíz de toda la jerarquía de objetos en • Boolean para b
Java, estos contenedores pueden almacenar cualquier tipo de objetos. • Float p
Pero los datos primitivos no son objetos, con lo que quedan en principio • Double
excluidos de estas posibilidades. • Charac har.
Para resolver esta situación, el API de Java incorpora las clases envoltorio Ob que las clases envoltorio tienen siempre la primera letra en
(wrapper class), que no son más que dotar a los datos primitivos con un ma
envoltorio que permita tratarlos como objetos. Por ejemplo podríamos
definir una clase envoltorio para los enteros, de forma bastante sencilla, ases envoltura se usan como cualquier otra, como por ejemplo:
con:
Integer i = new Integer(5);
public class Entero { int x = i.intValue();
private int valor;
Hay que tener en cuenta que las operaciones aritméticas habituales (suma,
Entero(int valor) {
resta, multiplicación, ...) están definidas solo para los datos primitivos por
this.valor = valor;
lo que las clases envoltura no sirven para este fin.
}
Ver 200804 47
Extreme Guide: Usando Java Clases envoltorios (wrappers)
Método Descripción
Integer(int valor)
Constructores a partir de int y String.
Integer(String valor)
int intValue()
Devuelve el valor en distintos formatos:
byte byteValue()
int , long, float, etc.
float floatValue()
Devuelve t rue si el objeto con el que se
boolean equals(Object obj) compara es un Integer y su valor es el
mismo.
Devuelve un Integer a partir de una
static Integer getInteger(String s)
cadena de caracteres. Estático.
Devuelve un int a partir de un String.
static int parseInt(String s)
Estático.
static String toBinaryString(int i)
Convierte un entero a su representación
static String toOctalString(int i)
en String en binario, octal, hexadecimal,
static String toHexString(int i)
static String toString(int i) etc. Estáticos.
Convierte un entero a su representación
String toString()
en String.
Devuelve un Integer a partir de un St rin
static Integer valueOf(String s)
Estático.
Ver 200804 48
Extreme Guide: Usando Java Comentarios y Convenciones
Comentarios y Convenciones
7. Comentarios y convenciones de nombres
/* comienzo de comentario
continua comentario
fin de comentario */
Ver 200804 49
Extreme Guide: Usando Java Packages & Imports
declara que la clase miClase perte kage miPackage. Supongamos que definimos una clase de nombre miClase que pertenece a
un package de nombre misPackages.Geomet ria.Base. Cuando la JVM vaya a
La cláusula package es op za, las clases declaradas en el cargar en memoria miClase buscará el módulo ejecutable (de nombre
archivo fuente no pert package concreto, sino que miClase.class) en un directorio en la ruta de acceso
pertenecen a un pa sin nombre. misPackages / Geomet ria / Base. Está ruta deberá existir y estar accesible a
la JVM para que encuentre las clases.
Ver 200804 50
Extreme Guide: Usando Java Packages & Imports
Si una clase no pertenece a ningún package (no existe clausula package), compilador, es necesario que esté definida e mo package.
se asume que pertenece a un package por defecto sin nombre, y la JVM
buscará el archivo .class en el directorio actual. Si esto no es así, es necesario hacer spacio de nombres donde
está definida la clase Punto a nue ase. Esto se hace con la
Para que una clase pueda ser usada fuera del package donde se definió clausula impor t . Supongamos que stuviera definida de esta
debe ser declarada con el modificador de acceso public, de la siguiente forma:
forma:
package GeometriaBase;
package GeometriaBase;
class Punto
public class Punto {
{ int x,
int x, y; }
}
En para usar la clase Punto en nuestra clase Circulo deberíamos
Si una clase no se declara public sólo puede ser usada por clases que po
pertenezcan al mismo package.
ge GeometriaAmpliada;
8.4. Imports
import GeometriaBase.*;
Cuando se referencia cualquier clase dentro de otra se asum
indica otra cosa, que ésta otra está declarada en el mismo pa class Circulo
ejemplo: {
Punto centro;
package Geometria; ...
... }
class Circulo
{ Con la cláusula impor t Geomet riaBase.*; se hacen accesibles todos los
Punto centro; nombres (todas las clases) declaradas en el package GeometriaBase. Si
... sólo se quisiera tener accesible la clase Punto se podría declarar:
}
import GeometriaBase.Punto;
En esta declaración definimos la ulo perteneciente al package
Geomet ria. Esta clase us compilador y la JVM asumen También es posible hacer accesibles los nombres de un package sin usar la
que Punto pertene t ackage Geomet ria, y tal como está clausula impor t , calificando completamente los nombres de aquellas
hecha la definición e Punto sea accesible (conocida) por el clases pertenecientes a otros packages. Por ejemplo:
Ver 200804 51
Extreme Guide: Usando Java Packages & Imports
package GeometriaAmpliada;
class Circulo {
GeometriaBase.Punto centro;
...
}
Ver 200804 52
Extreme Guide: Usando Java Compilación y ejecución usando el JDK
package Programas.Ejemplo1; plo se utiliza la clase del API de Java System. Sin embargo el
ama no tiene ningún import . No obstante el compilador no detecta
class HolaMundo { n error y genera el código ejecutable directamente. Esto se debe a
public static void main(String[] args) { que la clase System está definida en el package java.lang, que es el único
System.out.println("Hola a todos"); del que no es necesario hacer el impor t , que es hecho implícitamente por
} el compilador. Para cualquier clase del API, definida fuera de este package
} es necesario hacer el import correspondiente.
Guardamos el fichero fuente con nombre Hola rpeta, PASO 3: Ejecutar el programa. Para esto, desde la ventana DOS,
por ejemplo: C:\ApuntesJava\Programas\Ejemp escribiremos:
PASO 2: Abrimos una ventana DOS y en ella esc o siguiente: C:\ApuntesJava>java Programas.Ejemplo1.HolaMundo
C:\>cd C:\ApuntesJava Se cargará la JVM, cargará la clase HolaMundo y llamará a su método main
C:\ApuntesJava>javac Program \Ej l 1\HolaMundo.java que producirá en la ventana DOS la salida:
Ver 200804 53
Extreme Guide: Usando Java Compilación y ejecución usando el JDK
Se puede indicar a la JVM que busque las clases en rutas alternativas al • Sistema operativo Windows 95.
directorio actual. Esto se hace con el parámetro -classpath • 16 MB de memoria RAM.
(abreviadamente -cp) en la línea de comandos. Por ejemplo si el directorio • 50 MB disponibles en el disco
actual es otro, podemos invocar el programa de ejemplo de la forma:
Si se posee un computado terísticas se deben instalar los
C:\Windows>java -cp C:\ApuntesJava Programas.Ejemplo1.HolaMundo siguientes componentes:
Lo habitual es tener uno o varios packages q artan un esquema Por último, se recomienda agregar la siguiente línea al archivo
jerárquico de directorios en función de nuestra ades (packages por c:\autoexec.bat:
aplicaciones, temas, etc.)
set JAVA_COMPILER=NONE
Es posible definir más de una clas hivo fuente, pero sólo una de
ellas podrá ser declarada public podrá ser utilizada fuera del Esto hará que Java consuma menos memoria y hará más fácil la búsqueda
package donde se define). Todas ases declaradas en el archivo de errores en sus programas. Para que las modificaciones hechas en
fuente serán internas a una clase public entonces, c:\autoexec.bat tengan validez, se debe reiniciar el computador.
obligatoriamente, el ente tiene que coincidir con el de la
clase declarada com
Ver 200804 54
Extreme Guide: Usando Java Compilación y ejecución usando JCreator
• Hacemos clic en el botón de Inicio, en Windows. • Si cuando JCre nicia y, por defecto, carga el último proyecto,
lo que tivar el menú File y una vez escogida dicha
• Ubicamos, dentro del menú Programas, el ítem denominado JCreator opción, g n submenú, del cual escogeremos la opción que
Pro. dice Cl legado a este punto, lo que JCreator hará será cerrar
todas las ventanas que tiene abiertas del lado derecho, y dejará, las
• Al abrir dicho menú se abrirá otro submenú, en el cual debemos o izquierdo, inactivas.
escoger de nuevo la opción JCreator. Al momento de escoger dicha
opción aparecerá en pantalla un splash de la aplicación. Paciencia, nuación, volvemos a activar el menú File, y de él escogeremos
deberemos esperar unos momentos hasta que se cargue por completo. hora la opción New. En este punto le estaremos diciendo a JCreator
Esto lo sabremos cuando en la pantalla aparece algo como: ue queremos crear algo nuevo, pero aún no le hemos dicho qué.
Ver 200804 55
Extreme Guide: Usando Java Compilación y ejecución usando JCreator
• De todos los "dibuj itos" (que se denominan iconos), escogeremos el que tenga su nuevo proyecto en la caja de te derecha de Name. En
debajo de él indica Empty Project (que en la figura anterior se caso de que quiera cambiar la carpeta e por defecto JCreator
muestra de tercero de izquierda a derecha). En este punto ya JCreator creará su proyecto, deberá ind ndo el botón con los tres
conoce que lo que queremos hacer es crear un nuevo proyecto vacío. puntitos a la derecha de la ven on tres, en el cual en el
primero iría el nombre de la su proyecto. En los dos
NOTA: La diferencia de una aplicación en Modo Consola con una siguientes podría dejarlo igua nterior, pero se aconseja que en
estándar, denominada Modo Windows, radica en que la el segundo coloque e colocó en el primero pero
primera será una aplicación o programa en el cual solo agregándole una sub denominada source, y en el tercero
tendremos una interface con el usuario de puro texto, y el proceder como en el s ero cambiando source por classes. Todo
modo Windows son aquellos programas en los cuales, como el esto es por la razón de tener el proyecto organizado. Esto es,
mismo JCreator, podremos hacer uso de dibujos, gráficos, en la es donde usted creará los archivos de su
ventanas a colores, manejo del ratón, botones, cajas de program eta classes es en donde el compilador de Java
texto, etc. creará camente los archivos de bytecode necesarios para
ejecutar su programa (estos archivos son con extensión class, los
en cualquier momento usted podrá borrar cuando quiera, ya
• Haga doble clic sobre el icono que se menciona en el apartado anterior
generados por Java cuando usted compila el proyecto). Y en la
(o pulse el botón Next). Al hacerlo, dicha ventana cambiará por una
raíz sólo se encontrarán los archivos que JCreator creará para
parecida a la siguiente figura.
s configuraciones de su proyecto.
• Ahora pulsaremos de nuevo el botón Finish y estaremos viendo la lo que queremos es trabajar con clases namos la opción que
siguiente pantalla: indica New Class.
nuestro código, a compilar un programa, depurar algún error de tipo léxico • Ahora escribimos nuestro código, el c sistirá en utilizar el
y finalmente a ejecutarlo. Para esto, prosigamos en donde quedamos en el método println de la clase táti out , que, como ya
apartado anterior) y haremos lo siguiente: sabemos, es una de las funci permite escribir en el
monitor (la línea de cód bir será algo como:
• Ubiquemos el cursor de edición (se verá sobre el editor como una línea System.out.println("Ho );). Como argumento
semigruesa, de manera vertical y en constante parpadeo) dentro del utilizaremos el literal de cad Mundo!!!", quedando algo como:
cuerpo de la clase recién creada, para a continuación crear nuestro
método principal (que como ya debemos saber, se deberá llamar
main).
Ver 200804 58
Extreme Guide: Usando Java Compilación y ejecución usando JCreator
• Como eso es lo único que queremos que haga el programa, lo la línea viene siendo el cursor de la conso
dejaremos así y procederemos a compilarlo. Para esto deberemos
seleccionar del menú principal la opción Build y de allí, cuando se abra 10.3. Hicimos algo… ¿lo perderemo
el submenú, seleccionar el ítem Compile Project (o pulsar la tecla F7).
En caso de existir errores sintácticos y / o léxicos aparecerá una Bien, ahora que ya hemos termi mer programa, podremos
ventana debajo del editor en la cual nos indicará cuántos de ellos hay proceder a guardarlo. Esto signi o estaremos archivando en algún
(ver figura anterior). dispositivo de almacenam or ejemplo, el disco duro, un
disket te, un pendrive, etc o significa que para guardar un proyecto
• Como vemos, no hay errores, ya que nos muestra un mensaje que nos se deberá compilar y e primero. Esto lo podremos hacer en
dice que el proceso de compilación fue completado. cualquier momen ras estemos desarrollando el programa. De
hecho, se s o menos cada tres minutos se guarde lo que se
• Una vez que no tengamos errores en nuestro programa, podremos lleve hecho esguardar la información y evitar el peligro de
ejecutarlo. Para esto seleccionamos en el menú la opción Build y en perderla en una falla eléctrica, o que apaguemos el computador
ella el ítem Execute Project (o pulsamos la tecla F5). Al hacerlo, sin darnos cuenta, etc.
JCreator por defecto tratará de compilar de nuevo el programa,
verificando que no haya habido cambios desde la última vez que se Pa lo que debemos hacer es seleccionar del menú principal la
compiló hasta ese momento. Al no haber errores, pasará a ejecutar el y de allí el ítem Save All.
programita, dando como salida la siguiente pantalla:
ez que hayamos guardado todo, podremos sin cerrar JCreator sin
peligro de pérdida de nuestro código. Para esto seleccionaremos la opción
File del menú y a continuación el ítem Exi t . En caso de que tengamos
algún proyecto abierto y modificado, JCreator se dará cuenta de ello y nos
avisará, antes de cerrarse, de dicha condición, para lo cual deberemos
responderle ante un aviso que él nos hará mediante una ventana
emergente, si lo que queremos hacer es: guardar los archivos modificados
antes de que JCreator se cierre, o que se cierre perdiendo con ello
cualquier cambio que hayamos hecho o cancelar la acción y quedarnos con
el JCreator abierto sin cerrase.
Ahora bien, si alguna vez queremos volver a abrir nuestro proyecto, lo que
debemos hacer será iniciar el JCreator, y a continuación seleccionar desde
el menú principal la opción File y luego el ítem Open Workspace. Al hacer
esto se abrirá un ventana de diálogo en la cual nos pide que le indiquemos
donde y cuál es el archivo del proyecto que queremos abrir. Ubicaremos
• Como vemos, aparece el fondo negro (consola) y en
entonces nuestro proyecto y a continuación le damos al botón Abrir. Listo,
ella la frase "Hola Mu e ue o que nosotros escribimos como
ya tenemos el proyecto listo para ser modificado una vez más.
argumento en l La línea o raya horizontal al final de
Ver 200804 59
Extreme Guide: Usando Java Compilación y ejecución usando JCreator
Ver 200804 60
Extreme Guide: Usando Java Referencias
para combinar el control a bajo nivel de lenguajes como C y la velocidad pequeño programa que es utilizado en una HTML y representado
de programación de lenguajes como Visual Basic. por una pequeña pantalla gráfica dentro de
9
J# es un lenguaje transicional para programadores del lenguaje de Por otra parte, la diferencia entre JAVA y un applet radica
programación Java y del lenguaje J++ de Microsof t , creado con la en cómo se ejecutan. Para ca i ón JAVA se utiliza el
intención de que ambos puedan usar sus conocimientos actuales para intérprete de JAVA (pcGRASP urn University, Visual J++ de
crear aplicaciones en la plataforma .NET de Microsof t . J# se supone Microsof t , Forte de Sun d En cambio, un appl et se puede
compatible con Java, tanto a nivel código fuente, como binario. cargar y ejecutar desde c expl orador que soporte JAVA (Netscape
y Explorador de Windows)
10
JavaScript es un lenguaje interpretado, es decir, que no requiere
12
compilación, ut ilizado principalmente en páginas web, con una sintaxis Java Pla se Edit ion o Java EE (anteriormente conocido
semejante a la del lenguaje Java y el lenguaje C. Al contrario que Java, como Java erprise Edition o J2EE hasta la versión 1.4), es
JavaScript no es un lenguaje orientado a objetos propiamente dicho, ya una plataf programación—parte de la Plataforma Java—para
que no dispone de Herencia, es más bien un lenguaje basado en desarrollar y ejecutar sof tware de aplicaciones en Lenguaje de
prototipos, ya que las nuevas clases se generan clonando las clases base pro ón Java con arquitectura de n niveles distribuida, basándose
(prototipos) y extendiendo su funcionalidad. am e en componentes de sof tware modulares ejecutándose sobre
de aplicaciones. La plataforma Java EE está definida por una
11
Un applet es un componente de sof tware que corre en el contexto de ificación. Similar a otras especificaciones del Java Community
otro programa, por ejemplo un navegador web. El applet debe correr ss, Java EE es también considerada informalmente como un estándar
un contenedor, que lo proporciona un programa anfitrión, mediante debido a que los suministradores deben cumplir ciertos requisitos de
plugin, o en aplicaciones como teléfonos móviles que soportan conformidad para declarar que sus productos son conformes a Java EE; no
de programación por applets. A diferencia de un programa, un obstante sin un estándar de ISO o ECMA.
puede correr de manera independiente, ofrece información g
veces interactúa con el usuario, típicamente carece d tiene Java EE incluye varias especificaciones de API, tales como JDBC, RMI, e-
privilegios de seguridad restringidos. Un apple a cabo mail, JMS, Servicios Web, XML, etc y define cómo coordinarlos. Java EE
una función muy específica que carece de uso érmino también configura algunas especificaciones únicas para Java EE para
fue introducido en AppleScript en 1993. componentes. Estas incluyen Enterprise JavaBeans, servlets, portlets
(siguiendo la especificación de Port lets Java), JavaServer Pages y varias
Ejemplos comunes de applets son las Java y las animaciones tecnologías de servicios web. Esto permite al desarrollador crear una
Flash. Otro ejemplo es el Windows Media Player utilizado para desplegar Aplicación de Empresa portable entre plataformas y escalable, a la vez
archivos de video incrustados en los navegadores como el Internet que integrable con tecnologías anteriores. Otros beneficios añadidos son,
Explorer. Otros plugins permiten elos 3D que funcionan con por ejemplo, que el servidor de aplicaciones puede manejar
una applet . transacciones, la seguridad, escalabilidad, concurrencia y gestión de los
componentes desplegados, significando que los desarrolladores pueden
Un applet es un código J un método main, por eso se concentrarse más en la lógica de negocio de los componentes en lugar de
utiliza principalme bajo de páginas web, ya que es un en tareas de mantenimiento de bajo nivel.
Ver 200804 62
Extreme Guide: Usando Java Referencias
13
La plataforma Java 2, Micro Edi tion, o Java ME (anteriormente J2ME),
es una colección de APIs en Java orientadas a productos de consumo
como PDAs, teléfonos móviles o electrodomésticos. Java ME se ha
convertido en una buena opción para crear juegos en teléfonos móviles
debido a que se puede emular en un PC durante la fase de desarrollo y
luego subirlos fácilmente al teléfono. Al utilizar tecnologías Java el
desarrollo de aplicaciones o videojuegos con estas APIs resulta bastante
económico de portar a otros dispositivos.
14
HotJava es un navegador web modular y extensible de Sun
Microsystems que puede ejecutar applets Java. Fue el primer navegador
en soportar applets Java y fue la plataforma de demostración de Sun para
la entonces nueva tecnología. Desde entonces ha sido descontinuado y ya
no es soportado. Como cualquier navegador de Web, HotJava puede
decodificar HTML estándar y URLs estándares, aunque no soporta
completamente el estándar HTML 3.0. La ventaja sobre el resto de
navegadores, sin soporte Java, es que puede ejecutar programas Java
sobre la red. La diferencia con Netscape, es que tiene implementado
completamente los sistemas de seguridad que propone Java, esto signif
que puede escribir y leer en el disco local, aunque esto hace disminuir
seguridad, ya que se pueden grabar en nuestro disco prog
contengan código malicioso e introducirnos un virus, por ej
obstante, el utilizar esta característica de HotJava es de
usuario.
Ver 200804 63