Witold Kepinski - 20 mei 2015

Java development software bestaat 20 jaar

Oracle, gebruikers en de developercommunity vier het twintigjarig bestaan van Java. Sinds 1995 is Java uitgegroeid als software programmeertaa voor applicaties, zakelijke big data, cloud, social, mobiel en het Internet of Things tot en met connected cars, smartphones en games. Om twintig jaar Java te vieren, geeft Oracle Certification twintig procent korting op alle Java-certificatie-examens. Dit aanbod geldt wereldwijd en tot en met 31 december 2015. Om aanspraak te maken op de korting, dienen kandidaten bij de registratie de promotiecode Java20 op te geven. Klik hier voor meer informatie

Java is een objectgeoriënteerde programmeertaal. Java is een platformonafhankelijke taal die qua syntaxis grotendeels gebaseerd is op de (eveneens objectgeoriënteerde) programmeertaal C++. Java beschikt echter over een uitgebreidere klassenbibliotheek dan C++.

Java ontstond begin jaren 90 in een klein dochterbedrijf van Sun Microsystems onder leiding van James Gosling. Dat bedrijfje, First Person (met onder meer Arthur van Hoff en Patrick Naughton), had als opdracht: "make something cool" (vertaald: maak iets cools). In de beginjaren richtte het bedrijfje zich op software voor settopboxen. Toen enkele onderhandelingen op het nippertje mislukten begonnen ze aan Java. De werknaam Oak werd gekozen toen men naar buiten keek bij het zoeken naar een naam en daar een eik (Engels: Oak) zag staan. Er bleek echter al een programmeertaal met die naam te bestaan, dus kozen ze "Java", een verwijzing naar koffie. Later bouwden ze voort op deze terminologie en introduceerden ze JavaBeans (bonen) en JAR-archieven (Java ARchive) (een jar is een pot).

Aanvankelijk wilde men Java promoten als programmeertaal voor allerhande elektronische apparaten, zoals televisies, afstandsbedieningen en koelkasten. Maar toen het world wide web meer en meer aan populariteit won, bedacht Sun dat ze hun (toen nog steeds niet al te populaire) taal goed konden gebruiken in een webomgeving. Dankzij de open specificatie en de mogelijkheid om een Javaprogramma als applet in een webpagina in te bedden (ook wel "embedden" genoemd) was de hype al snel gecreëerd.

Het gebruik van Java voor kleine apparaten werd korte tijd later (1997) toch gerealiseerd met het uitbrengen van de Java Card technology, waarmee chipkaarten in Java geprogrammeerd kunnen worden. Deze techniek werd al gauw na de introductie in de mobieletelefoon-wereld geadopteerd voor gebruik in de simkaart. Het bleek aan te slaan en in 2005 werd deze Javatechniek in meer dan 80% van de uitgegeven simkaarten toegepast.

De volgende generatie Java bood vervolgens de mogelijkheid om Javaprogrammatuur op servers zelf uit te voeren (Engels: 'server-side'). Dit gebeurt in de vorm van servlets, Enterprise JavaBeans en JavaServer Pages. Met name op dit gebied heeft Java de afgelopen jaren zijn kracht bewezen en wordt de taal gezien als een belangrijke omgeving voor webapplicaties. Zie ook Java 2 Enterprise Edition.

Sterk in opkomst is de Java-versie die bedoeld en geschikt is voor apparatuur met een beperkte verwerkingscapaciteit, zoals pda's, mobiele telefoons en — eindelijk — de settopbox. Zie hiervoor Java 2 Micro Edition.

Op 13 november 2006 gaf Sun delen van Java vrij als opensourcesoftware, onder de GNU General Public License (GPL). Op 8 mei 2007 gaf Sun de laatste delen van Java vrij onder de GPL, op enkele kleine gedeeltes na waar Sun niet het auteursrecht op heeft.

Toen Google succesvol werd met het besturingssysteem Android, dat in Java geschreven programma's kan uitvoeren, werd Java populairder bij ontwikkelaars. Dit had ten dele te maken met de geoptimaliseerde virtuele machine Dalvik die gebruikt wordt om Java-programma's uit te voeren, waardoor Java-programma's sneller werden.

Gebruik

Gedurende de jaren 90 is Java tamelijk populair geworden. In de meeste gevallen leek Java alleen goed voor gebruik in het onderwijs en voor webapplicaties, respectievelijk vanwege de strakke syntaxis en de mogelijkheid "applets" in webpagina's in te bouwen. Door kleine verschillen in Java-versies tussen diverse browsers is het gebruik van applets eigenlijk nooit echt van de grond gekomen, wat geleid heeft tot de introductie van de Java Plug-in: in plaats van een virtuele Javamachine door de browserbouwer in te laten bouwen, kan de gebruiker hem zelf downloaden wanneer dat nodig is. Hiermee wordt incompatibiliteit tussen JVM's van verschillende merken omzeild.

