Anda di halaman 1dari 38

¿Qué es el software de Java?

El software de Java le permite ejecutar aplicaciones que se han escrito utilizando el


lenguaje de programación de Java y que reciben el nombre de "applets". Los applets
le permiten jugar en línea, participar en sesiones de chat con internautas de todo el
mundo, calcular los intereses de una hipoteca y ver imágenes en tres dimensiones. En
las empresas también se utilizan los applets en aplicaciones de la intranet y soluciones
de comercio electrónico.
. Java es un lenguaje de programación orientado a objetos desarrollado por James
Gosling y sus compañeros de Sun Microsystems al inicio de la década de 1990. A
diferencia de los lenguajes de programación convencionales, que generalmente están
diseñados para ser compilados a código nativo, Java es compilado en un bytecode que
es ejecutado (usando normalmente un compilador JIT), por una máquina virtual Java.

El lenguaje en sí mismo toma mucha de su sintaxis de C y C++, pero tiene un modelo de


objetos mucho más simple y elimina herramientas de bajo nivel como punteros.

Java está sólo lejanamente emparentado con JavaScript, aunque tengan nombres
similares y compartan una sintaxis al estilo de C algo parecida.

Orígenes

Imagen:Duke.wave.shadow.gif
Duke, la mascota de Java

La plataforma Java y el lenguaje Java empezaron como un proyecto interno de Sun


Microsystems en diciembre de 1990. Patrick Naughton, ingeniero de Sun, estaba
decepcionado con el estado de C++ y la API de C y sus herramientas. Mientras
consideraba migrar a NeXT, Naughton recibió la oferta de trabajar en una nueva
tecnología, y así comenzó el proyecto Stealth.

El Proyecto Stealth fue rebautizado como Green Proyect (o Proyecto Verde) cuando
James Gosling y Mike Sheridan se unieron a Naughton. Con la ayuda de otros
ingenieros, empezaron a trabajar en una pequeña oficina en Sand Hill Road en Menlo
Park, California. Intentaban desarrollar una nueva tecnología para programar la
siguiente generación de dispositivos inteligentes, en los que Sun veía un campo nuevo a
explotar.

El equipo pensó al principio usar C++, pero se descartó por varias razones. Al estar
desarrollando un sistema empotrado con recursos limitados, C++ no es adecuado por
necesitar mayor potencia además de que su complejidad conduce a errores de
desarrollo. La ausencia de un recolector de basura(garbage collector) obligaba a los
programadores a manejar manualmente el sistema de memoria, una tarea peligrosa y
proclive a fallos. El equipo también se encontró con problemas por la falta de
herramientas portables en cuanto a seguridad, programación distribuida, y programación
concurrente. Finalmente abogaban por una plataforma que fuese fácilmente portable a
todo tipo de dispositivo.

Bill Joy había concebido un nuevo lenguaje que combinase lo mejor de Mesa y C. En
un escrito titulado Further (más lejos), proponía a Sun que sus ingenieros crearan un
entorno orientado a objetos basado en C++. Al principio Gosling intentó modificar y
ampliar C++, a lo que llamó C++ ++ --, pero pronto descartó la idea para crear un
lenguaje completamente nuevo, al que llamó Oak, en referencia al roble que tenía junto
a su oficina.

El equipo dedicó largas horas de trabajo y en el verano de 1992 tuvieron lista algunas
partes de la plataforma, incluyendo el Sistema Operativo Green, el lenguaje Oak, las
librerías y el hardware. La primera prueba, llevada a cabo el 3 de Septiembre de 1992,
se centró en construir una PDA (Personal Digital Assistant o Asistente Digital Personal)
llamada Star7 [1], que contaba con una interfaz gráfica y un asistente apodado "Duke"
para guiar al usuario.

En Noviembre de ese mismo año, el Proyecto Verde se convirtió en FirstPerson, Inc,


una división propiedad de Sun Microsystems, y el equipo se trasladó a Palo Alto
(California). El interés se centró entonces en construir dispositivos interactivos, hasta
que Time Warner publicó una solicitud de oferta para un adaptador de televisión. Es
decir, un aparato que se sitúa entre la televisión y una fuente de señal externa y que
adapta el contenido de ésta (video, audio, páginas Web, etc.) para verse en la pantalla.
Entonces, Firsperson cambió de idea y envió a Warner una propuesta para el dispositivo
que deseaban. Sin embargo, la industria del cable consideró que esa propuesta daba
demasiado control al usuario, con lo que FirstPerson perdió la puja a favor de SGI
(Silicon Graphics Incorporated). Un trato con la empresa 3DO para el mismo tipo de
dispositivo tampoco llegó a buen puerto. Viendo que no había muchas posibilidades en
la industria de la televisión, la compañía volvió al seno de Sun.

[editar]

Java e Internet

En junio y julio de 1994, tras una sesión maratoniana de tres días entre Jonh Gaga,
James Gosling, Joy Naughton, Wayne Rosing y Eric Schmidt, el equipo reorientó la
plataforma hacia la Web. Sintieron que la llegada del navegador Web Mosaic,
propiciaría que Internet se convirtiese en un medio interactivo, como el que pensaban
era la televisión por cable. Naughton creó entonces un prototipo de navegador,
WebRunner, que más tarde sería conocido como HotJava.

Ese año renombraron el lenguaje como Java tras descubrir que "Oak" era ya una marca
comercial registrada para adaptadores de tarjetas gráficas. El término Java fue acuñado
en una cafetería frecuentada por algunos de los miembros del equipo. Pero no está claro
si es un acrónimo o no, aunque algunas fuentes señalan que podría tratarse de las
iniciales de sus creadores: James Gosling, Arthur Van Hoff, y Andy Bechtolsheim.
Otros abogan por el siguiente acrónimo, Just Another Vague Acronym ("sólo otro
acrónimo ambiguo"). La hipótesis que más fuerza tiene es la que Java debe su nombre a
un tipo de café disponible en la cafetería cercana. Un pequeño signo que da fuerza a esta
teoría es que los 4 primeros bytes (el número mágico) de los archivos .class que genera
el compilador, son en hexadecimal, 0xCAFEBABE.

En octubre de 1994, se les hizo una demostración de HotJava y la plataforma Java a los
ejecutivos de Sun. Java 1.0a pudo descargarse por primera vez en 1994, pero hubo que
esperar al 23 de mayo de 1995, durante las conferencias de SunWorld, a que vieran la
luz pública Java y HotJava, el navegador Web. El acontecimiento fue anunciado por
John Gage, el Director Científico de Sun Microsystems. El acto estuvo acompañado por
una pequeña sorpresa adicional, el anuncio por parte de Marc Andreessen,
Vicepresidente Ejecutivo de Netscape, que Java sería soportado en sus navegadores. El
9 de enero del año siguiente, 1996, Sun fundó el grupo empresarial JavaSoft para que se
encargase del desarrollo tecnológico. [2] Dos semanas más tarde la primera versión de
Java fue publicada.

[editar]

Historia reciente

[editar]

En la Web

[editar]

En el cliente

La capacidad de los navegadores Web para ejecutar applets de Java ha asegurado la


continuidad del uso de Java por el gran público. Flash está más extendido para
animaciones interactivas y los desarrolladores estén empezando a usar la tecnología
Ajax también en este campo. Java suele usarse para aplicaciones más complejas como la
zona de juegos de Yahoo, Yahoo! Games, o reproductores de video (ej. [3]).

[editar]

En el servidor

En la parte del servidor, Java es más popular que nunca, con muchos sitios empleando
páginas JavaServer, conectores como Tomcat para Apache y otras tecnologías Java.

[editar]

En el PC de escritorio

Aunque cada vez la tecnología Java se acerca más y más al PC de sobremesa, las
aplicaciones Java han sido relativamente raras para uso doméstico, por varias razones.
[4]

 Las aplicaciones Java pueden necesitar gran cantidad de memoria física.


 La Interfaz Gráfica de Usuario (GUI) no sigue de forma estricta la Guía para la
Interfaz Humana' (Human Interface Guidelines), así como tampoco aquella a la
que estamos habitualmente acostumbrados. La apariencia de las fuentes no tiene
las opciones de optimización activadas por defecto, lo que hace aparecer al texto
como si fuera de baja calidad.
 Las herramientas con que cuenta el JDK no son suficientemente potentes para
construir de forma simple aplicaciones potentes. Aunque el uso de herramientas
como Eclipse, un IDE con licencia GNU de alta calidad, facilita enormemente
las tareas de desarrollo.
 Hay varias versiones del Entorno en Tiempo de Ejecución de Java, el JRE. Es
necesario tener instalada la versión adecuada. El paquete JRE puede ser de
tamaño considerable, 7Mbytes, lo que puede ser un inconveniente a la hora de
descargarlo e instalarlo.
 Las aplicaciones basadas en la Web están tomando la delantera frente a aquellas
que funcionan como entidades independientes. Las nuevas técnicas de
programación producen aplicaciones basadas en un modelo en red cada vez más
potentes.

Sin embargo hay aplicaciones Java cuyo uso está ampliamente extendido, como los
NetBeans, el entorno de desarrolo (IDE) Eclipse, y otros programas como LimeWire y
Azureus para intercambio de archivos. Java también es el motor que usa MATLAB para
el renderizado de la interfaz gráfica y para parte del motor de cálculo. Las aplicaciones
de escritorio basadas en la tecnología Swing y SWT (Standard Widget Toolkit) suponen
una alternativa a la plataforma .Net de Microsoft.

[editar]

Disponibilidad del JRE de Java

Una versión del JRE (Java Runtime Environment) está disponible en la mayoría de
equipos de escritorio. Sin embargo, Microsoft no lo ha incluido por defecto en su
sistema operativo, ya que Windows XP fue lanzado en 2001. En el caso de Apple, éste
incluye una versión propia del JRE en su sistema operativo, el Mac OS. También es un
producto que por defecto aparece en la mayoría de las distribuciones de Linux. Debido a
incompatibilidades entre distintas versiones del JRE, muchas aplicaciones prefieren
instalar su propia copia del JRE antes que confiar su suerte a la aplicación instalada por
defecto. Los desarrolladores de applets de Java o bien deben insistir a los usuarios en la
actualización del JRE, o bien desarrollar bajo una versión antigua de Java y verificar el
correcto funcionamiento en las versiones posteriores.

[editar]

Historial de versiones

Imagen:Java WebStartApplicationMan.png
Java Web Start, introducido para J2SE 1.3, permite surtirse de aplicaciones en la WEB
a través de un icono o un enlace en una página web.

El lenguaje Java ha experimentado numerosos cambios desde la versión primigenia,


JDK 1.0, así como un enorme incremento en el número de clases y paquetes que
componen la librería estándar. Desde J2SE 1.4, la evolución del lenguaje ha sido
regulada por el JCP (Java Community Process), que usa Java Specification Requests
(JSRs) para proponer y especificar cambios en la plataforma Java. El lenguaje en si
mismo está especificado en la Java Language Specification (JLS), o Especificación del
Lenguaje Java. Los cambios en los JLS son gestionados en JSR 901.

 JDK 1.0 (23 de enero de 1996) — Primer lanzamiento.


comunicado de prensa

 JDK 1.1 (19 de febrero de 1997) — Principales adiciones incluidas:


comunicado de prensa
o una reestructuración intensiva del modelo de eventos AWT (Abstract
Windowing Toolkit)
o clases internas (inner classes)
o JavaBeans
o JDBC (Java Database Connectivity), para la integración de bases de
datos
o RMI (Remote Method Invocation)

 J2SE 1.2 (8 de diciembre de 1998) — Nombre clave Playground. Esta y las


siguientes versiones fueron recogidas bajo la denominación 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). Otras mejoras añadidas incluían: comunicado de
prensa
o la palabra reservada (keyword) strictfp
o reflexión o reflection
o la API gráfica ( Swing) fue integrada en las clases básicas
o la máquina virtual (JVM) de Sun fue equipada con un compilador JIT
(Just In Time) por primera vez
o Java Plug-in
o Java IDL, una implementación de IDL (Interfaz para Descripción de
Lenguaje) para la interoperabilidad con CORBA
o Colecciones (Collections)

 J2SE 1.3 (8 de mayo de 2000) — Nombre clave Kestrel.

