En introduktion till Java

Den fart med vilken Java har svept in i datorvärlden är unik. Ingen gång tidigare har ett programmeringsspråk blivit så stort och välkänt på så kort tid. För idag stora och välkända språk som t.ex. C, tog det lång tid från det att specifikationen fanns tillgänglig tills det fick momentum i datorpressen och bland programutvecklarna.

Java är av naturliga skäl fortfarande inte lika vanligt bland programutvecklare i allmänhet, men det har nog redan fått lika stor uppmärksamhet som C och C++ fått totalt.

Har du inte hört talas om Java är du antagligen inte i datorbranschen. Däremot kanske du ännu inte har bildat dig en ordentlig uppfattning om vad Java är. Om det är någonting att ha helt enkelt.

Varför har då Java fått så stort momentum? För att det är ovanligt lätt att lära sig? För att det är ovanligt kraftfullt? Nej. För att det lanserades som ett Internetspråk (vad nu det innebär).

Just nu är Internet hetare än Saharaöknen någonsin skulle kunna vara. Det räcker att ett företag nämner Internet i en bisats i en pressrelease för att kursen på Wall Street skall stiga med tio procent på en enda dag. Det finns en Internetrusch idag vars motsvarighet endast kan hittas i den amerikanska guldruschens glansdagar. Utan kopplingen till Internet skulle Java aldrig fått samma uppmärksamhet.

Att Java har lanserats som ett Internetspråk betyder i praktiken att det används för att piffa upp HTML dokument med interaktiva delar, animationer och liknande. Det finns dock, eller åtminstone så kommer det att finnas, bättre sätt att piffa upp HTML dokument än med Java. Det är att underskatta Java om man enbart talar om det som ett Internetspråk, men det är - bra eller dåligt - den användning som Java till en början har fått.

Vad är Java?

Java är ett nytt programmeringsspråk som ligger någonstans mellan C och C++, med ytterligare några "lån" från andra språk. Det har konstruerats av Sun Microsystems i USA.

I "enkelhet" ligger det ganska nära Pascal, alltså ungefär mittemellan Basic och C++. Man bör dock komma ihåg att Java inte är lika kraftfullt som C++ och därmed aldrig kommer att ersätta C++ för extra krävande utveckling. Om du är familjär med C++ kan jag redan nu nämna att Java

Huruvida det Java som finns idag kommer att vara detsamma som finns om ett eller två år återstår förstås att se. Jag antar att det inte är en omöjlighet för Sun att addera dessa eller andra finesser till Java om programutvecklarna så kräver. En anledning till att de inte finns med är dock att kompilatorn är enklare att skriva, så kanske inte. Vi får väl se.

Om du är familjär med C, men inte med C++, är det dags att lära dig objektorienterad programmering och klasser. Klasserna är oundvikliga i Java. Allt är nämligen klasser. Det finns ingen data och inga funktioner som inte är medlemmar i klasser.

Den bästa bakgrunden för att lära sig Java är utan tvekan C++. Men även för dig som bara kan C finns det mycket du kommer att känna igen. Variabler (int, long etc), programkonstruktioner (if, for, while etc), operatorer (++, += etc) fungerar precis likadant som i C. Det går förstås att lära sig Java om man har ett annat språk med sig (eller t.o.m. om Java är det första programmeringsspråket), men som sagt är det en fördel att kunna C++ eller i alla fall C.

För både C och C++ kunniga finns det följande nyheter att ta hänsyn till i Java:

Java är dock mer än ett språk. Java definierar också en binär standard, helt processoroberoende, vilket mig veterligen aldrig tidigare har gjorts.

Detta betyder flera saker:

Att Java Virtual Machine måste tolka den färdiga programfilen (interpretera den) betyder att programmet utförs långsammare än t.ex. C och C++ program. Detta är i princip ofrånkomligt eftersom så fort man gör programmet snabbare gör man det också processorberoende.

Jag säger i princip därför att det redan finns någonting som heter JIT-kompilatorer. JIT står för Just-In-Time och är en kompilator som kompilerar den kompilerade koden. Låter det invecklat? Som kaka på kaka? Jo, det är förstås sant. Vad JIT-kompilatorn gör är att den tar det kompilerade Javaprogrammet och översätter den binära Javakoden till processorns eget maskinspråk, och sedan kör själva programmet igång. JIT-kompilatorn är alltså, liksom Java Virtual Machine, processorberoende. JIT-kompilatorn ersätter också Java Virtual Machine, som ju inte behövs då JIT skapar ett program som kan köras direkt av en lokala processorn.

I teorin skulle man faktiskt kunna skriva en C++ kompilator som kompilerar C++ källkod till den binära standard som Java definierat. I varje fall verkar det möjligt så länge man som jag har begränsade kunskaper om kraftfullheten hos detta binära språk. Det öppnar förstås ytterligare möjligheter med Java.

Jag vill påstå att detta är en viktigare standard än själva Javaspråket och att den skulle kunna få den historiskt största betydelsen. Processortillverkarna har ju i alla tider först byggt en processor och sedan sagt: Så här fungerar processorn X:s binära språk (maskinkoden), varsågod och skriv program! Nu har i stället Sun sagt: Så här fungerar det binära språket, varsågod och tillverka processorer!

