Vous êtes sur la page 1sur 20

Capítulo 1

OOP con JAVA Guía del Alumno

Introducción a Java

Introducción a Java 1-2


OOP con JAVA Guía del Alumno

JAVA es un lenguaje de programación orientado a objetos, desarrollado por Sun


Microsystems.

Es un lenguaje de propósito general que puede ser empleado para desarrollar cualquier tipo
de aplicación principalmente aquellas referidas a la internet.

Introducción a Java 1-3


OOP con JAVA Guía del Alumno

Es una Máquina Virtual que puede ser incrustada en Web Browsers y en Sistemas Operativos.

Es un conjunto de Librerías de Clases Estandarizadas (paquetes) que soportan:


Creación de interfaces gráficas de usuario.
Comunicación en redes.
Control y manejo de multimedia.

JAVA ES MEJOR MÁS POR LO QUE NO TIENE, QUE POR LO QUE TIENE !!

Variables Globales (expuestas a todos)


En Java, el único espacio de nombres global es la jerarquía de clases. No es posible crear una
variable global que esté fuera de todas las clases.

GoTo (para hacer tallarines)


Java reserva GoTo como palabra clave para EVITAR que los programadores la utilicen de
manera confusa. Por el contrario, tiene un concepto de sentencias Break y Continue
etiquetadas para cubrir los únicos usos importantes del GoTo.

Punteros (mentirosos y peligrosos)

Introducción a Java 1-4


OOP con JAVA Guía del Alumno

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.

Asignación de memoria (buscando un sitio)


En C++ hay que preocuparse por la gestión de la memoria.

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").

Tipos de datos frágiles (dependencia del procesador)


Java eligió tamaños adecuados para todos los tipos numéricos de manera de garantizar
resultados independientes de la plataforma de hardware. La mayor parte de los lenguajes
hacen depender la implementación de los tipos al tamaño natural de "palabra" de la máquina,
diferenciándolos así de acuerdo al procesador.

Conversión de tipos (insegura)


Como los descriptores de objetos de Java incluyen información de la clase a la que
pertenecen, puede hacerse comprobaciones de compatibilidad de tipos en tiempo de ejecución
y controlarlo con excepciones. En C++ no hay forma de detectar esto en tiempo de ejecución,
pues los objetos son simplemente punteros a direcciones de memoria. Algo parecido sucede
con las listas de argumentos de longitud variable donde la comprobación de tipos queda bajo
responsabilidad del programador.

Archivos de cabecera (descabezados)


El lugar natural para la información de una clase es el mismo archivo compilado. En Java no
hay archivos de cabecera. El tipo y visibilidad de los miembros de la clase se compilan en el
archivo de la clase.

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)

Introducción a Java 1-5


OOP con JAVA Guía del Alumno

Los compiladores de C y C++ recurren al preprocesador, que se encarga de buscar comandos