Een ander platform waar Java veel wordt gebruikt is de mobiele telefoon. Veel toestellen bieden de mogelijkheid om Javaprogramma's uit te voeren. Deze programma's moeten dan wel voldoen aan de specificaties die zijn vastgelegd in de Java 2 Micro Edition-standaard.

Het gebruik van Javaprogramma's in servers is meer en meer toegenomen sinds het implementeren van just in time compilatie, dat op het niveau van de Java Virtual Machine een grote versnelling van de uitvoering met zich meebracht, waardoor de eerder trage Javaprogramma's nu ook bruikbaar werden voor serverapplicaties. Daarnaast bevatten de J2EE- (Enterprise Edition) bibliotheken een groot aantal klassen voor het programmeren van (web)serverapplicaties, het communiceren met gegevensbestanden en het gebruik van allerlei generieke diensten. De meeste internet-gebaseerde bankdiensten in Nederland bijvoorbeeld draaien inmiddels op Java-technologie. Het opensource-contentmanagementsysteem van Nederlandse bodem MMBase is geheel geschreven in Java.

Java is door de eenvoud en webbased-mogelijkheden ook erg populair als programmeertaal voor computerspellen. Een voorbeeld hiervan is Minecraft. Ook de ontwikkeling van bibliotheken, zoals Java OpenAL (JOAL) en Java OpenGL (JOGL), draagt bij aan het gebruik van Java voor computerspellen. Er worden ook opensourcebibliotheken ontwikkeld, zoals de Lightweight Java Game Library (LWJGL). De jMonkeyEngine is een engine voor het ontwikkelen van 3D-computerspellen in Java.

Java versus C++

Java wordt gecompileerd naar bytecode voor een virtuele machine, de Java Virtual Machine (JVM). De JVM is beschikbaar voor allerlei verschillende soorten computers. Hierdoor is de gecompileerde bytecode platformonafhankelijk, dat wil zeggen de code kan op elke willekeurige computer draaien, onafhankelijk van het besturingssysteem (zoals Windows, Unix of Mac OS X). Er is dus maar één (virtueel) platform: de JVM.

C++-broncode (en ook de broncode van C, de niet object-georiënteerde voorloper van C++) wordt meestal direct naar machinetaal gecompileerd, waardoor de uitvoerbare bestanden slechts op één doelplatform draaien. De Javabytecode wordt op het laatst mogelijke moment (just in time, JIT) gecompileerd naar machinetaal. Bij deze JIT-compilatie worden ook de dynamische eigenschappen van een programma meegenomen. Het kan gebeuren dat veelgebruikte bytecode opnieuw wordt gecompileerd omdat in een gebleken situatie met een iets andere compilatie grote snelheidswinsten te boeken zijn.

Hierdoor zal een Javaprogramma in eerste instantie langzamer draaien dan vergelijkbare programma's die direct naar machinetaal gecompileerd zijn. In de begintijd van de programmeertaal Java was het JIT-compileren ook nog niet volledig geïmplementeerd. Hierdoor heeft Java een serieus imagoprobleem opgelopen dat nog steeds voortduurt, hoewel Java tegenwoordig competitief presteert.

Daarnaast wordt van Java ten opzichte van C++ soms als nadeel aangemerkt dat voor de taal C++ onafhankelijke ISO/ANSI-comités bestaan, terwijl Java nog steeds in handen lijkt te zijn van Sun Microsystems. Anderen beweren dat daar tegenover staat dat Java nog de mogelijkheid heeft om te groeien, zich aan te passen en nieuwe ontwikkelingen in te bouwen, terwijl C++ door standaardisatie verstard is en dus aan alle kanten door allerlei ontwikkelingen ingehaald wordt.

In Java wordt de programmeur beter tegen zichzelf beschermd dan in C++ en C. Zo is er in Java geen pointermanipulatie. Dit is een voordeel omdat fouten bij het gebruik van pointers moeilijk te traceren zijn en zelfs kunnen uitlopen op het crashen van het besturingssysteem. Daarentegen is het ook een nadeel omdat het de vrijheid van de programmeur beperkt.

Een ander belangrijk verschil tussen Java en C++ is het ontbreken van expliciet geheugenbeheer in Java: Java houdt zelf bij welke objecten met de new-operator zijn aangemaakt en verwijdert deze automatisch zodra er geen referenties meer naar die objecten zijn. Daarnaast is exception handling grondiger en correcter geregeld dan in C++.

