.

Java, Innovación Constante

Java, Innovación Constante

Java, Innovación Constante

 

“Todo fluye”, “Todo está en movimiento y nada dura eternamente”,  dijo el filósofo Heráclito.  Esta frase calza muy bien a la tecnología Java. 

 Desde sus inicios en los años 90, cuando  James Gosling con el objetivo de implementar una máquina virtual y un lenguaje de programación con estructura y sintaxis similar a C++, crea el lenguaje de programación bautizado con el nombre de Java, hasta nuestros días, la tecnología Java se encuentra en constante innovación para satisfacer la demanda del mercado, corrigiendo, para crear mayor demanda que van desde aplicaciones de escritorio, servidores, aplicaciones web y dispositivos móviles Android.

 

Esta innovación constante, también se ve reflejada en el ranking de lenguajes de programación, elaborado por IEEE Spectrum ; revista y sitio web de la IEEE, que establece el ranking de los lenguajes de programación más populares, tomando datos de fuentes como GitHub, IEEE Xplore o Career Builder.  Java se posiciona nuevamente como líder en el año 2015, dirigido a plataformas web, móviles y PC’s.

 Actualmente, existen tres distribuciones o ediciones Java, que tienen distintas finalidades:

-          J2SE  oJava Standard Edition: orientado al desarrollo de aplicaciones cliente – servidor, independientes de la plataforma. No incluye soporte a tecnologías para internet. Mantiene la esencia de la idea original de Java, sus características primordiales son: basado en C++, agregando componentes de alto nivel (strings y recolector de basura).  Contiene un conjunto básico de herramientas usadas para desarrollar Applets y las API’s orientadas a la programación de aplicaciones de usuario final.

 

-          J2EE o Java Enterprise Edition: orientado al entorno empresarial y a la integración entre sistemas, especialmente al desarrollo de servicios web, persistencia de objetos, XML, autenticación, entre otros. Incluye soporte a tecnologías para internet. Su base es J2SE.  Pensado para ser ejecutado sobre una red de computadoras de forma distribuida y remota mediante EJBs (Enterprise Java Beans).

 

-          J2MEo Java Micro Edition: orientado a pequeños dispositivos móviles, como teléfonos, PDA’s o electrodomésticos inteligentes.

 

Java no es sólo un lenguaje de programación, es una plataforma basada únicamente en software que corre por encima de las plataformas basadas en hardware y consta de dos componentes:

-          La máquina virtual de Java (JVM).

-          La interfaz de programación de aplicaciones de Java (API de Java).

 

El lenguaje Java estándar ha pasado por varios cambios, en cada nueva versión se ha incrementado los recursos disponibles para los programadores Java que ofrece la empresa que desarrolla el lenguaje (antiguamente Sun MicroSystems, actualmente Oracle). La denominada “biblioteca de clases de Java” (Java class library) ha pasado de ofrecer unos pocos cientos de clases en JDK 1.0 hasta cerca de 6000 en Java SE 8. Se han introducido recursos completamente nuevos, como Swing y Java2D, mientras que muchos de los métodos y clases originales de JDK 1.0 han dejado de utilizarse [2].  La evolución de Java estándar es:

 

- JDK 1.0 (1996): primer lanzamiento del lenguaje Java.

- JDK 1.1 (1997): mejora de la versión anterior.

- J2SE 1.2 (1998): ésta y las siguientes versiones fueron recogidas bajo la denominación Java 2 y el nombre "J2SE" (Java 2 Plattform Standard Etidion), reemplazo a JDK para distinguir la plataforma base de J2EE (Java 2 Plattform Enterprise Edition) y J2ME (Java 2 Plattform Micro Edition). Incluyó distintas mejoras.

- J2SE 1.3 (2000): mejora de la versión anterior.

- J2SE 1.4 (2002): mejora de la versión anterior.

- J2SE 5.0 (2004): originalmente numerada 1.5, esta notación aún es usada en ocasiones. Mejora de la versión anterior.

- Java SE 6 (2006): en esta versión, Sun cambió el nombre "J2SE" por Java SE y eliminó el ".0" del número de versión. Mejora de la versión anterior.

- Java SE 7 (2011): nueva versión que mejora la anterior.

- Java SE 8 (2014): nueva versión que mejora la anterior. Incluye la posibilidad de embeber JavaScript con Java y mejoras en la gestión de fechas y tiempo.

- Java SE 9: nueva versión que mejora la anterior (en difusión).

- Java SE 10: nueva versión que mejora la anterior (todavía sin uso comercial).

