Introducción a la Programación en Java - jpexposito/comenzado-con-java GitHub Wiki

1. Introducción

1.1. Objetivos

  • Describir las características del lenguaje de programación Java.
  • Describir las herramientas ligadas a la construcción y ejecución de programas escritos en Java.
  • Construir las primeras aplicaciones en Java.

Esta unidad de trabajo pretende ser una rápida introducción a la programación en Java. En primer lugar muestra lo que es Java, sus características y las herramientas que están ligadas a él y, a continuación, enseña cómo compilar y ejecutar algunos programas sencillos escritos en Java. La tecnología Java es tanto una plataforma como un lenguaje de programación. En los capítulos posteriores se trata de dar una visión más detallada de la sintaxis del lenguaje de programación Java.

1.2. El Lenguaje de Programación Java

El lenguaje de programación Java, fue diseñado por la compañía Sun Microsystems Inc, con el propósito de crear un lenguaje que pudiera funcionar en sistemas de ordenadores heterogéneos (redes de computadoras formadas por más de un tipo de ordenador, ya sean PC compatibles, Macintosh o estaciones de trabajo que empleen diferentes sistemas operativos como Windows, OS/2 o Unix), y que fuera independiente de la plataforma en la que se vaya a ejecutar. Esto significa que un programa de Java puede ejecutarse en cualquier máquina o plataforma. Su origen se remonta a la creación de un lenguaje de programación para el desarrollo de aplicaciones para electrodomésticos y otros aparatos electrónicos de consumo por parte de una empresa filial de Sun, llamada FirstPerson en 1991. Su creador, James Gosling, lo bautizó como Oak1. Al abandonarse este proyecto, el lenguaje se modificó, al igual que su nombre y se orientó al desarrollo de aplicaciones para la red. En septiembre de 1995 aparece el primer Kit de Desarrollo de Java (JDK). A principios de 1997 se presenta la primera revisión de Java (la versión 1.1) y a finales de 1998 surge la versión 1.2 (Java 2) que introdujo modificaciones bastante significativas. En octubre de 2004 se hace pública la versión Java 1.5 (Java 5) incluyendo innovaciones muy importantes en la plataforma.

En la siguiente tabla se muestra el histórico de versiones de Java:

Version Release
JDK Beta 1995
JDK 1.0 January 1996
JDK 1.1 February 1997
J2SE 1.2 December 1998
J2SE 1.3 May 2000
J2SE 1.4 February 2002
J2SE 5.0 September 2004
Java SE 6 December 2006
Java SE 7 July 2011
Java SE 8 (LTS) March 2014
Java SE 9 September 2017
Java SE 12 March 2019
Java SE 16 March 2021
Java SE 18 March 2022
Java SE 19 September 2022
Java SE 20 March 2023
Java SE 21 (LTS) September 2023

Más información sobre la evolución de las versiones de Java: https://en.wikipedia.org/wiki/Java_version_history .

A partir de la salida al mercado de la versión Java SE 9 se produce un cambio en las versiones de Oracle. La versión de Java SE 8 pasa a ser LTS. Una versión de Java LTS o Long Term Support significa que Oracle garantiza que te dará soporte y actualizaciones para la versión durante 3 años, en cambio, para las versiones que no son LTS, Oracle dará soporte por tan solo 6 meses.

El 20 de abril de 2009 Jonathan Schwartz, CEO de Sun, anunció la venta de Sun Microsystems a Oracle Corporation por unos 7.400 millones de dólares. Este acuerdo se alcanzó después de varias semanas de rumores de venta a diferentes compañías, entre ellas IBM, HP y Cisco Systems. El 21 de enero de 2010 la Unión Europea aprueba la compra.

1.2.1. Características del Lenguaje Java