Los cambios más notables fueron:comunicado de prensa lista completa de cambios


o la inclusión de la máquina virtual de HotSpot JVM (la JVM de HotSpot
fue lanzada inicialmente en abril de 1999, para la JVM de J2SE 1.2)
o RMI fue cambiado para que se basara en CORBA
o JavaSound
o se incluyó el Java Naming and Directory Interface (JNDI) en el paquete
de librerías principales (anteriormente disponible como una extensión)
o Java Platform Debugger Architecture (JPDA)

 J2SE 1.4 (6 de febrero de 2002) — Nombre Clave Merlin. This was the first
release of the Java platform developed under the Java Community Process as
JSR 59. Los cambios más notables fueron: press releasefull list of changes
o assert keyword (Specified in JSR 41.)
o regular expressions modeled after Perl regular expressions
o Encadenación de excepciones allows an exception to encapsulate
original lower-level exception
o non-blocking NIO (New Input/Output) (Specified in JSR 51.)
o logging API (Specified in JSR 47.)
o image I/O API for reading and writing images in formats like JPEG and
PNG
o integrated XML parser and XSLT processor (JAXP) (Specified in JSR 5
and JSR 63.)
o Seguridad integrada y extensiones criptográficas (JCE, JSSE, JAAS)
o Java Web Start included (Java Web Start was first released in March,
2001 for J2SE 1.3) (Specified in JSR 56.)

 J2SE 5.0 (30 de septiembre de 2004) — Nombre clave: Tiger. (Originalemte


numerado 1.5, esta notación aún es usada internamente.[5]) Developed under
JSR 176, Tiger añadió un numero significante de nuevas características press
release
o Generics — provides compile-time (static) type safety for collections
and eliminates the need for most typecasts. (Specified by JSR 14.)
o Metadata — also called annotations, allows language constructs such as
classes and methods to be tagged with additional data, which can then be
processed by metadata-aware utilities. (Specified by JSR 175.)
o Autoboxing/unboxing — Conversiones automaticas entre tipos primitivos
(Cómo los int) y clases de envoltura primitivas
(CómoPlantilla:Javadoc:SE). (Specified by JSR 201.)
o Enumerations — the enum keyword creates a typesafe, ordered list of
values (such as Day.MONDAY, Day.TUESDAY, etc.). Previously this could
only be achieved by non-typesafe constant integers or manually
constructed classes (typesafe enum pattern). (Specified by JSR 201.)
o Varargs — the last parameter of a method can now be declared using a
type name followed by three dots (e.g. void drawtext(String...
lines)). In the calling code any number of parameters of that type can
be used and they are then placed in an array to be passed to the method.
o Enhanced for loop — the for loop syntax is extended with special
syntax for iterating over each member of either an array or any
Plantilla:Javadoc:SE, such as the standard Plantilla:Javadoc:SE classes,
using a construct of the form:

void displayWidgets (Iterable<Widget> widgets) {


for (Widget w : widgets) {
w.display();
}
}

This example iterates over the Iterable object widgets, assigning each of its
items in turn to the variable w, and then calling the Widget method display() for
each item. (Specified by JSR 201.)
 Java SE 6 — Nombre Clave Mustang. As of 2006 this is currently in
development under JSR 270. Una versión Beta fue lanzada en Febrero 15, 2006
press release and is available at http://java.sun.com/javase/6/. Another beta is
expected summer 2006 with the final release in autumn 2006. New builds
including enhancements and bug fixes are released approximately weekly. As of
this version, Sun replaced the name "J2SE" with Java SE and dropped the ".0"
from the version number.[6]
 Java SE 7 — Codename Dolphin. As of 2006, this is in the early planning
stages. Development is expected to begin in spring 2006, with release estimated
in 2008.[7]

In addition to the language changes, much more dramatic changes have been made to
the Java class library over the years, which has grown from a few hundred classes in
JDK 1.0 to over three thousand in J2SE 5.0. Entire new APIs, such as Swing and
Java2D, have been introduced, and many of the original JDK 1.0 classes and methods
have been deprecated.

[editar]

Filosofía
El lenguaje Java se creó con cinco objetivos principales:

1. Debería usar la metodología de la programación orientada a objetos.


2. Debería permitir la ejecución de un mismo programa en múltiples sistemas
operativos.
3. Debería incluir por defecto soporte para trabajo en red.
4. Debería diseñarse para ejecutar código en sistemas remotos de forma segura.
5. Debería ser fácil de usar y tomar lo mejor de otros lenguajes orientados a
objetos, como C++.

Para conseguir la ejecución de código remoto y el soporte de red y, los programadores


de Java a veces recurren a extensiones como CORBA (Common Object Request Broker
Architecture), Internet Communications Engine o OSGi respectivamente.

[editar]

Orientado a Objetos

La primera característica, orientado a objetos (“OO”), se refiere a un método de


programación y al diseño del lenguaje. Aunque hay muchas interpretaciones para OO,
una primera idea es diseñar el software de forma que los distintos tipos de datos que use
estén unidos a sus operaciones. Así, los datos y el código (funciones o métodos) se
combinan en entidades llamadas objetos. Un objeto puede verse como un paquete que
contiene el “comportamiento” (el código) y el “estado” (datos). El principio es separar
aquello que cambia de las cosas que permanecen inalterables. Frecuentemente, cambiar
una estructura de datos implica un cambio en el código que opera sobre los mismos, o
viceversa. Esta separación en objetos coherentes e independientes ofrece una base más
estable para el diseño de un sistema software. El objetivo es hacer que grandes
proyectos sean fáciles de gestionar y manejar, mejorando como consecuencia su calidad
y reduciendo el número de proyectos fallidos. Otra de las grandes promesas de la
programación orientada a objetos es la creación de entidades más genéricas (objetos)
que permitan la reutilización del software entre proyectos, una de las premisas
fundamentales de la Ingeniería del Software. Un objeto genérico “cliente”, por ejemplo,
debería en teoría tener el mismo conjunto de comportamiento en diferentes proyectos,
sobre todo cuando estos coinciden en cierta medida, algo que suele suceder en las
grandes organizaciones. En este sentido, los objetos podrían verse como piezas
reutilizables que pueden emplearse en múltiples proyectos distintos, posibilitando así a
la industria del software a construir proyectos de envergadura empleando componentes
ya existentes y de comprobada calidad; conduciendo esto finalmente a una reducción
drástica del tiempo de desarrollo. Podemos usar como ejemplo de objeto el aluminio.
Una vez definidos datos (peso, maleabilidad, etc.), y su “comportamiento” (soldar dos
piezas, etc.), el objeto “aluminio” puede ser reutilizado en el campo de la construcción,
del automóvil, de la aviación, etc.

