# Plataforma Java

La plataforma Java és un grup de programes, relacionats entre ells (plataforma), de Sun Microsystems que permet el desenvolupament i l'execució de programes escrits en llenguatge Java. Aquesta plataforma no és específica de cap processador ni sistema operatiu, més aviat, ho és d'un motor d'execució (anomenat una màquina virtual) o un compilador, amb un conjunt de llibreries estàndards que disposen d'implementacions per diversos maquinaris i sistemes operatius, que tenen l'objectiu que l'execució sigui idèntica sobre qualsevol d'ells.
Hi ha diverses edicions de la plataforma, entre elles:
* Java Standard Edition o Java SE (antigament J2SE) per ordinadors de sobretaula
* La Java Enterprise Edition o Java EE (antigament J2EE) per servidors web
* La Java Micro Edition o Java ME (antigament J2ME) per dispositius mòbils, com ara telèfons intel·ligents.
Des de desembre de 2006 la versió disponible de la Plataforma Java és la 1.6.0 (tal com anomenem la versió per desenvolupadors), o 6 (dita així quan ens referim a la versió en producció). Ambdues són la mateixa versió.
Cadascun dels diversos programes que conformen la Plataforma Java proveeix una part determinada de les seves funcionalitats principals. Per exemple, per un costat hi ha el compilador Java que converteix el codi font Java en bytecode Java (un llenguatge intermedi entre les fonts del programador i el codi màquina executable). El compilador forma part del Java Development Kit. Per un altre costat hi ha l'entorn d'execució de Java (JRE) que generalment ofereix una implementació de la màquina virtual amb un JIT el bytecode a codi nadiu (executable) de la màquina.
Existeix un ampli ventall de llibreries ja precompilades a bytecode de java. També hi ha diverses maneres d'implantar-les, com un applet d'una pàgina web, o un component J2EE. Hi ha bastants més components, alguns dels quals trobarem en edicions específiques de la plataforma, com podem observar al diagrama de la dreta.
Els components essencials de la plataforma són: el compilador de Java, les llibreries i l'entorn d'execució.

## La Màquina Virtual de Java

El cor de la Plataforma Java és el mateix concepte de "màquina virtual", que executa programes amb bytecode de Java. El bytecode d'un programa és el mateix, independentment del sistema operatiu o maquinari sobre el que s'executi. El compilador JIT tradueix el bytecode en instruccions de codi nadiu del processador i el desa en la memòria del codi de la màquina durant l'execució. Aquesta traducció és directa, ja que el bytecode és proper al codi màquina, de manera que la part enfarfegosa de traducció està resolta des del moment de la compilació. A l'inici Sun proveïa un intèrpret de bytecode, però això feia que les aplicacions fossin lentes. Des de la versió 1.2 del JRE, proveeix el JIT, que després d'un decalatge de temps, que entendríem com un escalfament, ofereix una execució que tendeix a ser tan ràpida com el codi executable. Tanmateix, aquesta forma de treball depèn de cada implementació del JRE.

## Llibreries de classe

