S-38.116 Teletietotekniikka: Seminaariesitelmä 24.4.1996

Java

Hannu Arvelo 40339C
arvelo@snakemail.hut.fi

Sisällysluettelo

1. Lyhenneluettelo 
2. Johdanto 
3. Toimintaperiaate 
 3.1 Java-kääntäjä 
 3.2 Virtuaalikone 
 3.3 Tulkki 
 3.4 JIT-kääntäjä 
 3.5 Tavukoodin lataaja ja verifioija 
 3.6 Automaattinen roskienkeruu 
4. Ominaisuudet 
 4.1 Yksinkertainen ja tuttu 
 4.2 C++:sta poistetut ominaisuudet 
 4.3 Olio-pohjainen 
 4.4 Laitteistoriippumaton ja siirrettävä 
 4.5 Monisäikeinen 
 4.6 Luotettava ja toimintavarma 
 4.7 Turvallinen 
5. Merkitys 
6. Ongelmat 
7. Yhteenveto 
8. Kirjallisuusviitteet 

1. Lyhenneluettelo

HTML 	HyperText Markup Language
WWW 	World Wide Web
Java  	Amerikkalainen slangisana kahville
Apletti	Pieni Java-sovellus, joka liitetään WWW-sivuille

2. Johdanto

Internetin ja WWW:n räjähdysmäinen kasvu on johtanut täysin uuteen ajatusmalliin ohjelmistojen kehityksestä. Elektroninen kaupankäynti sekä ohjelmistojen jakelu vaativat turvallisia, tehokkaita sekä toimintavarmoja sovelluksia, jotka toimivat eri laitealustoilla, eri käyttojärjestelmissä sekä heterogeenisissä verkoissa. Sovellusten tulee olla hajautettuja, laiteriippumattomia, siirrettäviä sekä dynaamisesti mukautuvia. Java on uusi ohjelmointikieli, joka on suunniteltu vastaamaan edellämainittuihin haasteisiin.

TCP/IP mahdollisti aikoinaan kymmenien miljoonien tietokoneiden keskustelemisen toistensa kanssa, riippumatta mitä prosessoria tai käyttöjärjestelmää ne käyttivät, tai minkälaiseen verkkoon ne olivat kytkettynä. Sen jälkeen HTML määritteli näille kaikille tietokoneille yhteisen esitystavan esittää informaatiota graafisilla sivuilla. Nyt Java mahdollistaa sen, että pelkän tiedon lisäksi Internetissä voidaan jakaa myös ohjelmia.

Java on täysin oliopohjainen, laitteistoriippumaton ohjelmointikieli, joka on kehitetty 90-luvulla Sun Microsystems:ssä Internet-ohjelmointiin. Java syntyi, kun etsittiin sopivaa ohjelmointiympäristöä käytettäväksi kulutuselektroniikkalaitteiden ohjelmointiin. Alunperin tarkoituksena oli käyttää C++:aa, mutta sen käytössä törmättiin useisiin ongelmiin, minkä seurauksena päätettiin kehittää täysin uusi ohjelmointikieli, johon yhdistettäisiin C++:n ja muiden nykyaikaisten ohjelmointikielien parhaat ominaisuudet.

Tässä esitelmässä on tarkoitus antaa yleiskuva Javasta, sen toimintaperiaatteista sekä sen tarjoamista mahdollisuuksista.


3. Toimintaperiaate

Java on ensisijaisesti Internet-käyttöön suunniteltu ohjelmointikieli, jolla voidaan tuottaa kahdentyyppisiä sovelluksia

Standalone-sovellukset vastaavat muiden ohjelmointikielten tuottamia sovelluksia. Ne ovat täydellisiä itsenäisiä ohjelmia, jotka eivät vaadi selailuohjelmaa toimiakseen.

Apletit ovat pieniä rajoitetumpia ohjelmia, jotka liitetään WWW-sivuille tekstin ja kuvien joukkoon. Apletit ovat graafisesta Applet-luokasta periytyviä olioita, joiden avulla WWW-selain pystyy normaalin tekstin ja kuvan lisäksi esittämään animaatiota, ääntä, graafisia käyttöliittymiä jne.

