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
HTML HyperText Markup Language WWW World Wide Web Java Amerikkalainen slangisana kahville Apletti Pieni Java-sovellus, joka liitetään WWW-sivuille
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.
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:
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.
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ä.
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.
Automaattinen roskienkeruu toimii taustalla alhaisella prioriteetillä omassa säikeessään, mikä takaa sovellusten tehokkaimman mahdollisen toiminnan.
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.
Esimerkki monisäikeisestä ohjelmasta on HotJava-selain, jossa voidaan samanaikaisesti esittää ääntä ja animaatiota, liikkua sivulla eteenpäin ja tulostaa sivu kirjoittimelle.
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.
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.
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.
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.
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"