Javan ja C/C++:n eroavaisuuksia

Pekka Tapani Kanerva, 42764s
 
 

Sisällys

                1. Yleistä
                   1.1 Javan synty
                2. Miten Java eroaa C/C++:sta
                    2.1 Muutamia merkittävimpiä eroavaisuuksia
                    2.2 Olio-käsite
                3. Javan edut verkossa
                    3.1 Laitteistoriippumattomuus
                    3.2 Ylläpidon helppous
                    3.3 Turvallisuus
                    3.4 Javan suosio
                4. Mitä uutta Java 1.1 tuo tullessaan
                    4.1 Kokonaan uusittu AWT tapahtumankäsittelyluokka
                    4.2 Sisemmät luokat
                    4.3 Kansainvälisyys
                    4.4 Java Beans
                    4.5 Remote Method Invocation
                5. Yhteenveto
            Viitteet
            Lisätietoja aiheesta
 
 

1. Yleistä

Java on alunperin syntynyt ohjelmointikieleksi, jota käytettäisiin kuluttajaelektroniikassa. Televisiot, radiot, mikroaaltouunit yms. jokapäiväiseen elämään liittyvät laitteet sisältävät nykyään paljon ohjelmistotekniikkaa. Syntyi tarve uudelle ohjelmointikielelle, joka täyttäisi muutamia erityisiä vaatimuksia. Ohjelmien pitää pystyä sopeutumaan uusiin mikropiireihin, joita näiden valmistajat tuovat markkinoille. Kuluttajaelektroniikassa otetaan uusia mikropiirejä käyttöön sitä mukaa kun niitä tulee saataville. Ohjelmistojen pitää toimia myös näissä uusissa mikropiireissä ilman erillisiä muutoksia.
 
 

1.1 Javan synty

Vuonna 1990 James Goslingin johtama pieni työryhmä koodinimeltän Green alkoi työskennellä Sun Microsystems:illä aiheen parissa. Kävi selväksi, että sen paremmin C kuin C++ ei soveltuisi yllä kuvailtuihin käyttötarkoituksiin. Sekä C että C++ pitää kääntää aina uudelle mikropiirityypille uudelleen. Lisäksi näiden kielten monimutkaisuus tekee niistä erittäin vaikeakäyttöiset työkalut silloin, kun pitää kehittää ohjelmistoja jotka ovat erittäi luotettavia ja varmatoimisia. Kielen piti olla yksinkertainen ja tutuntuntuinen [ 1 ]. Kehittelyn tuloksena syntyi uusi kieli nimeltä Java, joka kuvaillaan seuraavasti:

Java: Yksinkertainen, oliopohjainen, hajautettu, tulkattu, turvallinen, arkkitehtuurista riippumaton, siirrettävä, suorituskykyinen, säikeinen ja dynaaminen ohjelmointikieli [ 2 ]
 
 

2. Miten Java eroaa C/C++:sta

Javasta haluttiin tehdä mahdollisimman samankaltainen kieli verrattuna C- ja C++-kieliin. Näin haluttiin saada kynnys Javan käyttöön siirtymiseen mahdollisimman matalaksi. Näkökohtana oli, että ohjelmointikielen tarkoitus on ohjelmoiminen ja toimivien sovellusten tuottaminen. Kieli ei saa olla niin monimutkainen, että sen opettelemiseen kuluu kohtuuttomasti aikaa, ennen kuin tuottava työskentely sitä käyttäen voi alkaa.

Javan yksinkertaisuutta ja oppimisen helppoutta korostaa myös se, että Java pyrittiin tekemään mahdollisimman pienikokoiseksi. Javan kotisivuilla todetaan että "Olet saavuttanut täydellisyyden suunnittelussa ei silloin kun sinulla ei enää ole mitään lisättävää vaan silloin kun sinulla ei ole mitään poistettavaa." (Antoine de Saint Exupery) [ 1 ]. C++-kielen kehittäjä  Bjarne Stoustrup on kuitenkin sitä mieltä, että Java tulee kasvamaan paljon monimutkaisemmaksi ajan kuluessa. Hänen mielestään Javan pieni koko selittyy sillä, ettei kieli ole vielä "valmis" vaan että sen kehitystyö on vielä käynnissä [ 3 ].
 
 

