Ohjelmoinnin peruskäsitteet:

Luku B
Sovellukset ja sovelmat

  1. Ohjelmia Javalla
  2. Java-sovellukset
  3. Java-sovelmat

1. Ohjelmia Javalla

Javalla voi tehdä joko sovelluksia tai sovelmia (applet). Sovellus käynnistetään komentoriviltä itsenäisenä ohjelmana. Sovelma toimii www-sivulla yhtenä komponenttina. Tutkimme tässä, miten sovellus ja sovelma tehdään.

Varsinainen tietokoneohjelman toiminta toteutetaan lauseiden ja muuttujien avulla. Nämä tarvitsevat kuitenkin ympärilleen sellaisen kokonaisuuden, joka on mahdollista suorittaa jossakin ympäristössä, näitä ovat sovellukset ja sovelmat.

Sovellusten ja sovelmien tekemistä varten tarvitset J2SE-kehitysympäristön. Jos käyttämässäsi koneessa ei vielä ole sitä, voit hakea sen Sunin Java-sivuilta.

2. Java-sovellukset

Java sovellus koostuu ainakin yhdestä luokasta. Luokka on ohjelmistokomponentti, joka esittää yhtä kokonaisen sovelluksen osaa eli oliota. Luokka sisältää olion ominaisuudet ja toiminnot. Tässä käsittelemme luokkia mahdollisimman kevyesti. Teemme sovelluksia, joissa on vain yksi luokka ja aluksi vain yksi toiminto (eli funktio).

Luokka (ja siis myös sovellus) kirjoitetaan Java-koodina tekstitiedostoon. Esimerkkinä on klassinen sovellus, joka tulostaa komentoriville "Hello world!".

   1:class Hello
   2:{
   3:   // pääohjelma, eli ensimmäisenä suoritettava funktio
   4:   public static void main(String[] args)
   5:   {
   6:      // tästä alkavat ohjelman lauseet
   7:      System.out.println("Hello world!");
   8:      // tähän loppuvat ohjelman lauseet
   9:   }
  10:}

Koodiin on lisätty rivinumerot (harmaalla värillä rivin alussa). Niitä ei kirjoiteta varsinaiseen koodiin. Kommentit, jotka eivät kuulu varsinaiseen suoritettavaan koodiin, merkitään alkavaksi merkeillä //. Tämä jälkeen tuleva rivin loppu on kommentti.

Java-koodi talletetaan tiedostoon, jonka nimi on oltava "Hello.java", koska luokan nimeksi on koodissa määritelty "Hello".

Kirjoittamisen jälkeen koodi on käännettävä. Käytämme tässä Sunin javac-kääntäjää komentorivillä. Annamme komennon (lihavoitu)

C:\java> javac Hello.java

C:\java>

Tämän jälkeen suoritamme sovelluksen Java-virtuaalikoneen (java) avulla:

C:\java> java Hello
Hello world!

C:\java>

Lauseet ja muuttujat

Ohjelman lauseet tulevat funktion main sisälle. Edellisessä esimerkissä on osoitettu kommenteilla lauseiden paikka. Lauseet erotellaan toisistaan puolipisteen avulla. Jokainen yksinkertainen lause lopetetaan puolipisteeseen. Monimutkaisemmissa lauseissa käytetään lohkoa { ... }.

Lauseista kerrotaan enemmän toisaalla oppimateriaalissa. Tässä käytämme vain tulostuslauseita.

Tulostus ohjelmasta

Edellisessä esimerkissä tulostettiin terminaaliin (komentoriville, päätteelle) rivi tekstiä. Tulostaminen tapahtuu lauseilla System.out.print() ja System.out.println(), jossa sulkujen sisällä annetaan tulostettava merkkijono, esimerkiksi

  System.out.println("Hello world!");

Funktio System.out.println() vaihtaa riviä tulostettavan merkkijonon jälkeen. Funktio System.out.print() jää samalle riville.

Merkkijono kirjoitetaan lainausmerkkien sisälle. Merkkijonoista saat lisätietoja myöhemmästä oppimateriaalista.

Tehtävä B1: Tee Java-sovellus nimeltään "Kolme", joka tulostaa näkyville kolme riviä tekstiä:
C:\java> java Kolme
Tämä on ensimmäinen rivi!
Tämä on toinen rivi!
Tämä on kolmas rivi!

C:\java>

Tietojen syöttö ohjelmalle

Tietojen syötön toteuttaminen edellyttää lisätietoja muuttujista ja taulukoista.

Yksinkertaisin tapa syöttää tietoja ohjelmalle on lisätä niitä komentoriville ohjelman nimen perään, esimerkiksi

C:\java> java Hello2 Jarkko
Hello, Jarkko!

C:\java>

Edellinen ohjelma "Hello" ei kuitenkaan osaa käsitellä tietoja tuolla tavalla. Kirjoitamme muutetun version, jonka toiminta vastaa yllä olevaa esimerkkiä.

   1:class Hello2
   2:{
   3:   // pääohjelma, eli ensimmäisenä suoritettava funktio
   4:   public static void main(String[] args)
   5:   {
   6:      // tästä alkavat ohjelman lauseet
   7:      System.out.print("Hello, ");
   8:      System.out.print(args[0]);
   9:      System.out.println("!");
  10:      // tähän loppuvat ohjelman lauseet
  11:   }
  12:}

Käännämme ja ajamme ohjelman komentorivillä:

C:\java> javac Hello2.java

C:\java> java Hello2 Jarkko
Hello, Jarkko!

C:\java>

Komentorivillä annetut parametrit voidaan ottaa käyttöön taulukosta args muodossa args[0], args[1], args[2], ...

