Fundamentos de Java: Plataforma, JVM y Programación Esencial
Introducción a la Plataforma Java
Java es una plataforma de desarrollo diseñada por Sun Microsystems. A la mayoría de las plataformas de desarrollo se las puede describir como una combinación de hardware y software mediante la cual se ejecuta un sistema.
La diferencia de Java con la mayoría de las plataformas es que solamente se compone por software.
Componentes de la Plataforma Java
La plataforma Java está constituida por los siguientes componentes:
- Máquina Virtual Java (JVM): Es la base fundamental de la plataforma Java, encargada de interpretar el código.
- Interfaz de Programación de Aplicaciones Java (Java API): Es una amplia colección de componentes que proveen a los programadores los medios para desarrollar aplicaciones.
- Lenguaje de Programación Java: El lenguaje en sí mismo, utilizado para escribir el código fuente.
¿Qué es una Plataforma en Informática?
En Informática, una plataforma es un sistema que sirve como base para hacer funcionar determinados módulos de hardware o de software con los que es compatible.
Origen y Características Principales de Java
El lenguaje de programación Java es un lenguaje orientado a objetos de propósitos generales diseñado por Sun Microsystems y lanzado en el año 1995. Su sintaxis es muy parecida a la de C y C++. Los desarrolladores tomaron los conceptos orientados a objetos de C++, de los cuales simplificaron algunos y eliminaron otras características que originaban dificultades para la programación.
Java surgió para funcionar de forma consistente en ambientes heterogéneos y dispersos en distintos puntos de una red. Esta plataforma permite la comunicación segura entre aplicaciones, con un consumo mínimo de recursos del sistema y la capacidad de ejecutarse en cualquier plataforma, tanto de hardware como de software.
La Máquina Virtual Java (JVM)
Junto al lenguaje de programación, también se desarrolló un procesador del lenguaje encargado de interpretar instrucciones en un código binario especial de Java. Este procesador es la Máquina Virtual de Java (JVM).
Funciones Principales de la JVM
La JVM es el componente encargado de:
- Proveer la independencia en cuanto al hardware y sistema operativo.
- Garantizar el tamaño reducido del código compilado.
- Proteger a los usuarios de posibles aplicaciones maliciosas.
La JVM es una máquina abstracta de computación.
La JVM posee un conjunto de instrucciones que puede interpretar y manipular sectores de memoria en tiempo de ejecución.
Proceso de Compilación y Ejecución en Java
Todas las instrucciones que constituyen un programa son escritas en archivos de código fuente. Estos archivos contienen el código fuente de un programa.
Java solamente sabe cómo interpretar archivos en un formato binario (bytecodes), no lenguajes de alto nivel.
Para generar estos archivos binarios, los archivos fuente son compilados utilizando una aplicación específica para este fin: el compilador javac.
Los archivos binarios contienen instrucciones de la máquina virtual en código de bytes (bytecodes). Por razones de seguridad, la Máquina Virtual Java impone un formato estricto y estructurado sobre el contenido de un archivo con formato .class.
Objetivos de la Compilación
La compilación tiene los siguientes objetivos:
- Revisar errores en la sintaxis del código fuente.
- Convertir el código fuente en código binario (bytecodes).
Cuando se ejecuta un programa, se utiliza el comando java, que se encarga de instanciar la Máquina Virtual Java para interpretar las instrucciones de los archivos binarios y, de esta forma, ejecutar la aplicación programada.
La gran ventaja de la Máquina Virtual Java es que aporta portabilidad al lenguaje, de manera que Sun Microsystems ha creado diferentes Máquinas Virtuales Java para distintas arquitecturas. Así, un programa .class escrito en Windows puede ser interpretado en un entorno Linux.
Características Fundamentales de Java
James Gosling, reconocido como el creador del lenguaje Java, realizó una descripción de sus características en el año 1996:
- Simplicidad: No es necesario realizar estudios complejos y extensos del lenguaje. Se puede comenzar a programar aplicaciones básicas con solo aprender los conceptos fundamentales.
- Orientado a Objetos: Todos los conceptos relacionados con el Paradigma Orientado a Objetos son adoptados y puestos en práctica por el lenguaje Java.
- Familiar: El lenguaje de programación Java es muy parecido al de C++. Java toma muchos conceptos de C++ y elimina algunos otros que aportan mayor complejidad.
- Robusto: El lenguaje Java está diseñado para crear aplicaciones robustas y confiables. Java provee un compilador que se encarga de evaluar el código en búsqueda de errores o situaciones anómalas.
- Seguridad: La plataforma Java ha sido diseñada para operar en ambientes distribuidos. Una aplicación Java no puede ser accedida desde el exterior, ya que se restringe el acceso de código no autorizado que pueda manipular el sistema.
- Portabilidad: La plataforma Java ha sido diseñada para soportar aplicaciones que puedan funcionar sobre sistemas con distintas características a lo largo de una red. Las aplicaciones deben ser capaces de ejecutarse en sistemas con diferentes arquitecturas de hardware y software.
- Rendimiento (Performance): Java adopta un esquema de trabajo en el cual el intérprete Java puede funcionar a una alta velocidad.
- Interpretado: A diferencia de los lenguajes compilados, Java dispone de un intérprete que se encarga de leer cada una de las instrucciones de un programa (bytecode) para saber qué acción debe ejecutar.
- Multihilo: Java permite el desarrollo de aplicaciones que soportan la ejecución de múltiples hilos de trabajo de forma concurrente.
- Dinámico: Java provee un mecanismo en el cual las clases son cargadas en el sistema a medida que se necesitan. Además, es adaptable en un ambiente cliente-servidor.
Instalación de JDK (Java Development Kit)
JDK es el software básico y necesario de Java que permite desarrollar programas usando el lenguaje de programación Java.
Las herramientas más importantes que se incluyen en este software son:
javac: Compilador de Java.java: Intérprete de Java.javadoc: Generador de documentación de las clases de un programa.appletviewer: Visualizador de applets (aplicación que se ejecuta en el contexto de otro programa).jar: Generador y manipulador de archivos JAR.
Conceptos Adicionales
Unicode
El Estándar Unicode es un estándar de codificación de caracteres diseñado para facilitar el tratamiento informático, la transmisión y la visualización de textos de múltiples lenguajes y disciplinas técnicas, además de textos clásicos de lenguas muertas.
Cadenas de Caracteres (Strings)
Un caso especial de tipo de datos es el de las cadenas de caracteres. Una cadena de caracteres no representa un tipo de dato primitivo; son objetos de la clase String.
Cuando asignamos una cadena de caracteres a una variable, en realidad Java está creando un objeto de la clase String.
Operadores en Java
Operadores Unarios
Los operadores + y - también definen las siguientes operaciones unarias:
package principal;
public class Unarios
{
public static void main(String[] args)
{
byte a = 14;
int b = 2;
System.out.println(+a);
System.out.println(-b);
}
}
+a: En este caso, el operador + produce como resultado una variable de tipo int. Si la variable afectada por este operador es de tipo byte, short o char, este operador devuelve como resultado un valor int. Si la variable a fuera de otro tipo numérico, el valor a devolver por el operador + sería del mismo tipo que su operando.
Operadores Relacionales
Se utilizan para hacer comparaciones, por ejemplo: <, >, = (para asignación, pero en comparación se usa ==).
Operador instanceof
Este operador es utilizado para saber si un objeto es una instancia o no de una determinada clase. En caso de que el objeto pertenezca a la clase, el operador devuelve true. En caso contrario, devuelve false.
Ejemplo de instanceof:
package principal;
public class OperadorInstanceof
{
public static void main(String[] args)
{
String a = "Operador instanceof";
System.out.println("a instanceof String = " + (a instanceof String));
}
}
El resultado es el siguiente:
a instanceof String = true
Operador Condicional (Ternario)
Este operador es utilizado para realizar bifurcaciones condicionales de acuerdo al valor de una expresión.
Su formato es el siguiente: expresión_lógica ? sentencia_true : sentencia_false
Ejemplo de Operador Condicional:
public class OperadorCondicional
{
public static void main(String[] args)
{
int a = 10;
int b = 5;
String resultado = (a < b) ? "a es menor que b" : "a es mayor que b";
}
}
El resultado es el siguiente:
a es mayor que b