Java-sovellukset voidaan sijoittaa kuvan mukaisesti Internetin servereille:

Käyttäjä lataa sovelluksen tarvittaessa verkosta omalle koneelleen, esimerkiksi silloin kun hän tulee WWW-sivulle, jossa on apletti. Jotta ladattu sovellus toimisi hänen koneessan, pitää sinne olla asennettu Javan virtuaalikone. Se on abstrakti tietokone, joka pystyy tulkitsemaan Java-ohjelmia tietokoneelle.

Seuraavassa kuvassa esitetään Javan keskeisimmät komponentit sekä Java-sovelluksen kulku ohjelmoijalta käyttäjälle:

3.1 Java-kääntäjä

Javassa C++-kieltä muistuttava Java-lähdekoodi (.java-tiedostot) käännetään Java-kääntäjällä laitteistoriippumattomaksi tavukoodiksi. Tavukoodi (.class-tiedosto) ei ole minkään prosessorin ymmärtämää konekielikoodia, kuten perinteisten ohjelmointikielten kääntäjien tuottama kohdekoodi, vaan se on Javan ns. virtuaalikoneen konekoodia.

3.2 Virtuaalikone

Virtuaalikone on pieni ohjelmallisesti toteutettu abstrakti tietokone, joka sisältää rekistereitä, muistin ja levyasemat, aivan kuten oikea tietokone. Se suorittaa Java-ohjelmia tulkkaamalla käskyjä yksi kerrallaan tietokoneen ymmärtämäksi käskyiksi. Jokaisessa tietokoneessa tai digitaalisessa laitteeseessa, jossa halutaan ajaa Java-sovelluksia, täytyy siis olla asennettuna virtuaalikone.

3.3 Tulkki

Virtuaalikoneen toteuttavat tulkki sekä ajonaikainen ympäristö. Tulkki tulkitsee tavukoodeja käsky kerrallaan ja muuttaa ne vastaaviksi tietokoneen ymmärtämiksi konekielisiksi käskyiksi.

Tämän uuden lähestymistavan ansiosta kaikissa mahdollisissa tietokoneissa ja digitaalisissa laitteissa voidaan käyttää samoja Java-sovelluksia. Ainoa laitteistosta ja käyttöjärjestelmästä riippuva osa on siis itse virtuaalikoneen toteutus, joka koostuu tulkista sekä ajonaikaisesta järjestelmästä.

3.4 JIT-kääntäjä

Tulkin avulla Javasta saadaan laittesitoriippumaton, mutta tällöin ohjelman suorituskyvystä joudutaan tinkimään. Tulkattu ohjelma on noin 10-15 kertaa hitaampi kuin normaali aidoksi konekoodiksi käännetty ohjelma. Tätä varten ovat muutamat Java-työkaluja valmistavat yritykset ruvennet suunnittelemaan ns. JIT-kääntäjää (Just In Time), joka korvaisi tulkin virtuaalikoneessa.

JIT-kääntäjän ideana on kääntää yksi metodi kerrallaan tavukoodista konekoodiksi, eikä antaa sitä käsky kerrallaan tulkille. Jotta ohjelman latausvaihe ei kestäisi liian kauan, käännetään metodi vasta silloin kun sitä tarvitaan ensimmäisen kerran. Tämä takaa sen, että käännös suoritetaan ainoastaan niille metodeille, joita käytetään. Kerran käännetty metodi säilyy muistissa, eli jos sitä kutsutaan toisen kerran ei käännöstä tarvitse enää suorittaa.

JIT-kääntäjän avulla pystytään parantamaan sovellusten suorituskykyä n. 10 kertaiseksi.

3.5 Tavukoodin lataaja ja verifioija

Tavukoodin lataaja lataa tarvittavan luokan verkosta ja suorittaa sille nopean tarkistuksen. Sen jälkeen se antaa koodin verifioijalle, joka tarkistaa systemaattisesti, että koodi on oikeaa eikä se tee mitään kiellettyä.

