ORÍGENES DEL LENGUAJE JAVA
Este lenguaje fue concebido por James Gosling, Patrick Naughton, Chris
Warth, Ed Frank y Mike Sheridan para Sun Microsystems, en 1991.
Inicialmente “Oak” pero después en 1995, se renombró como Java.
Se crea pesando en cubrir la necesidad de tener un lenguaje independiente
de la plataforma y que se pudiera usarse para crear software
incorporable en dispositivos electrónicos, como televisores, hornos
microondas, neveras, etc.
En la búsqueda de una solución, se trabajó en un lenguaje portátil de
plataforma cruzada que generase códigos que se pudiesen ejecutar en
distintos CPU para diversos ambientes.
Es importante resaltar que aunque la motivación inicial de Java no era la
Internet, el mismo está fuertemente ligado a la red, ya que mientras se
desarrollaban los detalles de Java, apareció La World Wide Web y el equipo
que lo desarrollaba se dio cuenta que este nuevo entorno los mismos
requerimientos que ellos perseguían cubrir con Java:programas de código
pequeño, confiable,seguro e independiente de la plataforma.
EL LENGUAJE DE PROGRAMACIÓN JAVA
Java es en esencia un lenguaje de programación orientado a
objetos. También se define como una plataforma en la que las
aplicaciones pueden ser desarrolladas y ejecutadas.
La mayoría de las características básicas de Java provienen de C y
C++.
Java provee un ambiente de programación poderoso y lógicamente
consistente, que contiene los mejores elementos del pasado y le
agrega nuevas características necesarias para ambientes en línea.
Uno de los aspectos centrales de la filosofía del diseño en C, C++
y Java, es que el programador ejerce el control; excepto por las
restricciones que impone el ambiente Internet.
El diseño de Java es tal que, es multiplataforma en código fuente y
la forma binaria compilada. Esto es posible, ya que Java compila
su código fuente en un bytecode intermedio e independiente de la
plataforma. Este bytecode es interpretado usando un intérprete
específico de la plataforma, es decir la Máquina Virtual de Java
(Java Virtual Machine – JVM) en tiempo de ejecución del
programa.
EL LENGUAJE DE PROGRAMACIÓN
JAVA
El lenguaje de programación Java permite
desarrollar básicamente dos tipos de programas:
aplicaciones y applets.
Una aplicación es un programa autónomo que
puede ejecutarse en una computadora, bajo el
sistema operativo de esa computadora.
Un applet es un pequeño programa Java que
puede se embebido en una página HTML.
Aunque, se pueden desarrollar programas de
consola, esta no es su orientación.
CARACTERÍSTICAS DEL LENGUAJE
Simple: Java es bastante fácil de aprender, dado que tiene la sintaxis de
C/C++. Es muy fácil que un programador experimentado la domine, ya
que solo se necesita una comprensión apropiada de los conceptos de
programación orientada a objetos. Además de su similitud con C/C++,
Java tiene otra característica que lo hace simple, y es que Java hace un
esfuerzo por no tener características sorprendentes. En Java hay un
número reducido de formas claras para abordar una tarea dada.
Orientado a Objetos: Java no se creó para ser compatible en código
fuente con otros lenguajes. Esto otorgó a los desarrolladores de Java la
libertad de diseñar un lenguaje partiendo de cero. El resultado de esto fue
una aproximación limpia, útil y pragmática a los objetos, en un lenguaje
puramente orientado a objetos. El modelo de objetos Java es simple y fácil
de ampliar, mientras los tipos simples permanecen como “no objetos” de
alto rendimiento.
Portable: Java, usa un conjunto optimizado de instrucciones, diseñado
para ser ejecutado por una Máquina Virtual, que es emulada por el
sistema en tiempo de ejecución de Java. Este conjunto de instrucciones se
conoce como BYTECODE, que representa la salida de un compilador de
Java. Esto significa que el sistema de tiempo de ejecución de Java es un
Intérprete de BYTECODE. Debido a esto, sólo el sistema de tiempo de
ejecución de Java tiene que ser implementado para cada plataforma, y
una vez que este paquete existe para un sistema, cualquier programa
Java puede correr en él
CARACTERÍSTICAS DEL LENGUAJE
Interpretado y de Alto Rendimiento: Java fue diseñado para ser un lenguaje
interpretado, a fin de solucionar los aspectos relacionados con la descarga a través de la
Internet. Ejecutar programas de Java en diferentes entornos es una tarea simple debido
a que estos programas (BYTECODE) son Interpretados por una Máquina Virtual Java. A
pesar de que el BYTECODE de Java es interpretado, está diseñado de tal forma que fácil
de traducir a código máquina nativo para alto rendimiento.
Seguro: Una de las principales características de Java, es que la ejecución de un
programa Java está limitada al entorno de ejecución Java, por lo que no se proporciona
acceso a partes restringidas del computador. Esto lo garantiza la característica de ser un
lenguaje interpretado, ya que el sistema de tiempo de ejecución puede contener un
programa y evitar que produzca efectos colaterales fuera del sistema, obedeciendo al
hecho que la Máquina Virtual controla la ejecución de cada programa Java.
Robusto: Siendo un lenguaje estrictamente tipificado, Java verifica el código del
programador en tiempo de compilación, y además en tiempo de ejecución. Java da una
alta prioridad a la capacidad de generar programas confiables, a fin de enfrentar las
extraordinarias demandas provenientes del entorno multiplataforma de Internet.
Multihilo: Java fue diseñado para cumplir el requisito del mundo real de crear
programas en red interactivos. Para conseguir esto, Java proporciona la programación
multihilo, que permite escribir programas que realicen varias cosas a la vez. El intérprete
Java permite la sincronización de multiprocesos, que permite la construcción de
programas interactivos, que se ejecuten eficientemente.
CARACTERÍSTICAS DEL LENGUAJE
Distribuido: Java fue diseñado para el entorno distribuido de
Internet, por lo que trabaja con el protocolo TCP/IP. Java incorpora
capacidades para el envío de mensajes que hacía posible que los
objetos en computadoras separadas ejecutaran procedimientos en
forma remota. Esta característica le proporciona una abstracción
única para la programación Cliente-Servidor.
- Dinámico: En Java el código puede ser enlazado dinámicamente
en forma segura. Esto es posible por las grandes cantidades de data
en tiempo de ejecución que procesan los programas de Java, que es
usada para la verificación y resolución de accesos a objetos en
tiempo de ejecución. Esta característica es importante para la
robustez del entorno de applets, y hace posible actualizar
dinámicamente pequeños bits del BYTECODE en un sistema en plena
ejecución.
JAVA vs C/C++
Comparado con C++, Java es considerado un lenguaje puramente orientado a objetos,
debido a quelos programas Java requieren necesariamente el uso de objetos y no como
en C++, en donde se pueden escribir programas híbridos. En Java no existen funciones
ni variables globales; todas las interfaces con data de objetos deben ser definidas en
las bibliotecas de clases.
Java es robusto considerando sus técnicas de administración de memoria, ya que
administra la asignación y liberación de memoria de forma automática. A diferencia de
C/C++ en donde el programador debe asignar y liberar manualmente la memoria
dinámica.
Los desarrolladores de Java añadieron la característica de la recolección automática de
basura. En C/C++ una fuente complejidad en muchas aplicaciones es la administración
de almacenamiento, que significa asignación y liberación de memoria. La recolección de
basura que efectivamente significa liberación periódica de memoria que no está siendo
referenciada, asegura que Java no solo facilita la programación, sino ayuda a reducir
drásticamente los errores en tiempo de ejecución.
Java omite muchas características de difícil comprensión de C++. Estas características
omitidas consisten principalmente en la sobrecarga de operadores, la herencia múltiple
y las conversiones automáticas extensivas.
La mayor diferencia entre Java y C/C++, es la característica de Java de ser
Multiplataforma. En C/C++ es imposible ejecutar el mismo archivo objeto en diversas
plataformas. El diseño de Java es tal que es multiplataforma tanto el código fuente
como el código binario.
LA PLATAFORMA JAVA
Una plataforma se define como el entorno de hardware y/o
software sobre el cual se ejecutan los programas. La
plataforma Java es una plataforma de sólo software, que se
ejecuta sobre cualquier otra plataforma basada en
hardware. Java posee tres grandes plataformas:
J2SE (Java 2 Platform Standard Edition),
J2EE (Java 2 Platform Enterprise Edition)
J2ME (Java 2 Platform Micro Edition).
La Java 2 Platform Standard Edition – J2SE
(Plataforma Java 2 Edición Estándar) es un conjunto de
especificaciones que describen el ambiente de desarrollo de
aplicaciones Java.
LA PLATAFORMA JAVA
El J2SDK (Equipo
Estándar de Desarrollo -
SDK), es un ambiente
de desarrollo para
construir aplicaciones,
applets, y componentes
usando el lenguaje de
programación Java.
El Java 2 SDK, incluye
un conjunto de
herramientas y
utilidades de desarrollo
así como también el
ambiente de ejecución
Java.
HERRAMIENTAS Y UTILIDADES DE
DESARROLLO
Es un conjunto de herramientas para desarrollar
y probar programas escritos en el lenguaje Java y
ejecutarlos en la plataforma Java. Están
diseñadas para ser usadas desde la línea de
comandos.
Generalmente se agrupan en las siguientes
categorías:
Básicas: herramientas fundamentales del SDK
que se usan para crear y construir aplicaciones.
Algunas de las herramientas básicas que
usaremos en este curso se describen a
continuación:
HERRAMIENTAS Y UTILIDADES DE
DESARROLLO
- RMI: herramientas que te permiten crear aplicaciones que interactúan entre redes, tales como
la Web.
- Internacionalización: herramientas que te permiten crear aplicaciones que puedan ser
adaptadas a cualquier idioma y región. El estudio de estas herramientas esta fuera del alcance de
este curso.
- Seguridad: herramientas que te permiten establecer políticas de seguridad en tu sistema
operativo y crear aplicaciones que puedan trabajar dentro del alcance de estas políticas y permitir,
de forma segura, el acceso a tu aplicación desde sitios remotos.
- IDL y RMI-IIOP: herramientas utilizadas para crear aplicaciones que usen el estándar
OMG IDL y CORBA/IIOP.
- Java Plug-in: utilidades para usar en conjunto con el Java Plug-in.
EL AMBIENTE EN TIEMPO DE EJECUCIÓN DE JAVA – JRE
El Java 2 Runtime Environment (Ambiente de Ejecución de Java - JRE), permite ejecutar aplicaciones
escritas en Java. Contiene la Máquina Virtual de Java, las clases comprendidas en la API de Java y las
tecnologías de despliegue.
- La Máquina Virtual de Java - JVM: La Java Virtual Machine es una computadora abstracta implementada
sobre una plataforma particular que interpreta el código binario o BYTECODE y lo ejecuta en esa
plataforma, limitando el acceso a otras partes del sistema.
La JVM (JVM) se compone de las siguientes partes:
Java HotSpot Client VM: diseñado para ejecutar las aplicaciones en un ambiente de Cliente,
reduciendo el tiempo de carga de una aplicación y la paginación de memoria.
Java HotSpot Server VM: diseñado para obtener las máximas velocidades de ejecución en un
ambiente de Servidor.
- La Interfaz de Programación de Aplicaciones – API: La Interfaz de Programación de Aplicaciones Java
(API), es una conjunto de partes de software (clases e interfaces) organizada, coherente y consistente
en paquetes. Estas clases, suelen agruparse de acuerdo al servicio que prestan:
Núcleo (proveen el conjunto de paquetes esenciales para crear aplicaciones Java, tales como:
fundamentos del lenguaje, utilidades del lenguaje, procesos de E/S, comunicación de redes,
preferencias, colecciones, JNI, seguridad, XML, cifrado y componentes).
Integración (proveen el conjunto de paquetes que te permiten crear aplicaciones que puedan invocar
métodos/procedimientos remotos, comunicarse con bases de datos y crear servicios de nombres y
directorios).
Interfaces de Usuario: proveen el conjunto de paquetes para la creación de aplicaciones con amigables
interfaces graficas de usuario (AWT y Swing).
- Tecnologías de despliegue: están representadas por la “Java Web Start” y el “Java
Plugin”, que son tecnologías que permiten ejecutar aplicaciones Java desde Internet.
ELEMENTOS DE LA POO
CLASES
La clase es núcleo de Java. Es la construcción lógica sobre la que se
construye el lenguaje Java, ya que define la forma y la naturaleza de un
objeto.
La clase constituye la base de la Programación Orientada a Objetos en
Java. Cualquier concepto que desee implementar en un programa Java
debe ser encapsulado en una clase. Dentro de una clase están definidos
los datos y los códigos que actúan sobre esos datos. Todas las
actividades del programa Java ocurren dentro de una clase, razón
por la cual se dice que Java es un lenguaje 100% orientado a objetos.
Una clase en Java se define como: “una plantilla que tiene las
definiciones de variables o estados y métodos o comportamientos que es
común a todos los objetos de un tipo en particular”.
Java usa especificaciones de clase para construir objetos, que son
instancias de una clase.
Es importante tener claro que una clase es una abstracción lógica, por
lo que hasta que un objeto de esa clase sea creado, no existirá una
representación física de esa clase en memoria.
DEFINICIÓN DE LAS CLASES
Cuando se define una clase, se manifiesta su naturaleza y forma exacta.
Esto se hace especificandolos miembros de la clase, es decir las variables y
los métodos que operan en ella.
Una clase se define a través de la palabra clave class. A continuación se
muestra la forma general de la definición de una clase:
[acceso] [modif] class NombreClase [extends SuperClase] [implements
Interfaces]
{
// Variables miembro
[acceso] [modif] tipo nombreVariable [= valorInicial];
// Métodos miembro
[acceso] [modif] tipo nombreMetodo([parametros]) [throws
excepciones]
{
// Cuerpo del método
};
};
CLASES EJECUTABLE
Dicha clase tiene la característica particular de poseer un método de clase
denominado main. Este método es semejante a la función main() de
un programa C++, razón por la cual, va a ser el primer método en
ejecutarse al correr un programa Java.
public class NombreClase [extends SuperClase] [implements interfaz]
{
// Variables miembro
// Métodos miembro
// Método main
public static void main(String [ ] args) {
// Cuerpo del método
};
…
};
Otra característica importante de las clases ejecutables, es que la misma
debe ser public y llamarse igual al archivo que la contiene, es decir el
nombre del archivo fuente (archivo .java) debe ser el idéntico al nombre
de la clase.
OBJETOS
La creación de un objeto es básicamente la creación de una
instancia de una clase. Un objeto de una clase se crea mediante el
operador new, como se muestra a continuación:
Coordenadas plano = new Coordenadas ();
En realidad, en la sentencia dada se realizan tres acciones: la
declaración del objeto, la instanciación del objeto y la inicialización
del mismo. La declaración del objeto no necesita realizarse junto
con la creación del objeto. Pueden hacerse en pasos separados
como se muestra a continuación:
Coordenadas plano;
plano = new Coordenadas();
Aquí la primera de las dos líneas es la declaración del objeto, en
donde Coordenadas representa a la clase y plano es la variable de
referencia a los objetos. El operador new en Java es llamado
operador de instanciación, el cual se usa para crear nuevos
objetos. La inicialización del objeto se hace usando
Coordenadas(), que es la llamada a su constructor usado para
inicializar el objeto.
OBJETOS
Constructores de una clase: Todas las clases en Java tienen al
menos un constructor para inicializar un objeto nuevo creado a
partir de un tipo en particular.
El nombre del constructor es el mismo que el nombre de la clase,
no tiene tipo de retorno y debe ser público. Java nos permite
tener tantos constructores como queramos para una clase
(sobrecarga del constructor).
Mientras creamos nuestra propia clase, no necesitamos escribirle
un constructor, ya que el sistema en tiempo de ejecución
proporciona un constructor por omisión para la clase si nosotros
no desarrollamos ninguno. Este constructor por omisión, tiene una
implementación vacía.
PAQUETES
Todas las clases en Java pertenecen a algún paquete. Como se mencionó
anteriormente, cuando no se especifica algún paquete se usa el paquete
predeterminado (o global). Además, el paquete predeterminado no tiene
nombre, lo que lo hace transparente.
¿Cómo sabe el sistema en tiempo de ejecución de Java dónde buscar los
paquetes?
Primero, por omisión: el sistema en tiempo de ejecución de Java busca
en el directorio en curso como punto de partida. Así, si sus archivos de
clase están en el directorio actual, o en un subdirectorio del directorio
actual, ellos se encontrarán.
Segundo, puede especificar una ruta o rutas de directorios,
colocándola en la variable de entorno CLASSPATH.
PAQUETES Y ACCESO A MIEMBROS
OBJETOS
Constructores de una clase: Todas las clases en Java tienen al
menos un constructor para inicializar un objeto nuevo creado a
partir de un tipo en particular.
El nombre del constructor es el mismo que el nombre de la clase,
no tiene tipo de retorno y debe ser público. Java nos permite
tener tantos constructores como queramos para una clase
(sobrecarga del constructor).
Mientras creamos nuestra propia clase, no necesitamos escribirle
un constructor, ya que el sistema en tiempo de ejecución
proporciona un constructor por omisión para la clase si nosotros
no desarrollamos ninguno. Este constructor por omisión, tiene una
implementación vacía.
LOS TIPOS DE DATOS DE JAVA
Java contiene dos categorías generales de tipos de datos
incorporados: el orientado a objetos y el no orientado a
objetos.
Los tipos de Java orientado a objetos son definidos por
clases y los no orientados a objetos, son los que nosotros
llamamos tipos de datos simples.
LOS TIPOS DE DATOS DE JAVA
Conversiones implícitas de tipos: En la programación es común
asignar un tipo de variable a otro. Por ejemplo se pudiese querer
asignar un valor int a una variable float.
int i; float f;
i = 10; f = i;
En resumen, cuando un tipo de datos se destina a otro tipo de
variables, se realiza
una conversión de tipo automática, si se cumplen dos condiciones:
1. Los dos tipos son compatibles.
2. El tipo destino es más grande que el tipo de origen.
No hay conversión implícita de los tipos numéricos a char o
boolean. Tampoco char y boolean son compatibles entre si. Sin
embargo, un literal entero puede ser asignado a char
LOS TIPOS DE DATOS DE JAVA
Tipos de datos orientados a objetos: Estos tipos de datos son clases
construidas a partir de los tipos de datos simples. Java especifica un
conjunto de clases que permiten realizar programas Java 100% orientados
a objetos, y esto es lo que hace a los programas transportables. Los tipos
orientados a objetos proporcionados en Java, se encuentran almacenados
en paquete [Link], y éstos son:
o Object: Object es la superclase de todas las demás clases,
representa la clase más arriba en la jerarquía de todos los objetos en
Java. Algunos de los métodos que define la clase Object y que están
disponibles para todos los objetos son:
LOS TIPOS DE DATOS DE JAVA
String: En muchos lenguajes de programación, una cadena es un
arreglo de caracteres. Este no es el caso de Java. En Java, las cadenas
son objetos. Cuando se crea una cadena literal, realmente, se está
creando un objeto String. Por ejemplo, el literal “Hola”, es elaborado
automáticamente, por Java, dentro de un objeto String.
Las cadenas simplemente se construyen como cualquier otro objeto,
utilizando el operador new y llamando al constructor de la clase; en
este caso la llamada se hace al constructor de String, el cual tiene dos
formas: Sin parámetro y con un objeto String, como parámetro, para
inicializar la cadena.
Ejemplos de construcción de cadenas:
String cad = new String ();
String cad1 = new String (“Hola”);
String cad2 = new String (cad1);
String cad3 = “Hola Mundo”;