Esimerkki tiedostot verkossa

Esimerkkikoodit värikoodataan sivustolla

Esimerkkikoodeja on nyt mahdollista katsella verkossa.

Sivustolla käsiteltyjen asioiden esimerkkikoodit löytyvät nyt osoitteesta http://php.medianurkka.com. Koodin tulkitsemista helpottamaan koodit on värikoodattu.

Kyseisellä sivulla ei kuitenkaan ole mitään selitystä koodien sisällöstä. Eli sisällön sekä toiminnan joudut itse selvittämään.

No Comments

Operaattorit

Seuraavassa on esitelty PHP-kielessä käytettävät operaattorit. Operaattoreita tarvitset ehto- sekä toistolauseissa.

Aritmeettiset operaattorit

Aritmeettiset operaattorit ovat erilaisia laskuoperaattoreita. Kyseisiä operaattoreita käytetään erilaisissa laskutoimituksissa. PHP:ssa sinun ei tarvitse huolehtia, että kaikki laskettavat tyypit ovat samaa tietotyyppiä, kuten esimerkiksi Javassa.

Alla olevassa taulukossa on lueteltu PHP:n aritmeettiset operaattorit.

Esimerkki Selitys
$a + $b Yhteenlasku, laskee yhteen muuttujien $a ja $b arvon
$a – $b Vähennyslasku, vähentää muuttujan $a arvosta muuttujan $b arvon
$a * $b Kertolasku, kertoo muuttujan $a arvon muuttujan $b arvolla
$a / $b Jakolasku, jakaa muuttujan $a arvon muuttujan $b arvolla
$a % $b Jakojäännös, mikä jää jakojäännökseksi, kun muuttujan $a arvo jaetaan muuttujan $b arvolla
$a++ Unaarinen kasvatusoperaattori, lisää muttujan $a arvoa yhdellä, muuttujan käytön jälkeen
++$a Unaarinen kasvatusoperaattori, lisää muttujan $a arvoa yhdellä, ennen muuttujan käyttöä
$a– Unaarinen vähennysoperaattori, vähentää muttujan $a arvoa yhdellä, muuttujan käytön jälkeen
–$a Unaarinen vähennysoperaattori, vähentää muttujan $a arvoa yhdellä, ennen muuttujan käyttöä

Lisäys-/vähennysoperaattorit

Jos lisäys-/vähennysoperaattori sijaitsee muuttujan nimen perällä, niin silloin operaatio suoritetaan vasta lausekkeen jälkeen. Vastaavasti jos käytetty operaattori on ennen muuttujan nimeä, niin silloin operaatio suoritetaan ennen lausekkeen suorittamista. Alla muutama esimerkki tästä:

<?php
  $a = 1;     // Määritetään muuttujalle alkuarvo
  echo $a++;  // Tulostaa: 1
  echo $a;    // Tulostaa 2
  echo --$a;  // Tulostaa 1
?>

Merkkijonojen yhdistäminen

Joskus on tarpeen yhdistä merkkijonoja. Tämä tulee tarpeelliseksi varsinkin erilaisissa tulostuslauseissa. PHP:ssä katentointi eli merkkijonojen yhdistäminen tapahtuu . -operaattorilla.

Tämänkään operaattorin käytössä ei tarvitse huolehtia tyyppimuunnoksista, vaan PHP-tulkki hoitaa tämän sinun puolestasi.

<?php
  $a = 12;
  $b = 34.56;
  print "jono ".$a.$b; // Tulostaa: jono 1234.56
?>

Arvon asettaminen

Muuttujiin voidaan asettaa arvoja monella eri tavalla. Voimme tehdä jo arvoa asettaessa tiettyjä laskutoimituksia. Alla on esimerkkejä näistä:

<?php
  $a = 1;
  $a += 2;       // muuttujaan lisätään 2
  $a -= 3;       // muuttujasta vähennetään 3
  $b = "Merkki"; // Lyhyt muoto toimii myös tässä
  $b .= "jono";  // $b:n arvo: Merkkijono
?>

Loogiset operaattorit

Loogisia operaattoreita tarvitaan, kun halutaan valinta- tai toistolauseen ehdossa käyttää useita vaihtoehtoja. Alla on lueteltu PHP:ssa käytössä olevat loogiset operaattorit:

Esimerkki Selitys
$a && $b Tosi, kun sekä $a että $b ovat tosia
$a and $b sama kuin edellä
$a || $b Tosi, kun vähintään toinen ($a tai $b) on tosi
$a or $b sama kuin edellä
$a xor $b Tosi, kun toinen ($a tai $b) on tosi, mutta ei molemmat
!$a Tosi, kun $a on epätosi (negaatio)

Vertailuoperaattorit

Vertailuoperaattoreita tarvitaan erilaisissa vertailuissa, kuten jo nimestä voidaan päätellä. Yleisin käyttötarve ovat ehto- sekä toistolauseiden ehdot. Seuraavassa taulukossa on lueteltu käytössä olevat vertailuoperaattorit:

Esimerkki Selitys
$a == $b Tosi, kun $a on yhtäsuuri kuin $b
$a === $b Tosi, kun $a on yhtäsuuri ja samaa tietotyyppiä (eli kokonaisluku, merkkijono, liukuluku) kuin $b
$a != $b Tosi, kun $a on erisuuri kuin $b
$a <> $b Tosi, kun $a on erisuuri kuin $b
$a !== $b Tosi, kun $a on erisuuri kuin $b tai ovat eri tietotyyppiä
$a < $b Tosi, kun $a on pienempi kuin $b
$a > $b Tosi, kun $a on suurempi kuin $b
$a <= $b Tosi, kun $a on pienempi tai yhtäsuuri kuin $b
$a >= $b Tosi, kun $a on suurempi tai yhtäsuuri kuin $b

Huom! Merkkijonoja ei saa vertailla toisiinsa vertailuoperaattoreilla. Merkkijonojen samankaltaisuuden tarkastelua varten PHP:ssä on olemassa funktio strcmp(). Seuraavassa koodinpätkässä on esitelty kyseisen funktion käyttöä.

<?php
  $jono1 = "Nimi";
  $jono2 = "Nimi";

  if ( strcmp($jono1, $jono2) ) {
    print "$a ja $b ovat yhtä suuret";
  } else {
    print "$a ja $b ovat eri suuret";
  }
?>

No Comments

Kommentit

Ovat suotavia ohjelmia kirjoittaessa, sillä niiden avulla voidaan selkeyttää koodia ja ne myös auttavat, kun myöhemmin palaat koodin pariin muistamaan mitä olet tehnyt. Javassa voidaan kommentoida jokin tietty rivi tai sitten isompi alue. Seuraavassa on esitetty PHP:n kaksi eri kommentointi tapaa:

<?php
  // Tämä kommentti alkaa kautta kautta merkeistä ja päättyy rivin loppuun
?>

ja

<?php
  /*
   * Tämä kommentti on pituudeltaan useita rivejä
   * ja päättyy vasta tähti kautta merkkeihin.
   */
?>

Kommentteja kannattaa ripotella koodin sekaan aina silloin, kun teet jotain sellaista mikä ei ole ihan joka päiväistä tai muuten selkeää. Itselläni on tapana kirjoittaa isompien lähdekooditiedostojen alkuun seuraavat kommenttirivit:

<?php
  /*
   * Tekijä: Lähdekoodin kirjoittajan nimi
   * PVM: 26.4.2010 (milloin koodi kirjoitettu)
   * Versio: 0.1 (kasvatan, kun teen isompia muutoksia)
   *
   * Kuvaus mitä tämä lähdekoodi pitää sisällään ja tekee
   *
   * MUUTOKSET:
   * PVM TEKIJÄ minkä muutoksen tein.
   */
?>

No Comments

Muuttujat

Muuttuja viittaa muistipaikkaan, johon kyseisen muuttujan sisältö tallennetaan.

Mikä on muuttuja?

Muuttuja on keskusmuistin muistipaikan symbolinen nimi.

Ohjelmoitaessa on tarve aina välillä sijoittaa joitakin arvoja tietokoneen muistiin. Tällaisessa tapauksessa tarvitsemme muuttujia.

Ohjelmoitaessa on helpompi muistaa muistipaikkojen symbolisia nimiä, kuin itse muistipaikkojen osoitteita. Näin ollen ohjelmoitaessa käytetään muuttujia, jotka ovat juuri näitä muistipaikkojen symbolisia nimiä. Seuraavassa esimerkissä määritellään muuttujalle $ika jokin arvo:

