Door ir. Christine Daniels http://users.pandora.be/christine.daniels http://iwt.khlim.be/~cdaniels email:
[email protected]
I. Inleiding A. Historiek Java werd ontwikkeld door medewerkers van Sun Microsystems bestaande uit Patrick Naughton, Mike Sheridan, en James Gosling in 1991.
This is a snapshot taken at a barbecue that James Gosling threw for some of the folks associated with the Green Team. From left to right they are: Al Frazier, Joe Palrang, Mike Sheridan, Ed Frank, Don Jackson, Faye Baxter, Patrick Naughton, Chris Warth, James Gosling, Bob Weisblatt, David Lavallee, and Jon Payne. Missing in action: Cindy Long, Chuck Clanton, Sheueling Chang, and Craig Forrest.
(foto en tekst afgenomen van de Sun-website)
Zij wilden een nieuwe toegankelijke taal ontwikkelen. Een antwoord op C++ dat nogal eens onverwacht kon vastlopen. Ook het opkomend internet vroeg naar een oplossing om niet alleen statische beelden en tekst op het computerscherm te toveren, maar ook beweging en interactie. De projectgroep van Sun, “Green” genaamd, kreeg “carte blanche” van Sun. Het moest een volledig nieuw concept worden. Het antwoord daarop was Oak. Maar in 1995 veranderde die naam in Java, wegens juridische perikelen met de naam Oak. Waarom de naam “Java”? Zomaar, het was geen afkorting of zo. Gewoon een mooi klinkende naam. Sommigen beweren dat ze die naam kozen toen ze tasje koffie dronken op een terrasje… mogelijk java-koffie…. Iedereen zou gratis met deze taal aan het werk kunnen. En dat kan, want u kunt de ontwikkelingstool voor Java gratis van het web downloaden van de site van Sun: http://java.sun.com/ Deze tool heet het Java Development Kit, of afgekort tot JDK. Om de taal een beetje begrijpbaar te houden werd Java zeer gelijkend gemaakt met C++. En zoals C++ is ook Java een object georiënteerde taal. Kenners van C en/of C++ zullen zeker de treffende gelijkenis opmerken.
Inleiding tot Java door ir. C. Daniels
2
Het volledige verhaal vindt u op de website http://java.sun.com/features/1998/05/birthday.html weliswaar in het engels. B. Waarom Java? Een eerste reden om Java te gebruiken, en waarschijnlijk ook de voornaamste, is natuurlijk dat Java-projecten in een website kunnen geplaatst worden, en zo over het Internet kunnen verspreid worden. Een dergelijke toepassing heet een “Applet”. Om zo’n applet in een webpagina te plaatsen is een minimumkennis van de HTML-taal nodig. Laten we als oorbeeld even het “Hello World applet” bekijken. Hieronder is de code van de website in HTML:
<TITLE>Hello World!
Hieronder staat de code van het applet in Java: // Het HelloWorld - applet import java.awt.*; public class HelloWorld extends java.applet.Applet { public void paint(Graphics g) { g.drawString("Hello World!",25,25); }
} En zo ziet het applet eruit: Met de appletviewer van JDK.
Inleiding tot Java door ir. C. Daniels
3
In Internet Explorer:
In Netscape:
Daarnaast is Java een volledige programmeertaal, zodat er ook makkelijk gewone Dos- en Windowprogramma’s in Java kunnen ontwikkeld worden. We zullen deze aanduiden met de naam Java-toepassing, in tegenstelling tot het applet, dat alleen in een webbrowser kan draaien. Hieronder een voorbeeld van een toepassing, die dezelfde tekst afdrukt in een DOS-scherm. Maar windowtoepassingen kunnen ook. De tekst van het bronbestand HelloWorld2.java: //HelloWorld - toepassing class HelloWorld2 { public static void main(String args[]) { System.out.println("Hello World!"); } }
Het kenmerk van een Java-toepassing is dat ze niet afgeleid zijn van een applet, maar een methode main() bevatten, zoals in een C-programma. Het woordje public betekent dat deze methode van overal in het programma bereikbaar is. Het woordje static dat alle objecten dezelfde functie main gebruiken. Het woordje void betekent (zoals in C en C++) dat de functie geen waarde teruggeeft.
Inleiding tot Java door ir. C. Daniels
4
En zo ziet een en ander eruit in het dosscherm wanneer we gebruik maken van JDK:
De instructie javac HelloWorld2.java compileert het bronbestand HelloWorld2.java tot het bestand HelloWorld2.class. Javac is de javacompiler. Met de instructie java HelloWorld2 wordt de java-toepassing HelloWorld2.class uitgevoerd, en er verschijnt netjes “Hello World!” op de volgende lijn. Niet spectaculair, maar meer doet ons programma (voorlopig) niet! Dat u voorlopig niet begrijpt hoe het allemaal in elkaar zit, is normaal. De juiste betekenis van al de gebruikte codes zal later stilaan duidelijk worden!
C. Wat is OOP? Java is, net als C++, een voorbeeld van een object georiënteerde programmeertaal. Dikwijls afgekort tot OOP. (van het Engels: Object Oriented Programming) Wat houdt OOP in? En wat is het verschil met een “gewone” programmeertaal? 1 We denken met object e n. Net zoals in het werkelijke leven, gaan we in de eerste plaats objecten definiëren, en niet louter code schrijven. Zo zouden we wat kunnen programmeren over voertuigen. Een voertuig is een object met kenmerken en methoden. Elk object heeft kenmerken: Een voertuig is gekenmerkt door de afmetingen (lengte, breedte, hoogte,…), door het aantal wielen, het al of niet aanwezig zijn van een motor, enz. deze kenmerken worden opgeslagen in variabelen die tot dat object behoren, zogenaamde klassevariabelen. Daarnaast heeft elk object ook een aantal methodes: Hoe zet je het voertuig in beweging? Hoe draai je linksaf? Hoe stop je het? Enz. Dit wordt geprogrammeerd als een functie van die klasse, meestal een methode genoemd. 2 Verschil klasse - objec t In een klasse (Engels: class) worden alle kenmerken en methodes vastgelegd. In ons voorbeeld “voertuig” bedoelen we variabelen voor het aantal wielen, de afmetingen, enz. en een aantal methoden zoals “starten”, “linksafdraaien”,enz. Met een object bedoelen we een concreet voertuig. We zeggen dat een object afgeleid is van een klasse, of in specialistentaal: dat een object een “instantie” is van een klasse (Engels: an object is an instance of a class).
Inleiding tot Java door ir. C. Daniels
5
Zo kunnen we een object “auto” maken, of “fiets”. Voor elk moet je dan de juiste afmetingen, aantal wielen, enz. ingeven: voor een auto 4 wielen en voor een fiets 2, een driewieler 3 natuurlijk…. Van één klasse, kunt u dus meerdere objecten of instanties afleiden. 3 Kenmerken van OOP OOP heeft drie belangrijke kenmerken: - Inkapseling (Engels: incapsulation) - Overerving (Engels: inheritance) - Polymorfisme (Engels: polymorphism) Inkapseling: OOP laat toe de methoden en variabelen af te schermen van de buitenwereld, in casu de gebruiker of programmeur. Juist zoals u in een auto wel het stuurwiel kunt bedienen, maar meestal niet weet welk mechanisme de wielen draait. Er bestaan daarvoor verschillende systemen, maar de bediening van het stuur is in alle auto’s hetzelfde. Het is niet de bedoeling dat we aan het stuurmechanisme gaat prutsen (dat is voor de specialist, hier de garagist), maar wel dat we de auto kunnen sturen. Overerving: OOP laat toe een nieuwe klasse af te leiden van een reeds bestaande klasse en hierin aanpassingen aan te brengen. Zo zouden we van de klasse voertuig, een klasse vliegtuig kunnen afleiden. Dit heeft alle kenmerken van een voertuig, maar we zouden er ook de vleugelbreedte, stijgsnelheid e.d. kunnen in onderbrengen. We “erven” dus alle eigenschappen en methoden van de klasse voertuig, zoals afmetingen en aantal wielen, maar we voegen er de nodige extra kenmerken aan toe. Polymorfisme: is een moeilijk woord om aan te duiden dat een enkele methode verschillend kan reageren naargelang het object waarop het wordt uitgevoerd. Als dit alles u nogal erg theoretisch en ingewikkeld voorkomt, dan heeft u gelijk. In de loop van de cursus zullen we regelmatig aandacht besteden aan deze kenmerken, en zal een en ander duidelijker worden! D. Enkele kenmerken van Java 1 Java is eenvoudig De bedoeling van de ontwerpers van Java was een eenvoudige programmeertaal te ontwerpen. Enkele dubbelzinnigheden uit C++ zoals meervoudige overerving en pointers werden weggelaten in Java. 2 Javacode is beknopt De functionaliteit van Java werd ondergebracht in de java-klassen, zodat de code van de programmeur zeer kort en bondig is, en tegelijkertijd toch krachtig.Dit maakt Java uitermate geschikt om via het internet te opereren. 3 Javacode is snel (?) Tot nog toe is Java heel wat trager als C++. Dit komt onder meer door het feit dat de Javataal een interpreter is, en geen compiler. Men werkt echter aan systemen zodat binnenkort Java, de snelheid van C++ kan evenaren. Inleiding tot Java door ir. C. Daniels
6
4 Java is veilig Een javaprogramma kan worden uitgevoerd op een andere computer van het internet. Java is echter zodanig ontworpen dat Java geen schadelijke effecten op dit computersysteem kan uitoefenen. Java is nochtans vrij nieuw, zodat de tijd zal uitwijzen of Java inderdaad perfect veilig is tegen malafide programmeurs. Om de veiligheid te verhogen werden enkele voorzorgen genomen: Ø Java-applets kunnen niet lezen of schrijven naar een schijf op de lokale computer Ø Java-applets kunnen geen programma uitvoeren op de lokale computer. Ø Java-applets kunnen geen verbinding maken naar andere computers op het Internet, tenzij met de server van waaraf ze werden gedownload. 5 Java is platform-onafh a nkelijk Dit is misschien wel de belangrijkste eigenschap! Uw Javaprogramma draait immers op elke computer, pc, amiga, Mac…. De code wordt immers vertaald bij het uitvoeren. Bij een klassieke programmeertaal (Pascal, C,C++,…) ziet een en ander er als volgt uit:
Broncode
Pentium compiler
Machinecode Pentium
PowerPC compiler
Machinecode PowerPC
SPARC compiler
Machinecode SPARC
Bij Java-programma’s zit de situatie anders in elkaar: Pentium Java Interpreter
Pentium Java compiler
Broncode
PowerPC Java compiler
SPARC JAVA compiler
Java Bytecode Platform onafhankelijk
PowerPC Java Interpreter
SPARC Java Interpreter
6 Java ≠Javascript ! Een fout die dikwijls wordt gemaakt, is dat men java, en javascript met elkaar verwart. Javascript is nochtans geen volledige programmeertaal zoals Java, maar een scripttaal. Dit wil zeggen dat ze alleen werkt, wanneer de code wordt ingebouwd in een webpagina.
Inleiding tot Java door ir. C. Daniels
7
E. Wat betekent die String args[]? String args[] is een argument of parameter die wordt meegegeven aan de main-functie, of liever de main-methode, zoals in OOP gebruikelijk is. De vierkante haakjes [] duiden erop dat args een array is. Een array (waarover later meer) kan verschillende waarden bevatten. De eerste waarde zit in args[0], de tweede in args[1], enz. De reden dat de eerste waarde bij 0 begint en niet met 1, is een overblijfsel uit de C-taal. In de argumenten (of ook wel parameters genoemd) worden de waarden opgeslagen die worden meegegeven aan het programma bij het opstarten. Het woordje String geeft aan van welk type de variabele args is, namelijk van het string-type. Een string kan teksten bevatten. In Hoofdstuk 2 gaan we dieper in op de variabel-types die in Java gebruikt worden. Oefening: Pas de code van de HelloWorld-toepassing als volgt aan: //HelloWorld - toepassing class HelloWorld2 { public static void main(String args[]) { System.out.println("Hallo "+args[0]+”!”); } }
Compileer het programma met javac, en geef de volgende opdracht in bij het uitvoeren: Java
HelloWorld2 Gloria
Hoe ziet de uitvoer eruit? De parameter Gloria werd opgeslagen in args[0]. Wat gebeurt er als u nu het programma uitvoert met de opdracht Java HelloWorld2 ? (zonder parameter) Er komt nu een foutmelding op het scherm: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at HelloWorld2.main(HelloWorld2.java:8)
Dit komt doordat args[0] nu geen waarde bevat, en we willen deze toch afdrukken. Later zullen we leren hoe we dergelijke fouten kunnen opvangen in een programma. Probeer eens of u twee parameters kunt afdrukken, zodat en uitvoer wordt: Hello Gloria en Peter! F. Java en Internet U vindt een heel wat interessante links naar sites met java-tutorials en info op mijn website http://iwt.khlim.be/~cdaniels in de rubriek “Waar vind ik het?” en kies daar voor “Cursussen Online”.
Inleiding tot Java door ir. C. Daniels
8