El lenguaje Java muestra las siguientes características generales:

  • Sencillo: Elimina la complejidad de los lenguajes como C y da paso al contexto de los lenguajes modernos orientados a objetos. Aunque la sintaxis de Java es muy similar a C y C++, que son lenguajes a los que una gran mayoría de programadores están acostumbrados a emplear.
  • Orientado a Objetos: La filosofía de programación orientada a objetos es diferente a la programación convencional (imperativa o procedural). Su nivel de abstracción facilita la creación y mantenimiento de programas. Existen muchas referencias que dan una introducción a esta forma de programar.
  • Independiente a la arquitectura y portable: Al compilar un programa en Java, el código resultante es un tipo de código binario conocido como Java bytecodes. Este código es interpretado por diferentes computadoras de igual manera, por lo que únicamente hay que implementar un intérprete para cada plataforma. De esa manera Java logra ser un lenguaje que no depende de una arquitectura de ordenador específica. Como el código compilado de Java es interpretado, un programa compilado de Java puede ser utilizado por cualquier computadora que tenga implementado el intérprete de Java.
  • Robusto: Java simplifica la gestión de la memoria dinámica. Por ejemplo, ya no es necesario la liberación explícita, el intérprete de Java lo lleva acabo automáticamente cuando detecta que una variable dinámica ya no es usada por el programa. Por otra parte, impide que un puntero Java apunte a una dirección de memoria no válida, los punteros (referencias) Java son seguros y deterministas: o bien apuntan a un elemento correctamente alojado en memoria o bien tienen el valor nulo. Finalmente, el acceso a la memoria es supervisado por el intérprete de tal manera que no es posible acceder a zonas de memoria no autorizadas sin provocar un error. Por ejemplo, no es posible escribir fuera de los límites de un vector.
  • Seguro: El sistema de Java tiene ciertas políticas que evitan que se puedan codificar virus con este lenguaje. Existen muchas restricciones, especialmente para los denominados Applets, que limitan lo que se puede y no puede hacer con los recursos críticos de una computadora.
  • Multitarea (Multithreaded): Un lenguaje que soporta múltiples threads, hilos o tareas, es un lenguaje que puede ejecutar diferentes líneas de código al mismo tiempo. El soporte y la programación de hilos en Java están integrado en la propia sintaxis del lenguaje.
  • Dinámico: En Java no es necesario cargar completamente el programa en memoria, sino que las clases compiladas pueden ser cargadas bajo demanda en tiempo de ejecución (dynamic binding). Esto proceso permite la carga de código bajo demanda, lo que es especialmente importante en los applets.

1.2.2. Mecanismo de Creación de un Programa Java

En este aspecto la principal originalidad de Java estriba en que es a la vez compilado e interpretado. Con el compilador de Java, el programa fuente (fichero con extensión .java) es traducido a un lenguaje intermedio o pseudocódigo (no es código máquina) llamado Java bytecodes generándose un programa compilado almacenado en un archivo con extensión .class. Este archivo puede ser posteriormente interpretado y ejecutado por el intérprete de Java (lo que se conoce como la Máquina Virtual Java o Java Virtual Machine).

Por eso Java es multiplataforma, ya que existe un intérprete para cada máquina diferente. Por tanto, la compilación se produce una vez y la interpretación cada vez que el programa se ejecuta.

Actualmente las máquinas virtuales modernas realizan una compilación JIT (Just In Time) en donde el bytecode no es interpretado, sino que se compila directamente a código máquina en tiempo de ejecución de acuerdo con la arquitectura (procesador y sistema operativo) en la que se ejecuta la máquina virtual. Esto permite conseguir velocidades de ejecución similares al C. En la práctica las máquinas virtuales suelen utilizar técnicas mixtas de interpretación/compilación JIT normalmente según la frecuencia de paso por un bytecode concreto.

Un programa Java puede funcionar como una aplicación independiente (por ejemplo, el entorno de desarrollo NetBeans) o como un Applet (contracción de la expresión little application), que es un pequeño programa que no se ejecuta de forma independiente. Los Applets de Java se pueden introducir o incrustar en una página de Web (empleando el lenguaje HTML), y con esto se puede tener un programa que puede ser ejecutado por cualquier persona que tenga un navegador compatible con Java. Aunque queda fuera del alcance de este manual, es necesario indicar que también pueden construirse un tercer tipo de aplicaciones: los denominados Servlets (contracción de la expresión server application), que se ejecutarían en servidores web conectados a intranets o a internet.

1.2.3. Ventajas en el Uso de Java

Pueden destacarse las siguientes ventajas en el empleo de Java como lenguaje de programación:

  • Compatibilidad: No es necesario modificar (reescribir) el código si se desea ejecutar el programa en otra máquina. Un único código funciona para todos los navegadores compatibles con Java o donde se tenga una Máquina Virtual de Java (ordenadores PC compatibles, Macintosh o estaciones de trabajo que empleen diferentes sistemas operativos como Windows, MacOS, Linux o Unix).
  • Funcionalidad: Si interesa desarrollar un servicio Web con funciones dinámicas más allá de las posibilidades del lenguaje HTML, puede emplearse Java para incluir en las páginas toda clase de elementos multimedia y permitir un alto nivel de interactividad.
  • Ahorro de recursos: Un navegador compatible con Java deberá ejecutar cualquier programa hecho en Java, esto ahorra a los usuarios tener que estar insertando programas adicionales o plug-ins que necesitan emplear memoria adicional y espacio en disco.
  • Metodología OO: Java es un lenguaje de programación orientado a objetos, y tiene todos los beneficios que ofrece esta metodología de programación: facilita la creación, el mantenimiento y la reutilización de código.
  • Menos y mejor código: Comparaciones de métricas de programas indican que un programa en escrito en Java es cuatro veces de menor tamaño que uno escrito en C++ y además favorece los buenos hábitos en la programación como, por ejemplo, la gestión de la memoria dinámica.
  • Gratuidad: El kit de desarrollo Java es gratuito y puede descargarse desde la página oficial de OpenJDK.