<?php
  $ika = 28;
?>

Tässä esimerkissä $ika on yksikäsitteinen nimi muuttujalle. Muuttujan nimen tulee aina olla yksikäsitteinen. Tämä tarkoittaa sitä, että samaa muuttujan nimeä ei saa käyttää kahta kertaa. PHP:ssä muuttujan nimet ovat case sensitivisiä, eli isoilla ja pienillä kirjaimilla on merkityksensä.

Muuttujan nimi saa sisältää seuraavia merkkejä

  • A-Z
  • a-z
  • 0-9
  • -_
  • Muuttujan nimi ei saa alkaa numerolla

Näin ollen muuttujien nimissä ei saa olla skandinaavisia merkkejä, erikoismerkkejä tai välilyöntejä.

Muuttujan ideana on se, että sen arvoa voi myöhemmässä vaiheessa ohjelmaa muuttaa. Tässä esimerkissä muuttujan nimi siis oli $ika ja arvo, joka siihen sijoitetaan on 28. Sijoittamisesta huolehtii = -merkki. Muistisääntönä voitaneen sanoa, että muuttujaan sijoitetaan aina kaikkki yhtäsuuruusmerkin oikeallapuolella olevat asiat. Eli sijoittaminen tapahtuu oikealta vasemmalle. Jos haluammekin lisätä tämän muuttujan arvoa yhdellä vuodella, se voitaisiin suorittaa seuraavasti:

<?php
  $ika = $ika + 1;
?>

Tämä tarkoittaa sitä, että sijoitetaan muuttujaan $ika arvo, joka muodostuu laskutoimituksesta $ika + 1. Koska muuttuja on = -merkin oikealla puolella se laajennetaan, ja todellisuudessa laskutoimitus, joka sijoitetaan muuttujaan $ika onkin muuttujan $ika arvo + 1. Tässä vaiheessa muuttujan $ika arvo on 28, eli 28 + 1.

Kaksi muuttuja tyyppiä

PHP on niin sanottu heikosti tyypitetty kieli, muuttujalle ei määritellä normaalisti tietotyyppiä. Koska tietotyyppiä ei määritellä, niin muuttajan tietotyyppi määräytyy automaattisesti sen sisällön mukaan. Tämä aiheuttaa sen, ettei meidän ohjelmoijana, tarvitse miettiä mitä tietotyyppiä tullaan muuttujaan tallentamaan. Toisaalta se myös haittaa muistin käyttöä ja saa ohjelman “muistisyöpöksi”.

PHP:ssä kaikki muuttujat alkavat $-merkillä.

PHP:ssä on olemassa kaksi erityyppistä muuttujaa. Nämä muuttuja tyypit ovat taulukko sekä skalaarimuuttuja. Taulukkoon voidaan sijoittaa tietoja taulukko muodossa, ja arvot voivat olla mitä tahansa.

Skalaarimuuttujaan voidaan sijoittaa mitä tahansa, yksittäisiä tietoja. Meidän ei tarvitse PHP-ohjelmoinnissa huomioida muuttujaa määriteltäessä käytettävää tietotyyppiä tai muuttujan tilan tarvetta muistista. PHP-tulkki huolehtii näistä asioista automaattisesti. Tästä syystä PHP:llä ohjelmointi on melko helppoa, koska voit jättää tulkin murheeksi tilan varaamisen sekä muuttujatyyppien määrittelyn.

<?php
  // Skalaarimuuttuja
  $muuttuja1 = 1;         // integer (kokonaisluku)
  $muuttuja2 = "1";       // string (merkkijono)
  $muuttuja3 = 1.23;      // float (liukuluku)
  $muuttuja4 = "1.23";    // string (merkkijono)
  $muuttuja5 = "tekstiä"; // string (merkkijono)
  $muuttuja6 = 'C';       // char (merkki)

  // Taulukkomuuttuja
  $taulukko     = array(1, "Matti", 'C');
  $taulukko[3] = "Uusi tietue";

?>

Voit lukea lisää muuttujista ja muista termeistä artikkelista Ohjelmointiin liittyviä termejä.

No Comments

Kootut “säännöt”

“Jokainen löytämäni totuus muuttui säännöksi, joka auttoi minua löytämään muita totuuksia.” (Rene Descartes, Le Discours de la Methode)

Tässä on koottu muutamia sääntöjä/ohjeita sinulle, kun alat ohjelmia tekemään.

Tyyli

  • Käytä kuvaavia nimiä globaaleille muuttujille ja lyhyitä nimiä paikallisille muuttujille.
  • Ole johdonmukainen.
  • Käytä aktiivisia nimiä funktioille.
  • Ole tarkka.
  • Näytä rakenne sisennysten avulla.
  • Käytä luonnolliselta näyttäviä muotoja ilmauksissa.
  • Käytä sulkumerkkejä ristiriitaisuuksien välttämiseen.
  • Jaa monimutkaiset ilmaukset osiin.
  • Ole selkeä.
  • Varo oheislausekkeiden vaikutuksia.
  • Käytä sisennyksiä ja aaltosulkuja johdonmukaisesti.
  • Käytä perinteisiä ilmausmuotoja.
  • Anna nimet tärkeille numeroarvoille.
  • Määrittele numerot vakioina.
  • Käytä merkkivakioita, ei kokonaislukuvakioita.
  • Käytä kieltä laskemaan kohteen koko.
  • Älä selvitä ilmiselviä asioita.
  • Kommentoi funktiot ja globaali tieto.
  • Älä kommentoi huonoa koodia.
  • Älä kirjoita ristiriitaista koodia.
  • Selkeytä, älä hämää.

Liittymät

  • Kätke toteutuksen yksityiskohdat.
  • Valitse suppea primitiivijoukko.
  • Älä mene käyttäjän selän taakse.
  • Tee sama asia aina samalla tavalla.
  • Vapauta resurssi aina samalla tasolla, jossa se varattiin.
  • Hae virheet alhaisella tasolla ja käsittele ne korkealla tasolla.
  • Käytä poikkeuksia vain poikkeustilanteisiin.

Vianhaku

  • Hae tuttuja kuvioita.
  • Tutki viimeisin muutos.
  • Älä tee samaa virhettä kahdesti.
  • Hae virheet heti, ei myöhemmin.
  • Tutki kutsujen jäljityspinoa.
  • Lue ennen kirjoittamista.
  • Selitä koodisi jollekulle toiselle.
  • Yritä tuottaa virhe uudelleen.
  • Hajota ja hallitse.
  • Tutki virheiden numerotietoja.
  • Tee tulostus kohdistaaksesi etsintää.
  • Kirjoita itsetarkistavaa koodia.
  • Kirjoita lokitiedosto.
  • Piirrä kuva.
  • Käytä työkaluja.
  • Pidä arkistoa.

Testaus

  • Testaa koodi katvealueiden suhteen.
  • Testaa esija jälkiehdot.
  • Käytä assert -sääntöä.
  • Ohjaa puolustautuvasti.
  • Tutki paluuarvot.
  • Testaa inkrementaalisesti.
  • Testaa yksinkertaiset osat ensin.
  • Tiedä, mitä tulosteita odotat.
  • Todenna säilytysominaisuudet.
  • Vertaa itsenäisiä toteutuksia.
  • Mittaa testin kattavuus.
  • Automatisoi regressiotestaus.
  • Sijoita testejä ohjelmiin.

Suorituskyky

  • Automatisoi aikamittaukset
  • Käytä profiloijaa
  • Keskity tärkeisiin kohtiin
  • Piirrä kuva
  • Käytä parempaa algoritmia tai tietorakennetta
  • Laita kääntäjän optimointi päälle
  • Viritä koodia
  • Älä optimoi vääriä asioita
  • Kokoa yhteen yhteiset oheisilmaukset
  • Korvaa kalliit operaatiot edullisilla
  • Eliminoi silmukat
  • Laita usein käytetyt arvot välimuistiin
  • Kirjoita erikoisvaraaja
  • Laita syöttö ja tulostus puskuriin
  • Käsittele erikoistapaukset erikseen
  • Laske arvot etukäteen
  • Käytä arvioituja lukuarvoja
  • Kirjoita koodi uudelleen alemman tason kielellä
  • Säästä tilaa käyttäen mahdollisimman pientä tietotyyppiä
  • Älä tallenna arvoja, jotka on helppo laskea uudelleen