Net als C++ ondersteunt Java (sinds 5) ook generiek programmeren. Zowel in Java als in C++ bestaan geparametriseerde types alleen voor de compiler. In Java worden deze types vervangen door het overeenkomende, minst specifieke niet-generieke type (bv.: List wordt List). Daarnaast wordt gebruikgemaakt van runtime-casting voor het verkrijgen van specifieke types. In C++ worden generieke types juist vervangen door gespecialiseerde types. Hierbij is het niet mogelijk om bijvoorbeeld een bibliotheek te schrijven met geparametriseerde klassen die pas at runtime gekoppeld worden. Een List-klasse die in een bepaalde bibliotheek zit, moet opnieuw worden gecompileerd als deze wordt geparametriseerd voor een type en de parametrisatie daarvan niet in de bibliotheek al is voorgecompileerd. Dat is ook de reden waarom STL, de standaardbibliotheek van C++, vrijwel alleen in header-files gedefinieerd is: de applicatie die STL gebruikt, zal eigen versies van de klassen moeten compileren.

Sommigen vinden Java een iets overzichtelijkere taal dan C++, maar dat is een kwestie van smaak: het schrijven van totaal onbegrijpelijke programma's is met C(++) gemakkelijker dan met Java. Veel C++-programmeurs missen zaken die in Java bewust zijn weggelaten zoals destructors, operator-overloading en pointermanipulatie. Verder klagen ze over het feit dat de garbage-collector de ongebruikte objecten niet snel genoeg vrijgeeft.

Java en JavaScript

Veel mensen verwarren Java met JavaScript, maar in feite hebben de twee talen weinig met elkaar te maken. Hoewel beide talen op het eerste gezicht qua syntaxis op elkaar lijken, zijn er grote verschillen:

Uitvoerbaarheid: JavaScript is bedoeld als scriptingtaal en wordt daarom vaak geïnterpreteerd. Java wordt eerst naar bytecode gecompileerd en daarna door een virtuele machine (VM) uitgevoerd.
Relatie tot browser: Een scripttaal dient meestal als hulpmiddel bij een programma. In het geval van een browser dient JavaScript als middel om statische webpagina's te manipuleren. Java-applets zijn echter afzonderlijke programma's die in principe geen band hebben met de webpagina waarin ze verschijnen: ze draaien in een soort 'zandbak' ('sandbox') waar ze niet uit kunnen. Ondertekende Java-applets hebben deze 'sandbox' echter niet.

Strong-typed vs. Weakly-typed: JavaScript kent geen sterk getypeerde variabelen, wat betekent dat iedere gedeclareerde variabele ieder gegevenstype kan bevatten. In Java moet vooraf worden aangegeven welk gegevenstype een variabele kan bevatten, en als er een verkeerd gegevenstype wordt toegewezen aan een variabele, wordt daar tijdens het compileren melding van gemaakt. Bij het programmeren van kleine, eenvoudige applicaties vermindert het niet hoeven opgeven van datatypen de complexiteit van het coderen, en daarom is JavaScript meer geschikt voor korte, kleine applicaties. In grote applicaties is het belang van strong types veel groter, omdat het de programmeur in staat stelt in een vroeg stadium fouten op te sporen met betrekking tot verkeerd gebruik van gegevenstypen en onnodige conversies daartussen zelf in de hand kan houden.

Statische typering vs. Dynamische typering: JavaScript is dynamisch getypeerd, Java is statisch getypeerd. Dit wil zeggen dat typechecking in Java tijdens compilatie gebeurt, en in JavaScript at runtime.
Objectmodel: Java kent classes, JavaScript kent alleen Objecten. Java heeft dan ook een Objectmodel gebaseerd op class inheritance, JavaScript heeft een Objectmodel gebaseerd op prototype inheritance. Verder ondersteunt JavaScript duck-typing, dit in tegenstelling tot Java.

Java vs .NET

Het concept van de virtuele machine (VM) is ouder dan Java zelf. In de jaren 70 was er de P-Code-virtuele machine om Pascalprogramma's platformonafhankelijk mee uit te voeren. Ook Microsoft creëerde later zijn eigen virtuele machine: de Common Language Runtime of CLR, de basis van .NET. Hét grote verschil tussen de Java VM van Sun en de CLR van Microsoft is echter dat die van Sun op verschillende besturingssystemen kan draaien, terwijl die van Microsoft beperkt is tot de diverse Windows-versies van Microsoft. Al zijn er inmiddels door de opensourcegemeenschap een aantal succesvolle .NET-runtimes voor Linux uitgebracht, waarvan Mono de bekendste is, waarmee ook .NET-code op andere besturingssystemen kan draaien.

