HØit Nr. 1-96
Previous article Next article TOC: Nr. 1, 1997 Previous Issue Next Issue About HØit

JAVA


Børre Stenseth

Foruten å være en øy i Indonesia, en kaffetype (fra samme øy), og en lite påaktet dans fra før krigen, så er Java et programmeringsspråk fra Sun Microsystems. Det er det siste som påkaller en viss oppmerksomhet i denne sammenheng.

Java er et programmeringsspråk som har store fellestrekk med C/C++. Språket som språk betraktet er vel isolert sett ikke grunnlag for spesielt stor oppstandelse. Når Java likevel påkaller betydelig oppmerksomhet både i faglige kretser og i mer strategisk sammenheng er det først og fremst et resultat av riktig timing og riktig fokus.

Java introduseres som et svar på ønsket om mer funksjonalitet på Internettet og det introduseres og kommenteres som et svar på en økende bekymring over Microsofts dominans på programvaremarkedet. Java er både en interessant teknisk løsning og det er et sentralt innspill i kampen om Internettet. Fenomenet er også ganske interessant sett fra et mediesynspunkt. Oppstyret rundt lanseringen og kommentarene viser tydelig at tiden er moden for en ny bekreftelse av den amerikanske drømmen. Steve Jobs har mer eller mindre forsvunnet og Bill Gates har skiftet image fra kreativ nyskaper til økonomisk maktfaktor med betydelig bremseeffekt. Javas tilblivelse er allerede myteomspunnet og er i ferd med å skape sine helter.

Hvorfor Java akkurat nå

Vi har en eksplosiv vekst i bruk av internettet. Det som har fått anvendelsen til å ta av, er realiseringen av Word Wide Web. Først Mosaic og så Netscape har gjort nettet tilgjengelig for alle. Det er ingen grunn til å vente annet enn at antall brukere, antall informasjonstilbydere og mengden av informasjon vil øke. Vi er i en fase som er preget av en overgang fra nyhetens begeistrede optimisme mot en voksende utilfredshet med de løsningene vi har tilgjengelig. Vi er ikke lenger fornøyd med å surfe nettet etter passiv informasjon i noen få standardformater. Det er en tydelig avstand mellom maskinens potensiale og brukernes ønsker på den ene siden og det vi får ut av en nettvandring på den andre. Hvis vi ser bort fra de mer overordnede spørsmålene knyttet til kapasitet, internettet struktur og problemer med informasjonens volum, er det to tydelige mangler:
  • Websidene er preget av passiv informasjon. Mulighetene for intraksjon er små, og vi finner lite dynamikk.
  • Det er alt for store begrensninger i hvilke datatyper vi kan handtere. Foreløpig har browserleverandørene løst dette med å la browseren kalle inn lokale programmer etter behov. Ulempen er at vi må ha en rekke programmer på vår lokale maskin for å kunne bearbeide ulike typer data.
Vi står overfor en velkjent situasjon. Kravene til verktøyene øker og vi som brukere, tolket kollektivt som "markedet", forlanger stadig mer funksjonalitet. Verktøyleverandørene tilbyr nye versjoner og spiralen er igang. Microsoft behersker idag denne spiralen i det store markedet og sørger systematisk for å fylle opp all den kapasiteten Intel kan tilby med nye store verktøy.

Java kan bli et alternativ til denne spiralen. Den bærende ideen er at et Javaprogram kompileres til en maskinuavhengig kode som transporteres over nettet og interpreteres av en lokal interpretator. Eller sagt på en annen måte: Java kompileres til en virtuell maskin som kan emuleres på de vanlige plattformene.

Hvordan Java

Javaprogrammer opptrer i hovedsak to forskjellige skikkelser.
  • Applets. Programmer som transporteres sammen med et HTML-dokument, identifiseres ved en tag (på samme måte som et bilde) og intepreteres av en interpretator som er en del av browseren.
  • Vanlige frittstående programmer som kan utveksles og kjøre på de vanlige plattformene uten rekompilering.
Det er altså mulig å skrive generelle Javaprogrammer som er plattformuavhengige. Lesere med lang fartstid og god hukommelse husker denne teknikken fra Bowles p-kode maskin for Pascal, USCD-Pascal. Bowles ønsket også å lage et plattformuavhengig system, og p-kode teknikken var en komponent i strategien for å oppnå portabel programvare rundt 1980. Denne historiske parallellen nevnes eksplisitt i noen av dokumentene som presenterer Java.