Siirrettävyys

  • Pysyttäydy standardissa
  • Ohjelmoi keskitien mukaan
  • Ole tietoinen kielen heikkouksista
  • Yritä usealla kääntäjällä
  • Käytä standardikirjastoja
  • Käytä vain piirteitä, jotka ovat saatavilla kaikkialla
  • Vältä ehdollista kääntämistä
  • Sijoita järjestelmäriippuvuudet erillisiin tiedostoihin
  • Kätke järjestelmäriippuvuudet liittymien taakse
  • Käytä tekstimuotoa siirrossa
  • Käytä kiinteää tavujärjestystä tiedonsiirrossa
  • Muuta nimeä, jos muutat määrittelyä
  • Pidä yllä yhteensopivuus olemassa oleviin ohjelmiin ja tietoon
  • Älä oleta, että ASCII on käytössä
  • Älä oleta, että englannin kieli on käytössa

No Comments

Ohjelman suunnittelu

Tässä artikkelissa käydään lävitse erilaisia välineitä ohjelman suunnitteluun ja algoritmin muodostamiseen.

Ohjelmoinnin vaiheet

Jokapäiväisen elämän toimintaohjeet ovat muodoltaan erilaisia. Ne voivat olla sanallisia ohjeita, kaavioita, nuotteja jne. Ihminen pystyy useimmiten ymmärtämään ylimalkaisiakin ohjeita. Tietokone on kuitenkin vain tyhmä kone ja tehty niin, että se pystyy käsittelemään vain yksityiskohtaisia ja tiettyjen sääntöjen mukaan kirjoitettuja ohjeita (ohjelmia). Ohjelmoinnin tärkein vaihe on suunnittelu. Jos tietokoneohjelma on huonosti suunniteltu, se on epäselvä ja sisältää helposti virheitä (bugeja). Suunnittelu vaikuttaa siis eniten lopputulokseen.
Ohjelmointityössä voidaan erottaa seuraavat vaiheet:

  1. Tehtävän määrittely
  2. Suunnittelu
  3. Toteuttaminen
  4. Testaaminen

Tehtävän Määrittely

Määrittelyvaiheessa tutustutaan tarkemmin siihen ongelmaan, jonka ratkaisemiseksi ohjelmaa ollaan suunnittelemassa ja todetaan, mitä ohjelman pitää tehdä.
Tässä vaiheessa voidaan esim. selvittää, mitä syöttötietoja ohjelman suorittamiseen tarvitaan ja minkälaisia tulosteita ohjelmalta vaaditaan.
Jos tehtävä on aikaisemmin tehty manuaalisen tietojen käsittelyn (ilman tietokonetta) avulla, on ehkä hyvä selvittää, mistä vaiheista tehtävä on koostunut ja miten nämä vaiheet on aikaisemmin toteutettu.

Suunnittelu

Kuten edellä mainittiin, suunnittelu on ohjelmointityön tärkein ja ratkaisevin vaihe. Suunnittelu voidaan jakaa seuraaviin osatehtäviin:

  • Ratkaisun jäsentäminen helposti hallittaviin, pienempiin osiin
  • Jokaisen osan toiminnan tarkka kuvaaminen
  • Ratkaisun testaaminen; tässä ei tavallisesti käytetä vielä tietokonetta, vaan käytetään ns. pöytätestausta (esim. pelkästään kynän ja paperin avulla). Ratkaisun toimivuutta seurataan erilaisten lähtötietojen avulla.

Suunnitteluvaiheessa osasuunnitelmat (tai koko suunnitelma) voidaan esittää erilaisten kuvauskielten avulla. Nämä voivat olla sekä sanallisia että kaavion muotoisia. Äidin ruokaresepti on esimerkki sanallisesta kuvauskielestä.

Toinen sanallinen kuvauskieli on numeroiva esitys. Suunnitelma koostuu tällöin numeroidusta vaiheesta, jotka suoritetaan numerojärjestyksessä (ellei vaihe sisällä käskyä ”Mene vaiheeseen n:o”).

Toteutus

Toteutus vaihe tarkoittaa itse sitä koodaus työtä, joka tehdään suunnittelun pohjalta.

Testaus

Vaihe, joka suoritetaan toteutuksen jälkeen, ennen tuotteen julkistamista. Eli testataan ohjelman toimivuus.

No Comments

Ohjelmointiin liittyviä termejä

Funktiot ja aliohjelmat

Funktiot ovat pääohjelman ulkopuolella olevia koodi jaksoja, jotka suorittavat tietyn, hyvin määritellyn tehtävän. Periaatteessa voitaisiin sanoa, että ne ovat omia itsenäisiä ohjelmia.

Funktioiden ja aliohjelmien pääasiallinen ero on siinä, että funktiot palauttavat jonkin arvon, kun taas aliohjelmat eivät palauta mitään arvoa.
Kun funktiota/aliohjelmaa kutsutaan, ja sille halutaan välittää joitakin arvoja, niin nämä arvot välitetään sille ns. parametreinä. Nämä parametrit ovat eräänlaisia muuttujia.

Muuttujat

Muuttujat ovat ohjelmoinnin kannalta tärkeitä, koska niiden avulla voidaan käsitellä muistissa olevaa tietoa. Muuttuja on tietokoneen muistipaikan selkokielinen nimitys, joka sisältää jonkin arvon.

Muuttujan ominaisuuksia:

  1. Muuttujalla on aina tunnus eli nimi
  2. Muuttujaan voidaan sijoittaa arvo
  3. Muuttujan arvolla on jokin tietotyyppi kuten luku tai merkkijono

Muuttujan nimeäminen

Ohjelmoija antaa muuttujalle nimen, joka hyvän ohjelmointitavan mukaisesti tulee kuvata muuttujan käyttötarkoitusta. Esimerkiksi omenan kilohintaa kuvaava muuttuja voisi olla nimeltään Omenan_ kilohinta. Muuttujan nimessä voidaan käyttää pieniä kirjaimia a-z ja isoja kirjaimia A-Z. Myös väliviivat ja numerot ovat sallittuja. Alaviivalla voidaan yhdistää useammasta sanasta koostuva muuttujan nimi yhdeksi sanaksi. Erillisiä sanoja ei voida käyttää muuttujan nimessä.

Muuttujan nimessä isot ja pienet kirjaimet ovat merkitseviä, joten OmaMuuttuja on eri asia kuin omaMuuttuja.. Isoilla ja pienillä kirjaimilla on siis merkityksenä. Samoin tulee huomioida se, ettei muuttujan nimessä saa esiintyä skandinaavisia merkkejä.

Muuttujan nimeämissäännöt

Yleisesti ottaen, lähes jokaisessa ohjelmointikielessä muuttujien nimeäminen noudattaa seuraavia sääntöjä:

  1. Muuttujan nimessä voidaan käyttää isoja (A-Z) ja pieniä merkkejä (a-z), ei skandinaavisia kirjaimia
  2. Muuttujan nimessä voidaan käyttää numeroita ja alaviivaa
  3. Muuttujan nimi voidaan aloittaa kirjaimella tai alaviivalla, mutta ei numerolla

Muuttujan nimen tulee kuvata muuttujan käyttötarkoitusta.

Muuttujan tietotyyppi

Tietotyyppi määrittelee muuttujan sisältämän tiedon tyypin. Muuttujan arvo voi olla tyypiltään luku, merkkijono tai Boolean ?arvo (Java-kielessä on Boolean-tyyppinen muuttuja. Se saa arvokseen totuusarvon true eli tosi tai false eli epätosi.). JavaScript käsittelee kaikkia lukuja liukulukutyyppisenä, joten luku voi olla kokonaisluku tai reaaliluku. Merkkijono tyyppinen muuttuja sisältää joukon merkkejä, jotka kirjoitetaan lainausmerkkien sisään. JavaScriptissä merkkijonot voivat sisältää tarvittavan määrän merkkejä, jotka voivat olla myös numeroita, välimerkkejä ja skandinaavisia kirjaimia. Boolean ?tyyppiselle muuttujalle voidaan määritellä kaksi arvoa: tosi (TRUE) ja epätosi (FALSE). Näitä arvoja tarvitaan esimerkiksi, kun halutaan testata onko jokin ehto toteutunut.

