====== Java ====== ¿Qué es Java? Java es una plataforma creada por [[https://es.wikipedia.org/wiki/James_Gosling|James Gosling]] para la compañía //Sun Microsystems// {{ :bloque1:sun_microsystems_logo.png?200|}} en 1995. En el año 2010 fue adquirida por //Oracle//. Se pretendía crear un lenguaje de programación que pudiera ser ejecutado en otros ordenadores, sin la necesidad de ser recompilado. ===== Java como Lenguaje de programación ===== Java como lenguaje es solamente un glosario de palabras e instrucciones propios, que tienen su propias reglas léxicas. Al fin y al cabo es solo un idioma para comunicarnos con el ordenador, en forma de texto. * Java es un lenguaje de programación de alto nivel de abstracción; esto quiere decir que se aleja del lenguaje de la máquina (código máquina) y se acerca al lenguaje de las personas (inglés). * Su sintaxis está basada en la de lenguajes como //C// o //C++//, pero no permite tanto trabajo a bajo nivel como ellos. * Es un lenguaje de propósito general, por lo que se puede usar para crear aplicaciones de diferentes tipos (red, bases de datos, web, escritorio). * Es un lenguaje orientado a objetos, por lo que permite crear elementos (clases) en el programa que representan conceptos de la vida real (facturas, ventas, alumno, vehículos, etc). * Es un lenguaje compilado, ya que genera un fichero resultado de la compilación (bytecode) que es capaz de ser ejecutado. * Es también un lenguaje interpretado, ya que ese fichero compilado, se interpreta en el momento de su ejecución, por la máquina virtual de Java. * Es un lenguaje multiplataforma, por lo que cualquier programa creado en java puede ser ejecutado directamente en cualquier ordenador que tenga la máquina virtual de java instalada. public class MiPrograma{ public static void main(String[] args){ String nombre = "Fernando"; System.out.println("Mi nombre es: " + nombre); } } ===== Java como plataforma de ejecución ===== * Java es independiente de la máquina real gracias a su JVM (Java Virtual Machine). * El código Java es compilado en un código objeto de una máquina con arquitectura independiente: La máquina virtual de Java (JVM). Este código se ejecutará en cualquier máquina real, que contenga una JVM. * En los lenguajes compilados el código se traduce al código máquina de ese ordenador concreto. No es portable. * Java se descarga y se instala en nuestro equipo. Java Runtime Environment. * El JRE es un paquete que además de contener la máquina virtual de Java, contiene las librerías necesarias para ejecutar el código de java, gestiona la memoria de los programas, excepciones, etc. * La máquina virtual de Java es la encargada de ejecutar todo ese código compilado. * Al final, todo lenguaje se debe traducir a código máquina, ya que es lo único que entiende el ordenador. * La diferencia es que ese código máquina es generado por la máquina virtual de java. * La máquina virtual de java recibe por su parte el código compilado de java. * Cualquier JVM entiende el código compilado de Java, pero cada una, se encarga de traducirlo al lenguaje máquina concreto de la máquina real. ===== Máquina virtual de Java ===== * El lenguaje de programación Java está completamente ligado a su plataforma de ejecución. No puede funcionar uno sin el otro. * El lenguaje en lugar de poder ejecutarse directamente y dar instrucciones al hardware, necesita antes ser traducido. * Esto hace que sea un poco más lento que otros lenguajes puramente compilados, como C, o C++. * Primero se compila el código fuente de Java (texto) en un archivo y se genera un código intermedio en otro archivo (bytecode de Java). * Este código intermedio resultado de la compilación, puede ser ejecutable por la JVM en cualquier equipo. * La máquina virtual de Java (JVM, Java Virtual Machine) está disponible para cualquier plataforma, a través del paquete JRE (Java Runtime Environment) Hace de intermediario entre el programa compilado y nuestro equipo real. {{ :bloque1:java-program-execution.png?400 |}} ===== Paquetes de instalación de Java ===== {{ :bloque1:java-jre.png?100|}} Existen dos paquetes para instalar la plataforma Java, dependiendo del uso que vamos a hacer de ella: el entorno de ejecución de Java, y el kit de desarrollo de Java. ==== Java Runtime Environment (JRE)==== * Es el paquete que permite ejecutar aplicaciones creadas en Java en mi ordenador. * Está compuesta de la //máquina virtual de Java//, bibliotecas de Java y todo lo necesario para ejecutar aplicaciones. * Las bibliotecas (API de Java) y la máquina virtual (JVM) deben comprenderse entre si. * Las bibliotecas ofrecen todas las instrucciones que se pueden ejecutar en código java, y van cambiando con cada versión de Java. * Es necesario que la JVM entienda todas las instrucciones de la API de Java, por eso tanto API como JVM, se entregan conjuntas. ==== Java Development Kit (JDK)==== * Contiene el **JRE**, para poder ejecutar las aplicaciones creadas. * Es necesario en caso de que queramos desarrollar aplicaciones en Java. * Algunos IDE's contienen herramientas similares, y se podría crear un programa sin tener el JDK. * Nos ofrece distintas herramientas para poder compilar, crear ejecutables, crear librerías, crear documentación, etc. ==== Diferencias ==== * Para ejecutar aplicaciones necesitamos tener JVM. Esta está contenida en el paquete **JRE**.​ Sin él no podríamos probar las aplicaciones que creamos.​ * Para compilar y poder traducir nuestro código escrito en java, necesitamos un compilador de Java.​ Estas herramientas vienen en el **JDK**, además de el entorno de ejecución JRE, con su JVM.​ ​** Ciertos IDE nos proveen de compiladores propios de Java, sin necesitar el JDK. (Eclipse)**​ {{ :bloque1:jdk-jre.png?600 |}} ===== Entornos de uso de Java ===== * Dispositivos móviles​ * Navegador Web​ * Servidores​ * Aplicaciones de Escritorio​ * Plataformas soportadas ===== API de Java ===== La [[https://docs.oracle.com/javase/8/docs/api/|API de Java]] (Application Program Interface) es un conjunto de bibliotecas con clases y métodos. Son las instrucciones que tenemos a nuestra disposición a la hora de programar en Java. Dependiendo del tipo de aplicación que vamos a generar la API está dividida en 3 entornos de aplicación: * Java ME (Micro Edition) * Librerías enfocadas en entornos de recursos limitados: Móviesl, PDA, Tablets, etc. * Java SE (Standard Edition) * Librerías enfocadas en entornos de gama media: ordenadores, principalmente. * Java EE (Enterprise Edition) * Librerías enfocadas en entornos distribuidos empresariales o de internet. ===== Entornos de Desarrollo ===== {{ :bloque1:eclipse_-logo.png?100|}} * [[https://www.eclipse.org/|Eclipse]]: Software libre y gratuito, el IDE más usado en el mundo para Java {{ :bloque1:intellij-idea_logo.png?50|}} * [[https://www.jetbrains.com/idea/|IntelliJ IDEA]]: Software con parte libre y otra propietaria. Posiblemente el IDE más potente. {{ :bloque1:netbeans-logo.png?100|}} * [[https://netbeans.org/|NetBeans]]: Software libre y gratuito, avalado por Sun, requiere JDK. {{ :bloque1:andriod-studio-logo.png?100|}} * [[https://developer.android.com/studio/index.html|Android Studio]]: Software Libre, creado por Google, para desarrollo en Java en plataforma Android. ===== Eclipse IDE ===== * Es un Entorno de Desarrollo Integrado (IDE) multiplataforma. * Está creado en el lenguaje Java, por lo que necesitamos la plataforma Java para usarlo. * Es un programa de código abierto. * Incorpora algunas herramientas de desarrollo, como un compilador, por lo que no necesitamos el JDK para poder crear y ejecutar un programa escrito en Java. * Otras de sus funcionalidades si requieres en JDK (Kit de desarrollo Java). {{ :bloque1:eclipse-interface.png?500 |}} ==== Versiones ==== {{ :bloque1:eclipse-photon-logo.png?300|}} ^Nombre ^ Fecha Lanzamiento ^ Versión^ |Photon|27 de junio de 2018|4.8| |Oxigen|28 de junio de 2017|4.7| |Neon|22 de junio de 2016|4.6| |Mars|24 de junio de 2015|4.5| |Luna|25 de junio de 2014|4.4| |Kepler|26 de junio de 2013|4.3| |Juno|27 de junio de 2012|4.2| |Indigo|22 de junio de 2011|3.7| |Helios|23 de junio de 2010|3.6| |Galileo|24 de junio de 2009|3.5| |Ganymede|25 de junio de 2008|3.4| |Europa|29 de junio de 2007|3.3| |Callisto| 30 de junio de 2006|3.2| |Eclipse 3.1|28 de junio de 2005|3.1| |Eclipse 3.0|28 de junio de 2004|3.0| ==== Puesta en funcionamiento ==== Eclipse ofrece dos formas de uso: mediante un instalador convencional, o mediante un paquete de ejecución directa. * El instalador nos ofrecerá la la selección de la distribución de Eclipse que queramos atendiendo al entorno en el que nos enfocaremos, incluyendo unas herramientas u otras. * El paquete de ejecución se descargará directamente con la distribución de eclipse que queramos emplear, atendiendo a nuestro enfoque. Se recomienda descomprimirlo o instalarlo en una ruta sin espacios en blanco, por ejemplo //C://. Cada vez que lo arranquemos nos puede preguntar qué //workspace// queremos utilizar. El worspace es el directorio donde guardará los proyectos creados. Conviene que esta ruta tampoco tenga espacios. ===== Creación de programas en Java ===== El proceso de obtención de un programa en java a partir de un código fuente de Java, consta de 2 fases: la compilación y la ejecución. En la compilación se obtiene otro código llamado //bytecode// de Java. Este código es comprendido por cualquier JVM de Java instalada en cualquier dispositivo. La ejecución conlleva un proceso de //interpretación// de este bytecode (fichero .class) en tiempo real. Se puede concluir que java es un lenguaje __compilado e interpretado__. {{ :bloque1:compilacionejecucion.jpg?500 |}} ==== Editor ==== * Es la herramienta con la que escribimos el lenguaje o código. Existe una sintaxis concreta para cada lenguaje, aunque pueden ser parecidas. * Genera ficheros únicamente con texto. Esto se conoce como fichero de texto //plano//: no contiene formatos de texto. En el caso de los ficheros de texto con código, se le denomina ficheros fuente o código fuente * A cada fichero de texto debemos asignarle extensión .java. * Cada IDE tiene su propio editor, pero podemos usar el que queramos (p.e. notepad). ==== Compilador ==== * Se encarga de leer el código que hemos escrito en un archivo y convertirlo en un formato que podrá ser leido por la máquina. * La máquina es el ordenador en el que lo ejecutamos, pero como hemos comentado, la plataforma Java tiene un particularidad. * Java usa un programa llamado Máquina Virtual de Java. * La JVM simula un ordenador que entiende ese código y el capaz de ejecutarlo en nuestro ordenador real. * Instalando una JVM en cualquier máquina nos aseguramos que el código compilado es comprendido (multiplataforma). ==== Interprete ==== * Al compilar el código, creamos un nuevo archivo con el mismo nombre, pero con extensión ''.class'' * Este fichero contiene un código denominado bytecode de java. * Dicho código es **interpretado** por la máquina virtual de Java instalada en cualquier equipo. * La JVM es la encargada de traducir (interpretar) dicho código en algo capaz de ser ejecutado por el ordenador (código máquina). ---- (c) {{date> %Y}} Fernando Valdeón