3.6 Automaattinen roskienkeruu

Automaattinen roskienkeruu on Javan ajonaikaisen järjestelmän kiinteä osa. Sen avulla olioille varattu muisti vapautetaan automaattisesti kun sitä ei enää käytetä. Tämä poistaa suoran muistin käsittelyn aiheuttamat vaikeudet ja ongelmat. Käyttäjän ei tarvitse huolehtia varatun muistin vapauttamisesta.

Automaattinen roskienkeruu toimii taustalla alhaisella prioriteetillä omassa säikeessään, mikä takaa sovellusten tehokkaimman mahdollisen toiminnan.


4. Ominaisuudet

4.1 Yksinkertainen ja tuttu

Koska Java suunniteltiin alunperin pieniin kulutuselektroniikkalaitteisiin, oli sen tavoitteena olla mahdollisimman yksinkertainen ja pieni. Koska suurin osa ohjelmistoista tehdään nykyään C++:lla, otettiin se Javan pohjaksi. Näin kieli on jo ennestään tuttu suurelle osalle ohjelmoijia, mikä helpottaa sen tulemista hyväksytyksi ja käytetyksi.

4.2 C++:sta poistetut ominaisuudet

Javassa on poistettu seuraavat C++:n tarpeettomat ja harvoin käytetyt ominaisuudet, jotka tekevät C++:sta vaikean ja virhealttiin:

4.3 Olio-pohjainen

Java on rakennettu täysin oliopohjaiseksi kieleksi alusta alkaen, mikä soveltuu erittäin hyvin hajautettuihin client/server-järjestelmiin. Javan oliopohjaisuus on suunniteltu yhdistämällä parhaita ominaisuuksia ja piirteitä muista oliokielistä kuten Eiffel, SmallTalk, Objective C ja C++. Java täyttää kaikki todellisten oliopohjaisten kielten vaatimukset, kuten enkapsulointi, polymorfisuus, perintä sekä dynaaminen sidonta.

Oliopohjaisuus näkyy siten, että Javassa kaikki toteutetaan luokkien avulla. Tämä puhtaasti oliopohjainen lähestymistapa tekee muutamista C++:n ominaisuuksista turhia. Funktioita ei tarvita, koska ne voidaan toteuttaa luokkien metodeina. Struktuurit ja unionit voidaan myös toteuttaa luokkina.

4.4 Laitteistoriippumaton ja siirrettävä

Javan lähdekoodi käännetään laitteistoriippumaksi tavukoodiksi, joka on korkean tason konekoodia Javan virtuaalikoneelle. Mikä tahansa Java-sovellus toimii tällöin kaikissa laite- ja käyttöjärjestelmäympäristöissä, kunhan vaan koneeseen on asennettu Javan virtuaalikone, joka koostuu tulkista sekä ajonaikaisesta järjestelmästä.

4.5 Monisäikeinen

Normaaleissa ohjelmointikielissä ohjelma suoritetaan sarjana peräkkäsiä käskyjä alusta loppuun. Säie (thread) on yhden sarjallisen tehtävän suoritus ohjelman sisällä. Koska ohjelman sisällä voi olla monta erilaista suoritettavaa tehtävää, joita ei välttämättä tarvitse suorittaa missään tietyssä järjestyksessä, voidaan ne Javassa suorittaa kukin samanaikaisesti omassa säikeessään.

Esimerkki monisäikeisestä ohjelmasta on HotJava-selain, jossa voidaan samanaikaisesti esittää ääntä ja animaatiota, liikkua sivulla eteenpäin ja tulostaa sivu kirjoittimelle.

4.6 Luotettava ja toimintavarma

Javan kielioppi ja käännösaikaiset tarkistukset takaavat sen, että kaikki kielioppi- ja tyyppivirheet löydetään heti käännösaikana, jolloin voidaan olla varmoja, ettei niitä esiinny ajonaikana. Monet tarkistukset suoritetaan lisäksi myös ajonaikana. Lisäksi Javasta on poistettu yksi C++:n suurimpia virheiden aiheuttajia, pointterit.