La reutilización del software ha experimentado resultados dispares, encontrando dos


dificultades principales: el diseño de objetos realmente genéricos es pobremente
comprendido, y falta una metodología para la amplia comunicación de oportunidades de
reutilización. Algunas comunidades de “código abierto” (open source) quieren ayudar
en este problema dando medios a los desarrolladores para diseminar la información
sobre el uso y versatilidad de objetos reutilizables y librerías de objetos.

[editar]

Independencia de la plataforma

El aspecto visual del GUI de la Swing de Java es independiente de la plataforma en la


que se ejecuta

La segunda característica, la independencia de la plataforma, significa que programes


escritos en el lenguaje Java deben 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 código fuente escrito en lenguaje Java, para generar un código
conocido como “bytecode” (específicamente Java bytecode)—instrucciones máquina
simplificadas específicas de la plataforma Java. Esta pieza está “a medio camino” entre
el código fuente y el código máquina que entiende el dispositivo destino. El bytecode es
ejecutado entonces en la máquina virtual (VM), un programa escrito en código nativo de
la plataforma destino (que es el que entiende su hardware), que interpreta y ejecuta el
código. Además, se suministran librerías adicionales para acceder a las características de
cada dispositivo (como los gráficos, ejecución mediante hebras o threads, la interfaz de
red) de forma unificada. Se debe tener presente que, aunque hay una etapa explícita de
compilación, el bytecode generado es interpretado o convertido a instrucciones máquina
del código nativo por el compilador JIT (Just In Time).
Hay implementaciones del compilador de Java que convierten el código fuente
directamente en código objeto nativo, como GCJ. Esto elimina la etapa intermedia
donde se genera el bytecode, pero la salida de este tipo de compiladores sólo 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 implementación de Microsoft no daba soporte a las interfaces RMI y
JNI además de haber añadido características ‘’dependientes’’ de su plataforma. Sun
demandó a Microsoft y ganó por daños y perjuicios (unos 20 millones de dólares) así
como una orden judicial forzando la acatación de la licencia de Sun. Como respuesta,
Microsoft no ofrece Java con su versión de sistema operativo, y en recientes versiones
de Windows, su navegador Internet Explorer no admite la ejecución 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 usaba una máquina virtual interpretada
para conseguir la portabilidad. Sin embargo, el resultado eran programas que se
ejecutaban comparativamente más lentos que aquellos escritos en C o C++. Esto hizo
que Java se ganase una reputación de lento en rendimiento. Las implementaciones
recientes de la JVM dan lugar a programas que se ejecutan considerablemente más
rápido que las versiones antiguas, empleando diversas técnicas.

La primera de estas técnicas es simplemente compilar directamente en código nativo


como hacen los compiladores tradicionales, eliminando la etapa del bytecode. Esto da
lugar a un gran rendimiento en la ejecución, pero tapa el camino a la portabilidad. Otra
técnica, conocida como compilación JIT (Just In Time, o ‘’’compilación al vuelo’’’),
convierte el bytecode a código nativo cuando se ejecuta la aplicación. Otras máquinas
virtuales más sofisticadas usan una ‘’’recompilación dinámica’’’ en la que la VM es
capaz de analizar el comportamiento del programa en ejecución y recompila y optimiza
las partes críticas. La recompilación dinámica puede lograr mayor grado de
optimización que la compilación tradicional (o estática), ya que puede basar su trabajo
en el conocimiento que de primera mano tiene sobre el entorno de ejecución y el
conjunto de clases cargadas en memoria. La compilación JIT y la recompilación
dinámica permiten a los programas Java aprovechar la velocidad de ejecución del
código nativo sin por ello perder la ventaja de la portabilidad.

