Académique Documents
Professionnel Documents
Culture Documents
Introducción a Java
Es un lenguaje de propósito general que puede ser empleado para desarrollar cualquier tipo
de aplicación principalmente aquellas referidas a la internet.
Es una Máquina Virtual que puede ser incrustada en Web Browsers y en Sistemas Operativos.
JAVA ES MEJOR MÁS POR LO QUE NO TIENE, QUE POR LO QUE TIENE !!
A pesar que los descriptores de objetos de Java están implementados como punteros, Java no
tiene la capacidad de manipular punteros directamente, impidiendo que puedan referenciarse
direcciones de memoria de manera arbitraria. Con esto impide lo que otros lenguajes (como
C++) permiten: que no existan datos privados de verdad.
malloc() y new() asignan una cantidad de memoria (bytes) devolviendo la dirección del
bloque correspondiente.
free() y delete() liberan un bloque, para que esté disponible por el sistema nuevamente.
En Java cualquier estructura de datos compleja es un objeto que se crea a través del operador
new, que le asigna una cantidad de memoria de un "montículo", por lo que el programador no
debe preocuparse en una secuencia de direcciones ascendentes. El operador de Java new
obtiene, más que una dirección de memoria, un "descriptor" de objeto, de manera que el
programador no debe preocuparse por ubicaciones. Incluso la memoria real asignada a un
objeto podría moverse en tiempo de ejecución y esto sería transparente. Asimismo existe la
facilidad para que el programdor se despreocupe de la devolución de memoria al sistema ya
que en Java cuando no existe referencia alguna a un objeto, la memoria que está ocupando
queda disponible. A esta facilidad se le denomina "recojo automático de basura" (aunque un
mejor término hubiera sido "reciclado permanente").
C++, al tener archivos de cabecera (compilados separados que contienen las características o
"prototipo" de una clase) permite la posibilidad de tener una o más versiones distintas a la
verdadera clase implementada. Como si esto fuera poco, puesto que la interfaz a un
programador a una clase compilada es su archivo de cabecera, la clase está tan expuesta como
para incluso convertir datos privados en públicos.
Preprocesador (innecesario)
Java no requiere de un preprocesador; dispone de una palabra reservada final para declarar
constantes (en vez de usar #define).
Las características orientadas a objetos de Java son comparables con las de C++. Una de las
mayores diferencias entre Java y C++ radica en la herencia múltiple (para lo cual Java ha
encontrado una mejor solución) y en el modelo de metaclase.
Todo en Java (excepto tipos básicos como números) son objetos y clases, no existe el
concepto de estructuras de datos.
En resumen, Java :
Permite le creación de pantallas dinámicas. Existen herramientas como el VisualAge for Java
que permiten el desarrollo visual de aplicaciones.
Soporta componentes especializados reutilizables : Java Beans, los que son comparables con
OCX y ActiveX.
Simple
Java ha sido diseñado de modo cercano a C++, omitiendo características confusas de éste,
con el objeto de hacerlo un sistema más comprensible. La sintaxis de Java es una versión más
clara de la sintaxis de C++. No existe la necesidad de usar archivos de cabecera, aritmética de
punteros, estructuras, uniones, sobrecarga de operadores, clases virtuales, etc.
Uno de los grandes logros de Java que lo hace simple es que es pequeño. Java puede
desarrollar software que puede correr stand-alone en máquinas pequeñas.
Seguro
Dado que Java ha sido implementado para ser usado en ambientes distribuídos y de trabajo en
red, se ha puesto gran empeño en lo que a seguridad se refiere.
Los programas de Java no pueden llamar a funciones globales y acceder a recursos del
sistema de manera arbitraria. Es decir, se puede ejercer un control sobre los programas
ejecutables de Java, lo que no es posible en otros sistemas.
Distribuído
Java posee librerías que permiten trabajar de manera sencilla con protocolos TCP/IP tales
como HTTP y FTP. Las aplicaciones Java pueden abrir y acceder objetos que se encuentren
en la red via URLs, de un modo tan simple como acceder a un sistema local de archivos.
Las clases de Java se envían con facilidad e incluso pueden actualizarse en el proceso,
resolviendo el clásico problema de control de versiones.
Las capacidades de trabajar con Java en la red son diversas y fáciles de usar.
Robusto
Java posee buena capacidad para la verificación de errores. No posee un modelo de manejo
de punteros lo cual no le permite sobreescribir la memoria ni corromper la data.
Java verifica el código mientras se escribe y una vez más antes de ejecutarlo. Esto permite
que el programa se comporte de un manera predecible, bajo diversas condiciones.
Java ayuda a evitar fallas por condiciones excepcionales (división por cero, acceso a un
archivo no existente, etc.) mediante un manejo de excepciones orientado a objetos integrados.
Arquitectura Neutral
Cuando se diseñó Java se tomaron consideraciones, tanto para el lenguaje como para el
intéprete, de manera que un programa pueda “escribirse una sola vez, ejecutarse en cualquier
sitio, en cualquier momento y para siempre”.
Es multiplataforma: Solaris, Iris, Linux, HP/UX, OSF, Windows 95, Windows NT, OS/2,
Macintosh.
Cada parte de un programa Java se reduce a una secuencia de bytes que representan
instrucciones en una “máquina virtual” y no en una máquina (procesador) específica.
Interactivo
Java tiene varias características que permiten escribir programas que hacen muchas cosas al
instante, sin perder el control de lo que debería suceder y cuándo. El intérprete de Java
soluciona esta necesidad de sincronización entre múltiples procesos con “hilos múltiples” de
sencilla utilización, que permiten pensar en el comportamiento específico, sin tener que
integrarlo en el clásico modelo de programación global de “bucle para el evento”.
WWW y HTML: Java está diseñado para cumplir los requisitos de entrega de contenidos
interactivos usando applets insertadas en sus páginas HTML. Las clases básicas de manejo de
cadenas son especialmente adecuadas para el tipo de manejo de texto basado en HTML.
1992:
La compañía Sun Microsystems lleva a cabo el proyecto “Green” para comunicar diversos
aparatos o dispositivos electrónicos.
El prototipo era un sistema operativo distribuído “Star7” donde cada dispositivo era parte del
todo.
Se crea el lenguaje “OAK”, un intérprete para este y clases con este lenguaje para la GUI.
1993:
(Marzo) FirstPerson, susbsidiaria de Sun, responde a una petición de ofertas para el proyecto
de televisión interactiva de la compañía Time Warner, requerían un pequeño sistema
operativo en microcódigo, orientado a objetos, capaz de suminsitrar flujos de video MPEG
sobre redes ATM. Sun pierde este negocio y tampoco llega a un acuerdo con otra Cia. de
televisión por cable: 3DO.
1994:
Sun implementa un browser de Web, al que llamaron “WebRunner” que podía ejecutar clases
transferidas desde un servidor HTTP.
1995:
En enero renombran a Oak por Java y a WebRunner por HotJava.
En noviembre aparece en la Web la 1ra. versión beta oficial: JDK 1.0
1996:
En diciembre se libera JDK 1.1.
1998:
En diciembre se lanza JDK 1.2 al cual se le conoce como Java2.
Introducción a Java 1 - 10
OOP con JAVA Guía del Alumno
Introducción a Java 1 - 11
OOP con JAVA Guía del Alumno
Introducción a Java 1 - 12
OOP con JAVA Guía del Alumno
javadoc: Produce documentación HTML a partir del código fuente.
javah: Crea el encabezado para el enlace con otros lenguajes.
jdb: Depurador algo rudimentario.
keytool: Crea pares de claves usadas para “firmar” y autentificar programas.
policytool: Define los criterios de autentificación y las funciones permitidas para programas
confiables.
jar: crea un archivo que contiene a otros.
jarsigner: prepara archivos jar para ser autentificados.
native2ascii: convierte un archivo nativo a un unicode.
rmic: crea el esqueleto para RMI.
rmiregistry: inicia el registro remoto de objetos.
serialVer: crea un único identificador para la serialización.
El compilador javac produce los bytecodes a partir del archivo fuente .java. Los bytecodes
corresponde al lenguaje de la Máquina Virtual.
La máquina virtual puede ser integrada (incrustada) dentro de otro ambiente tal como un web
Introducción a Java 1 - 13
OOP con JAVA Guía del Alumno
STATIC
Introducción a Java 1 - 14
OOP con JAVA Guía del Alumno
Las variables o métodos que son especificados mediante la palabra reservada STATIC son
ubicadas en esta área. Los elementos estáticos son cargados sólo una vez al momento que la
clase es instanciada por primera vez o cuando la variable o método estático son referenciados
por primera vez.
STACK
Las variables locales declaradas dentro de un método (incluyendo los parámetros de los
métodos) son alojadas en esta área. Las variables locales son alamcenadas cuando el método
es ingresado.
HEAP
Todos los objetos son instanciados en esta área denominada de almacenamiento dinámico. Un
objeto es instanciado desde las partes no-estáticas de una clase. Cuando un objeto es recogido
por el colector de basura es el heap quien es retornado al sistema.
Aún cuando Java es interpretado, compiladores Just In Time (J.I.T.) ofrecen del lado del
cliente compilación de bytecodes a código máquina (instrucciones binarias nativas).
Introducción a Java 1 - 15
OOP con JAVA Guía del Alumno
Si se conoce con seguridad de que la aplicación desarrollada será puesta en una máquina
específica existen compiladores de java disponibles, los cuales compilan los bytecodes a
código nativo una vez, guardan el resultado y lo llaman cada vez que sea necesario.
Esta tecnología se está mejorando continuamente y puede llegar a resultados que no van a ser
superados fácilmente por un compildaor tradicional.
Un compilador JIT puede monitorear qué código se ejecuta frecuentemente y optimizar ese
código para obtener mayor velocidad.
Se han normalizado algunos lenguajes de programación (por ejemplo ANSI C) con lo que se
mantiene cierta compatibilidad, sin embargo siempre es necesaria la recompilación el código
fuente.
Introducción a Java 1 - 16
OOP con JAVA Guía del Alumno
En general todo programa se tiene que rehacer o adaptar para que funcione en una plataforma
diferente para la que se diseñó.
La estrategia de Java
Java trabaja con un código objeto (Byte Code) que representa instrucciones de máquina para
un procesador virtual.
Java requiere de un intérprete (JVM por las siglas en inglés de Java Virtual Machine) para
cada sistema operativo en el que se ejecuta.
Introducción a Java 1 - 17
OOP con JAVA Guía del Alumno
Un paquete es un medio de encapsulamiento de mayor nivel que las clases, que puede
contener clases, interfaces y también a otros paquetes.
Los paquetes se usan también como un mecanismo para evitar conflictos entre nombres: Se
Introducción a Java 1 - 18
OOP con JAVA Guía del Alumno
puede tener dos clases con el mismo nombre pero en diferentes paquetes.
Introducción a Java 1 - 19
OOP con JAVA Guía del Alumno
En teoría es posible que Java se convierta en un lenguaje universal para todas las plataformas,
sin embargo existen muchas aplicaciones que trabajan muy bien en ciertas plataformas que
podrían no hacerlo en otros dispositivos o en browsers.
Si existe un compilador JIT una aplicación escrita en Java puede ser tan rápida como
cualquier otra.
Todos los applets se ejecutan en un web browser (por definición) sin embargo se pueden
desarrollar aplicaciones que no necesitan un browser para ejecutarse.
Introducción a Java 1 - 20