4.7 Turvallinen

Yksi tärkeimpiä ominaisuuksia, mitä hajautetut verkossa toimivat sovellukset vaativat, on turvallisuus. Jotta verkosta ladattavat ohjelmat eivät pystyisi tekemään mitään vahinkoa käyttäjän koneelle, esim. tuhoamaan tiedostoja, on Javan suunnittelussa pyritty kiinnittämään tähän seikkaan huomiota.

Javassa ei ole pointtereita, minkä seurauksena ohjelmoijat eivät voi viitata fyysisiin muistiosoitteisiin. Lisäksi muistimalli pitää huolen siitä, että ohjelmoija ei pysty päättelemään, mikä on ohjelman esitysmuoto muistissa ajonaikana.

Toiseksi, vaikka Java-kääntäjä tuottaa varmasti turvallista koodia, ei ladattaessa koodia verkosta voida olla varmoja, että ladattava koodi on tuotettu luotettavilla Java-kääntäjillä. Tämän takia koodi tarkistetaan samalla kuin se ladataan koneeseen.


5. Merkitys

Tällä hetkellä Java näkyy käyttäjille lähinnä WWW-sivujen elävöitymisenä. Animaatiot, pelit ja muut WWW-sivuilla näkyvät appletit ovat kuitenkin ainoastaan näkyvin osa syvempää laatua olevasta muutoksesta tietokoneteollisuudessa. Javan avulla tietokoneohjelmat eivät tarvitse enää olla talletettuna käyttäjän omalle kovalevylle, vaan ne voivat sijaita missä tahansa Internetissä. Tämä voi mullistaa täydellisesti ohjelmistojen jakelun ja pävityksen. Ohjelmistotalojen ei enää tarvitse tehdä kuin yksi versio tuotteestaan ja sijoittaa se palvelimelleen Internetiin. Tämä yksi ja sama versio toimii kaikissa tietokoneissa ja käyttöjärjestelmissä. Käyttäjät voivat ladata ohjelmiston aina tarvittaessa omalle koneelleen. Kun tuotteesta ilmestyy uusi versio, korvataan sillä vanha versio serverillä, jolloin käyttäjät pystyvät aina käyttämään viimeisintä versiota.

Otetaan esimerkkinä vaikka pankin kotipankkipalvelu, jossa pankin serverillä ovat kaikki tilitiedot ja serveriohjelmisto, joka käsittelee niitä. Käyttäjän koneessa täytyy olla asiakasohjelmisto, jonka avulla hän pystyy katselemaan omia tietojaan serveriltä, tekemään tilinsiirtoja, katselemaan saldoja jne. Perinteisessä mallissa pankki joutuisi toimittamaan kaikille asiakkaalleen tarvittavan asiakasohjelmiston, jonka asiakas asentaisi kotikoneeseensa. Koska eri asiakkaat käyttävät erilaisia tietokoneita ja käyttöjärjestelmiä, pitäisi ohjelmistosta olla versiot kaikille eri laitealustoille sekä käyttöjärjestelmille. Kun muutaman kuukauden päästä ohjelmistosta tulee parannettu versio, joudutaan tämä kaikki tekemään uudelleen. Javaa käyttämällä pankin tarvitsee laittaa ainoastaan yksi versio asiakasohjelmistosta serverilleen, josta jokainen käyttäjä lataa sen aina erikseen kotikoneelleen, kun aloittaa kotipankkipalvelun käytön. Kun uusi versio ilmestyy, korvataan yksinkertaisesti vanha versio uudella.

Koska Javan periaatteena on tallettaa verkkoon pieniä sovelluksia, joita käyttäjät voivat tarvittaessa ladata väliaikaisesti omalle koneelleen, asettaa se kyseenalaiseksi koko nykyaikaisen järjestelmän, jossa käyttäjillä on tehokkaat PC:t, joissa on runsaasti kovalevytilaa, jonne asennetaan suuria pakettiohjelmistoja. Suurimmat häviäjät ovat mahdollisesti näitä pakettiohjelmistoja tuottavat yritykset, kuten Microsoft.