La portabilidad es técnicamente difícil 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
actúen de forma correcta en múltiples plataformas de distinta arquitectura, el gran
número de estas con pequeños errores o inconsistencias llevan a que a veces se parodie
el eslogan de Sun, "Write once, run anywhere" como "Write once, debug everywhere"
(o “Escríbelo una vez, ejecútalo en todas partes” por “Escríbelo una vez, depúralo 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.
[editar]

El recolector de basura

Un argumento en contra de lenguajes como C++ es que los programadores se


encuentran con la carga añadida de tener que administrar la memoria de forma manual.
En C++, el desarrollador debe asignar memoria en una zona conocida como ‘’’heap’’
(montículo) para crear cualquier objeto, y posteriormente desalojar el espacio asignado
cuando desea borrarlo. Un olvido a la hora de desalojar memoria previamente solicitada,
o si no lo hace en el instante oportuno, puede llevar a una ‘’’fuga de memoria’’’, ya que
el sistema operativo piensa que esa zona de memoria está siendo usada por una
aplicación cuando en realidad no es así. Así, un programa mal diseñado podría consumir
una cantidad desproporcionada de memoria. Además, si una misma región de memoria
es desalojada dos veces el programa puede volverse inestable y llevar a un eventual
‘’’cuelgue’’’.

En Java, este problema potencial es evitado en gran medida por el recolector automático
de basura (o automatic garbage collector). El programador determina cuando se crean
los objetos y el entorno en tiempo de ejecución de Java (Java runtime) es el responsable
de gestionar el ciclo de vida de los objetos. El programa, u otros objetos pueden tener
localizado un objeto mediante una referencia a éste (que, desde un punto de vista de
bajo nivel es una dirección de memoria). Cuando no quedan referencias a un objeto, el
recolector de basura de Java borra el objeto, liberando así la memoria que ocupaba
previniendo posibles fugas (ejemplo: un objeto creado y únicamente usado dentro de un
método sólo tiene entidad dentro de éste; al salir del método el objeto es eliminado).
Aún así, es posible que se produzcan fugas de memoria si el código almacena
referencias a objetos que ya no son necesarios—es decir, pueden aún ocurrir, pero en un
nivel conceptual superior. En definitiva, el recolector de basura de Java permite una
fácil creación y eliminación de objetos, mayor seguridad y frecuentemente más rápida
que en C++.

La recolección de basura de Java es un proceso prácticamente invisible al desarrollador.


Es decir, el programador no tiene conciencia de cuándo la recolección de basura tendrá
lugar, ya que ésta no tiene necesariamente que guardar relación con las acciones que
realiza el código fuente.

Debe tenerse en cuenta que la memoria es sólo uno de los muchos recursos que deben
ser gestionados.

[editar]

Críticas
Java fue creado para abrir una nueva vía en la gestión de software complejo, y es por
regla general aceptado que se ha comportado bien en ese aspecto. Sin embargo no puede
decirse que Java no tenga grietas, ni que se adapta completamente a todos los estilos de
programación, todos los entornos, o todas las necesidades.
[editar]

General

 Java no ha aportado capacidades estándares para aritmética en punto flotante. El


estándar IEEE 754 para “Estándar para Aritmética Binaria en Punto Flotante”
apareció en 1985, y desde entonces es el estándar para la industria. Y aunque la
aritmética flotante de Java se basa en gran medida en la norma del IEEE, no
soporta aún algunas características. Más información al respecto puede
encontrarse en la sección final de enlaces externos.
 A raíz de la naturaleza propietaria de Java, la supuesta inflexibilidad para
cambiar, y un creciente estrechamiento de líneas alrededor del sector
corporativo, se dice que Java es “el nuevo COBOL”. Aunque puede ser una
afirmación exagerada, hace referencia a una preocupación real sobre el
panorama de futuro de Java.
 El recolector de basura de Java sólo gestiona la memoria, pero el instante en que
tiene lugar su tarea no puede controlarse manualmente. Por tanto, aquellos
objetos que reservan recursos externos deben ser desalojados de memoria a
mano (usando el mecanismo del lenguaje “finally”), o deben mantenerse hasta
que acabe la ejecución del programa.

[editar]

El lenguaje

 En un sentido estricto, Java no es un lenguaje absolutamente orientado a objetos,


a diferencia de, por ejemplo, Ruby o Smalltalk. Por motivos de eficiencia, Java
ha relajado en cierta medida el paradigma de orientación a objetos, y así por
ejemplo, no todos los valores son objetos.
 Por el contrario, los programadores de C++ pueden caer en la confusión con
Java, porque en éste los tipos primitivos son siempre variables automáticas, y los
objetos siembre residen en el montículo (heap), mientras que en C++ ambos
casos están en manos del programados, usando el operador new.
 El código Java puede ser a veces redundante en comparación con otros
lenguajes. Esto es en parte debido a las frecuentes declaraciones de tipos y
conversiones de tipo manual (casting). También se debe a que no se dispone de
operadores sobrecargados, y a una sintaxis relativamente simple. Sin embargo,
J2SE 5.0 introduce elementos para tratar de reducir la redundancia, como una
nueva construcción para los bucles ‘’’foreach’’’.
 A diferencia de C++, Java no dispone de operadores de sobrecarga definidos por
el usuario. Sin embargo esta fue una decisión de diseño que puede verse como
una ventaja, ya que esta característica puede hacer los programas difíciles de leer
y mantener.
 Java es un lenguaje basado en un solo paradigma.

 Java no permite herencia múltiple como otros lenguajes. Sin embargo el


mecanismo de los interfaces de Java permite herencia múltiple de tipos y
métodos abstractos.
 El soporte de Java para patrones de texto y la manipulación de éste no es tan
potente como en lenguajes como Perl, Ruby o PHP, aunque J2SE 1.4 introdujo
las expresiones regulares.

[editar]

Apariencia

La apariencia externa (el ‘’’look and feel’’’) de las aplicaciones GUI (Graphical User
Interface) escritas en Java usando la plataforma Swing difiere a menudo de la que
muestran aplicaciones nativas. Aunque el programador puede usar el juego de
herramientas AWT (Abstract Windowing Toolkit) que genera objetos gráficos de la
plataforma nativa, el AWT no es capaz de funciones gráficas avanzadas sin sacrificar la
portabilid entre plataformas; ya que cada una tiene un conjunto de APIs distinto,
especialmente para objetos gráficos de alto nivel. Las herramientas de Swing, escritas
completamente en Java, evitan este problema construyendo los objetos gráficos a partir
de los mecanismos de dibujo básicos que deben estar disponibles en todas las
plataformas. El inconveniente es el trabajo extra requerido para conseguir la misma
apariencia de la plataforma destino. Aunque esto es posible (usando GTK+ y el Look-
and-Feel de Windows), la mayoría de los usuarios no saben cómo cambiar la apariencia
que se proporciona por defecto por aquella que se adapta a la de la plataforma. Mención
merece la versión optimizada del Java Runtime que ha desarrollado Apple y que incluye
en su sistema operativo, el Mac OS X. Por defecto implemente su propio look-and-feel
(llamado Aqua), dando a las aplicaciones Swing ejecutadas en un Macintosh una
apariencia similar a la que tendría si se hubiese escrito en código nativo.

[editar]

Rendimiento

El rendimiento de una aplicación está determinado por multitud de factores, por lo que
no es fácil hacer una comparación que resulte totalmente objetiva. En tiempo de
ejecución, el rendimiento de una aplicación Java depende más de la eficiencia del
compilador, o la JVM, que de las propiedades intrínsecas del lenguaje. El bytecode de
Java puede ser interpretado en tiempo de ejecución por la máquina virtual, o bien
compilado al cargarse el programa, o durante la propia ejecución, para generar código
nativo que se ejecuta directamente sobre el hardware. Si es interpretado, será más lento
que usando el código máquina intrínseco de la plataforma destino. Si es compilado,
durante la carga inicial o la ejecución, la penalización está en el tiempo necesario para
llevar a cabo la compilación.

Algunas características del propio lenguaje conllevan una penalización en tiempo,


aunque no son únicas de Java. Algunas de ellas son el chequeo de los límites de arrays,
chequeo en tiempo de ejecución de tipos, y la indirección de funciones virtuales.

El uso de un recolector de basura para eliminar de forma automática aquellos objetos no


requeridos, añade una sobrecarga que puede afectar al rendimiento, o ser apenas
apreciable, dependiendo de la tecnología del recolector y de la aplicación en concreto.
Las JVM modernas usan recolectores de basura que gracias a rápidos algoritmos de
manejo de memoria, consiguen que algunas aplicaciones puedan ejecutarse más
eficientemente.

El rendimiento entre un compilador JIT y los compiladores nativos puede ser parecido,
aunque la distinción no está clara en este punto. La compilación mediante el JIT puede
consumir un tiempo apreciable, un inconveniente principalmente para aplicaciones de
corta duración o con gran cantidad de código. Sin embargo, una vez compilado, el
rendimiento del programa puede ser comparable al que consiguen compiladores nativos
de la plataforma destino, inclusive en tareas numéricas. Aunque Java no permite la
expansión manual de llamadas a métodos, muchos compiladores JIT realizan esta
optimización durante la carga de la aplicación y pueden aprovechar información del
entorno en tiempo de ejecución para llevar a cabo transformaciones eficientes durante la
propia ejecución de la aplicación. Esta recompilación dinámica, como la que
proporciona la máquina virtual HotSpot de Sun, puede llegar a mejorar el resultado de
compiladores estáticos tradicionales, gracias a los datos que sólo están disponibles
durante el tiempo de ejecución.

Java fue diseñado para ofrecer seguridad y portabilidad, y no ofrece acceso directo al
hardware de la arquitectura ni al espacio de direcciones. Java no soporta expansión de
código ensamblador, aunque las aplicaciones pueden acceder a características de bajo
nivel usando librerías nativas (JNI, Java Native Interfaces).

[editar]

Sintaxis
combina la sintaxis para programación genérica, estructurada y orientada a objetos, Java
fue construido desde el principio para ser completamente orientado a objetos. Todo en
Java es un objeto (salvo algunas excepciones), y todo en Java reside en alguna clase.

[editar]

Hola Mundo

”Para conocer el origen del programa “Hola Mundo” véase: [[8]]”


[editar]

Aplicaciones autónomas

// Hola.java
public class Hola
{
public static void main(String[] args) {
System.out.println("Hola, mundo!");
}
}

Este ejemplo necesita una pequeña explicación.


 Todo en Java está dentro de una clase, incluyendo programas autónomos.
 El código fuente se guarda en archivos con el mismo nombre que la clase que
contienen y con extensión “.java”. Una clase (class) declarada pública
(public) debe seguir este convenio. En el ejemplo anterior, la clase es Hola, por
lo que el código fuente debe guardarse en el fichero “Hola.java”
 El compilador genera un archivo de clase (con extensión “.class”) por cada una
de las clases definidas en el archivo fuente. Una clase anónima se trata como si
su nombre fuera la concatenación del nombre de la clase que la encierra, el
símbolo “$”, y un número entero.
 Los programas que se ejecutan de forma independiente y autónoma, deben
contener el método ”main()”.
 La palabra reservada ”void” indica que el método main no devuelve nada.
 El método main debe aceptar un array de objetos tipo String. Por acuerdo se
referencia como ”args”, aunque puede emplearse cualquier otro identificador.
 La palabra reservada ”static” indica que el método es un método de clase,
asociado con la clase en vez de a instancias de la misma. El método main debe
ser estático o ‘’’de clase’’’.
 La palabra reservada public significa que un método puede ser llamado desde
otras clases, o que la clase puede ser usada por clases fuera de la jerarquía de la
propia clase. Otros tipos de acceso son ”private” o ”protected”.
 La utilidad de impresión (en pantalla por ejemplo) forma parte de la librería
estándar de Java: la clase ‘’’System’’’ define un campo público estático llamado
‘’’out’’’. El objeto out es una instancia de ‘’’PrintStream’’’, que ofrece el método
‘’’println(String)’’’ para volcar datos en la pantalla (la salida estándar).
 Las aplicaciones autónomas se ejecutan dando al entorno de ejecución de Java el
nombre de la clase cuyo método main debe invocarse. Por ejemplo, una línea de
comando (en Unix o Windows) de la forma java –cp . Hola ejecutará el
programa del ejemplo (previamente compilado y generado “Hola.class”) . El
nombre de la clase cuyo método main se llama puede especificarse también en el
fichero “MANIFEST” del archivo de empaquetamiento de Java (.jar).

[editar]

Applets

Las applets de Java son programas incrustados en otras aplicaciones, normalmente una
página Web que se muestra en un navegador.

// Hola.java
import java.applet.Applet;
import java.awt.Graphics;

public class Hola extends Applet {


public void paint(Graphics gc) {
gc.drawString("Hola, mundo!", 65, 95);
}
}
<!-- Hola.html -->
<html>
<head>
<title>Applet Hola Mundo</title>
</head>
<body>
<applet code="Hola" width="200" height="200">
</applet>
</body>
</html>

La sentencia import indica al compilador de Java que incluya las clases


java.applet.Applet y java.awt.Graphics, para poder referenciarlas por sus nombres,
sin tener que anteponer la ruta completa cada vez que se quieran usar en el código
fuente.

La clase Hola extiende (extends) a la clase Applet, es decir, es una subclase de ésta.
La clase Applet permite a la aplicación mostrar y controlar el estado del applet. La
clase Applet es un componente del AWT (Abstract Windowing Toolkit), que permite al
applet mostrar una inteterfaz gráfica de usuario o GUI (Graphical User Interface), y
responder a eventos generados por el usuario.

La clase Hola sobrecarga el método paint(Graphics) heredado de la superclase


contenedora (Applet en este caso), para acceder al código encargado de dibujar. El
método paint() recibe un objeto Graphics que contiene el contexto gráfico para
dibujar el applet. El método paint() llama al método drawString(String, int, int) del
objeto Graphics para mostrar la cadena de caracteres Hola, mundo! en la posición (65,
96) del espacio de dibujo asignado al applet.

La referencia al applet es colocada en un documento HTML usando la etiqueta


<applet>. Esta etiqueta o tag tiene tres atributos: code="Hola" indica el nombre del
applet, y width="200" height="200" establece la anchura y altura, respectivamente,
del applet. Un applet también pueden alojarse dentro de un documento HTML usando
los elementos object, o embed, aunque el soporte que ofrecen los navegadores Web no
es uniforme.[9][10]

[editar]

Servlets

Los servlets son componentes de la parte del servidor de Java EE, encargados de
generar respuestas a las peticione recibidas de los clientes.

// Hola.java
import java.io.*;
import javax.servlet.*;

public class Hola extends GenericServlet {


public void service(ServletRequest request, ServletResponse
response)
throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
pw.println("Hola, mundo!");
pw.close();
}
}