2.1 Muutamia merkittävimpiä eroavaisuuksia

 

2.2 Olio-käsite

Java on - kuten edellä jo on todettu - olio-ohjelmointikieli. Tämä tarkoittaa sitä, että Javassa kaikki paitsi primitiiviset tietotyypit (kuten char, int, bool jne.) ovat olioita. C++ tarjoaa mahdollisuuden ohjelmoida olio-orientoituneesti, mutta yhtä hyvin C++:aa voi käyttää perinteisen C:n tapaan ja olla välittämättä olio-ominaisuuksista. Tämä antaa mahdollisuuden iloiseen sekasotkuun, missä sekoitetaan perinteistä C:tä ja C++:n olio-ominaisuuksia, jolloin ohjelmista tulee vaikeammin luettavia ja sen seurauksena vaikeammin ymmärrettäviä.

Olio-käsite on otettu ohjelmoinnin malliksi arkielämästä. Meitä kaikkia ympäröivät oliot. Esimerkkejä voidaan ottaa vaikka kuinka paljon: autot, tietokoneet, rannekellot jne. Samalla tavoin sovellusohjelmistot sisältävät olioita: painonappeja, tiedostolistoja, tekstinkäsittelyohjelman tekstitila, tietokanta-alkiot jne. Yhteistä näillä on, että niillä on tila ja käytös [ 5 ] Tällaisia olioita mallinnetaan luokilla. Luokka sisältää malliaan kuvaavat muuttujat (tila) ja metodit, joilla luokan sisältämää dataa voidaan käsitellä (käytös).
 
 

3. Javan edut verkossa

3.1 Laitteistoriippumattomuus

Java suunniteltiin alun perin toimimaan verkossa. Verkot ovat yleensä erittäin heterogeenisiä ympäristöjä, joista löytyy monenlaisia laitteistoja. On UNIX pohjaisia työasemia, henkilökohtaisia tietokoneita eli PC:itä, MacIntosheja yms. Perinteiset C:llä tai C++:lla kirjoitetut ohjelmat tarvitseevat jokaiseen laitteistoarkkitehtuuriin oman käännöksen ohjelmasta, joka toimii vain tietyssä arkkitehtuurissa. Java ratkaisee ongelman niinsanotulla tavukoodilla. Java kääntäjä tuottaalähdekoodista tällaista tavukoodia, perinteisen konekielikodin sijaan. Java Virtual Machine (JVM)tulkitsee ajonaikana tätä tavukoodia. Tällä menetelmällä saavutetaan laitteistoriippumattomuus: Java ohjelmat toimivat kaikissa niissä ympäristöissä, joihin JVM on käännetty.

Tämä ei kuitenkaan vielä riitä. Tunnettu esimerkki on, että C-kielessä eri laitteistoarkkitehtuureissa esiintyy esimerkiksi erikokoisia int-tietotyyppejä. Näitä voi olla 16-, 32-, tai 64-bittisiä vari- aatioita riippuen laitteistoarkkitehtuurista. Jotta tällaiset ongelmat ja siitä aiheutuvat laitteisto- riippuvuudet vältettäisiin, Java määrittelee kaikille perustietotyypeille niiden koot sekä näiden aritmeettisien operaatioiden käytöksen. Sun Microsystems:in 100% Pure Java Program -ohjelma auttaa ohjelmistosuunnittelijoita pyrkimyksessä täysin laitteistoriippumattoman koodin tuottamiseen.
 

3.2 Ylläpidon helppous