Eftersom det idag t.ex. finns processorer som direkt kan tolka C-kod är det förstås bara en tidsfråga innan första Javaprocessorn ser dagens ljus. Sedan är ju inte steget långt till första Javadatorn med första Javaoperativsystemet. Sådana idéer finns redan i omlopp, framförallt från Sun själva men även från oberoende dataföretag.

Vilka användningsområden finns för Java?

Man kan skriva två olika typer av Javaprogram.

En applikation är ett fristående program, precis som vilket annat C eller C++ program som du har på din dator. Det kan vara textbaserat, och alltså köras från kommandoraden, eller det kan innehålla fönster, menyer och dialogrutor precis som vilket annat Windowsprogram som helst. En applikation har förstås tillgång till hela dators resurser.

En applet finns bara inbäddat som en ruta i ett HTML dokument. Appleten kan rita upp vad den vill i denna ruta, inklusive inmatningsfält, knappar etc, man kan i övrigt inte göra speciellt mycket mer. Av säkerhetsskäl har t.ex. en Java applet inte tillgång till några filhanteringsfunktioner. En Java applet kan alltså inte skriva till din lokala hårddisk. Det kan förstås en Java applikation. Den har tillgång till hela den lokala datorn, precis som vilket annat C++ program som helst.

Att Java inte är moget för professionell användning än märks bl.a. på Sun's skapelse Java WorkShop. Java WorkShop är en utvecklingsmiljö för Java - skriven helt och hållet i Java. Hämta den och testkör den på din dator så förstår du vad jag menar; eller, förresten, gör inte det. Ta i stället mitt ord för att Java WorkShop inte är ett speciellt lyckat program. Det beror inte på att Sun skulle ha dåliga programmerare eller på att Java skulle vara ett dåligt språk. Det beror på att det är långsamt - väääldigt långsamt - samt på att användargränssnittet inte inkluderar så enkla detaljer som att Tab-tangenten flyttar mellan rutorna i en dialog. Java WorkShop demonstrerar mycket tydligt att en JIT-kompilator i stort sett är nödvändig för större Javaprogram.

För att Java skall fungera på många olika operativsystem har man valt att bara implementera det som är gemensamt för de vanligaste operativsystemen. Det är t.ex. tydligt om man undersöker Javas grafikfunktioner. De är mycket enkla och inte alls lika kraftfulla som Windows'.

Det betyder förstås att om du som programutvecklare enbart siktar på ett operativsystem, och inte bryr dig speciellt mycket om att programmet skall kunna köras i andra miljöer, är det bästa att använda ett språk och en utvecklingsmiljö som finns för just det operativsystemet. Om det sedan blir C++ eller Visual Basic spelar mindre roll.

Java fyller än så länge endast sin funktion om programmet skall vara oberoende av operativsystem (och processor). Om det skall fungera likadant på Unix som på OS/2 som på Windows 95 som på Macintosh. I framtiden kan detta dock ändras. Det kommer då, bl.a. tack vare JIT-kompilatorer, att vara ett val av språk och inget annat. Som programutvecklare kan du då välja Java i stället för C++ för att det är enklare eller bättre, utan att för den skull försaka möjligheten att utnyttja ett visst operativsystems fördelar.

Det är säkert bara en tidsfråga innan det kommer kompilatorer där man kan välja om Javakoden skall kompileras för Java Virtual Machine, eller för den lokala processorn och det lokala operativsystemet.

Jag nämnde tidigare betydelsen av den binära standard för datorprogram som Java definierat samt den nära förestående ankomsten av Javaprocessorer och Javaoperativsystem. Här kommer Java säkert att bli en stor succé. Detta är apparater som framförallt hör till gruppen hemelektronik, d.v.s. tv-apparater, stereoanläggningar, tvättmaskiner etc.

Sådana apparater är förstås också elektroniska produkter som behöver någon form av program för att fungera. Här tror jag ett stort användningsområde finns för Java. Det intressanta är att en cirkel i sådana fall sluts. Java började nämligen som ett språk för att programmera interaktiv tv och det var först efter att det projektet lagts ned som Sun fick idén att lansera Java som ett Internetspråk.

Slutsats

Huruvida Java kommer att dominera som språk är förstås för tidigt att sia om. Att det kommer att dominera processor- och operativsystemoberoende tillämpningar är dock ganska klart. Kanske framförallt beroende på att det finns få alternativ.

Min personliga bedömning av Java som språk är att det mycket väl kan vara intressant för nuvarande C, Pascal eller Basic programmerare men att det för C++ utvecklare inte riktigt räcker till.

Det är trots allt ganska enkelt. Java tillför inte C++ något. I stället försöker det förenkla C++ utan att göra avkall på de viktigaste objektorienterade finesserna i C++, och det tycker jag att Java gör framgångsrikt. Har du förstått C++ har du alltså inte mycket att hämta i Java språket. Däremot finns det all anledning att titta på Java om du behöver skapa processor- och operativsystemoberoende tillämpningar.

Några små JavaApplets

Behöver inte mycket förklaring. Tryck på knappen och se vad som händer.
Källkod

Denna applet går ut på att så snabbt som möjligt jaga rektangeln ut ur fönstret.
Källkod