Yksi olennaisin ero C -kielen ja JavaScriptin välillä on se, ettei JavaScript muuttujille tarvitse ilmoittaa tietotyyppiä. Tämän ansiosta tyyppimuunnokset tietotyypistä toiseen ovat helppoja. Muuttuja voidaan esimerkiksi alustaa luvulla ja samaan muuttujaan voidaan tarvittaessa sisällyttää merkkijono. Monet muut ohjelmointikielet kuten Java tai C vaativat muuttujan esittelyn yhteydessä tietotyypin. C -kielessä kokonaislukutyyppinen muuttuja esitellään int -tyyppisenä tyyliin int OmaMuuttuja.

Muuttujan alustaminen

Muuttujan alustaminen tehdään muuttujan esittelyn yhteydessä eli muuttujalle annetaan alkuarvo. Arvon antaminen tehdään sijoitusoperaattorilla (=) ja arvon sijoittaminen tehdään oikealta vasemmalle. Joissakin tapauksissa muuttuja voidaan pelkästään esitellä käyttämällä avainsanaa var. Esittelyä tarvitaan esimerkiksi, jos muuttuja määritellään globaaliksi, mutta sen arvo määräytyy ohjelman myöhemmässä vaiheessa. Muuttujan arvo ei ole vakio, vaan arvoa voidaan muuttaa ohjelman ajon aikana, tästä nimitys muuttuja. Muuttuja voi saada myös arvokseen toisen muuttujan tai laskutoimituksen arvon.

Tyyppimuunnokset

Tyyppimuunnoksella tarkoitetaan muuttujan arvon tyypin muuntamista tietotyypistä toiseen. Esimerkiksi, jos muuttujaan PisteTilanne on alustettu lukutyyppinen muuttuja, niin samaan muuttujaan voidaan myöhemmin sijoittaa merkkijono. Esimerkissä muuttuja PisteTilanne saa aluksi arvokseen luvun 23, mutta seuraavalla rivillä merkkijonon “Täydet pisteet”. Niinpä muuttujasta PisteTilanne tulee tyypiltään merkkijono ja tulostusrivin documnet.write tulostaa näytölle tekstin. Tyyppimuunnos voidaan tehdä myös kahden muuttujan välillä, jolloin lausekkeita tutkitaan vasemmalta oikealle. Tietotyyppi määräytyy vasemmalla olevan muuttujan perusteella.

1 Comment

Mikä on ohjelmointikieli?

koodi

Kaikki tietokoneohjelmat ovat ohjelmoitu jollakin tietyllä ohjelmointikielellä, jonka avulla määritellään ohjeet, kuinka ohjelman tulee toimia. Jopa kaikkien tuntemamme ja varmastikin myös joka päivä käyttämämme Internet Explorer on joukon ohjelmoija jollakin, ohjelmointikielellä väsäämä ratkaisu johonkin ongelmaa, tässä tapauksessa Internettiin pääsyyn. Näin päästäänkin kysymyksen: ”Mikä on ohjelmointikieli?”. Sillä emmehän me pysty luomaan ohjelmaa ilman kieltä, jonka avulla sen tekisimme. Oikeastaan ohjelmointikieli on juuri ohjelmointiin suunniteltu ilmaisukieli, jolla ohjelmoijat työskentelevät.

Nämä ohjelmointi kielet lajitellaan keskenään eri kategorioihin, joihin tutustumme myöhemmin. Kuitenkin kaikissa ohjelmointikielissä on joukko komentoja ja rakenteita, joiden avulla ohjelmoija laatii toimintaohjeet. Toimintaohjeet ovat kuin ajo-ohjeet tai kakkuresepti, niiden tulee olla täsmälliset, jotta ohjelma (tietokone) osaa suoriutua kaikista tilanteista. Toisin kuin autoilija/leipoja, niin tietokone ei voi kysyä apua miten sen tulisi toimia suoriutuakseen sille määrätyistä tehtävistä. Voidaankin todeta, että tietokone on juuri niin viisas kuin mitä käyttämäsi ohjelman tekijä on. Tietokone ei pysty ajattelemaan tai arvailemaan mitä ohjelmoija nyt sitten seuraavaksi mahtanee haluta, vaan sinun tulee ohjelmoijana määritellä tarkat toimintaohjeet tietokoneelle, ennen kuin voit levittää ohjelmaa.

PHP on yksi sadoista maailmalla käytössä olevista tietokonekielistä. Joitakin niistä käyttävät ammattiohjelmoijat kirjoittaessaan ohjelmistoja meille muille. Jotkut kielet on tarkoitettu auttamaan opiskelijoita oppimaan ohjelmoinnin perusteet. Jotkut kielet taas on tarkoitettu tietokoneen käyttäjien avuksi automatisoimaan toistuvia tehtäviä ja räätälöimään ohjelmistosovelluksia käyttäjille sopiviksi. Tietokoneiden alkuajoista lähtien on ohjelmointikielien tavoitteena ollut helpottaa ihmisen ja tietokoneen välistä kommunikointia.

Ohjelmointikieli (programminglanguage):
Ohjelmien(laskentaprosessien)systemaattinen kuvaustekniikka. Ohjelmointikieli on liittymä/väline ohjelmistotuotantoa varten ja tämän liittymän kautta ohjelmoija kommunikoi tietokoneen kanssa kirjoittaessaan I. koodatessaan tietokoneohjelmaa. Ohjelman kirjoittaminen on siis kielenkäytlöprosessi.

Tietokoneen kielet

Tietokoneohjelma toimii laitteiston, ohjelmiston ja käyttävien ihmisten luoman ’maailmankuvan’ asettamissa rajoissa. Ohjelmointikielen yksi tärkeimpiä ominaisuuksia on sen yksikäsitteisyys, eli sillä kirjoitetut ilmaukset voidaan tulkita vain yhdellä tavalla. Ohjelmointikielellä on kielioppi (syntaksi), joka määrittelee, millaisia ohjelmia saa kirjoittaa. Ohjelmointikielen semantiikka antaa ohjelman osille merkityksen. Ohjelmointikielet ovat niin kutsuttuja formaaleja kieliä.

Konekieli ja assembly-kieli

Jokaisella tietokoneella on oma äidinkieli eli ns. konekieli.

Konekieli (machine language):
Tietokoneen peruskieli, joka koostuu nollista ja ykkösistä.

Eri konekielien välillä on yhtäläisyyksiä. Kaikista löytyy käskyt mm. seuraaviin tehtäviin:

  • neljän peruslaskutoimituksen suorittaminen
  • lukuparien vertailu
  • käskyjen toisto

Konekielet ovat kuitenkin eri kieliä, kuten ranska ja englanti. Näin ollen yhteen konekieleen perustuvat koneet eivät ymmärrä toisella konekielellä kirjoitettuja ohjelmia.

Koneen näkökulmasta katsottuna konekieli on pelkkää binäärikoodia. Käskyt, muistipaikat, luvut ja merkit esitetään nollista ja ykkösistä muodostuvina merkkijonoina.

Koska binäärilukujen tulkitseminen on ihmiselle hankalaa, on konekieliset ohjelmat yleensä käännetty joko kymmenjärjestelmään, heksadesimaalijärjestelmään (kantaluku 16) tai johonkin muuhun lukujärjestelmään. Tästä huolimatta konekielisten ohjelmien kirjoittaminen, lukeminen ja korjaaminen on aina ollut vaikeaa.

Ohjelmointi muuttui helpommaksi, kun keksittiin assembly-kieli.

Assembly-kieli (assemblylanguage):
Vastaatoiminnaltaankonekieltä.Ihmistenonkuitenkin helpompi lukea, kirjoittaa sekä ymmärtää assembly’a kuin konekieltä.

Assembly’ssa ohjelmoija käyttää aakkoskoodeja, jotka vastaavat konekielen käskyjä. Esimerkiksi assembly-kielinen käsky vähennyslaskulle voisi olla SUB (subtraction). Luonnollisesti SUB ei merkitse mitään tietokoneelle, joka reagoi vain sellaisiin komentoihin kuin 10110111. Sillaksi ohjelmoijan ja tietokoneen välisen kommunikointikuilun yli on kehitetty ohjelma nimeltään assembler , joka kääntää jokaisen assemble-kielisen käskyn konekieliseksi käskyksi. Paremmasta tietämättä tietokone toimii kielenkääntäjänä itselleen.