En måte å oppfatte mulighetene som Java gir er å oppfatte nettet som en datamaskinressurs. Vi trenger ikke fylle opp vår egen harddisk med alle tenkelige applikasjoner for å være forberedt på å handtere ulike typer data. Vi kan konseptuelt betrakte nettet som en ressurs, ikke bare for data, men også for databehandling.

Java for hvem

En av de tingene som har ført til en eksplosiv vekst av Web-aktiviteten er at det fram til nå har vært enkelt å lage Web-sider. Det kreves ingen datakunnskap for å sette opp et enkelt HTML-dokument med enkel tekstformatering, bilder i gif-format og lenker. Det krever estetisk sans og evne til å organisere informasjon for å lage tiltrekkende og effektive sider, men i prinsipp er det et verktøy for alle. Dette er selvsagt Web-samfunnets styrke og det er et resultat av den fornuftige design og nøkternhet som browserprodusentene har greidd å opprettholde fram til nå. Når kravene til funksjonalitet øker er det flere tenkelige utviklingslinjer. To tydelige er:
  • Formateringskodene vil bli fler og mer komplekse. Dette vil i sin tur føre til at vi får kraftigere spesialiserte Web-editorer, enten som en del av tekstbehandlerne eller som frittstående programmer, eller som programobjekter.
  • All ønsket funksjonalitet kan ikke fanges opp av standardiserte formateringskoder og vi vil måtte ty til programmering i tradisjonell forstand. Java seiler opp som en kandidat som programmeringsspråket i denne sammenhengen.
Begge de to utviklingene ovenfor vil trolig inntreffe. Den første fordi det vil være viktig å holde på mangfoldet av informasjonsleverandører og den andre fordi det vil være nødvendig å lage spesielle løsninger.

Det er litt vanskeligere å svare på om Java som språk er det rette. Java er i sin form et typisk verktøy for skolerte programmerere. Selv om Java er basert på C++ har det en image som er svært lik Smalltalk, og det fristende å minne om den optimismen som preget Smalltalk-tilhengerne tidlig på 80-tallet. De hevdet med stor styrke at Smalltalk var et programmeringsspråk som var lett tilgjengelig for de fleste og de investerte stor faglig presistje i å lansere Smalltalk som et allment verktøy for interaktiv modellering. Det er mange likhetstrekk mellom Java og Smalltalk. Begge er rendyrket objektorienterte og begge er slik at styrken og effektiviteten ligger i funksjonaliteten i eksisterende klassebiblioteker og forståelsen av disse. En erfaring er at læringskurven er ganske slak i starten, inntil brukeren får nødvendig oversikt. Det er langt færre enn i hvert fall de ivrigste Smalltalk tilhengerne mente som blir effektive. Teoretisk er selvsagt mulighetene tilstede i og med at klassebibliotekene kan og vil vokse og spesialeres for ulike typer applikasjoner. Å skrive en applikasjon blir å lage en enkel avledning av en eksisterende klasse. Java blir likevel trolig språket for etablerte C++ programmerere.

Det er en viss fare for at det så og si blir for stort gap mellom de to utviklingtrekkene som er nevnt ovenfor. Vi vil få to helt adskilte utviklingskulturer. Erfaring med lignende situasjoner tilsier at dette ikke vil vare. Gapet vil bli forsøkt overbygget, enten med enkle programmeringsverktøy i editorene, eller med forenklende språkoverbygninger på Java eller med objektteknologi som OLE eller OpenDoc.

Java er involvert i krig

Det er trolig her, i gapet mellom editorene og det tradisjonelle programmeringsspråket, at Microsoft vil sette inn sitt strategiske motstøt. En del av Microsofts omfattende strategi for å få kontroll over programvaren for Internettet, er en kombinasjon av Visual Basic og OCX (OLE custom contols). Denne trusselen er åpenbart tydelig for SUN, som sammen med flere andre har annonsert JavaScript som er nettopp en overbygning på Java for kjapp og enkel utvikling som ikke krever C++ type kompetanse. Det er interessante at Oracle og Sybase er blant dem som nevnes som støttespillere i denne satsingen. Enkel databasetilgang vil trolig bli en viktig faktor i Internett-krigen.