La majoria de sistemes operatius ofereixen una gran quantitat de codi reusable ja implementat, per simplificar la feina del programador. Aquest codi acostuma a ser posat a disposició com un conjunt de llibreries carregables dinàmicament que les aplicacions poden carregar en temps d'execució. Donat que la Plataforma Java no depèn de cap sistema operatiu en concret, les aplicacions no poden confiar en les llibreries existents. En lloc d'això, proveeix un conjunt de llibreries de classe estàndard i comprensible, que contenen moltes de les mateixes funcions de codi reusable habitualment trobades als sistemes operatius actuals.
Les classes de les llibreries serveixen tres propòsits a la Plataforma Java. Com altres llibreries de codi estàndard, proveeixen al programador un conjunt de funcionalitats conegudes que realitzen tasques conegudes, com per exemple, el manteniment de llistes d'elements o la realització d'anàlisi gramatical de cadenes de caràcters. A més, les llibreries proveeixen una interfície abstracta a tasques que normalment dependrien fortament del maquinari i sistema operatiu. Tasques com ara l'accés a la xarxa i l'accés a fitxers estan sovint lligades a les capacitats de la plataforma. Les llibreries de Java java.net i java.io implementen el codi natiu internament, llavors proveeix una interfície estàndard perquè les aplicacions java portin a terme aquestes tasques. Finalment, algunes llibreries subjacents, podrien no suportar les funcionalitats que java ofereix. En aquests casos, les llibreries poden emular aquestes funcionalitats fent ús de qualsevol cosa a l'abast, o proveir una forma consistent de comprovar la presència de la funcionalitat en concret.
El 13 de novembre de 2006, Sun va anunciar que hi hauria un llançament de tot el codi Java, sota la llicència GPL, a març de 2007. Seguint aquesta promesa, Sun va portar a terme aquest llançament el 8 de maig de 2007, excepte algunes parts limitades que Sun havia llicenciat a terceres parts que no volien que el seu codi font tingués llicència de codi obert. L'objectiu de Sun és el de reemplaçar aquestes parts de codi tancat que queden per implementacions alternatives per aconseguir que tota la llibreria de la plataforma sigui oberta.
Hi ha també un projecte en marxa, de la Free Software Foundation per escriure un conjunt lliure de llibreries. S'anomena GNU Classpath.

## Llenguatges de programació

La paraula java per ella mateixa, es refereix al llenguatge de programació Java, que fou designat per usar amb la Plataforma Java. Els llenguatges de programació estan típicament a fora de l'àmbit del concepte "plataforma", encara que el llenguatge de programació Java està llistat com a part del cor de la plataforma Java. El llenguatge i el runtime són considerats normalment com una unitat.
Malgrat tot, terceres parts han produït un nombre de compiladors i intèrprets que tenen per objectiu la MVJ. Alguns d'aquests estan fets per llenguatges existents, mentre que d'altres ho estan en vistes a extensions del llenguatge Java. S'hi inclouen:
* AspectJ Java orientat a aspectes
* Generic Java (GJ), que fou incorporat pel Java oficial dintre de Java SE 5.0
* Groovy, llenguatge de scripts
* BeanShell, llenguatge de scripts amb la mateixa gramàtica de Java
* Jython, intèrpret de Python que inclou un compilador de Python a Java
* NetREXX, d'IBM
* Nice, orientat a objectes
* Pizza, que afegeix funcionalitats a Java (abandonat)
* Scala, orientat a patrons i programació elegant.
* JRuby
* Sleep, un intèrpret que barreja funcionalitats de Perl i d'Objective-C
* Rhino, motor de Javascript

## Plataformes similars

L'èxit de Java i el seu concepte d'Escriu un cop, executa arreu, ha portat a esforços similars. Un exemple notable és la plataforma Microsoft .NET, apareguda el 2002, que incorpora molts dels aspectes de Java que han tingut èxit. .NET en la seva forma completa (implementació de Microsoft) només és disponible amb totes les seves funcionalitats sobre plataformes Windows, mentre Java és disponible al complet sobre moltes plataformes. .NET va ser construït de zero per donar suport a múltiples llenguatges de programació, mentre la Plataforma Java, es construí per donar suport al llenguatge de programació Java (encara que posteriorment, altres llenguatges van ser desenvolupats sobre la base de la JVM, a partir de llavors).
.NET inclou una implementació de Java anomenada J Sharp (antigament coneguda com a J++) que no és compatible amb l'especificació de Java i la llibreria associada sovint es refereix a la versió antiga del llenguatge, JDK 1.1.

## Referències

* ↑ «Sun Obre les Fonts de la Plataforma Java». Sun Microsystems, 13-11-2006. Arxivat de l'original el 2008-12-19. [Consulta: 13 novembre 2006].
* ↑ «JDK és aquí!». Sun Microsystems, 08-05-2007. [Consulta: 9 maig 2007].

## Vegeu també

* Llista d'APIs de Java
* Java Performance
* MIDP
* MIDlet
* CLDC
* CDC
* Java ME
* Java de Temps Real