Vain erittäin harvat ohjelmoija käyttävät enää konekieltä, koska assembly-kieli on selvästi sitä parempi. Siitä huolimatta assembly-kieltä pidetään matalan tason ohjelmointikielenä. Tämä tarkoittaa sitä, että ohjelmoijan täytyy ajatella konekielen tasolla kaikkia toimiaan ja sisällyttää valtava määrä yksityiskohtaista tietoa jokaiseen kirjoittamaansa ohjelmaan. Assembly-ohjelmointi on kertautuvaa, aikaa vievää ja virhealtista puuhaa. Asiaa pahentaa vielä se, että yhdellä assemblykielellä kirjoitettu ohjelma joudutaan kirjoittamaan kokonaan uudestaan toisella assembly-kielellä, mikäli sitä halutaan ajaa koneissa, joissa on erilainen konekieli. Monet ohjelmoijat käyttävät kuitenkin assembly-kieltä ohjelmoidessaan videopelien tai muiden sovellusten osia, joissa nopeus ja suora tiedonsiirto laitteistojen kanssa ovat kriittisiä. Nykyisin useimmat ohjelmoija ajattelevat ja kirjoittavat korkeammalla tasolla.

Korkean tason kielet

Korkean tason kielet asettuvat luonnollisten kielten ja tarkkojen konekielten välimaastoon. Niitä alettiin kehittää 1950-luvun alkupuolella yksinkertaistamaan ja virtaviivaistamaan ohjelmointiprosessia. FORTRANin ja COBOLin kaltaisten kielten avulla tiedemiehet, insinöörit ja kaupallisen alan ihmiset pystyivät kirjoittamaan ohjelmia käyttäen tuttuja termejä ja merkintöjä kryptisten konekäskyjen sijaan. Tänään ohjelmoijat voivat valita useista sadoista korkean tason kielistä mieleisensä.

Tulkit ja kääntäjät kääntävät korkean tason kieliset ohjelmat konekielelle. Olipa käytössä tulkki tai kääntäjä, yksi korkean tason kielinen lause kääntyy useaksi konekieliseksi lauseeksi. Korkean tason kieli piilottaa useimmat konekielisten toimintojen yksityiskohdat ohjelmoijalta. Sen ansiosta ohjelmoijan on helpompi keskittyä ajattelemaan ohjelmakokonaisuutta ja sen logiikkaa.

Kirjoittamisen ja korjaamisen helppouden lisäksi korkean tason kielten etuna on niiden siirrettävyys koneesta toiseen. Esimerkiksi standardin mukaisella Javalla kirjoitettu ohjelma voidaan kääntää ja ajaa missä tahansa tietokoneessa, jossa on standardin mukainen Java-kääntäjä. Koska tällaisia Java-kääntäjiä on saatavilla useimpiin tietokonetyyppeihin, toimii Java-ohjelma sellaisenaan lähes kaikkialla.

Ohjelman siirtäminen uuteen koneeseen ei ole aina yhtä helppoa. Useimmat korkean tason ohjelmat jouduaan kirjoittamaan osittain uudelleen, koska laitteistot,kääntäjät, käyttöjärjestelmät ja käyttöliittymät ovat erilaisia. Esimerkiksi ohjelmoijat joutuisivat kirjoittamaan 20% koodista uudelleen siirtäessään ohjelman Windows-version toimimaan Macintosh-koneessa tai päinvastoin. Kaiken kaikkiaan korkean tason ohjelmat ovat paljon paremmin siirrettäviä kuin assemblyja konekielellä kirjoitetut ohjelmat.

Monikieliset koneet

Satojen kehitettyjen korkean tason kielten joukosta muutamat ovat tulleet tunnetuiksi laajan käyttönsä ansiosta. Näihin kieliin kuuluu:

  • FORTRAN (Formula Translation), ensimmäinen kaupallinen korkean tason ohjelmointikieli, kehitettiin IBMaIä (Intemational Business Machines) 1950-luvulla ratkaisemaan tieteen ja tekniikan ongelmia. FORTRANin uudistetut versiot on edelleen käytössä.
  • COBOL (Common Business Oriented Language) kehitettiin 1960-luvulla Yhdysvaltain hallituksen halutessa uuden, kaupallisiin tietojenkäsittelyongelmiin suuntautuneen kielen. COBOL-ohjelmoijia työskentelee edelleen monissa tietojenkäsittelyyrityksissä ympäri maailmaa.
  • LISP (List Processing) kehitettiin MIT’ssä (Massachusetts Institute of Technology) 1950-luvun lopulla ei-numeerisen tiedon käsittelyyn, kuten merkit, sanat ja muut symbolit. LISP on laajalti käytetty tekoälytutkimuksessa osittain siksi, että on helppo kirjoittaa LISP-ohjelmia, jotka pystyvät kirjoittamaan toisia ohjelmia.
  • BASIC (Beginner’s All-purpose Symbolic Instruction Code) kehitettiin aloitteleville ohjelmoijille 1960-luvun puolivälissä helposti opittavaksi, vuorovaikutteiseksi vaihtoehdoksi FORTRANiIIe. Ennen BASICia opiskelijan piti tyypillisesti antaa ohjelma tietokoneelle tarkastettavaksi, odottaa tuntikausia kääntäjän tulostusta ja toistaa tätä prosessia, kunnes kaikki virheet oli korjattu. Koska BASICia tulkittiin rivi kerrallaan eikä käännetty kokonaisena ohjelmana, opiskelija sai välittömästi palautetta kirjoittaessaan lauseitaja komentoja päättecllään. Henkilökohtaisten tietokoneiden (PC, Personal Computer) yleistyessä BASIC nautti ennenkuulumatonta suosiota opiskelijoiden, harrastajien ja ohjelmoijien joukossa. Vuosien saatossa BASICista on kehittynyt voimakas, uudenaikainen ohjelmointiväline niin amatöörien kuin ammattilaistenkin käyttöön.
  • Pascal(nimetty1600-luvullaeläneenranskalaisenmatemaatikon,keksijän,filosofin ja mystikon Blaise Pascal’in mukaan) kehitettiin aloitteleville ohjelmoijille 1970luvun alussa vaihtoehtona BASICiIIe. Pascal suunniteltiin rohkaisemaan rakenteiseen ohjelmointiin, josta lisää seuraavassa osassa. Pascal on edelleen suosittu opiskelijoiden keskuudessa, mutta sitä käytetään vain harvoin ammattimaiseen ohjelmointiin.
  • C keksittiin Bell Labs’ssa 1970-luvun alussa käyttöjärjestelmien, kuten UNIX, ohjelmoimiseen. C on monimutkainen kieli, joka on vaikea oppia. Toisaalta sen ilmaisuvoimaisuus, joustavuus ja tehokkuus ovat tehneet siitä useimpien PC-ohjelmia tekevien ammattilaisten suosikin.
  • Ada (nimetty ohjelmointipioneerin Ada Lovelacen mukaan) on massiivinen kieli, joka on kehitetty 1970-luvun lopulla Yhdysvaltain puolustusministeriössä. Ada ei koskaan tullut muotiin sotalaitoksen ulkopuolella.
  • PROLOG (Programming Logic) on suosittu kieli tekoälyohjelmoinnissa. Kuten nimi antaa ymmärtää, PROLOG on suunniteltu tosiasioiden välisten loogisten suhteiden käsittelyyn.
  • LOGO on LISPin murre, joka on suunniteltu erityisesti lapsille.

Ohjelmointimenetelmiä

Ohjelmointikieli voi olla voimakas väline osaavissa käsissä. Väline ei kuitenkaan takaa laatua; parhailla ohjelmoijilla on erityiset tekniikat, joilla he saavat välineistään irti parhaan mahdollisen tuloksen. Tietokoneohjelmoinnin lyhyen historian aikana ovat tietojenkäsittelijät kehittäneet useita uusia menetelmiä, jotka ovat tehneet ohjelmoijista entistä tuottoisampia ja ohjelmista entistä luotettavampia.

Rakenteinen ohjelmointi

Tietojenkäsittclijät huomasivat 1960-luvun lopulla, että useimmissa FORTRANja BASIC -ohjelmissa oli viljalti GoTo-lauseita , joilla ohjelman kontrolli siirrettiin paikasta toiseen ohjelman sisällä. (Muistatteko “Mene vankilaan. Mene suoraan vankilaan kulkematta lähtöruudun kautta.”?) GoTo-lauseita sisältävän ohjelman looginen rakenne muistuttaa lähinnä suurta läjää keitettyä spagettia. Mitä suurempi ohjelma, sitä suurempi looginen labyrintti ja sitä suurempi mahdollisuus virheellisyyksiin. Jokainen ohjelman haara saattaa olla irrallinen pätkä, joka jää ohjelmoijalta huomiotta.