Det vil føre for langt å gå inn på detaljer i Microsofts strategi, men den er typisk nok ganske omfattende og i øyeblikket ganske vond å få oversikt over, med mange komponenter og kombinasjonsmuligheter, se http://www.microsoft.com/internet/. Kanskje vi er vitne til en situasjon der Microsofts strategi med økende kompleksitet kan slå tilbake og bli et stort problem for Microsoft selv i krigen om nettet. Microsoft har annonsert sine løsninger midt i 1996. Markedet tåler kanskje ikke utsettelser på denne fronten like godt som det tydeligvis har tålt utsettelser tidligere.

Hva med Apple? Apples image har vært mediemaskinen fram for noen, og det neste logiske steget ville være å bruke denne imagen og bakgrunnen som grunnlag for et solid grep på Internettet. Har Apple gått glipp av muligheten for å gjøre sine produkter til ledende på Internett? Copeland trekker ut i tid og spekulasjoner sier at det tidligst kommer i 1997. Apples web-programmeringsspråk, Dylan, er skrinlagt etter at Java kom. Apple har annonsert støtte for Java. Cyberdog er annonsert for lansering i januar 1996. Cyberdog er bygget på OpenDoc-teknologi og det vil gi muligheter for å integrere nettjenester i andre applikasjoner. Det er imidlertid tvilsomt om det vil kunne gi noen kunkurransefordel ramfor Microsofts OLE-teknologi. De nærmeste månedene vil bli svært interessante fra et strategisk synspunkt. Stadige nyheter og rykter om allianser og lanseringer ligner bildet av gruppering og omgruppering av tropper før det store slaget.

Hvor er Java idag

Sammen med de første versjonene av Java ble det lansert en browser, HotJava, som hadde innebygd en interpretator for Javas p-kode. Dette var selvsagt nødvendig for at språket skulle kunne testes og demonstreres i Web-omgivelser. Det er helt avgjørende for Javas utbredelse at interpretatoren blir inkorporeret i de markedsledende Web-verktøyene. Netscape annonserte sin support for Java i mai 1995, se http://www.netscape.com/newsref/pr/newsrelease25.html.

Det har vært problemer med noen versjoner. Se f.eks. http://www.isisnet.com/home/newnetscape.html eller http://www2.netscape.com/newsref/pr/index.html eller http://www.ccs.org/winsock//netscape.html for å sjekke status for ulike versjoner og plattformer.

Java

Selve språket er sterkt beslektet med C/C++. Syntaksen for de vanlige programkonstruksjonene er lik. Det er likevel flere viktige forskjeller. Vi kan se på noen av dem, uten å gå i detaljer.

Objektorientert

Java er rent objektorientert. Språkdesignen og formen det distribueres på ligner mer på Smalltalk enn C++. Java understøtter ikke multippel inheritance, men har et interface-begrep som i noen grad gir tilsvarende løsningsmuligheter.

Språkets slagkraft og fleksibilitet står og faller med klassebibliotekene. Ikke uventet er bibliotekene ved lansering, i tillegg till de grunnleggende mekanismene i språket, godt utbygd i retning av nettjenester (telnet, ftp, www, nntp). Det er like lett å hente en fil på nettet i Java som det er å åpne en lokal fil i tradisjonell C. Vi finner klasser for håndtering av grafiske elementer som knapper, menyer, bilder etc.

Hukommelsesadministrasjon

Java har ikke pekeraritmetikk. Språket har kraftig typesjekking og det har garbage collector. Det siste betyr altså at vi som programmerere er fritatt for ansvaret for å frigi dynamisk allokert hukommelse. Ikke-refererte objekter fjernes av systemet.

Interpretert

Strategisk ligger selvsagt Javas hovedstyrke i uavhengigheten av plattform. Java-programmer skal kunne utvikles og kjøres smertefritt på de vanligste plattformene. Det store spørsmålet er selvsagt hvorvidt det valget som er truffet når det gjelder den virtuelle maskinen, p-koden, er godt nok og robust nok. Den virtuelle maskinen må være effektiv for den type applikasjoner som Java kommer til å bli brukt til.