1.2.4. Inconvenientes del Lenguaje Java

El uso de Java también tiene algunos inconvenientes o limitaciones:

  • Mayor consumo memoria: un programa Java consume más memoria por dos razones, es necesario cargar la máquina virtual y, en general, Java necesita más memoria para alojar los elementos de un programa que un programa similar hecho en un lenguaje nativo. __ESTE ASPECTO ES MUY IMPORTANTE EN EL DESARROLLO DE GRANDES
  • Mayor tiempo de carga: la carga de la máquina virtual lleva tiempo y como la carga de las clases son bajo demanda la ejecución al principio de un programa Java es relativamente lenta.
  • Integración no perfecta con el sistema operativo: como Java y sus librerías están diseñados para ser multiplataforma la integración con el sistema operativo en forma de extensiones al mismo no es sencilla y suele necesitar extensiones nativas que rompen la portabilidad. Por otro lado, exigen la presencia y carga de la máquina virtual por lo que no se suele utilizar como lenguaje para el desarrollo de elementos básicos de sistemas.
  • Es un lenguaje de programación: El hecho de que Java sea un lenguaje de programación es otra gran limitación. Aunque sea orientado a objetos y “más sencillo” de aprender que C o C++, sigue siendo un lenguaje y por lo tanto aprenderlo no es tarea fácil. Especialmente para los programadores noveles.

1.2.5. La plataforma Java

Normalmente, una plataforma es un sistema mixto que incluye el hardware y/o el entorno software en el que se ejecuta un programa. La plataforma Java se diferencia de la mayoría de las demás en que está formada únicamente por software que se ejecuta en cualquier otra plataforma independiente de hardware. La plataforma Java tiene dos componentes:

  • El intérprete, Máquina Virtual Java o Java Virtual Machine (JVM) que ya se ha comentado anteriormente.
  • La Interfaz de Programación de Aplicaciones Java o Java Application Programming Interface (Java API).

1.3. Herramientas de Desarrollo para Java

1.3.1. Java SE

Para poder trabajar con Java en nuestro equipo necesitamos uno de los siguientes paquetes:

  • JRE (Java Runtime Environment).
  • Servidor JRE (Server Java Runtime Environment).
  • JDK (Java Development Kit).

Estos paquetes tienen distintas finalidades, en función de las tareas que vayamos a realizar.

1.3.1.1. ¿Qué paquete Java necesito?

  • Desarrolladores de software: JDK (Java SE Development Kit). Para desarrolladores de Java. Incluye un JRE completo más herramientas para desarrollar, compilar, depurar y monitorizar aplicaciones Java.
  • Administradores que ejecutan aplicaciones en un servidor: Servidor JRE (Server Java Runtime Environment). Para desplegar aplicaciones Java en servidores. Incluye herramientas para el monitoreo de JVM y herramientas comúnmente requeridas para aplicaciones de servidor, pero no incluye integración de navegador (el complemento de Java), actualización automática ni un instalador.
  • Usuario final que ejecuta Java en un escritorio: JRE (Java Runtime Environment). Cubre la mayoría de las necesidades de los usuarios finales. Contiene todo lo necesario para ejecutar aplicaciones Java en su sistema. https://www.oracle.com/java/technologies/javase-downloads.html

1.4. Entornos de Desarrollo Integrado

Utilizando las herramientas incluidas en el propio JDK podemos compilar programas, empaquetarlos, depurarlos y ejecutarlos. Además, necesitaríamos un editor de texto para escribir el código fuente.

Un IDE (Integrated Development Environment) nos permite realizar todas estas tareas en un único entorno de desarrollo.

Nota: Un IDE consiste de un editor de código fuente, herramientas de construcción automáticas y un depurador. La mayoría de los IDE tienen auto-completado inteligente de código.

Existen multitud de IDEs para Java, entre los más importantes se encuentran Eclipse, Intellij Ide, Netbeans o VS-Code.

1.4.1. NetBeans

NetBeans es un proyecto exitoso de código abierto con una gran base de usuarios, una comunidad en constante crecimiento, y con cerca de 100 socios (¡y creciendo!) en todo el mundo. Sun MicroSystems fundó el proyecto de código abierto NetBeans en junio 2000 y continúa siendo el patrocinador principal de los proyectos.

Al día de hoy hay disponibles dos productos: el NetBeans IDE y NetBeans Platform.

NetBeans IDE es un entorno de desarrollo - una herramienta para que los programadores puedan escribir, compilar, depurar y ejecutar programas. Está escrito en Java - pero puede servir para cualquier otro lenguaje de programación. Existe además un número importante de módulos para extender el NetBeans IDE. NetBeans IDE es un producto libre y gratuito sin restricciones de uso.