Yrityksenä päästä eroon tällaisista ongelmista tietojenkäsittelijät kehittivät rakenteisen ohjelmoinnin.

Rakenteinen ohjelmointi (structured programming): Tekniikka, jolla ohjelmointiprosessi saadaan entistä helpommaksi ja tuottavammaksi.

Rakenteisessa ohjelmassa looginen eteneminen ei ole riippuvainen GoTo-lauseista. Sen sijaan ohjelma koostuu pienemmistä ohjelmista, joita kutsutaan moduuleiksi tai aliohjelmiksi (subprograrns), jotka voivat edelleen jakautua vielä pienemmiksi moduleiksi. Ohjelmoija yhdistää moduleja käyttämällä kolmea peruskontrollirakennetta: peräkkäisyys, toisto ja valinta. Ohjelma on rakenteeltaan hyvä, jos:

  1. se on koottu loogisesti yhteenkuuluvista moduleista
  2. modulit on järjestetty hierarkkisesti
  3. se on selkeä ja luettava.

Pascal ja Ada suunniteltiin rohkaisemaan rakenteelliseen ohjelmointiin ja luopumaan “spagettikoodista”. Näiden kielten menestys yllytti tietojenkäsittelijät kehittämään BASICista ja FORTRANista versiot, jotka johtivat rakenteiseen ohjelmointiin.

Olio-ohjelmointi

Rakenteinen ohjelmointi oli suuri edistysaskel ohjelmoijille; se mahdollisti entistä parempien ja luotettavampien ohjelmien tuottamisen aiempaa lyhyemmässä ajassa. Rakenteinen ohjelmointi ei kuitenkaan ole viimeinen sana ohjelmoinnissa; nykyisin olio-ohjelmointi on kiinnittänyt ohjelmointimaailman mielenkiinnon.

Olio-ohjelmointi (object-oriented programming, OOP):
Ohjelmointitekniikka, jonka tuloksena syntyvässä ohjelmassa on olioita, joilla on ominaisuuksia ja menetelmiä.

Olio-ohjelmointia käytettiin ensimmäisen kerran 1970-luvulla, varsinkin kielessä nimeltä Smalltalk. Olio-ohjelmoinnissa ohjelma ei ole ainoastaan kokoelma askel kerrallaan suoritettavia käskyjä, vaan se on kokoelma olioita.

Olio (object):
Oliot sisältävät sekä tietoa että käskyjä ja ne pystyvät lähettämään ja vastaanottamaan viestejä.

Esimerkiksi multimediaohjelmassa oleva nappula voi olla olio, joka sisältää sekä fyysisen kuvauksen nappulan ulkoasusta että skriptin, kuvauksen siitä, mitä tehdä, kun käyttöjärjestelmä lähettää tiedon hiiren klikkauksesta. Tätä nappulaoliota voidaan mainiosti käyttää myös muissa ohjelmissa, koska sen mukana kulkee kaikki nappulan toimintaan tarvittavat tiedot.

Oliotekniikkaa käytettäessä ohjelmoijat voivat rakentaa ohjelmia etukäteen valmistetuista olioista samaan tapaan kuin rakennusmiehet rakentavat taloja valmiista seinäelementeistä. Ohjelmoijat voivat myös helposti lainata osia muista ohjelmista, jolloin heidän ei tarvitse aina aloittaa aivan alusta uutta ohjelmaa tehdessään. Oliota, joka lajittelee osoitteita aakkosjärjestykseen postilistatietokannassa, voidaan käyttää myös ohjelmassa, joka lajittelee hotellivarauksia aakkosiin.

Luokka (class):
Luokka on olio-ohjelmoinnissa olion ominaisuuksien, menetelmien ja attribuuttien (ominaisuuksien), määritelmä, johon on koteloitu sekä olion tiedot että toiminta.

Luokan ilmentymän rakenteen määräävät tietokentät (attribuutit) voivat olla olioita, jolloin puhutaan koosteoliosta.Koosteolioon sisältyvää toista oliota kutsutaan luokan osaolioksi. Luokan perimät ja luokassa määritellyt ominaisuudet määräävät luokan ilmentymän toiminnan. Luokan menetelmää kutsuttaessa menetelmä saa, yleensä implisiittisenä parametrina, tiedon menetelmän kohdeoliosta eli oliosta jonka menetelmää kutsutaan. Tätä menetelmän tietoa kohdeoliosta kutsutaan itse viitteeksi. Tietoabstraktion saavuttamiseksi luokan määrittelyssä käytetään tiedon kätkentää. Ominaisuudet, joita luokan asiakkaan ei ole tarkoitus käyttää, määritellään joko yksityisiksi tai suojatuiksi. Yksityiset ja suojatut ominaisuudet ovat luokan asiakkaiden saavuttamattomissa. Ominaisuudet, joihin luokan asiakkaan on tarpeellista päästä käsiksi, määritellään julkisiksi.

Luokka voi olla toteutukseltaan joko abstrakti tai konkreetti. Abstrakti luokka sisältää ainakin yhden viivästetyn menetelmän. Menetelmä on viivästetty, jos menetelmästä on luokan kuvauksessa ainoastaan esittely, mutta toteutus on jätetty avoimeksi. Abstraktista luokasta ei voida luoda ilmentymiä, vaan luokkaa on tarkoitus käyttää periytymisessä yliluokkana. Konkreeteissa luokissa kaikki menetelmät ovat toteutettuja ja konkreeteista luokista voidaan luoda ilmentymiä.

Luokka on geneerinen, jos luokan kuvauksessa esiintyy argumenttina ainakin yksi parametroitu tyyppi. Korvaamalla geneerisen luokan parametroidut tyypit todellisilla tyypeillä voidaan geneerisestä luokasta luoda todellisia luokkia. Geneerisyys voi olla syntaktista, jolloin geneerisyys saavutetaan makroja vastaavalla tekniikalla eli kääntäjä generoi jokaiselle todelliselle luokalle oman koodinsa. Toinen geneerisyyden muoto on semanttinen geneerisyys, jossa geneerisen luokan menetelmät voidaan kääntää jo geneerisinä.

Smalltalk on edelleen laajasti käytetty olio-ohjelmoinnissa, joskin useissa muissakin kielissä löytyy olio-ominaisuuksia. C++ on suosittu C:n murre, joka tukee olio-ohjelmointia. C++ ei sisällä visuaalisia olioita, kuten ikoneja eli kuvakkeita. Päällepäin se näyttää samalta kuin muutkin ohjelmointikielet. Kielen olioluonne salliikin ohjelmoijan kirjoittaa ohjelmia, jotka perustuvat loogisiin olioihin eikä niinkään aliohjelmiin.

Oliotyökalut ja -tekniikat yleistyvät tietokannoissa, multimedian tekovälineissä ja muissa ohjelmistoympäristöissä. Olio-ohjelmointi sopii erityisesti runsasta worovailavtteisuutta vaativiin ohjelmiin (kuten graafiset käyttöjärjestelmät ja pelit) ja ohjelmiin, jotka matkivat tai kuvastavat jotain todellisen maailman dynaamista osaa (kuten simulaatiot tai lennonvalvontajärjestelmät). Monet asiantuntijat uskovat, että olio-ohjelmointi on tuulahdus tulevaisuudesta.

Jos seuraavat kolme asiaa toteutuu ohjelmointikielen taholta, voimme puhua olioohjelmointi -kielestä:

Kapselointi ja Tiedon kätkeminen:
Kapselointi tarkoittaa että jokin, esimerkiksi vastus on sellaisenaan käyttökelpoinen komponentti. Tiedon kätkennällä tarkoitetaan sitä, että kapseloitua osaa voidaan käyttää tuntematta sen sisäistä toimintaa.

Kun insinööri tarvitsee laitteessaan vastusta, hän ei suinkaan rakenna sellaista itse. Oikeanlainen komponentti haetaan varastosta ja se tunnistetaan värikoodeista. Vastaus on insinöörin näkökulmasta ”musta laatikko”: häntä ei kiinnosta mitä vastauksen sisällä tapahtuu tai miten se toimii. Tärkeintä on että komponentti vastaa tarpeita. Kapselointi tarkoittaa, että jokin, esimerkiksi vastus, on sellaisenaan käyttökelpoinen komponentti. Tiedon kätkennällä taas tarkoitetaan sitä, että kapseloitua osaa voidaan käyttää tuntematta sen sisäistä toimintaa.