Los programas desarrollados en una versión antigua se ejecutan sin problemas en una versión nueva sin necesidad de cambiar ninguna linea de código.

Patrones de diseño

El concepto de patrones de diseño nace en el ámbito de la arquitectura, a mediados de los años 60, con Chrisopher Alexander [3], quien indica: “Cada patrón describe un problema que ocurre una y otra vez en nuestro entorno y entonces se describe el núcleo de la solución a dicho problema de tal forma que se pueda usar esta solución un millón de veces sin hacerlo dos veces de la misma forma”.

 

            Con el libro “Design Patterns: Elements of Reusable Object Oriented Software” escrito por Erick Gamma, Richard Helm, Ralph Johnson y John Vlissides conocidos como “la banda de los cuatro” – “The Gang of Four” – GoF,  en el año 1994, el concepto de patrones de diseño en el ámbito del desarrollo de software inicia su popularidad.  En el libro se presentan la documentación de 23 patrones de diseño de software orientado a objetos.   Los clasifican en tres grandes categorías basadas en su propósito y en cada categoría se tiene dos subtipos: patrones que trabajan con clases que se basan en la herencia de clases y patrones que trabajan con objetos basados en la utilización dinámica de objetos.

Patrones creacionales: su propósito es abstraer el proceso de instanciación de un objeto, buscar la mejor forma de crear instancias de objetos.

- Patrones estructurales: tiene como propósito describir la forma como las clases y objetos se combinan para crear grandes estructuras con nuevas funcionalidad y así resolver tareas complejas.

- Patrones de comportamiento: su propósito es definir la comunicación entre los objetos de un sistema.

 

Ahora sólo nombraremos los patrones de diseño más usados en Java con una breve descripción, los que han sido tomados del el blog “Mi granito de arena de Java” de Maximiliano Juarez [4]

- Patrones creacionales:

o   Singleton: busca garantizar que una clase sólo tenga una instancia y proporcionan un acceso global a ella.

 

o Builder: permite la creación de un objeto complejo, centraliza el proceso de creación de un único punto de forma que el mismo proceso de construcción pueda crear representaciones diferentes.

 

o   Prototype: permite crear objetos prediseñados sin conocer detalles de cómo crearlos.

 

o   Abstract Factory: su principal objetivo es soportar múltiples estándares que vienen definidos por las diferentes jerarquías de herencia de objetos.

 

o   Factory Method: define la interfaz de creación de un cierto tipo de objeto, permitiendo que las subclases decidan que clase concreta necesitan instancias.

 

- Patrones estructurales:

 

o   Adapter: busca una manera estandarizada de adaptar un objeto a otro.  Se utiliza para transformar una interfaz en otra, de modo que una clase que no pudiera utilizar la primera, haga uso de ella a través de la segunda.

 

o   Decorator: permite añadir responsabilidades a objetos concretos de forma dinámica.  Ofrecen una alternativa más flexible que la herencia para extender las funcionalidades.

 

o   Bridge: desacopla una abstracción de su implementación, de manera que ambas puedan variar de forma independiente. Una abstracción se refiere a un comportamiento que una clase debería implementar, ya sea porque está obligada por una interface o una clase abstracta. Con implementación se refiere a colocarle lógica a dicha obligación.

 

o   Composite: para construir algoritmos y objetos complejos a partir de otros más simples y similares entre sí.  Gracias a la composición recursiva y a una estructura en forma de árbol.

 

o   Flyweight: busca reducir la redundancia cuando se tiene gran cantidad de objetos que contienen información idéntica, además de lograr equilibrio entre flexibilidad y rendimiento.

 

o   Facade: busca simplificar el sistema desde el punto de vista del cliente, proporcionando una interfaz unificada para un conjunto de subsistemas.

 

o   Proxy: se utiliza como intermediario para acceder a un objeto, permitiendo controlar el acceso a él. 

 

- Patrones de comportamiento:

o  Chain of Responsibility: permite establecer una cadena de objetos receptores a través de los cuales se pasa una petición formulada por un objeto emisor.  La idea es que cualquiera de los objetos receptores respondan a la petición de un criterio establecido.

 

o   Command: especifica una forma simple de separar la ejecución de un comando del entorno que generó dicho comando.  Encapsula un mensaje como un objeto.

 

o   Interpreter: busca representar un lenguaje mediante reglas gramática, por lo que, define estas reglas gramáticas y cómo interpretarlas.

 

o   Iterator: provee un mecanismo estándar para acceder secuencialmente a los elementos de una colección.

 

o   Mediator: define un objeto que hace de procesador central, coordinando las relaciones entre sus asociados o participantes.

 