Las sentencias import indican al compilador de Java la inclusión de todas las clases
públicas e interfaces de los paquetes java.io y javax.servlet en la compilación.

La clase Hola extiende (extends), es heredera de la clase GenericServlet. Esta clase


proporciona la interfaz para que el servidor le pase las peticiones al servlet y el
mecanismo para controlar el ciclo de vida del servlet.

La clase Hola sobrecarga el método service(ServletRequest, ServletResponse),


definido por la interfaz servlet para acceder al manejador de la petición de servicio. El
método service() recibe un objeto de tipo ServletRequest que contiene la petición del
cliente y un objeto de tipo ServletResponse, usado para generar la respuesta que se
devuelve al cliente. El método service() puede lanzar (throws) excepciones de tipo
ServletException e IOException si ocurre algún tipo de anomalía.

El método setContentType(String) en el objeto respuesta establece el tipo de contenido


MIME a "text/html", para indicar al cliente que la respuesta a su petición es una página
con formato HTML. El método getWriter() del objeto respuesta devuelve un objeto de
tipo PrintWriter, usado como una tubería por la que viajarán los datos al cliente. El
método println(String) escribe la cadena "Hola, mundo!" en la respuesta y finalmente
se llama al método close() para cerrar la conexión, que hace que los datos escritos en la
tubería o stream sean devueltos al cliente.

[editar]

Aplicaciones con ventanas

Swing es la librería para la interfaz gráfica de usuario avanzada de la plataforma Java


SE.

// Hola.java
import javax.swing.*;

public class Hola extends JFrame {


Hola() {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
add(new JLabel("Hola, mundo!"));
pack();
}

public static void main(String[] args) {


new Hola().setVisible(true);
}
}

Las sentencias import indican al compilador de Java que las clases e interfaces del
paquete javax.swing se incluyan en la compilación.

La clase Hola extiende (extends) la clase javax.swing.JFrame, que implementa una


ventana con una barra de título y un control para cerrarla.
El constructor Hello() inicializa el marco o frame llamando al método
setDefaultCloseOperation(int) heredado de JFrame para establecer las operaciones por
defecto cuando el control de cierre en la barra de título es seleccionado al valor
WindowConstants.DISPOSE_ON_CLOSE. Esto hace que se liberen los recursos
tomados por la ventana cuando es cerrada, y no simplemente ocultada, lo que permite a
la máquina virtual y al programa acabar su ejecución. A continuación se crea un objeto
de tipo JLabel con el texto "Hola, mundo!", y se añade al marco mediante el método
add(Component), heredado de la clase Container. El método pack(), heredado de la
clase Window, es invocado para dimensionar la ventana y distribuir su contenido.

El método main() es llamado por la JVM al comienzo del programa. Crea una instancia
de la clase Hola y hace la ventana sea mostrada invocando al método
setVisible(boolean) de la superclase (clase de la que hereda) con el parámetro a true.
Vease que, una vez el marco es dibujado, el programa no termina cuando se sale del
método main(), ya que el código del que depende se encuentra en una hebra de
ejecución (o thread) independiente ya lanzada, y que permanecerá activa hasta que
todas las ventanas hayan sido destruidas.

Reconociendo la necesidad de proporcionar una transición lisa para los usuarios


actuales de la máquina virtual de Microsoft® Java (MSJVM), Sun Microsystems y
Microsoft han acordado extender la licencia de Microsoft de utilizar las habitaciones del
código de fuente de Java del Sun y de la prueba de compatibilidad. Esta extensión
permite que Microsoft apoye el MSJVM hasta el 31 de diciembre de 2007, proveyendo
de clientes la capacidad a la transición del MSJVM en un horario y un plan que sea el
más eficaz para él.
El MSJVM alcanzará su finales de la vida el 31 de diciembre de 2007. Se anima a los
clientes que lleven medidas proactive la estancia informada sobre software obsoleto y se
muevan lejos del MSJVM en una manera oportuna. El MSJVM está no más disponible
para la distribución de Microsoft y no habrá realces al MSJVM. Los productos y SKUs
de Microsoft incluyendo el MSJVM continuarán actualmente siendo retirados o siendo
substituidos por las versiones que no contienen el MSJVM en un horario que se
anunciará.
Hacer anticuado el software, si bajo la forma de productos sin apoyo, el viejo servicio
embala, o aún los certificados expirados, son una edición que cada cliente necesita ser
referido a. Los clientes de la ayuda de las comunicaciones del ciclo vital del software de
Microsoft identifican software obsoleto en una manera proactive y en curso.
Recursos de la transición
Animan a los clientes a la estancia informada sobre software obsoleto y a la transición
del MSJVM en una manera oportuna. La dirección y las herramientas están disponibles
para ayudar a clientes a hacer esta transición.
Documentación
 Transición de MSJVM Guía-ÉL favorable versión. Dirección técnica en el
planeamiento de la transición y herramientas para identificar el sitio de MSJVM
y dependencias del uso.
o Conseguir a guía de transición para ELLA los pros (el archivo de
documento portable de 224 KB)
 Versión del Guía-Revelador de la transición de MSJVM. La dirección técnica
en la toma de decisión de MSJVM se acerca con opciones relacionadas de la
migración y de la transición.
o Conseguir la guía de transición para los reveladores (el archivo de
documento portable de 389 KB)
 Preguntas con frecuencia hechas (FAQ). Conseguir las respuestas a las
preguntas tales como que las versiones del ® del Microsoft Windows incluyen el
MSJVM, a donde encontrar las actualizaciones más últimas de la seguridad, y
qué opciones de la ayuda están disponibles hoy.
 Lista dependiente del uso de Microsoft. Usos de Microsoft que se han probado
para las dependencias de MSJVM.
o Repasar la lista del uso (el archivo de documento portable de 149 KB)
Software
 Herramienta de diagnóstico de MSJVM. Determina y divulga dependencias
de MSJVM en una máquina o a través de la empresa. Solamente para los
clientes que están interesados en el funcionamiento de un análisis comprensivo
de la dependencia de MSJVM.
 Controles del Browser de Microsoft J# (JBC). Applet de Recompiles a
funcionar en el marco de Microsoft .NET.
 Ayudante de la conversión de la lengua de Java (JLCA). Usos de Java de los
convertidos a la representación visual C#® de Microsoft.
Ayuda
 Newsgroup de MSJVM. Conseguir la ayuda rápida y ver cómo otras firmas
están manejando esta transición.
 Ayuda sin cargo de las herramientas. La ayuda mundial está disponible en
ninguna carga para la herramienta de diagnóstico de MSJVM, la herramienta del
retiro de MSJVM, y la ayudante de la conversión de la lengua de Java (JLCA).
En Estados Unidos, entrar en contacto con por favor PSS en (los 800) 936-5800.
Para la ayuda internacional, entrar en contacto con por favor tu subsidiario local.
o Conseguir la información del contacto para la ayuda internacional
Opciones de Transitioning: Soluciones alternativas de la tecnología de Java
Aunque Microsoft no puede atestiguar para la seguridad y la confiabilidad de las
soluciones ofrecidas por otras compañías, varias soluciones Runtime de tercera persona
del ambiente de Java (JRE) están disponibles para los clientes que deciden a perseguir
esta opción como ellas transición del MSJVM. Los clientes que eligen explorar tales
soluciones deben enganchar a la prueba antes de perseguir esta trayectoria de la
migración.

A toda variable que se use en un programa, se le debe asociar


(generalmente al principio del programa) un tipo de dato específico.

Un tipo de dato define todo el posible rango de valores que una variable puede tomar al
momento de ejecución del programa y a lo largo de toda la vida útil del propio
programa.

Los tipos de datos más comunes en java son:

Primitive Data Types

Keyword Description Size/Format

(integres)
byte Byte-length integer 8-bit two's complement
short Short integer 16-bit two's complement
int Integer 32-bit two's complement
long Long integer 64-bit two's complement

(real numbers)
float Single-precision floating point 32-bit IEEE 754
double Double-precision floating point 64-bit IEEE 754

(other types)
char A single carácter 16-bit Unicode character
boolean A boolean value (true or false) true or false
 TABLA TOMADA DE JAVA.SUN.COM DOCUMENTATION

Para el caso de strings se debera usar la Clase String que tiene dos constructores, de
momento entenderemos esto ultimo como dos maneras de crearse, ej;

a. String nombre= new String();


b. String ciudad= new String("Tijuana");

En este ultimo caso se crea la string y se inicializa con un dato o valor.

UNIDAD I ELEMENTOS BASICOS

JAVA 1.- INTRODUCCION

En el mundo moderno, las necesidades de informacion se han


incrementado bastante en la vida diaria de los individuos asi como de
las organizaciones.