Kaikki vastuksen ominaisuudet on kapseloitu vastuksen sisään. Ei ole tarpeen tietää mitä vastuksen sisällä oikein tapahtuu tai miten se toimii. Kaikki vastuksen ”tiedot” on kätketty vastuksen sisään.

C++, Java sekä Perl -kielissä kapselointi ja tiedon kätkentä tehdään määrittelemällä omia tietotyyppejä, luokkia, jota nimitystä tästä eteenpäin käytämme. Hyvin toteutettu luokka toteuttaa kapseloinnin perusajatuksen eli sitä voidaan käyttää ohjelmassa sellaisenaan. Luokan hyväksikäyttäjät tarvitsevat vain luokan käyttöohjeet. Luokan käyttäjien näkökulmasta kuvaus luokan sisäisestä toiminnasta on tarpeeton.

Periytyminen jauudelleenkäyttö:
C++,Java sekä Perl mahdollistavat uudelleenkäytön periyttämisellä. Uutta luokkaa ohjelmoitaessa voidaan sanoa, että luokka toimii aivan kuten jokin jo olemassa oleva luokka, mutta tämä ja tämä asia toimii hieman eri tavalla tai tämä ja tämä on uusi ominaisuus.

Kun autotehtaan insinööreille annetaan tehtäväksi rakentaa uusi automalli, heillä on valittavanaan kaksi toimintatapaa: rakennetaan auto aivan alusta alkaen tai ryhdytään parantelemaan jo olemassa olevaa mallia. Ehkäpä tehtaan lippulaiva on jo lähestulkoon täydellinen, joten lisäämällä siihen turboahtimen ja jotain muuta uutta päästään huomattavasti helpommalla. C++, Java sekä Perl mahdollistavat uudelleenkäytön periyttämisellä. Uutta luokkaa ohjelmoitaessa voidaan sanoa, että luokka toimii aivan kuten jokin jo olemassa oleva luokka, mutta tämä ja tämä asia toimii hieman eri tavalla tai tämä ja tämä asia on uusi ominaisuus. Uuden luokan sanotaan periytyvän hyödynnetystä luokasta. Toinen ilmaisutapa on sanoa, että alaluokka on johdettu toisesta luokasta.

Polymorfismi
Tehtävien uudelleenmäärittelyä toimii esim. Java, Perl sekä C++ ohjelmointikielissä. Olio-ohjelmoinnissa keskeisiä osia ovat oliot. Melkein mikä tahansa asia voi olla olio. Yhteistä niille on, että oliolla

Ohjelmointia kuvilla

Monille ihmisille on helpompaa työskennellä kuvilla sanojen sijasta. Visuaalisilla ohjelmointivälineillä ohjelmoija pystyy rakentamaan suuren osan ohjelmastaan piirtämällä kuvia ja osoittamalla näytöllä olevia olioita. Näin perinteinen aikaavievä koodaus vähenee huomattavasti. Apple’n HyperCard oli luultavasti ensimmäinen suosittu esimerkki visuaalisesta ohjelmointiympäristöstä. HyperCard’iin sisältyy ohjelmointikieli nimeltään HyperTalk, mutta HyperCard-ohjelmoijan ei tarvitse käyttää sitä ohjelmiaan luodessa. HyperCard’in, Visual BASICin, ToolBook’in ja NextStep’in kaltaiset välineet tuovat ohjelmoinnin myös ei-ohjelmoijien ulottuville. Nykyiset visuaaliset ohjelmointivälineet eivät ole täysin muuttaneet ohjelmointia visuaaliseksi prosessiksi,mutta ne antavat viitteitä siitä, että se on mahdollista.

Kieliä käyttäjille

BASICin ja C++:n kaltaiset kielet lisäävät edelleen suosiotaan ohjelmoijien ja kouluttajien keskuudessa, koska ne ovat helpompia käyttää ja tehokkaampia kuin edeltäjänsä. Tästä huolimatta useimmille tietokoneen käyttäjille nämä kielet ovat liikaa aikaavieviä ja vaativat liikaa opiskelua ollakseen kiinnostavia. Onneksi joitakin kieliä on suunniteltu täyttämään tietokoneen käyttäjien vaatimattomampia tarpeita.

Makrokielet

Monet käyttäjille suunnatut kielet on tarkoitettu luomaan makroja, ohjelmia, jotka automatisoivat toistuvia tehtäviä. Käyttäjille suunnattuja makrokieliä tai skriptikieliä on rakennettu osaksi useita sovelluksia ja käyttöjärjestelmiä. Käyttämällä makrokieltä taulukkolaskimen käyttäjä pystyy rakentamaan ohjelman, makron Joka automaattisesti tekee kuukauden loppuraportin hakemalla tarvittavat tiedot muista taulukkopohjista, lisää arvot uuteen taulukkopohjaan ja laskee tulokset käyttäen edellisten kuukausien Iaskukaavoja. Käyttöjärjestelmän skriptikielen avulla voisi käyttäjä esimerkiksi automatisoida varmuuskopioiden tekemisen vaikkapa viimeisten seitsemän päivän ajalta.

Joissakin makrokielissä makron käskyt pitää suunnitella ja toteuttaa käsin, aivan kuten kirjoittaisit BASIC-ohjelmaa. Toinen tapa tehdä makroja on sellainen, jossa makrontekoohjelma “nauhoittaa” käyttäjän toimia tämän suorittaessa komentoja ja kääntää nämä automaattisesti makroksi. Tämän jälkeenkäyttäjä voi tutkia ja tarpeen mukaan muuttaa makroa toimimaan niin kuin sen pitää.

Neljännen sukupolven kielet

Monien asiantuntijoiden mielestä kielet ovat kehittyneet neljän sukupolven kautta: konekieli, assembly-kieli, korkean tason kieli ja neljännen sukupolven kieli, jota kutsutaan joskus myös nimellä 4GL (Fourt-Generation Language). Jokaisen sukupolven kielet ovat helpompia käyttää ja lähempänä luonnollista kieltä kuin edeltäjänsä. Neljännen sukupolven kielten koostumuksesta ei olla yhtä mieltä, mutta seuraavia piirteitä on mainittu useimmin:

  • 4GL käyttää englanninkielen kaltaisia ilmaisuja ja lauseita käskyinä
  • 4GL ei ole proseduraalinen. Pascal, C ja BASIC ovat proseduraalisiakieliä – välineitä, joilla rakennetaan aliohjelmia, jotka kertovat tietokoneelle, kuinka tehtävä suoritetaan. Ei -proseduraaliset kielet mahdollistavat käyttäjän keskittymisen siihen, mitä tehdään eikä kuinka tehdään.
  • 4GLlisää tuottavuutta. Koska 4GL pitää huolen useista ’kuinka-tehdään’-yksityiskohdista, ohjelmoijat saavat aikaan tuloksia kitjoittamalla muutaman rivin koodia muutaman sivun sijasta.