También está disponible NetBeans Platform; una base modular y extensible usada como estructura de integración para crear grandes aplicaciones de escritorio. Empresas independientes asociadas, especializadas en desarrollo de software, proporcionan extensiones adicionales que se integran fácilmente en la plataforma y que pueden también utilizarse para desarrollar sus propias herramientas y soluciones.

Ambos productos son de código abierto y gratuitos para uso tanto comercial como no comercial. El código fuente está disponible para su reutilización de acuerdo con la Common Development and Distribution License ( CDDL) v1.0 and the GNU General Public License (GPL) v2.

1.4.2. Eclipse

Eclipse es quizás el IDE (Entorno de desarrollo integrado) más popular. Está diseñado para Java, por lo que tiene un montón de características para el rápido desarrollo de aplicaciones con este lenguaje. Eclipse cuenta también con una comunidad de usuarios, extendiendo constantemente las áreas de aplicación cubiertas.

Eclipse fue desarrollado originalmente por IBM como el sucesor de su familia de herramientas para Visual Age. Hoy en día es desarrollado por la Fundación Eclipse, una organización independiente sin ánimo de lucro que fomenta una comunidad de código abierto y un conjunto de productos complementarios, capacidades y servicios. Eclipse fue liberado originalmente bajo la Common Public License, pero después fue re-licenciado bajo la Eclipse Public License.

https://www.eclipse.org/downloads/

1.4.3. Intellij Idea

IntelliJ IDEA es un IDE para Java desarrollado por la empresa JetBrains, estando disponible para Windows, MacOS y Linux. Como ocurre con NetBeans y Eclipse, también puede incorporar soporte para otros lenguajes de programación. A diferencia de ellos, sin embargo, no se trata de un proyecto totalmente basado en software libre, sino de un producto comercial. Existe, no obstante, una edición reducida denominada Community que puede obtenerse gratuitamente.

Este IDE es valorado especialmente por su agilidad y estabilidad, así como por contar con una interfaz de usuario considerada más actual y funcional que la de NetBeans o Eclipse. El mayor inconveniente estriba en que para ciertos tipos de proyectos se necesita la edición Ultimate que tiene un coste relativamente elevado.

https://www.jetbrains.com/es-es/idea/

1.4.4. VS-Code

Visual Studio Code es un editor de código fuente desarrollado por Microsoft para Windows, Linux, macOS y Web. Incluye soporte para la depuración, control integrado de Git, resaltado de sintaxis, finalización inteligente de código, fragmentos y refactorización de código. También es personalizable, por lo que los usuarios pueden cambiar el tema del editor, los atajos de teclado y las preferencias. Es gratuito y de código abierto,1​2​ aunque la descarga oficial está bajo software privativo e incluye características personalizadas por Microsoft.3​

Visual Studio Code se basa en Electron, un framework que se utiliza para implementar Chromium y Node.js como aplicaciones para escritorio, que se ejecuta en el motor de diseño Blink. Aunque utiliza el framework Electron, el software no usa Atom y en su lugar emplea el mismo componente editor (Monaco) utilizado en Visual Studio Team Services (anteriormente llamado Visual Studio Online).

1.4.4.1. Instalación y configuración de IDE´s

El estudio y configuración de los IDE´s se realizará en otra repositorio, concretamente en Entornos de Desarrollo.

1.4.5. Ranking IDE

Les dejo el ranking de IDE según los push que se realizan en github.

1.5. Lenguajes de Programación más Populares

¿Cuáles son los lenguajes de programación más populares? Para contestar a esta pregunta podemos hacer uso de los índices TIOBE, PYPL (PopularitY of Programming Language) y GitHut.

1.5.1. TIOBE Programming Community Index

El índice TIOBE es una medida de popularidad de los lenguajes de programación, creado y mantenido por TIOBE Company. El índice es calculado por el número de resultados de búsqueda en navegadores web conteniendo el nombre del lenguaje. El índice cubre búsquedas en Google, Google Blogs, MSN, Yahoo!, Baidu, Wikipedia and YouTube. No sólo utiliza el número de resultados de búsqueda en navegadores web, sino tiene en cuenta más elementos para calcular este índice, como cursos ofrecidos a través de internet,... El índice es actualizado una vez al mes.

Ranking TIOBE

1.5.2. PYPL Index

El índice PYPL es una página que mide la popularidad de todos los lenguajes de programación en función de tendencias. Usa Goolge Trends como fuente de datos.

Ranking PYPL Index

1.5.3. GitHut

GitHut cuenta y agrupa por lenguaje de programación el número de proyectos subidos a la plataforma de desarrollo GitHub.

Ranking GitHut

2. Bibliografía

⚠️ **GitHub.com Fallback** ⚠️