Java-sovelluksen eli appletin käyttö on yksinkertaisimmillaan yhtä helppoa kuin HTML- linkin klikkaaminen. Sovellus ladataan verkon yli tarvittaessa, eikä sitä tarvitse välttämättä asentaa omalle kovalevylle. Koska useimmat nykyiset verkon yli toimivat sovellukset ovat erilaisia asiakas/palvelin muunnelmia, saavutetaan Javan käyttämällä menetelmällä huomattavia etuja esimerkiksi sovellusten ylläpidon suhteen.[ 5 ] Kun sekä palvelin- että asiakasohjelma sijaitsevat fyysisesti palvelinkoneen levyllä, on asiakasohjelman päivitys yksinkertaista. Laitetaan uusi versio vanhan tilalle, eikä tarvitse käydä läpi aikaa vievää päivitysten sarjaa eri yrityksissä. Tällöin säästyy aikaa, eikä tarvitse miettiä eri sovellusversioiden yhteensopivuutta keskenään. Toisaalta voidaan käyttää jonkinlaisia versiontunnistusmenetelmiä eri asiakasversioiden kesken. Palvelin voi sisältää tiedon siitä, mikä on uusin asiakasliityntäohjelman versionumero ja kysyä tätä yhteyttä ottavalta asiakkaalta. Mikäli versio on vanhentunut, voi asiakasohjelma automaattisesti päivittää itsensä verkon yli, eikä erillisiä paikallisen ylläpidon toimenpiteitä tarvita.
 

3.3 Turvallisuus

Verkossa toimivien sovellusten turvallisuuteen on kiinnitettävä erityistä huomiota. Javan ajonaikainen järjestelmä, Java Virtual Machine, eli Java virtuaalikone tarkistaa kaiken ajettavan koodin, eikä anna tehdä mitään epäilyttävää. Koska Java ei sisällä suoria muistiviittauksia, suljetaan kokonaan pois laskuista hyökkäykset, jotka perustuvat suoraan muistinkäsittelyyn. Toinen JVM:n käyttämä menetelmä on kaiken ajettavan koodin tarkistus. Kun verkon yli ladataan tavukoodia, johon ei voida täysin luottaa, Java-tulkki varmistaa kaiken ajettavan koodin ennen kuin ajaan sen. Tällöin tarkistetaan, että koodi on oikeinmuodostettua, että se ei esimerkiksi vuoda yli pinossa, eikä sisällä laittomia toiminteita. Kolmanneksi, Java-tulkki antaa jokaiselle ajettavalle sovellukselle eräänlaisen kehyksen, jossa ohjelma saa toimia. Kehyksen ulkopuolelle ei ole tulemista. Esimerkkinä mainittakoon, että kehys kieltää kaikenlaisen paikallisen levy- järjestelmän käytön. Tällöin eivät esimerkiksi virukset voi kirjoittaa itseään levylle. Vastaavasti muistin suojaus estää niitä leviämään sellaisille muistialueille, joita JVM ei nimenomaisesti ole osoittanut ohjelman käyttöön.
 
 

3.4 Javan suosio

Mikä selittää Javan saaman huomion ja sen, että kaikki rummuttavat Javan käytön puolesta? Syitä on varmasti monia. Ensimmäisenä voidaan pitää Internetin käytön nykyistä eksponentiaalista kasvuvauhtia, ja sen käytön leviämistä suuren yleisön keskuuteen. Tätä ennen Internet oli paljolti vain sotilaallisen ja akateemisen maailman verkko, jossa kulki pääasiassa sähköpoisti sekä uutisryhmien levitys. Toisena syynä voidaan pitää WWW:n tuloa julkisuuteen. WWW:n kautta aukesivat yritysten silmät uudenlaisen markkinointikanavan käyttöön. Mutta pelkkä html ei tarjonnut kovin ihmeellisiä mahdollisuuksia visuaalisesti rikkaiden sivujen tekoon. Tähän sopivat pienet java-sovellukset, java-appletit, joilla voitiin helposti liittää kivoja animaatioita ja ääniä sivun koristukseksi. Sittemmin huomattiin, että Java on paljon muutakin. Se on kokonainen, täydellinen ohjelmointikieli, jolla voi tehdä oikeita sovelluksia. Vieläpä sellaisia, jotka toimivat verkossa. Tällaiselle oli ilmeinen tilaus. Verkottuminen oli päivän kuuma puheenaihe, ja hajautettujen sovellusten teko C:llä ja C++:lla oli hankalaa. Java tarjoaa valmiit välineet verkon yli kommunikointiin. Kun tämän kaiken lisäksi Sun jakaa Javan peruskehitysympäristöä Java Development Kit:iä ilmaiseksi kaikille halukkaille verkossa [ 6 ] ja näin tarjoavat helpon tavan tutustua Javaan ja huomata sen yksinkertaisuus, lienee menestys varmaa.
 
 