Eräs 4GL tyyppi on kyselykieli, joka mahdollistaa tietojen haun tietokannasta huolellisesti muotoiltujen, englanninkielen kaltaisten lauseiden avulla. Kyselykieli palvelee tietokannan käyttöliittymänä piilottaen tietokannan sotkut käyttäjältä. Esimerkiksi SQL (Structured Query Language) on standardikyselykieli, jota käytetään nykyisin useimmissa tietokantasovelluksissa. Kuten useimmat kyselykielet, SQL:n käyttäjän tulee tietää muutamia syntaksija logiikkasääntöjä. Kaikkiaan kyse(ykieli on helpompi hallita kuin FORTRAN tai COBOL.

Ohjelmistokomponentit

Viime aikainen kehitys ohjelmistoteollisuudessa saattaa pian tuottaa ohjelmia, jotka antavat tavalliselle käyttäjälle saman mahdin, joka on tähän asti ollut vain ohjelmoijien käytössä. Samalla saattaa pitkäaikainen suuntaus kohti pöhöttyneitä tietokonesovelluksia kääntyä toisin päin. PC:n lähes koko lyhyen historian aikana sovellusten koot ovat kasvaneet tasaisesti kehittäjien lisätessä yhä enemmän ominaisuuksia tuotteisiinsa. Vaikka yksittäinen käyttäjä ei tarvitse nykyaikaisen taulukkolaskimen likikään kaikkia piirteitä, on jokaisen ohjelmiston ostajan ostettava koko paketti. Monet nykyiset sovellukset ovat niin paisuneita ominaisuuksineen, että ne vievät koneesta valtavasti sekä muistia että kovalevytilaa.

Ohjelmistokomponentti työkalut saattavat kääntää megasovellussuuntauksen toisin päin, mahdollistamalla käyttäjien kasata pieniä räätälöityjä sovelluksia ohjelmistokomponenteista. Ohjelmistokomponenttiajatus ei ole aivan uusi; käyttäjät ovat pystyneet lisäämään räätälöityjä osia sovelluksiinsa jo vuosia. Esimerkiksi grafiikkapaketti nimeltään Kai’s Power Tools onkin vain kokoelma plug-in-moduleja, jotka tuovat lisäominaisuuksia muihin grafiikkaohjelmiin, kuten Photoshop ja Painter. Myös Netscape Navigator:iin on saatavilla kymmeniä laajennuksia. Tällainen räätälöinti on kuitenkin mahdollista vain, jos sovellus on suunniteltu sallimaan ne. Kaksi uutta järjestelmää OpenDoc (Apple, IBM ja Novell) ja OLE (Microsoft) tarjoavat standarditukea ohjelmistokomponenteille järjestelmäohjelmistotasolla.

Onnistuessaan nämä järjestelmät voivat muuttaa merkittävästi ohjelmistotetollisuutta. Sen sijaan, että joutuu ostamaan kaikki-paitsi-astiainpesuallas-tekstinkäsittelyohjelman, voi ostaa tekstinkäsittelykomponentteja oikeinkirjoituksen tarkistajan, muotoilijan omien tarpeidensa mukaan.Komponentit voidaan toimittaa joko Internetin välityksellä tai perinteisin menetelmin, joten tarvittaessa voi nopeasti lisätä puuttuvia piirteitä. Tällainen teese-itse-ohjelmistomalli on looginen jatko olio-ohjelmoinnista tasolle, jolla käyttäjät voivat koota omat sovelluksensa.

No Comments

Tietokoneen sielunelämä

komponentit

Tietokone koostuu erilaisista komponenteista

Kuten me kaikki tiedämme tietokone on perusolemukseltaan vain joukko sähköisiä laitteita ja laitteisiin kytkettyjä komponentteja. Ja kuten tiedämme se koostuu pääasiassa erilaisista väylistä, muistipiireistä, johtimista, piirilevyistä yms. Jotta tietokone alkaisi toimia käyttäjän haluamalla tavalla, tulee koneen toiminnalle määritellä ohjeita. Näitä ohjeita noudattaen tietokone toteuttaa käyttäjän haluamia tehtäviä. Ohjeet, joita kutsutaan ohjelmiksi (program), on tallennettu tietokoneen pysyvään muistiin (yleensä kiintolevylle), josta ne noudetaan aina tarvittaessa. Näin ohjelmoijan kannalta tietokone on periaatteessa vain joukko peräkkäisiä muistipaikkoja, joihin voidaan tallentaa jokin tieto. Yleisesti, kun ohjelmoija puhuu muistista, hän tarkoittaa sillä keskusmuistia eli RAM -muistia (Random Access Memory). Tämän jälkeen, kun data on syötetty muistiin varsinaisen työn hoitaa suoritin, jotta voidaan muuttaa näiden muistipaikkojen sisältöä tietokoneohjelman mukaan, eli siten kuin mitä me, ohjelmoijat, haluamme.

Kun ohjelmoija laatii ohjelmia, sitä kutsutaan ohjelmoinniksi (programming) ja ohjelmien koodaajaa ohjelmoijaksi (programmer). Ohjelman tekemiseen tarvitaan väline, jota kutsutaan ohjelmointikieleksi, kuten Visual Basic, C, C++, C#, PHP, Java tai Perl, (programming language). Ohjelmointikieli on joukko tarkkaan määriteltyjä ohjeita, joita yhdistelemällä voi toteuttaa hyvinkin vaativia tehtäviä, koulussamme on mahdollista opiskella joko Perl ?kieltä tai C++ -kieltä.

Erilaiset suorittimet, ja näin siis erilaiset tietokoneet, ymmärtämät erilaisia käskyjä. Kuitenkin käskyt ovat aina hyvin yksinkertaisia, esimerkiksi

  1. nollaa muistipaikka 100
  2. nollaa muistipaikka 1
  3. lisää muistipaikkaan 100 luku,jonka saat muistipaikasta 200 + muistipaikan 1 sisältö
  4. lisää muistipaikan 1 sisältöä yhdellä
  5. jos muistipaikan 1 sisältö ei ole viisi, palaa kohtaan 3

Tällainen ohjelma laskisi muistipaikkaan 100 muistipaikkojen 200..204 sisältöjen summan. Tätä kutsutaan konekieleksi.

Tietokoneen ohjelmointi konekielellä on aivan mahdollista. Kuitenkaan se ei ole kovinkaan nopeaa, ja ohjelman toiminnan ymmärtäminen on hankalaa. Siksi on kehitetty erilaisia korkeamman tason ohjelmointikieliä, joissa ohjeet voidaan antaa joidenkin englanninkielisten sanojen ja itse nimettyjen tunnusten avulla. Tällainen korkeamman tason ohjelmointikielellä toteutettu ohjelma täytyy ennen käyttöä kääntää ylempänä kuvattuun muotoon (eli kokekielelle), jotta se voidaan suorittaa tietokoneessa. Käännös voidaan joko tehdä kerralla koko ohjelmalle (tällöin käytetään kääntäjää) tai kääntää ja suorittaa rivi kerrallaan (jolloin käytetään tehtävään tulkkia). Ensin mainitussa tapauksessa puhutaan kääntämisestä, viimeksi mainittua kutsutaan tulkkaukseksi yhteys vieraan kielenkääntämiseen ja tulkkaamiseen on ilmeinen. Jokaisella prosessorityypillä on oma konekielensä.

No Comments

Algoritmin kuvaus tavat

Algoritmeja voidaan kuvata monin eri tavoin. Seuraavassa on esiteltynä muutama tapa kuvata algoritmi.

Puoliohjelma

Tavallisin sanallinen kuvauskieli on puoliohjelma (pseudokoodi). Se on eräänlainen välivaihe suomen kielellä (tai englannin kielellä) esitetyn toiminta ohjeen ja tietokoneohjelman välillä.

”Puoliohjelma on ohjelma, jonka kirjoitat oman kielesi ja tiettyjen ohjelmointikielistä riippumattomien määrämuotoisten ilmaisujen avulla.”

Puoliohjelmassa käytetään useimmiten englanninkielisiä sanoja, kuten IF, THEN, ELSE, WHILE, UNTIL, jne. tai vastaavia suomenkielisiä sanoja JOS, NIIN, MUUTEN, TOISTA, KUNNES jne.

Vuokaavio

Kaavion muotoisista kuvauskielistä ovat tavallisimpia ns. vuokaaviot ja rakenteiset lohkokaaviot. Vuokaaviossa käytetään ohjelman (tai sen osan) etenemisen kuvaamiseen erilaisia kaaviosymboleita. Tavallisimmat symbolit on koottu seuraavaan kuvaan.

Vuokaaviossa käytettävät symbolit

Vuokaaviossa käytettävät symbolit

Katsotaan seuraavaksi pientä yksinkertaista esimerkkiä vuokaavion käyttämisestä. Oletetaan, että olemme saaneet seuraavan yksinkertaisen tehtävän:

Kauppias antaa yli 250mk:n ostoksista 5%:n alennuksen ja yli 500mk:n ostoksista 8%:n alennuksen. Laadi ohjelma, joka tulostaa alennetun hinnan, kun syöttötietona annetaan ostosten hinta.

Jokainen tietokone ohjelma voidaan toteuttaa kolmen perusrakenteen avulla. Näiden perusrakenteiden avulla määrätään ohjelman suorituksen etenemisjärjestys. Nämä perusrakenteet ovat:

Peräkkäisrakenne
Tämä rakenne koostuu useasta peräkkäin suoritettavasta toiminnosta, jotka suoritetaan kirjoitusjärjestyksessä, ellei toisin määrätä.
Toistorakenne
Toimintosarjaa toistetaan, kunnes ehto tulee voimaan.
Valintarakenne
Tässä rakenteessa suoritetaan jompikumpi kahdesta toiminnosta (toimintasarjasta) sen mukaan, onko ennalta annettu ehto tosi vai epätosi.
rakenteet

Rakenteet esitettynä vuokaavion symboleilla.

No Comments