6. Ongelmat

Yksi suurimpia ongelmia koko hajautettujen järjestelmien toteutuksessa on tiedonsiirron hitaus. Tällä hetkellä pienenkin Java-appletin lataus ja käynnistys kestää liian kauan, varsinkin jos käyttää Internetiä hitaan modemilinjan kautta. Jotta pystyttäisiin toteuttamaan toimivia client/server-järjestelmiä, tulisi kiinnittää huomiota siihen, että client-puolen sovelluksista tehtäisiin mahdollisimman pienikokoisia, jotta ne pystyttäisiin lataamaan nopeammin käyttäjän koneelle. Lisäksi sovellusten pakkaaminen siirron ajaksi on eräs vaihtoehto.

Toisena ongelmana on turvallisuus. Vaikka Java on suunniteltu ja määritelty erittäin turvalliseksi, on kuitenkin mahdollisuus, että toteutuksissa on virheitä, joiden takia järjestelmään syntyy turvallisuusaukkoja.

Lähdekoodin kopiointi on myös ongelma. Koska Java-kääntäjä on yksinkertainen, pystytään rakentamaan sellaisia ohjelmia, joilla Javan tavukoodi käännetään takaisin lähdekoodiksi. Tällaisia kääntäjiä on jo olemassa.


7. Yhteenveto

Java on Sun Microsystems:n kehittämä yksinkertainen, oliopohjainen, hajautettu, tulkattu, luotettava, toimintavarma, turvallinen, laitteistoriippumaton, siirrettävä, monisäikeinen ja dynaaminen ohjelmointikieli, joka soveltuu erinomaisesti Internet-sovellusten ohjelmointiin. Java-kääntäjä kääntää lähdekoodin laitteistoriippumattomaksi tavukoodiksi, jota jokaiseen tietokoneeseen asennettava Javan virtuaalikone tulkitsee.

Javan uskotaan aiheuttavan perustavaa laatua olevia muutoksia koko nykyaikaiselle tietokoneteollisuudelle, jonka historiassa on tapahtunut aina 10-15 vuoden välinen merkittäviä paradigmamuutoksia: Ensin siirryttiin mainframeistä minikoneisiin, joista siirryttiin myöhemmin PC:iin. Seuraavaksi vaiheeksi on ennustettu verkkotietokoneiden aikakautta, jolloin ohjelmat ladattaisiin suoraan verkosta tarpeen mukaan. Tähän tarkoitukseen Java sopii erittäin hyvin. Se asettaa kyseenalaiseksi koko nykyisen ohjelmistojen jakelu- ja päivityskäytännön sekä itse nykyiset kotitietokoneet.

On vaikea arvioida, tullaanko koskaan täysin siirtymään verkkotietokoneisiin, joissa ei ole kovalevyä ja jonka prosessorina toimii Javan virtuaalikone. Ajatus tuntuu tässä vaiheessa melko utopistiselta, mutta varmaa on, että siihen suuntaan ollaan ainakin kulkemassa.


8. Kirjallisuusviitteet

Mary Campione and Kathy Walrath, "The Java Tutorial", An on-line draft version of the Java Tutorial, to be published by Addison-Wesley summer 1996, http://www.javasoft.com/tutorial/index.html

James Gosling & Henry McGilton,"The Java(tm) Language Environment: A White Paper", http://www.javasoft.com/whitePaper/java-whitepaper-1.html

Time International 22.1.96, "Why Java Is Hot"

Lan Magazine 4/96, "Java Picks Up Steam", http://www.lanmag.com/9604java.htm

Javasoft, "The Java Language: White Paper"

Javasoft, "Java API Documentation", http://java.sun.com/JDK-1.0/api/packages.html

Erica Liederman, "Java In The Real World", http://www.javaworld.com/javaworld/jw-03-1996/jw-03-realworld.html

William Blundon, "How can Java rule the world?", http://www.javaworld.com/jw-04-1996/jw-04-worldrule.html

Andrew singleton, "Wired on the Web", Byte January 96

Business Week December 4. 1995, "The Software Revolution"