4. Mitä uutta Java 1.1 tuo tullessaan

 

4.1 Kokonaan uusittu AWT tapahtumankäsittelyluokka

Koko tapahtumankäsittelyjärjestelmä (events) on uudistettu Java 1.1:ssä Uudessa tapahtuma- mallissa tapahtumat tuotetaan erilaisissa tapahtumalähteissä. Kun tapahtuma ilmenee, kerrotaan tästä tarvittaville tahoille, joita kutsutaan tapahtuman kuuntelijoiksi. Tällaista mallia kutsutaan delegoinniksi, sillä se mahdollistaa tapahtumien käsittelyn kohdistamisen niille tahoille, jotka huolehtivat tapahtumien käsittelystä. Tällä menetelmällä yhtenäistetään tapahtumien käsittely- mallia pitäen silmällä uutta Java Beans-ominaisuutta.
 

4.2 Sisemmät luokat

Java 1.1:een on lisätty mahdollisuus liittää luokkamäärittelyjä sisäkkäin. Tämän tarkoitus on selkeyttää koodin kirjoitusta, jolloin erilaiset apu- ja liityntäluokat tuodaan koodissa lähelle niitä paikkoja joissa niitä käytetään. Samalla ne on helpompi erottaa ohjelmakoodin varsinaisista luokista, joilla on keskeinen merkitys ohjelmassa.
 

4.3 Kansainvälisyys (Internationalization)

Internationalization (tästä eteenpäin lyennettynä I18N) mahdollistaa sovellusten toiminnan eri maissa, joissa on eri kieli. Tämän lisäksi on tärkeää muuttaa esimerkiksi päiväyksen, kellonajan ja valuuttayksikön esitystapa kunkin maan tavan mukaiseksi. Lisäksi pitää miettiä merkkien koodaustapaa, joka on meille suomalaisille ääkkösten muodossa tuttu ongelma. Java 1.1 tarjoaa menetelmät näiden ongelmien ratkaisemiseksi.
 

4.4 Java Beans

Java Beans on malli, jonka avulla voidaan kirjoittaa uudelleenkäytettäviä sovellusohjelman osasia. Sovellusohjelmat ovat täynnä erilaisia usein esiintyviä osia, kuten painonappeja, tietynlaisia ikkunoita, jotka tarjoavat tietoa käyttäjille jne. Java Beans:in tarkoituksena on yhtenäistää käytäntö, miten sovellusohjelman osia, eli yleensä luokkia kierrätetään, miten niitä nimetään yms. Mikäli yksittäinen bean eli "papu" noudattaa tällaisia käytäntöjä, voi toinen ohjelmoija saada tietoa kyseisestä pavusta Java 1.1:n Reflection API:n kautta.
 

4.5 Remote Method Invocation

RMI on tarkoitettu erityisesti verkossa tapahtuvaa viestintää varten. RMI mahdollistaa eri Java sovellusten kutsua metodeja, jotka ovat mahdollisesti eri JVM:ssä, mahdollisesti eri isäntäkoneessa. Java tukee socketteja, mutta näiden käyttö edellyttää erillisen protokollan käyttöä. Tunnettua on, että tällaisten protokollien suunnittelu on erittäin monimutkaista ja hankalaa sekä erittäi altista erilaisille virheille.
 
 