Kannattaa olla kuitenkin tarkkana parametrien kanssa. Jos parametria ei anneta komentorivillä, seuraa inhottava virheilmoitus:

C:\java> java Hello2
Hello, Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
        at Hello2.main(Hello2.java:8)

C:\java>

Virheet voi estää helposti tutkimalla taulukon args pituutta. Se on kuitenkin myöhemmän oppimateriaalin asia.

Tehtävä B2: Tee ohjelma nimeltään "Henkilo", jonka käyttäminen tuottaa seuraavat rivit:
C:\java> java Henkilo Jarkko Leponiemi 35
Etunimi:  Jarkko
Sukunimi: Leponiemi
Ikä:      35

C:\java>

3. Java-sovelmat

Java-sovelma (applet) on komponentti, joka toimii HTML-sivun elementtinä. Sovelmia voidaan käyttää toteuttamaan sellaisia vuorovaikutteisia elementtejä, joiden tekeminen ei ole mahdollista tavallisen HTML-merkkauksen ja skriptikielien kuten Javascriptin avulla. Sovelma ottaa sivulta käyttöönsä suorakulmion muotoisen alueen, jonka sisällön se piirtää kokonaan itse.

Sovelmakin toteutetaan Java-luokkana. Luokan muoto ei kuitenkaan ole samanlainen kuin Java-sovelluksessa. Esimerkkinä on sovelma, joka piirtää käyttöönsä saamalleen alueelle ympyrän. Alla oleva koodi on kirjoitettu tiedostoon "YmpyraSovelma.java".

   1:import java.awt.*;
   2:import java.applet.*;
   3:
   4:public class YmpyraSovelma extends Applet
   5:{
   6:
   7:   // tämä funktio piirtää sovelman sisäosan
   8:   public void paint(Graphics g)
   9:   {
  10:      // tästä alkavat sovelman sisäosan piirtävät lauseet
  11:      g.drawOval(10, 10, 100, 100);
  12:      // tähän loppuvat piirtävät lauseet
  13:   }
  14:
  15:}

Sovelman koodissa voisi olla muitakin osia, mutta tässä teemme vain sellaisia sovelmia, jotka ainoastaan piirtävät jotakin näkyville. Siksi tarvitsemme vain yhden funktion paint, jonka sisälle kirjoitetaan piirtämiseen tarvittavat lauseet.

Sovelma sivulle

Sovelma käännetään aluksi samalla tavalla kuin Java-sovelluskin. Yhteen sopivuuden vuoksi kääntämisessä kannattaa antaa käännetyn koodin versioksi 1.1 parametrilla target.

C:\java> javac -target 1.1 YmpyraSovelma.java

C:\java>

Käännöksen tuloksena syntyy tiedosto "YmpyraSovelma.class". Tämä tiedosto laitetaan sellaiseen hakemistoon, josta HTML-sivu pääseen siihen käsiksi. Vaihtoehtoina ovat sama hakemisto tai sitten jokin muu saman www-palvelimen hakemisto. Oletetaan, että sovelma on samassa hakemistossa sivun kanssa. Silloin sovelma avataan sivulle applet-elementillä:

<applet code="YmpyraSovelma.class" width="150" height="150">
   Sovelmat eivät toimi tässä selaimessa.
</applet>

Elementissä määritellään siis sovelman käännetyn tiedoston nimi ja sovelman koko sivulla. Alla on nyt todellakin näkyvillä ym. sovelma (jos käytetty selain tukee sovelmia). Reunus sovelman ympärillä on laitettu tähän selvyyden vuoksi.

Kuva toimivasta sovelmasta

Grafiikan piirtämien sovelmassa

Funktion paint-sisälle kirjoitetun koodin tarkoitus on piirtää sovelman sisältö. Siinä voi käyttää esimerkiksi seuraavia lauseita:

Piirrettävä kuvioLause ja esimerkki
Viiva pisteestä (x1, y1) pisteeseen (x2, y2)
g.drawLine(x1, y1, x2, y2);
g.drawLine(0, 0, 100, 200);
Suorakulmion kehys, vasen yläkulma pisteessä (x, y), leveys ja korkeus määriteltynä
g.drawRect(x, y, leveys, korkeus);
g.drawRect(10, 50, 200, 100);
Suorakulmion sisäosa (täytetty), vasen yläkulma pisteessä (x, y), leveys ja korkeus määriteltynä
g.fillRect(x, y, leveys, korkeus);
g.fillRect(10, 50, 200, 100);
Soikion kehys, vasen yläkulma pisteessä (x, y), leveys ja korkeus määriteltynä
g.drawOval(x, y, leveys, korkeus);
g.drawOval(10, 50, 200, 100);
Soikion sisäosa (täytetty), vasen yläkulma pisteessä (x, y), leveys ja korkeus määriteltynä
g.fillOval(x, y, leveys, korkeus);
g.fillOval(10, 50, 200, 100);
Merkkijono m, perusviivan vasen reuna pisteessä (x, y)
g.drawString(m, x, y);
g.drawString("Heippa", 10, 50);

Sovelman koordinaatisto muodostuu siten, että piste (0, 0) on vasemmassa ylänurkassa, pystykoordinaatit kasvavat alaspäin ja vaakakoordinaatit oikealle.

Lauseissa mainitut parametrit, kuten x, y, leveys ja korkeus voivat olla muuttujia.

Lisäksi seuraavaksi piirrettävien kuvioiden värin voi vaihtaa funktiolla g.setColor(Color.vari), jossa vari on jokin tavanomaisen värin nimi (esimerkiksi white, black, red, blue, ...).

Tehtävä B3: Toteuta sovelma, joka piirtää annetulle alueelle yksityiskohtaisen tikku-ukon. Käytä ukossa eri värejä!