¿Java Que Lo Hace Distinto A Otros Programas?

¿Java Que Lo Hace Distinto A Otros Programas?



Java es MUY amplio. Se pueden crear todo tipo de aplicaciones para casi todo tipo de entorno. Y para cada entorno, a veces hay APIs específicas y otras son genéricas o comunes.

Por ejemplo, hay APIs específicas para aplicaciones gráficas de escritorio, APIs específicas para aplicaciones web que corren en un contenedor de aplicaciones, APIs específicas para applets, APIs específicas para JavaME (el java de los móviles "Java"), etc, incluso hay APIs específicas para tarjetas inteligentes (las JavaCards, si, esas tarjetas con "chips" se pueden programar en Java). Y luego, hay infinitas librerías o APIs que son comunes, y que se usan en distintos entornos.
Algunas APIs están dentro de lo que se llama el JavaSE (Java Standard Edition, que define la librería estándar de todas las JVM, las máquinas virtuales de Java). Otras están en el conjunto llamado JavaME, y otras en el JavaEE. JavaEE es un superconjunto de JavaSE. En cambio, JavaSE es en parte un subconjunto de JavaSE y además tiene muchas cosas que son exclusivas de ese entorno limitado y reducido que no funcionan fuera de JavaME.
El código Java (y de algunos otros lenguajes como Scala) se compila en ByteCodes que corren sobre cualquier JVM (Java Virtual Machine) estándar. Con excepción de JavaME que precisa de una máquina virtual reducida y limitada (la KVM o K Virtual Machine), el resto lo único que necesita es una JVM y es 100% portable a cualquier arquitectura y sistema donde corra una JVM sin necesidad de recompilación.
Android, por otra parte, si bien usa el lenguaje Java, compila a otro ByteCode para otra máquina virtual, llamada Dalvik. Los creadores de Android, dicieron hacer una implementación distinta de VM, con otro tipo de optimizaciones. Ambos bytecodes son similares pero diferentes.
El lenguaje Java que usa Android puede considerarse un fork del lenguaje Java 5. En si, el lenguaje es prácticamente idéntico. Las mayores diferencias están en las librerías. En Android, si bien se implementaron muchas de las librerías estándar de Java, muchas otras no lo están y/o fueran reemplazadas por nuevas librerías. Todo lo que es UI, es totalmente exclusivo por supuesto, aunque similar a Swing en algunos aspectos, con algunas novedades, mejoras y optimizaciones, pensado específicamente para las necesidades de un smartphone.
Otra diferencia importantísima. Las aplicaciones JavaME son aplicaciones que cuando corren en los dispositivos móviles, son casi ciudadanos de segunda, porque se les dificulta o imposibilita integrarse con el sistema operativo y con sus servicios, ni se integran con los temas visuales por ejemplo, ni tienen acceso a muchas funcionalidades y muchas cosas que quedan disponibles solo a las aplicaciones nativas. Era un parto hacer que una aplicación JavaME que se vea bonita y a la vez que se vea integrada a cada UI de cada celular. Era IMPOSIBLE. Las aplicaciones "java" de Android en cambio son ciudadanos de primer nivel, el mismo Android usa los mismos servicios y APIs que las aplicaciones que hace el desarrollador, las aplicaciones Android se integran totalmente con el sistema operativo. Podemos reemplazar muchos servicios y actividades fácilmente, de forma portable, algo antes inimaginable. Igualmente, por debajo de la VM (la Dalvik), tenemos a Linux y a los servicios y aplicaciones realmente nativos, pero en este caso queda recomendado solo para los servicios básicos o para facilitar la conversión del código pre-existente (léase: el port de aplicaciones ya escritas en C/C++ y otros lenguajes, como algunos juegos en OpenGL y SDL).
Entonces, hay muchas librerías de JavaSE y JavaME que no están en Android. Pero normalmente se refieren a código de UI o cosas así. Por lo tanto, si se tiene una aplicación, digamos para escritorio usando Swing (para de JavaSE y que no existe en Android), si el código está bien separado en capas, y siempre debería estarlo, no es difícil reutilizar la mayor parte del código reemplazando solo la parte de UI. Lo mismo para aplicaciones realizadas en JavaME.



Comentarios

Entradas más populares de este blog

Matrices

Programación Orientada a Objetos

Arreglos