Esta nueva necesidad se esta cubriendo con la integracion y participacion personal y de


las empresas, hacia la red de redes, el Internet I, y esperen a internet2.

Nuevos paradigmas de programacion se ocupan para la creacion de nuevos sisJAVA


TEMA s y necesidades creativas de informacion.

Java un lenguaje de programacion moderno implementado por la compañía


www.java.sun.com a finales de 1996, se ha convertido en el lenguaje
estandar, para la construccion de aplicaciones basadas en internet.

Los nuevos sisJAVA TEMA s de información son costosos en tiempos y recursos, la


solución moderna de sisJAVA TEMA s de información exigen nuevas herramientas y
metodologías para resolver rápida, económica y eficiente los problemas de información
planteados por las organizaciones.
Aun mas el pleno potencial del hardware no es aprovechado plenamente y existe un
considerable retraso con el software y sus aplicaciones, generando lo que se conoce
como "crisis del software".

En programación tradicional, modular o estructurada un programa describe una serie de


pasos a ser realizados para la solución de un problema, es decir es un algoritmo.

En programación orientada a objetos ( OOP ) un programa es considerado como un


sisJAVA TEMA de objetos interactuando entre sí, ambientes de desarrollo visuales
facilitan aun más la construcción de programas y solución de problemas, porque
permiten abstraer al ingeniero de software de todo el GUI (interfase gráfica) del
problema, que constituye más del 60% del código normal de un programa.

Es decir, en programación modular o estructurada un problema sencillo de información


es descompuesto en una serie de módulos(llamados procedimientos o funciones) donde
cada uno de ellos realiza una tarea específica, por ejemplo uno de ellos captura los
datos, otro resuelve operaciones, etc.

En OOP todo problema aun aquellos sencillos de información, se consideran y


resuelven como módulos de código gigante (clase) que contiene todo el código
necesario(variables, procedimientos, funciones, interfaces, etc.) para solucionar el
problema.

En programación visual( que también es heredera de OOP ),la interfase con el


usuario( pantallas) son generadas por el propio compilador y el ingeniero de software
solo se concentra en resolver el problema planteado.

En programacion java basica, se tiene la mezcla de lo mejor de estos tres mundos, es


decir construimos programas, aplicaciones y sisJAVA TEMA s de informacion usando
tecnivas estructuradas, contruyendo objetos y diseñando sisJAVA TEMA s graficos, y
todo orientado a la construcción de sisJAVA TEMA s de información basados en redes
de cualquier tipo o tamaño.

2.- JAVA MODELO DE SOLUCION

En general un problema de información es posible entenderlo,


analizarlo y descomponerlo en todos sus componentes o partes que de
una u otra manera intervienen tanto en su planteamiento como en su
solución.

Una herramienta rápida que nos permite descomponer en partes un problema para su
solución, es el llamado modelo de solución, este consiste de una pequeña caja que
contiene los tres elementos más básicos en que se puede descomponer cualquier
problema sencillo de información, estas tres partes son:

a. LA PRIMERA PARTE son todos los datos que el computador ocupa para
resolver el problema, estos datos son almacenados internamente en la memoria
del computador en las llamadas variables de entrada.
b. LA SEGUNDA PARTE son todas las operaciones generalmente algebraicas
necesarias para solucionar el problema, generalmente esta parte del modelo es
una formula (o igualdad matemática, ej. X= y + 5).

c. LA TERCERA PARTE es el resultado o solución del problema que


generalmente se obtiene de la parte de operaciones del modelo y dichos datos
están almacenados en las llamadas variables de salida.

En resumen para todo problema sencillo de información es necesario plantearse las


siguientes preguntas:

* Que datos ocupa conocer el computador para resolver el problema y en cuales


variables de entrada se van a almacenar ?

* Que procesos u operaciones debe realizar el computador para resolver el problema


planteado ?

* Que información o variables de salida se van a desplegar en pantalla para responder


al problema planteado originalmente?

Como nota importante no confundir los términos datos, variables e información;

Datos se refiere a información en bruto, no procesada ni catalogada, por ejemplo


"Tijuana", "calle primera # 213","15 años", " $2,520.00", etc.

Variables es el nombre de una localidad o dirección interna en la memoria del


computador donde se almacenan los datos, ejemplo de variables para los casos del
inciso anterior, CIUDAD, DIRECCION, EDAD, SUELDO, ETC.

Información son datos ya procesados que resuelven un problema planteado.

EJEMPLO DE MODELO DE SOLUCION

Construir un modelo de solución que resuelva el problema de calcular


el área de un triángulo con la formula área igual a base por altura
sobre dos.

ENTRADA Operación Salida

BASE AREA= BASE * ALTURA / 2 AREA


AREA

PROBLEMA 2.- CONVERTIR LA EDAD EN AÑOS DE UNA PERSONA A MESES.

PROBLEMA 3.- CONVERTIR PESOS A DOLARES.

PROBLEMA 4.- CALCULAR EL AREA DE UN CIRCULO CON LA FORMULA


PROBLEMA 5.- EVALUAR LA FUNCION PARA CUALQUIER VALOR DE
X.

Observar para el caso de constantes fijas o conocidas (PI) no se debe dar como dato de
entrada su valor, en cambio colocar directamente su valor dentro de la formula, en la
parte de operaciones del problema.

Pero recordar también que existirán problemas sencillos donde:

No se ocupan entradas o no se ocupan operaciones, pero todos ocupan salida.

Una formula grande o muy compleja puede ser más segura y fácil de resolver, si es
descompuesta y resuelta en partes, juntando al final los parciales para obtener el
resultado final.

Un problema puede tener más de una solución correcta.

El problema no esta suficientemente explicado o enunciado, entonces, estudiarlo,


analizarlo y construirlo de manera genérica.

TAREAS JAVA

Construir los modelos de solución de los siguientes problemas para


construir despues programas java:

PROBLEMA 6.- Convertir millas a kilómetros(caso normal)

PROBLEMA 7.- Convertir 125 metros a centímetros(no ocupa entradas)

PROBLEMA 8.- Se calcula que en promedio hay 4.7 nidos en cada árbol en la UABC,
también se calcula que en cada nido existen un promedio de 5.8 pájaros, se pide calcular
la cantidad total de nidos y de pájaros en los 227 arboles que existen en la UABC. (no
ocupa entradas)

PROBLEMA 9.- La gorda Sra. López y sus 8 hijos solo compran una vez al mes su
mandado en conocido supermercado, en dicha tienda el kilogramo de frijol cuesta
$8.75, el paquete de tortillas cuesta $3.55 y el frasco de café vale $14.25, si solo
compran de estos tres productos para su mandado, calcular su gasto total. ( problema no
claro)

PROBLEMA 10.- Capturar y desplegar los cinco datos mas importantes de un


automóvil(no ocupa operaciones)

PROBLEMA 11.- La distancia Tijuana - Ensenada es de 110 kilómetros. Si un


automóvil la recorre a una velocidad constante de 30 millas por hora, cuanto tiempo
tarda en llegar. ( 1 milla = 1.609 Km.) (dos maneras correctas de

resolverlo).
PROBLEMA 12.-Evaluar la función para cualquier valor de x.(caso
normal).