especiales (que empiezan con #).

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 :

Es el siguiente paso al lenguaje C++.

Soporta librerías de clases como C++.

Es multipropósito como C o C++.

Introducción a Java 1-6


OOP con JAVA Guía del Alumno

Tiene, a diferencia de C++, un modelo de punteros que elimina la posibilidad de sobreescribir


la memoria o corromper la data.

Soporta la mayoría de propiedades de un lenguaje orientado a objetos.

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.

Maneja concurrencia como Mesa.

Controla excepciones como C++.

Enlaza código en forma dinámica como Lisp.

Permite definir interfaces como Objetive C.

Administra en forma automática la asignación dinámica de memoria como Lisp.

Tiene sentencias simples como C.

Genera código compacto como ensamblador.

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.

Tiene conceptos básicos de programación orientada a objetos, lo que proporciona un


paradigma de simplicidad, pero a su vez permite llegar a un nivel lo suficientemente bajo
(detalle) como para poder realizar casi cualquier cosa.

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

Introducción a Java 1-7


OOP con JAVA Guía del Alumno

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.

No se puede corromper memoria fuera del espacio en el que corre el proceso.

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.

Java prácticamente elimina la posibilidad de falla en la gestión de memoria (no liberarla o,


peor aún, liberar aquella que no corresponde) mediante la facilidad de “recojo de basura”.

Entorno con muchas facilidades


El entorno Java provee varias clases necesarias para la interacción de un programa con otros.

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.

Interpretado y de alto rendimiento


Java compila a una representación intermedia llamada “código de byte”, el que se puede
interpretar en cualquier sistema que tenga un intérprete de Java. Este código de byte fue
diseñado de tal manera que sea sencilla la necesaria traducción a código de máquina nativo.
Con esto se logró que un intérprete sea de alto rendimiento.

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.

Introducción a Java 1-8


OOP con JAVA Guía del Alumno

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”.

Óptimo para Internet


TCP/IP : Java provee clases para gestionar limpiamente protocolos de Internet. Incluye
implementaciones de ftp, http, nntp, smtp junto con conectores de red de bajo nivel (sockets)
e interfaces de nombrado.

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

Introducción a Java 1-9


OOP con JAVA Guía del Alumno

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.

La 1ra. Applet: la mascota “Duke” aparece saludando des una página.

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

Existen diversas aplicaciones que se encuentran en el Java Standard


Development Kit (JSDK) que permiten realizar diferentes funciones. Las tres
herramientas principales son:

· javac: Es el compilador Java por excelencia, es un compilador de línea de


comandos, que permite crear programas y applets en Java. Compila
código java a bytecodes.

· java: Es el intérprete que permite ejecutar las aplicaciones desarrolladas


en Java.

· appletviewer: Es un visualizador de applets, con esto ya no es necesario


cargar los applets en un browser.

Introducción a Java 1 - 11
OOP con JAVA Guía del Alumno

El JSDK también incluye:

Ÿ javap: Es un descompilador que permite ver el contenido de las clases


compiladas.

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.

Una máquina virtual es el procesador en el cual se ejecuta el código (bytecode) de Java. Es un


conjunto de instrucciones que entiende al intérprete de Java.

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 no corresponde a un sistema operativo o plataforma de hardware en


particular, el archivo .class es portable a cualquier implementación 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

browser o un sistema operativo.

La máquina virtual utiliza un verificador de bytecode cuando se leen los bytecodes.

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).

Estos compiladores mejoran la performance para un hardware específico.

Si se utiliza el intérprete estándar de Java no se puede hablar de “alta performance”.

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.

El problema de la incompatibilidad de plataformas

Un programa funciona sólo en la plataforma para la cual fue diseñado.

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.

Cada fabricante agrega funcionalidad no estándar a un lenguaje de programación. Cada


sistema operativo restringe a los programas en los servicios y capacidades de los mismos.

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 fue diseñado para funcionar en sistemas heterogéneos.

Java no depende de la plataforma de hardware/software en la que se ejecuta.


Java provee las mismas librerías (API) para cada sistema operativo en el que se ejecuta.

Java no requiere de recompilar el código, se programa y compila solo una vez.

Java es de arquitectura neutral.

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.

El beneficio de esta arquitectura es la de comprar una vez, se ejecuta en cualquier sitio, se


escribe una vez y se vende para cualquier plataforma.

Introducción a Java 1 - 17
OOP con JAVA Guía del Alumno

Relación de Sistemas Operativos que soportan Java

Como se ha mencionado, Java es multiplataforma y soporta practicamente todos los sistemas


operativos (SOs) disponibles en el mercado.

Entre los SOs que soporta Java están:


Solaris
Iris
Unix
Linux
HP/UX
OSF
Windows 95/98
Windows NT
OS/2
Macintosh

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.

El API de Java es un grupo de paquetes.

Físicamente un paquete representa a un directorio. Si el nombre del paquete está compuesto


por palabras divididas por puntos, cada palabra representará un directorio que contendrá a
otro directorio que será la siguiente palabra, así hasta la última palabra que será el directorio
que contenga los archivos con el código fuente o compilado de las clases que forman parte
de este paquete.

Introducción a Java 1 - 19
OOP con JAVA Guía del Alumno

Java es un lenguaje de programación mientras que HTML es una manera de


describir la estructura de una página web.

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.

JavaScript es un lenguaje desarrollado por Netscape (originalmente denominado LiveScript)


que puede ser usado en páginas web, sin embargo no tiene ninguna relación con Java excepto
por la similitud del nombre.

Introducción a Java 1 - 20

Vous aimerez peut-être aussi