Det har alltid vært en innvending mot interpreterte språk at de arbeider langsomt. Dette avhenger selvsagt av hvordan interpreteringen foregår. En ren interpretering fra kildekode vil selvsagt gå senere enn en interpretering av en mellomkode, som Javas p-kode. I Javas tilfelle er det en faktor til som vil være avgjørende for å oppnå en tilfredsstillende hastighet. Språket understøtter full multithreading. I praksis vil det si at programmet kan bruke tid til tidkrevende oppgaver når slik tid er tilgjengelig. Tidkrevende oppgaver i et typisk Javaprogram er å hente og tolke data fra kilder på nettet. Oppdatering av informasjon kan f.eks. skje "parallellt med" at brukeren får betjening i en endel interaktive oppgaver.

Sikkerhet

Et språk som er ment å ha nettet som arbeidsområde må ha mekanismer som ivaretar noen vitale sikkerhetsaspekter. Et program som skal "transporteres med" en web-side og utføres på en lokal maskin er en betydelig kilde for både planlagt og ikke-planlagt ødeleggelse og snoking. Det er lagt betydelig vekt på dette i Java og i presentasjon av Java. Det fører for langt å gå inn på dette her, men sikkerhetsaspektet gjelder både kontroll av tilgang til lokale ressurser og det gjelder kontroll av p-koden som potensiell virustransportør og som destruktiv kode.

Noen av de endringene som er gjort i forhold til C/C++ er motivert først og fremst ut fra et sikkerhetsaspekt.

Utviklingsmiljø

Undertegnede har testet utvikling Java på Windows NT. Det eneste som er tilrettelagt som støtte for utvikling er en HotJava-basert klassebrowser, med noen enkle søkemekanismer. Dette gir et minimum av hjelp til å skaffe seg oversikt over klassebibliotekene. Ellers er det bare å finne fram en editor du liker, skrive koden, lagre den som minkaffe.java, åpne et vindu for å skrive kommandoer og kalle opp kompilatoren med kildekoden som parameter, javac minkaffe.java, og du får laget p-kode versjonen: minkaffe.class. Og så er det bare å teste enten via HotJava og et html-dokument med <APP Class="minkaffe"> - tag eller som et frittstående program, Java minkaffe.

Det oppleves som en betydelig nedtur etter å ha jobbet en stund med Visual C++. Det er også viktig å merke seg at Java, både ved utvikling og kjøring, baserer seg på en bestemt katalogstruktur. Det er litt fingertrøbbel å få satt miljøparametre rikig.

Verktøyene som følger Java er:

  • HotJava, browser
  • Java, interpreter
  • Javac, kompilator
  • Javah, genererer C headere og andre ting ved linking til C-kode (ja det er mulig)
  • Javap, disassembler
  • Javaprof, prettyprinter

Hva vi skal gjøre med Java

Med det fokus vi har hatt på Internett og nettapplikasjoner er Java høyst interessant. Vi vil ta det i bruk og skaffe oss erfaringer med språket og hvilket potensiale det har. En prosjektgruppe i 3.klasse har fått et spesielt ansvar for å følge opp Java og vi vil dra igang et internt seminar.

Java referanser

  • Hovedkilden for Javainformasjon er Sun Microsystems. Her finnes referanser til eksempler, nyheter, versjoner, systemer osv.
  • John December, Presenting Java. Sams.net Publishing. ISBN 1-57521-039-8. Kompakt og grei innføringsbok i Java, med mange referanser til nyttig informasjon.
  • Tom Ritchey, Java!. Ordrik bok som er en introduksjon til Java. New Riders. ISBN 1-56205-533-X
  • Fortune, December 11, 1995. Whose internet is it, anyway ? Artikkel som tar opp noen strategiske spørsmål omkring Internett og Java.
  • George Gilder, The Coming Software Shift. Artikkel med ganske dristige perspektiver på utviklingen av programvare i forbindelse med Internett. http://red.seas.upenn.edu/~gaj1/shiftgg.html
  • James Gosling and Henry McGilton, The Java Language Environment, a White Paper. Sun Microsystemes, October 1995
  • The Java Saga, Wired December 1995.

Previous article Next article TOC: Nr. 1, 199 Previous Issue Next Issue About HØit
HØit Nr. 1-96


Copyright: 1996, Høgskolen i Østfold. Last Update: 28.06.97, Thomas Malt.