PROBLEMA 13.-Evaluar la función para cuando x vale 4 . (no


ocupa entradas

3.- JAVA VARIABLES>

Identificadores son conjuntos de letras y/o números que se utilizan


para simbolizar todos los elementos que en un programa, son definibles
por el usuario (programador o ingeniero de software) del mismo, como
son las variables donde se almacenan datos, funciones( pequeños
módulos con código), etiquetas, clases, objetos, etc.

En java un identificador es una palabra compuesta de letras y/o números de hasta 32


caracteres significativos, empezando siempre con una letra.

Una variable se define como un identificador que se utiliza para almacenar todos los
datos generados durante la ejecución de un programa.

En java jsp y servlets existen ciertas reglas en cuanto a variables:

 Claras y con referencia directa al problema.


 No espacios en blanco, ni símbolos extraños en ellas.
 Se pueden usar abreviaturas, pero solo de carácter general.

No deben ser palabras reservadas del lenguaje.

Ejemplos de buenas variables:

Nombre, Edad, SdoDiario, IngMensual, Perímetro, Calif1, etc.

JAVA TEMA 5: JAVA CLASES ESPECIALES

En java como lenguaje de programacion orientado a objetos,


existen aparte de la clase String, vista en el JAVA TEMA
anterior cuatro clases especiales, desendientes de la clase
numbers, que contienen una serie de metodos que facilitan
la interaccion con los usuarios de nuestras aplicaciones en
captura y despliegue de datos numericos.

Sin embargo su caracteristica mas importante a tomar en cuenta, es que objetos


numericos derivados de estaS clase, no pueden entrar a operaciones DIRECTAMENTE,
ni recibir el resultado de operaciones.

Class Integer
public final class java.lang.Integer extends java.lang.Number
{
// Fields
public final static int MAX_VALUE;
public final static int MIN_VALUE;

// Constructors
public Integer(int value);
public Integer(String s);

// Methods
public double doubleValue();
public boolean equals(Object obj);
public float floatValue();
public static Integer getInteger(String nm);
public static Integer getInteger(String nm, int val);
public static Integer getInteger(String nm, Integer val);
public int hashCode();
public int intValue();
public long longValue();
public static int parseInt(String s);
public static int parseInt(String s, int radix);
public static String toBinaryString(int i);
public static String toHexString(int i);
public static String toOctalString(int i);
public String toString();
public static String toString(int i);
public static String toString(int i, int radix);
public static Integer valueOf(String s);
public static Integer valueOf(String s, int radix);
}
Esta clase convierte un dato de tipo int a un objeto.
Este objeto contiene un solo campo de tipo int.
Pero tambien el objeto contiene una serie de metodos para convertir un
valor int a una String y tambien para convertir una String a int.
Ademas de otros metodos de igual utilidad.

** Clase y notas tomadas directamente de java.sun

Class Double

public final class java.lang.Double extends


java.lang.Number
{
// Fields
public final static double MAX_VALUE;
public final static double MIN_VALUE;
public final static double NaN;
public final static double NEGATIVE_INFINITY;
public final static double POSITIVE_INFINITY;

// Constructors
public Double(double value);
public Double(String s);
// Methods
public static long doubleToLongBits(double value);
public double doubleValue();
public boolean equals(Object obj);
public float floatValue();
public int hashCode();
public int intValue();
public boolean isInfinite();
public static boolean isInfinite(double v);
public boolean isNaN();
public static boolean isNaN(double v);
public static double longBitsToDouble(long bits);
public long longValue();
public String toString();
public static String toString(double d);
public static Double valueOf(String s);
}

** La misma fuente y las mismas notas de la clase anterior

Class Float
public final class java.lang.Float extends java.lang.Number
{
// Fields
public final static float MAX_VALUE;
public final static float MIN_VALUE;
public final static float NaN;
public final static float NEGATIVE_INFINITY;
public final static float POSITIVE_INFINITY;
// Constructors
public Float(double value);
public Float(float value);
public Float(String s);
// Methods
public double doubleValue();
public boolean equals(Object obj);
public static int floatToIntBits(float value);
public float floatValue();
public int hashCode();
public static float intBitsToFloat(int bits);
public int intValue();
public boolean isInfinite();
public static boolean isInfinite(float v);
public boolean isNaN();
public static boolean isNaN(float v);
public long longValue();
public String toString();
public static String toString(float f);
public static Float valueOf(String s);
}

*** La misma fuente y notas anteriores

Class Long
public final class java.lang.Long extends java.lang.Number
{
// Fields
public final static long MAX_VALUE;
public final static long MIN_VALUE;

// Constructors
public Long(long value);
public Long(String s);
// Methods
public double doubleValue();
public boolean equals(Object obj);
public float floatValue();
public static Long getLong(String nm);
public static Long getLong(String nm, long val);
public static Long getLong(String nm, Long val);
public int hashCode();
public int intValue();
public long longValue();
public static long parseLong(String s);
public static long parseLong(String s, int radix);
public static String toBinaryString(long i);
public static String toHexString(long i);
public static String toOctalString(long i);
public String toString();
public static String toString(long i);
public static String toString(long i, int radix);
public static Long valueOf(String s);

JAVA TEMA 6.- OPERADORES ARITMETICOS

Un operador es un símbolo especial que indica al compilador que debe


efectuar una operación matemática o lógica.

Java reconoce los siguientes operadores aritméticos:

Operador Operación

+ Suma

- Resta

* Multiplicación

/ División

% Residuo o Módulo

Como notas importantes a recordar siempre;

En problemas de division entre enteros, java trunca la parte residual, ej;

Desplegar---> 13/5 ---> el resultado es 2

Mas adelante se dira como resolver este problema.


Para resolver los problemas de potencias y raíces, se usan ciertas instrucciones
especiales que proporciona el lenguaje, llamadas funciones matemáticas, en java existe
toda una librería de instrucciones o funciones matemáticas.

Recordar que todas las funciones reciben uno o más datos o valores y regresan siempre
un resultado, una de estas funciones matemáticas es:

import java.lang.math ;

public static double pow(double a, double b);

Esta función ocupa dos valores o datos( base y exp) ambos de tipo double, y regresa un
resultado también de tipo double, ejemplo;

 resolver el problema de calcular

import java.io.*;

import java.lang.Math;

public class ejemplo1

{public static void main(String args[])

{ double base =5;

double exponente=3;

double potencia =0;

potencia = Math.pow(base, exponente);

System.out.println("potencia =" +potencia);

}// cerrar main

} //cerrar clase

En java jsp y servlets para resolver el problema de raíces, se


aprovecha una de las mas elementales y conocida de las leyes de
exponentes que dice:
Es decir una raíz cualquiera se puede transformar a una potencia con un exponente
fraccionario.

Ejemplo:

problema y = 3 x esto es equivalente a entonces

// Usando la función pow

y= 3*Math.pow(x, 0.5);


 En este ejemplo no funcional se esta dando por supuesto que no interesa el tipo
de dato que requiere la función pow() para trabajar correctamente

Para realizar operaciones con objetos numericos, recordar que no se pueden hacer
directamente operaciones con ellos ni tampoco pueden recibir resultados en ellos, lo que
se debe hacer es usar una variable temporal de tipo apropiado, hacer la operacion con
dicha variable y al final si se quiere convertir esta variable al objeto numerico
apropiado(esto ultimo se vera en el siguiente JAVA TEMA ), como lo muestra el
siguiente ejemplo;

Integer alfa = new Integer(20);

Double zeta = new Double(5);

double alfa1=0, zeta1=0;

alfa1=alfa.doubleValue();

zeta1=zeta.doubleValue();

alfa1=alfa1 + zeta1;

desplegar alfa1;

Como se observa se crearon dos objetos numericos, luego dos variables numericas
normales, luego estas dos ultimas variables se cargan con los objetos numericos que
emplean metodos propios para convertirlos a datos normales.

En java jsp y java servlets la libreria maJAVA TEMA tica completa


incluye:

Class Math
public final class java.lang.Math

extends java.lang.Object

{ // Fields

public final static double E;

public final static double PI;

// Methods

public static double abs(double a);

public static float abs(float a);

public static int abs(int a);

public static long abs(long a);

public static double acos(double a);

public static double asin(double a);

public static double atan(double a);

public static double atan2(double a, double b);

public static double ceil(double a);

public static double cos(double a);

public static double exp(double a);

public static double floor(double a);

public static double IEEEremainder(double f1, double f2);

public static double log(double a);

public static double max(double a, double b);

public static float max(float a, float b);

public static int max(int a, int b);

public static long max(long a, long b);

public static double min(double a, double b);


public static float min(float a, float b);

public static int min(int a, int b);

public static long min(long a, long b);

public static double pow(double a, double b);

public static double random();

public static double rint(double a);

public static long round(double a);

public static int round(float a);

public static double sin(double a);

public static double sqrt(double a);

public static double tan(double a);

}7.- JAVA OPERADOR CAST y CONVERSIONES

En java se puede forzar un dato, variable o una expresión a


convertirse o cambiarse a un nuevo tipo de dato.

El operador cast realiza este proceso, es decir convierte datos, variables o expresiones a
un nuevo tipo de dato, su formato es:

(nvotipo) dato , var, exp;

Ejemplo:

// declaración

int alfa;

// Asignación

alfa = 20;

// Cambio de tipo

(float) alfa;

Ejemplo:
(int) 3.1416;


 en este ejemplo se está convirtiendo un float a int, recordar
que en este caso ya no se tendrán los decimales.

 Como nota importante se puede hacer cast solo con tipos de datos, no entre tipos
de datos y objetos de una clase numerica.

Como nota importante este operador resuelve los dos problemas pendientes:

a.
b. El de la división entre enteros.
c.
d. El tipo de dato especifico que requieren las funciones.

Ejemplos:

a) // Declaración

float alfa;

// Operación

alfa = (float)23/5;

// Pero en estos casos es preferible

alfa=23/5.0;

En toda división recordar agregar a uno de los dos valores el (.0),


solo que los dos elementos sean variables entonces usar el operador
cast con una de ellas.

// Declaración

double potencia;

// Operación

potencia = Math.pow ( (double)5, (double)3);


Como se observa en el ejemplo, se puede usar pow(), directamente con
los datos, argumentos o parámetros requeridos , si estos son
numéricos, pero transformándolos con el operador cast.

Esto también va a permitir evaluar expresiones matemáticas de manera mas directa y


sencilla, solo recordando usar un pow() por cada potencia y cada raíz de la ecuación,
ejemplo:

sea

dentro de un programa esto se resuelve con;

// área de declaración de variables

double y, x;

// área de captura de datos

capturar el valor de x;

// área de operaciones

y = 3 * Math.pow(x, (double)3) - Math.pow(x, (1/3.0)) + 4 * Math.pow(x, (double)2));

// área de despliegue de resultados

desplegar x, y

En java jsp y java servlets para convertir tipos de datos numericos a objetos
numericos y viseversa se deberan usar los metodos que traen las clase numericas
de manera apropiada, en general existen tres casos generales difrentes,
considerando datos o variables numericas, objetos numericos y strings que es un
caso especial y comun:

a.1) Variable numerica a variable numerica

Usar el operador cast ejemplo:

//var to var

int alfa1=10; double alfa2=3.1416;