Java en open source
Vaak wordt Java genoemd in verband met open source en open standaarden en op 13 november 2006 kondigde Sun Microsystems aan Java vrij te geven onder de GNU General Public License.

Al eerder had Sun het beheer van het Javaplatform in handen gelegd van een onafhankelijke organisatie, het Java Community Process (JCP). Dit samenwerkingsverband van Sun met andere bedrijven, instellingen en individuele personen bepaalt welke API's en andere standaarden onderdeel gemaakt worden van het platform. Ook bepaalt de JCP de richting van het kernplatform zelf – welke klassen opgenomen worden in de standaardbibliotheek en welke veranderingen er doorgevoerd worden in de taal zelf. Over veranderingen in het kernplatform heeft Sun echter een veto binnen het JCP.

Sun heeft destijds een Javaontwikkelomgeving uitgebracht, Netbeans, die later vrijgegeven is in de opensourcegemeenschap en nu door een opensourcegemeenschap verder wordt ontwikkeld en beheerd. Ook zijn in de opensourcewereld veel tools en software te vinden voor Java en/of in Java geschreven, die worden uitgebracht onder een van de vele opensourcelicenties.

Oracle

Onder begeleiding van Oracle werden zijn grote platformreleases gerealiseerd, waaronder  Java 7 en Java 8. Java 9 staat gepland voor 2016. Het Java Community Process (JCP) is opener en transparanter dan ooit tevoren en dient als een integraal onderdeel van de communityparticipatie in de voortdurende evolutie van de technologie. De OpenJDK Community – de plek om samen te werken aan een open source-implementatie van de Java Platform Standard Edition – wordt breed gedragen en trekt voortdurend nieuwe contributors aan. 

In maart 2014 kondigde Oracle de beschikbaarheid aan van Java SE 8, nadat het de definitieve goedkeuring kreeg in het Java Community-proces. Deze release, met daarin de grootste upgrade van het Java-programmeermodel sinds het platform in 1995 werd geïntroduceerd, werd in samenwerking met de OpenJDK Community ontwikkeld. Niet lang daarna, in april 2014, werden na de definitieve goedkeuring in het Java Community Process ook het Java Platform, Micro Edition 8 (Java ME 8) en de daaraan gerelateerde releases van Oracle's Java Embedded products beschikbaar gemaakt. Met een consistent Java 8-platform op embedded services, desktops, datacenters en de cloud kunnen klanten applicaties sneller inzetten, in-flight data verwerken en analyseren, en effectiever reageren op gebeurtenissen.

Een nieuw Java-tijdperk

Oracle en de Java-community focussen zich nu op nieuwe innovaties in Java 9. De belangrijkste feature die gepland staat voor deze release, is Project Jigsaw dat zich richt op het modulariseren van het platform om het schaalbaar te maken voor nog meer devices. Hierdoor wordt het voor developers makkelijker om library’s en grote applicaties op te zetten en te onderhouden, en tegelijkertijd de veiligheid en prestaties te verbeteren. Andere features die voor Java 9 in de planning staan, zijn het Java Shell, een interactieve tool voor het evalueren van snippets van Java-code; een nieuwe HTTP client API om HTTP/2 en websockets te ondersteunen; een port naar de ARM AArch64 architecture op Linux; een groot aantal updates voor bestaande API’s en een aantal significante verbeteringen aan de prestaties. 

“Direct of indirect heeft bijna iedereen op deze planeet met Java te maken. In de meest afgelegen gebieden maakt Java zaken als mobile health en bankieren mogelijk. Miljoenen mensen spelen games als Minecraft. Java is een drijvende kracht van onze wereldwijde economie”, zegt Martijn Verburg, co-leader van de Java User Group in Londen. “Het is van enorm belang dat dit platform wordt beheerd door een partij die snapt welke belangrijke rol Java in de wereld speelt. Oracle werkt uitstekend samen met een enorm diverse community van gebruikers, developers, open source-projecten en grotere ondernemingen. Ik kan niet wachten om te zien wat de volgende-generatie engineers weer bedenkt. Met Java lijken de mogelijkheden eindeloos.”
 
Bekijk de winnaars van de Duke’s Choice Award om een beeld te krijgen van het werk dat de Java-community verricht. 

WK

Bronnen: Wikipedia en Oracle

Copaco | BW 25 maart tm 31 maart 2024 Trend Micro BW BN week 10-11-13-14-2024
Copaco | BW 25 maart tm 31 maart 2024

Wil jij dagelijkse updates?

Schrijf je dan in voor onze nieuwsbrief!