o   Memento: permite capturar y exportar el estado interno de un objeto para que luego se pueda restaurar, sin romper la encapsulación.

 

o   Observer: usado en programación para monitorear el estado de un objeto en un programa.  La motivación principal es su utilización como un sistema detección de eventos en tiempo de ejecución.

 

o   State: permite que un objeto modifique su comportamiento cada vez que cambie su estado interno.

 

o   Strategy: encapsula algoritmos relacionados que son subclases de una superclase común, lo que permite la selección de un algoritmo que varía según el objeto y variación en el tiempo

 

o   Template Method: define el esqueleto de un algoritmo, delegando algunos pasos a las subclases.  Permite redefinir parte de dicho algoritmo sin cambiar su estructura.

 

o   Visitor: busca separar un algoritmo de la estructura de un objeto.  La operación se implementa de forma que no se modifique el código de las clases sobre las que opera.

 

¿Por qué desarrollar en Java?

Los principales motivos para desarrollar en Java son: la portabilidad y ser un lenguaje orientado a objetos.

            Con la portabilidad, nos olvidamos del gran dolor de cabeza de que un programa desarrollado en un sistema operativo no se pueda ejecutar en otro  o en un teléfono móvil Android.  Esta característica es posible en Java con el uso de la máquina virtual (JVM) para la ejecución de los programas.   El compilador de Java produce un código intermedio llamado bytecode el que debe ser transformado a código de máquina para que pueda ser ejecutado en el dispositivo físico, ésta transformación lo realiza el intérprete llamado Java Virtual Machine (JVM).   

            Java al ser un lenguaje de programación orientado a objetos, permite reutilizar código, es decir, escribir el código una única vez y utilizarlo donde sea necesario.  Por ejemplo, el código para realizar la conversión de monedas de dólares a euros o viceversa.  Java trabaja con sus datos como objetos y con interfaces a esos objetos.  Soporta las tres características propias del paradigma de la orientación a objetos: encapsulación, herencia y polimorfismo.

 

            Java trabaja con diferentes herramientas y frameworks de desarrollo, los que permiten el desarrollo de.  Algunas de las herramientas y frameworks que trabajan con java son:

Frameworks:  Spring, Ibatis, Hibernate, AngularJs

Enterprise Serial Bus: Mule ESB, Talend ESB, Apache Camel, Spring Integration

Administracion de Reglas: Drools

Business Intelligence:  Talend, Pentaho, Spago

BPM: Activiti, jBPM

“Oracle y la comunidad Java están ahora centrados en el suministro de las nuevas innovaciones en Java 9.  La característica prevista clave de este comunicado es Project Jigsaw, que persigue modularizar la plataforma para que sea escalable para una amplia gama de dispositivos, facilitar a los desarrolladores la construcción y el mantenimiento de las librerías y aplicaciones de gran tamaño, y mejorar la seguridad, el mantenimiento y el rendimiento. Otras características previstas para Java 9 incluyen Java Shell, una herramienta interactiva para la evaluación de fragmentos de Código de Java; un nuevo HTTP client API  para soportar HTTP/2 y Web Sockets; un puerto ARM AArch64 architecture en Linux; y una variedad de actualizaciones para las APIs existentes junto con algunas mejoras significativas de rendimiento”. [5]

Empezar a programar en Java

 

            Antes de empezar a programar en Java es importante conocer las fases de un programa Java [6], para entender luego los requerimientos para iniciar el aprendizaje de Java.

 

Para iniciar a programar en Java es necesario instalar el siguiente software:

 

§  JRE (Java Runtime Enviroment), para ejecutar los programas compilados en Java.

§  JDK (Kit de desarrollo de Java) o el SDK (software development kit).

§  Entorno de desarrollo: puede ser un editor de texto o un cualquier IDE: Eclipse, Netbeans, BlueJ.

§  Un tutorial o manual de Java.

§  Mucha práctica.

 

Experiencias trabajando con Java

  “Tengo cinco años desarrollando en Java y lo recomiendo.  Es un lenguaje de programación potente y flexible;  diseñar soluciones con java es bastante sencillo para cualquier necesidad, ya que trabaja con diferentes herramientas y frameworks de desarrollo, lo que permite potenciar el desarrollo de software. 

 La diferencia de Java respecto a otros lenguajes de programación, son varias, entre ellas: es software libre, multiplataforma, portable, dispone de amplia documentación, una gran comunidad de desarrolladores, existen diferentes frameworks de desarrollo y también varias herramientas basada en java que potencia el desarrollo.

 Cuando Oracle adquiere Sun, como consecuencia, también Java, no hubo mayor impacta porque la comunidad de desarrolladores, la documentación se mantuvo y aún continúa creciendo.” 

 