5. Yhteenveto

Vain tulevaisuus näyttää, miten Java asettuu muiden ohjelmointikielten joukkoon. Tuleeko siitä kenties johtava työkalu ohjelmien kehitykseen, "standardi" samassa mielessä kuin C ja C++ ovat ohjelmointimaailmassa nykyään. Onko tulevaisuudessa prosessoreja, joiden konekielenä on Java, siten kuin Javan alkuperäinen tarkoitus oli, leivänpaahtimet, radiot, kännykät toimivat Javaa käyttäen. Microsoftin Bill Gatesin haaveena on tuoda Windows ulos PC:stä yleiseksi ohjausjärjestelmäksi ja käyttöliittymäksi kaikkeen kodin viihde-elektroniikkaan. On mielenkiintoista nähdä millaisia kapuloita Java mahdollisesti työntää tämän suunnitelman pinnojen väliin.
 
 

Viiteet

[1] Sun Microsystems: Java-Simple and Familiar - 1.11.1997  ***
<URL:  http://java.sun.com/docs/white/langenv/Simple.doc.html#343 >

[2] Sun Microsystems: The Java(tm) Language: An Overview - 1.11.1997  ****
<URL:  http://java.sun.com/docs/overviews/java/java-overview-1.html >

[3] Bjarne Stoustrup: Bjarne Stoustrup's FAQ - 31.10.1997 *
<URL:  http://www.research.att.com/~bs/bs_faq.html >

[4] Sun Microsystems: Main Features of Java Programming Language 2.1 - 1.11.1997  ***
<URL:  http://java.sun.com/docs/white/langenv/Simple.doc1.html#2333 >

[5] Ron Resnic: Bringing Distributed Objects to the World Wide Web - 1.11.1997  ***(*)
<URL:   http://www.interlog.com/~resnick/javacorb.html#Promise >

[6] Sun Microsystems: Products and APIs - 1.11.1997 **
<URL:  http://java.sun.com/products/index.html >
 
 

Lisätietoja aiheesta

Sun Microsystems:  Java Documentation  - 1.11.1997 ****
Sisältää Javan koko dokumentaation

Lindström, Juha:  Johdatus Java-kieleen  - 27.4.1997 ***
Tik-110.300 Tietoliikennearkkitehtuurit-kurssilla tehty essee aiheesta

Sun World Online July 1995:  Java: The Inside Story  - 6.1995 ****
Katsaus Javan kehitykseen

Fortune:  Sun's Java: The Threat to Microsoft Is Real  - 11.11.1996 ***(*)
Kertoo Javan muodostamasta uhasta Microsoftin monopoliasemalle
 

Sunin kotisivuilta löytyviä dokumentteja ja johdatuksia aiheisiin:

Sun Microsystems:  Introducing Java Beans  - 1.11.1997***

Sun Microsystems:  Java Beans  - 1.11.1997 ****

Sun Microsystems:  Remote Method Invocation  - 1.11.1997 ****

Sun Microsystems:  Java White Papers  - 1.11.1997 *****
--

Amerikkalaisen konsulttiyhtiön dokumentteja aiheesta:

ObjectWorks Consulting Inc:  WEB/Database Middleware  - 11.6.1997 ***

ObjectWorks Consulting Inc:  Java Beans  - 11.6.1997 ***

ObjectWorks Consulting Inc:  Java  - 11.6.1997 ***
--

Bjarne Stoustrup:  The Design and Evolution of C++  - 3.12.1996 **
Mainos kirjasta joka kertoo C++:n kehityksestä ja kehittymisestä kielen kehittäjän kertomana

David Flanagan: Java in a Nutshell, 1st and  2nd edition , 1997,  O'Reilly ****
Erittäin hyvä kirja Java-kielestä, 1. ja 2. painos ovat tavallaan jatko-osat



(c) Pekka Kanerva 1997