alfa1= (int)alfa2;
 observar que valores decimales deben declararse como doubles

a.2) variable numerica a string


ejemplo;

// var to string

int zeta=50;

String alfa= String.valueOf(zeta);

a.3) variable numerica a objeto numerico

caso 1: usando constructor

int zeta=80;

Float alfa4 = new Float(zeta);

caso 2: ya existe el objeto numerico

Double alfa5 = new Double(0);

Int zeta=30;

alfa5=Double.valueOf(String.valueOf(zeta));

b.1) Objeto Numerico a Variable numerica

todos los objetos numericos deben crearse inicializados aunque sea a (0)

Integer alfa = new Integer(300);

Int zeta = alfa.intValue();

b.2) Objeto numerico a String

Float alfa = new Float("3.45");

String beta = new String(" ");

Beta = alfa.toString();

B.3) Objeto Numerico a Objeto Numerico

Integer alfa=new Integer(50);

Double beta=new Double(0);


beta = beta.valueOf(alfa.toString());

c.1) String to variable numerica

String alfa= new String("3.5");

double beta= 0;

beta= Double.parseDouble(alfa);

c.2) String to Objeto Numerico

String alfa8=new String("50");

Double alfa9=new Double(0);

alfa9 = alfa9.valueOf(alfa8);

TAREAS JAVA POW ():

1.
2.
3.

2.
3.

3.

JAVA TEMA 9.- APLICACIONES

Recordar que JAVA es un lenguaje de programación moderno,


que esta enfocado a la construcción de sisJAVA TEMA s de
informacion que se ejecutarán en una plataforma muy diversa
de procesadores y sisJAVA TEMA s operativos.

Esto indica la necesidad de construir diversos tipos de aplicaciones, programas o


sisJAVA TEMA s, en general, este curso se centra alrededor de los sguientes tipos de
aplicaciones basicas:

1.- Aplicaciones o programas que se ejecuten en "consolas", es decir ambientes del tipo
msdos, linux, terminales tontas, etc.

2.-Aplicaciones o sisJAVA TEMA s que se ejecuten en ambientes graficos o de tipo


"ventanas:, ejemplo windows, kde o gnome de linux, sistem 8 de apple, etc.
3.- Aplicaciones de tipo APPLETS, que tambien son programas en java que se mandan
a una pc remota o lejana, donde esa pc se encarga de correrla o ejecutarla o compilarla y
correrla.

Este applet lo manda un servidor de paginas(web server) junto con la pagina


correspondiente, cada vez que un usuario se conecta al web server y requiere la pagina
que contiene el applet.

Para el caso de applets, estos se ejecutan no en consola, tampoco en una ventana, sino
dentro de el browser de la maquina remota que puede ser el internet explorer de
microsoft o el netscape.

Por supuesto que el browser del cliente debe estar preparado para ejecutar applets, esto
se hace teniendo constantemente actualizado el browser (internet explorer o netscape) y
estando sobre todo seguro que en la actualización del browser se incluya la maquina
virtual de java.

4.-Aplicacion de tipo SERVLETS, que son programas en java que se ejecutan


direcatemente en el servidor de paginas o web server, que al ser invocado o llamado por
una pc remota, el web server ejecuta el servlet, ya ejecutado se mandan generalmente
los resultados a la maquina remota, estos resultados se mandan en forma de una pagina
html, para que la maquina remota los vea en su propio browser.

Una vez que el web server o servidor de paginas ejecuta un servlet, lo mantiene vivo o
despierto, para responder de manera mas rapida a las peticiones siguientes que se hagan
del servlet.

5.- Aplicaciones JSP (Java Server Pages), tecnologia que combina codigo html y codigo
java en un solo programa o aplicación, cuando al web server le piden un jsp, lo compila,
lo convierte a servlet con todas las implicaciones que se mencionarón en el inciso
anterior y manda los resultados a la pc remota que lo solicitó.

6.- Beans y Java Beans, tecnologias de tipo servlet pero que estan especializadas
principalmente en mantener enlaces constantes a bases de datos de cualquier marca
(access, oracle, mysql, etc), esto permite que una serie de varios programas o
aplicaciones a la vez esten interactuando con el mismo java bean y por consiguiente con
la base de datos.

7.-Existen otra serie de aplicaciones diferntes que se pueden construir con java, tales
como aplicaciones rmi, aplicaciones en tiempo real, ejb , pero de momento estan fuera
del alcance de estas notas.(estarse pendiente de la siguiente actualizacion de este texto)

En general las aplicaciones a desarrollar en este curso ( consola, graficas, applets y


servlets, jsp, beans ) todas tienen en comun el lenguaje e instrucciones de programacion
de java.

El compilador a usar es el SDK (standard development kit) de Java, este kit estandar de
desarrollo de programas se encuentra en http://www.java.sun.com/j2se/, de aqui
bajarlo e instalarlo.
Solo renombrar el folder de default donde se instala a c:\jdk1.3 en lugar del que trae que
es c:\Jdk1.3.0_02

10.- APLICACIONES POR CONSOLA

Empezemos con el programa clasico de los lenguajes de


programacion:

class holamundo {

public static void main(String[] args) {

System.out.println(" HOLA MUNDO ");

} // cierra main

} // cierra clase

1.- Se debera construir usando el mejor editor del mundo,


el NOTEPAD de windows, y se debera grabar en un nuevo
folder, con el nombre de la clase (holamundo) y la
extension de .java, es decir en notepad usar save as
holamundo.java (respetar mayusculas y minusculas que se
hayan puesto en la clase), tener cuidado con notepad porque
en ocasiones lo graba como holamundo.java.txt, si esto
sucede no se puede compilar o sdk informa que no lo
encuentra, en notepad seleccionar tipo=all files o irse a
msdos y renombrarlo a .java solamente.

2.- Para compilarlo abrir una sesion de msdos dentro de windows y navegar
hasta el folder donde esta holamundo.java y compilarlo con
la siguiente instruccion:

c:\jdk1.3\bin\javac holamundo.java

observar que jdk1.3 es el folder que renombraron cuando instalaron el


sdk que bajaron de java.sun.com, si no tendran que escribir el nombre
largo del folder donde se instalo sdk.

JAVAC es el compilador de java y lo que hace aparte de mostrar los errores que puede
tener el programa es crear un nuevo archivo con extensión .class, es decir en este
ejemplo , en el folder ahora aparte de tener holamundo.java, debera haber un archivo
llamado holamundo.class, que es el equivalente a los archivos.exe o executables de
windows.

3.-El tercer paso es ejecutar el programa, esto se hace con la


instruccion:

c:\jdk1.3\bin\java holamundo
Observar que ahora es java quien executa y el archivo ya no tiene extension.

Un problema muy comun al tiempo de ejecución, es que java mande un mensaje de


classnotfound, si esto pasa al querer ejecutar el programa, solo irse al prompt de msdos
y escribir la orden:

C:>SET CLASSPATH=

Y volver a ejecutar el programa.

CARACTERISTICAS DE PROGRAMAS O APLICACIONES EN JAVA

1.- Todos los programas en java son y empiezan con una clase.

2.- Todos los programas en java, deben llevar un metodo principal, llamado main()
quien es quien contiene el codigo normal del programa.

3.- La clase y el metodo main deben abrir y cerrar sus propias llaves {}

4.- Las instrucciones terminan con punto y coma (;)

5.- Java tambien es "case sensitive", es decir diferencía mayusculas y minusculas.

Problema .- bajar, instalar el sdk java y construir, compilar y ejecutar este programa de
ejemplo

11.- APLICACIONES CONSOLA JAVA JSP Y JAVA SERVLETS (CONTINUACION)

Entradas y salidas de datos son las tareas mas comunes en


cualquier lenguaje de programación.

En aplicaciones de consola, estos procesos se ejecutan con las siguientes instrucciones:

Programa ejemplo:

import java.lang.*;

import java.io.*;

class ejemplo1 {

public static void main(String[] args) {

int alfa=0;

BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));

// se crea teclado que es un objeto para que lea la string que se captura
try {

System.out.println("dame numero entero: ");

//teclado lee una string y la convierte a variable dato numerico normal

alfa = Integer.parseInt(teclado.readLine());

} catch(IOException varerror) {System.out.println("error");}

alfa= alfa+5;

System.out.println(alfa);

} // cierra main

} // cierra clase

En java generalmente todo se maneja mediante objetos,


primero se esta creando un objeto llamado teclado que tenga
capacidad de leer una string, desde el dispositivo de
entrada estandar (teclado o System.in).

Se esta usando la instruccion System.out.println(string); para mandar mensajes al


ususario

Se esta usando el metodo readline() que tiene el objeto teclado, para leer la string del
teclado fisico.

Se esta usando Integer.parseInt, visto en el JAVA TEMA del operador cast y


conversiones, para convertir la string a una variable numerica

Se esta usando una instruccion try-catch, para detectar o prevenir problemas con los
datos que proporcione el usuario del programa, por ejemplo que en lugar de dar un
numero, proporcione letras.

Como se observa es bastante sencillo, hacer programas de entrada-salida en consola en


java

TAREAS JAVA

1.-CONSTRUIR APLICACIONES JAVA DE CONSOLA PARA TODOS LOS


MODELOS DE SOLUCION RESUELTOS