Christian Arias Arancibia

Ingeniero líder de software

Axcess Financial - Perú

 

 

“Mi experiencia en Java empezó al participar en un proyecto para desarrollar un sistema de contingencia de operaciones para una empresa de micro finanzas, en el año 2005, desarrollé un sistema cliente/servidor utilizando el framework Swing y con conocimiento básicos de java, luego implementé una aplicación sencilla para Wap, consulta de datos de personas desde celulares, ésta fue mucho más fácil, todo el desarrollo se hizo en la parte servidor, use Java y WML.

 Cuando empecé a laborar en Canadá, la programación en Java era avanzada y mi labor era diagnosticar los métodos y campos de objetos que se utilizan en forma correcta o no y se usaba el API Reflexion de Java, al inicio fue algo complicado pero con la gran comunidad y documentación de Java puede entenderlo pronto

 Por lo general, el programador utiliza el lenguaje de programación que la empresa necesita, se adecua, y como conoce los fundamento de programación, el aprender un nuevo lenguaje lo realiza en forma autodidacta, con tutoriales, foros, manuales publicados en internet, así aprendí Java, y para resolver algún problema a veces se encuentra el código disponible publicado y lo que se hace es copiar, cambiar alguna parte y utilizarlo.  Esto no es malo, pero si es importante también conocer la teoría, es decir, no sólo programar por intuición sino saber cuándo  utilizar un vector y no un array.

 Yo recomiendo programar en Java, sobre todo la lógica de negocio aunque es un lenguaje de programación algo complejo pero es potente, para el desarrollo web, recomiendo trabajar con el framework AngularJS.

  Java se puede mezclar con cualquier lenguaje de programación, todo lo que no se pueda hacer con los otros lenguajes de programación, Java lo soluciona y si éste no puede, C y C++ lo harán.”

 

Carlos Urquiza Delgado

Ingeniero de Sistemas

Consultor de CGI - Canadá

 

 

 “Java es un buen lenguaje de programación principalmente para la utilización de POO, además de ser sencillo tiene buena documentación.  Es un lenguaje global muy usado, tiene varias agrupaciones que se dedican a especializar el lenguaje, es robusto, cuenta con muchas librerías y buen soporte.

 Tengo cinco años aproximadamente utilizando Java,  recomedaría Java para iniciarse en lenguajes de programación porque no es nada complicado y a diferencia de otros lenguajes de programación, es portable, es maduro, se comunica y adapta bien con diversas plataformas, Oracle lo usa.

 Pienso que Java tuvo una presencia aun más grande, cuando uno de los gigantes de base de datos, como Oracle, adquiere Sun, con lo que brinda más confianza a los usuarios, amplitud, avance tencnológico, también se pensó que ya Java ya no sería Open Source, pero Oracle inteligentemente no quebró ese principio.

 La tendencia actual es el desarrollo de aplicaciones para  dispositivos móviles, por lo que, la demanda de especialización en tecnología java continua creciendo.” 

 

Yordan Yampi Enciso

Analista de Soluciones Informáticas

Caja Arequipa

 

 

 

 

Bibliografía

 

[1] Interactive: The Top Programming Languages 2015

http://spectrum.ieee.org/static/interactive-the-top-programming-languages-2015

 [2] Versiones y distribuciones Java: J2SE, J2EE, J2ME. ¿Java 7, Java 8, Java9..., cuál es mejor? (CU00606B)

http://aprenderaprogramar.com/index.php?option=com_attachments&task=download&id=327

[3] A  PatternLanguage:  Towns/Builder/Construction.

Alexander,   C.,   Ishikawa,   S.,   Silvertein,   M.,   Jacobson,   M.,  Fiksdahl - King, I.,  &Angel, S.  (1977).

New York: Oxford UniversityPress

 [4] Mi granito de arena de Java

      http://migranitodejava.blogspot.pe/

 [5] Oracle y la Comunidad celebran los 20 años de Java

https://www.oracle.com/es/corporate/pressrelease/oracle-community-celebrate-20years-of-java-20150520.html

 [6] Introducción a Java

 

http://es.slideshare.net/anasaula9/java-y-sus-caracteristicas?qid=491c1584-98b5-45c9-a0e7-9882c866440a&v=qf1&b=&from_search=3

 

Licencia Creative Commons
Esta obra está bajo una Licencia Creative Commons Atribución-CompartirIgual 3.0 Unported.