Suosituimmat ohjelmointikielet. Vuosien mittaan



Samankaltaiset tiedostot
Visual Basic -sovelluskehitin Juha Vitikka

4. Lausekielinen ohjelmointi 4.1

C++ Ohjelmoijan käsikirja. Johdanto

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

1. Olio-ohjelmointi 1.1

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen

5. HelloWorld-ohjelma 5.1

5. HelloWorld-ohjelma 5.1

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

11/20: Konepelti auki

Ohjelmointi 1 / syksy /20: IDE

Microsoft Visual J++ ohjelmointiympäristö

WWW-ohjelmoinnin kokonaisuus. WWW-OHJELMOINTI 1 Merkkauskielet. Merkkauskielten idea. Merkkauskielet (markup languages) Merkkauskielten merkitys

1 Tehtävän kuvaus ja analysointi

Järjestelmäarkkitehtuuri (TK081702) AJAX, Asynchronous JavaScript And XML. AJAX, Asynchronous JavaScript And XML

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Ohjelmistojen mallintaminen, mallintaminen ja UML

TIE Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely

Hajautettujen sovellusten muodostamistekniikat, TKO_2014 Johdatus kurssiin

Tähtitieteen käytännön menetelmiä Kevät 2009

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } }

J2EE vs..net Olli Sakari

Ohjelmointi 1. Kumppanit

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

PIKAOPAS NOKIA PC SUITE Copyright Nokia Oyj Kaikki oikeudet pidätetään

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Tietojenkäsittelyn perusteet 2. Lisää käyttöjärjestelmistä

4. Lausekielinen ohjelmointi 4.1

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä

Järjestelmäarkkitehtuuri (TK081702) Avoimet web-rajapinnat

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

VHDL/Verilog/SystemC. Jukka Jokelainen

Ohjelmistojen mallintaminen

4. Luokan testaus ja käyttö olion kautta 4.1

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Ohjelmointi 2 / 2010 Välikoe / 26.3

Pedacode Pikaopas. Web Service asiakasohjelman luominen

Johdatus ohjelmointiin

Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Anne Benson. Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen:

Automaattinen yksikkötestaus

- Kuvan osoittamalla tavalla klikkaa kohtaa Tallenna Tiedosto. - Esimerkissämme Firefox selaimessa latauspalkki näyttää tältä

Tekstinkäsittelyn jatko KSAO Liiketalous 1

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

812341A Olio-ohjelmointi, I Johdanto

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

Javan perusteita. Janne Käki

.NET ja C# Virtuaalikone. Common Language Infrastructure (CLI) Periaate. Etuja. Haittoja. Mikä on CLI. CLI standardin merkitys (CLS, Ecma)

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. II Johdanto olio-ohjelmointiin

18. Abstraktit tietotyypit 18.1

Ohjelmistotekniikan menetelmät, Ohjelmistotuotannon työkaluista

Java kahdessa tunnissa. Jyry Suvilehto

Kieliversiointityökalu Java-ohjelmistoon. Ohje

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1

7/20: Paketti kasassa ensimmäistä kertaa

Dart. Ryhmä 38. Ville Tahvanainen. Juha Häkli

TK Palvelinympäristö

Ohjeet asiakirjan lisäämiseen arkistoon

8. Näppäimistöltä lukeminen 8.1

Pedacode Pikaopas. Web-sovelluksen luominen

Ehto- ja toistolauseet

Sulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä.

Tuplaturvan tilaus ja asennusohje

Nokia Lifeblog 2.5 Nokia N76-1

Teknillinen korkeakoulu T Tietojenkäsittelyopin ohjelmatyö. Testitapaukset - Koordinaattieditori

13/20: Kierrätys kannattaa koodaamisessakin

Ohjelmoinnin jatkokurssi, kurssikoe

6 XML-työkalut 1. 6 XML-työkalut

A TIETORAKENTEET JA ALGORITMIT

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

Älysopimusten kehittäminen. Sopimus suuntautunut ohjelmointi

WINDOWS 10 -kurssi.

Oliotietokannat. Nääsvillen Oliopäivät Pekka Kähkipuro Kehitysjohtaja, FT

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

2007 Nokia. Kaikki oikeudet pidätetään. Nokia, Nokia Connecting People, Nseries ja N77 ovat Nokia Oyj:n tavaramerkkejä tai rekisteröityjä

GIS-automatisointi ja ohjelmointi/skriptaus. Harri Antikainen

Datatähti alkukilpailu

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14

Ohjelmistojen suunnittelu

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Pakkauksen kokoaminen

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

TIE Ohjelmistojen suunnittelu

Sisältö. 22. Taulukot. Yleistä. Yleistä

L models. Käyttöohje. Ryhmä Rajoitteiset

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++

Ohjeita Siemens Step7, Omron CX Programmer käyttöön

Java-kielen perusteet

Pertti Pennanen License 1 (7) EDUPOLI ICTPro

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

CUDA. Moniydinohjelmointi Mikko Honkonen

Transkriptio:

Luku- ja kirjoitustaitoa uudelle vuosituhannelle Suosituimmat ohjelmointikielet Ohjelmointi on käsityöammatti. Käsien lisäksi ohjelmointi edellyttää loogista ajattelua sekä oikeita työvälineitä. Minkä ohjelmointikielen osaamiseen kannattaa panostaa juuri nyt? Teksti: Tapani Lahti Piirrokset: Heikki Vanhatalo Vuosien mittaan markkinoille on tullut monenlaisia työkaluja, joiden on kehuttu tekevän ohjelmoinnista yhtä helppoa kuin puistossa kävelystä. Jotakin niistä on silti aina jäänyt puuttumaan. Ohjelmakoodin toimintalogiikan hahmottamiseen tarvitaan algoritmisen ajattelun taitoa. Nykyään www-sivujen ulkoasun määrittelevän koodin kirjoittamista kutsutaan html-ohjelmoinniksi. Mutta vasta javascriptin tai muun vastaavan skriptikielen käyttö vaatii niitä taitoja, jotka erottavat tosiohjelmoijan tavallisesta kotisivun viilaajasta. Tietokantojen yhteydessä puhutaan sql-ohjelmoinnista, ja tällöin tilanne on jo astetta monimutkaisempi. Itse sql-kielen standardoitu ydin määrittelee kaksiulotteisiin taulurakenteisiin 42

o h j e l m o i n t i k i e l e t tallennetun datan käsittelyssä tarvittavat operaatiot, mutta kaikissa suosituimmissa palvelinjärjestelmissä sitä on laajennettu valmistajakohtaisilla ohjelmallisilla rakenteilla. Työn alla olevaan uuteen SQL3-standardiin nämäkin laajennukset ovat tulossa. Kytkimistä olioihin Ohjelmointitekniikat ovat kehittyneet systemaattisesti kohti korkeampaa abstraktiotasoa. Alkuaikoina ohjelmat oli syötettävä koneisiin työläästi askel askeleelta käyttäen laitteiden omia alimman tason käskyjä eli niin sanottua konekieltä. Nykyään lähimpänä tätä laitteistonläheistä tasoa ovat prosessorikohtaiset assembler-kielet, joita edelleen käytetään varsinkin sulautettujen ohjelmistojen kehitystyössä. Kääntäjätekniikan kehittyminen mahdollisti ohjelmallisten rakenteiden määrittelyn yleisemmällä tasolla, mitkä käännettiin suoritusta varten tai tulkittiin suoraan ajon aikana konekielisiksi käskyiksi. Näin syntynyt ohjelmakoodi oli luettavampaa ja helpommin ymmärrettävää kuin konekielinen koodi. Silti lopputulos saattoi olla vaikeaselkoista spagettikoodia. Yksi syyllinen vaikeasti hahmotettavien ohjelmarakenteiden syntyyn oli hyppykomento (gotolause): sen kohdalla ohjelman suoritus siirtyi uuteen paikkaan toisaalla koodissa. Hyppykomennot ovat prosessoritasolla luontevia operaatioita, mutta ihmiselle vaikeita hahmottaa. Muutaman hypyn jälkeen käsitys lähtöpisteestä alkaa hämärtyä. Ratkaisuksi ohjelmien parempaan jäsentelyyn vakiintui rakenteinen ohjelmointi, jonka johdosta hyppykomennot joutuivat boikottiin. Ne korvattiin ehto- ja toistorakenteiden alaisilla ohjelmalohkoilla, joiden avulla ohjelmien toimintalogiikka oli mahdollista hahmottaa hierarkkisena kokonaisuutena. Rakenteisen ohjelmoinnin valtakausi jatkuu edelleen, mutta tällä vuosikymmenellä sen rinnalle on noussut uusi suuntaus, olioohjelmointi. Oudosta nimestään huolimatta se on osoittautunut oivaksi tavaksi jäsentää varsinkin moderneissa graafisissa käyttöliittymissä tarvittavia ohjelmallisia rakenteita. Olioluokka maallikoille Olio-ohjelmoinnin tärkein ero rakenteiseen ohjelmointiin on siinä, että se yhdistää olioluokan käsitteen avulla toisiinsa datan ja sen käsittelyssä tarvittavat operaatiot. Olioluokat ovat lisäksi rakenteita, jotka sopivasti nimettyinä mahdollistavat keskustelun maallikoidenkin kanssa. Oliomallissa esiintyviä luokkia saattavat olla esimerkiksi asiakas, tilaus, tuote ja varasto, joilla on suora vastine reaalimaailmassa. Viimeisin muotitrendi ohjelmistotekniikan saralla on komponenttiohjelmointi. Se on monessa suhteessa oliotekniikan kaltaista, mutta tavoitteena on viedä ohjelmistojen osien kierrätys uudelle tasolle. Komponenttiohjelmoinnissa ei parhaimmillaan tarvitse kirjoittaa ensimmäistäkään ohjelmariviä, jos komponenttien konfigurointi ja kytkeminen toisiinsa voidaan määritellä suoraan graafisten työkalujen avulla. Vain harva kieli menestyy Ohjelmointikieliä on tullut ja mennyt. Aina menestys ei ole ollut kiinni niinkään kielen piirteistä, vaan siitä, kuinka paljon tukea kieli on saanut ohjelmistotaloilta ja kuinka hyvät kehitystyökalut ovat olleet käytettävissä. Karu tosiasia on, että ohjelmistotyökaluja myydään aina vain murto-osa verrattuna niillä tehtyihin loppukäyttäjän sovelluksiin, esimerkiksi tekstinkäsittely- ja taulukkolaskentaohjelmiin. Niinpä tietyn kielen suosio nimenomaan pc-maailmassa ratkaisee paljolti sen, saako kieli taakseen riittävästi kehittäjiä säilyäkseen hengissä. Jos kielen käyttäjiä on liian vähän, kääntäjien ja muiden kieltä tukevien ohjelmointityökalujen kehitystyö on kannattamatonta puuhaa ja hiipuu ennemmin tai myöhemmin. Tällä hetkellä ohjelmistomarkkinoilla on vain muutama menestystarina. C-kieli ja etenkin sen pohjalta kehitetty c++ -kieli ovat suosionsa huipulla varsinkin kun jälkimmäinen on pitkän puurtamisen jälkeen saatu standardoitua. Samalta pohjalta ponnistaa myös uusin tulokas, Sun-yhtiön suojissa kehitelty java-kieli, joka internethuuman siivellä on onnistunut luomaan ympärilleen ennennäkemättömän julkisuuden paljolti pelkillä tulevaisuuden lupauksilla. Näiden kolmen siirrettävän eli alustasta riippumattoman kielen ohella windows-ympäristöön kirjoitetaan koodia kahdella windows-sidonnaisella kielellä, Delphillä ja Visual Basicilla. Microsoft on onnistunut luomaan Bill Gatesin suosikista, basic-kielestä, yhden modernin komponenttiohjelmoinnin suosituimmista työkaluista. Borland-yhtiön Delphi-sovelluskehitin puolestaan kätkee sisäänsä Object Pascal -kielen, joka Visual Basicin tavoin on kulkenut omia teitään pitkän kehityskaaren ajan. Työkalut ovat oleellinen osa kieltä Nykyään pelkkä ohjelmointikieli, olipa se kuinka hyvä tahansa, ei yksinään riitä menestykseen. Tuottavan ohjelmakoodin kehityksen perusedellytys on integroitu kehitysympäristö eli IDE (Integrated Development Environment), jonka alaisuudessa koodin muokkaus ja sen rakenteen tarkastelu, debuggaus ja jopa käyttöliittymän visuaalinen suunnittelu tehdään keskitetysti. Kehitysympäristöt ovat tällä vuosikymmenellä parantuneet huimasti. Yksinkertaisista asciieditoreista on siirrytty yhä älykkäämpiin, ohjelmakoodin rakennetta analysoiviin ja jäsentäviin toimintoihin. Syntaksin värikoodausta ovat seuranneet editorit, jotka tuntevat editoitavan funktion tai olioluokan rakenteen ja osaavat tuoda tarjolle luettelon mahdollisista lisäyksistä. Vielä editorit eivät sentään pakota ohjelmoijaa kirjoittamaan virheetöntä koodia, mutta ehkä sekin päivä pian koittaa. Onko java viimeinen uusi ohjelmointikieli? Ohjelmointityökalujen seuraava kehitysaskel saattaa myös olla askel poispäin itse ohjelmointikielistä kohti yleisemmän tason mallinnusvälineitä. Oliomaailmassa tällä hetkellä kasvavaa suosiota nauttiva UML-kieli (Unified Modeling Language) on otettu käyttöön monissa suunnittelutyökaluissa, joihin on myös kytketty ohjelmakoodin generointimahdollisuus. Vaikka koodin täydellinen automaattinen generointi suoraan suunnittelumallista on toistaiseksi jäänyt toteutumattomaksi haaveeksi, ajatuksena se on houkutteleva. Niinpä uusia yrittäjiä löytyy eri muodoissa vähän väliä, ja epäilemättä jossakin vaiheessa palaset loksahtavat kohdalleen. Ohjelmointikielten ominaisuudet Kieli C C++ Java Object Pascal (Delphi) Visual Basic Suorituskyky erinomainen hyvä huono hyvä tyydyttävä Siirrettävyys erinomainen hyvä hyvä huono huono Suoritustapa käännetty käännetty välikoodi/käännetty käännetty tulkittu/käännetty Kehitystyökalujen laatu hyvä hyvä tyydyttävä erinomainen erinomainen Oppimiskynnys aloittelijalle korkea korkea korkeahko matalahko matala Tuki olio-ohjelmoinnille puuttuu hyvä hyvä hyvä puutteellinen Tuki komponenttiohjelmoinnille huono tyydyttävä hyvä hyvä hyvä Käyttöympäristöt kaupalliset sovellukset, kaupalliset sovellukset, internet-sovellukset, räätälöidyt sovellukset räätälöidyt sovellukset käyttöjärjestelmät, käyttöjärjestelmät palvelinkomponentit sulautetut järjestelmät Suosio laskussa vakaa nousussa vakaa nousussa Ohjelmoitavan sovelluksen tai komponentin käyttöympäristö ja suorituskykyvaatimukset ratkaisevat valittavan ohjelmointikielen. 43

C ja c++ ammattilaisille Cja c++ ovat kaksi kieltä, joiden ominaisuuksista kukaan ei enää jaksa tehdä suurta numeroa, mutta silti niitä käytetään kaikkialla. Molemmat kielet ovat saaneet alkunsa AT&T-yhtiön Belllaboratoriossa tehdyn kehitystyön tuloksena. C syntyi Brian Kernighanin ja Dennis Ritchien aivoituksista 1970-luvulla, c++ puolestaan Bjarne Stroustrupin etsiessä vuosikymmentä myöhemmin parempaa tapaa toteuttaa simuloinnissa tarvittavia oliorakenteita. C ja c++ ovat ohjelmointikielten joukossa tehotyökaluja, joiden avulla voidaan koodata mitä tahansa käyttöjärjestelmistä alkaen. C-kielellä ja unix-käyttöjärjestelmällä on historiallinen kohtalonyhteys, jonka kunniakkaita perinteitä nykyinen Linux-buumi entisestään korostaa. Molemmat kielet on nykyään stardardoitu, joten käytettävissä on valmistajista riippumaton keino arvioida kielten piirteitä. Sekä c että c++ on suunniteltu sillä periaatteella, että ohjelmoija tietää mitä tekee. Valitettavasti tämä ei läheskään aina pidä paikkaansa, ja tulokset näkyvät nykyisillä ohjelmistomarkkinoilla. Tyypillisiä c/c++ -sovellusten ongelmia ovat ajon aikana varatun dynaamisen muistin hallintaan liittyvät ongelmat, joita on kaksi päätyyppiä. Sovellukset voivat kaatua tai käyttäytyä muutoin kummallisesti osoitinmuuttujien viitatessa muistiosoitteisiin, jotka on unohdettu alustaa. Toinen ongelmatyyppi on vapauttamatta jääneet suorituksen aikana varatut muistialueet, jotka jäävät rasittamaan keskusmuistia ja muiden sovellusten toimintaa. Moderneissa käyttöjärjestelmissä sovelluksen pysäytys myös vapauttaa sen käyttämät muistialueet. Entä jos sovellusta on tarkoitus ajaa keskeytyksettä jopa vuosikausia? Käyttöjärjestelmän ytimessä olevat muistinhallintavirheet saattavat hiljalleen hyydyttää koko järjestelmän, ja vasta uudelleenkäynnistys korjaa tilanteen. C/c++ -syntaksissa on monia kompastuskohtia aloittelijoille. Isot ja pienet kirjaimet eivät ole samanarvoisia, ja datavektoreissa ja taulukoissa käytettävät indeksit alkavat ykkösen sijasta nollasta ja päättyvät vastaavasti ennen aikojaan. Siten esimerkiksi kymmenen alkion kokoisen taulukon viimeisen alkion indeksi on yhdeksän. Myös operaattoreissa on ongelmallisia tapauksia: esimerkiksi sijoitusoperaattori (=) on helppo sekoittaa vertailuoperaattoriin (==). C-koodi on virhealtis C++ -kieli paisui standardointiprosessin aikana melkoisesti, ja nykyään kieli kaikkine piirteineen onkin aikamoinen mammutti. Harva ohjelmoija käyttää työssään kaikkia kielen standardoituja piirteitä, vaan usein toimeen tulee huomattavan pienellä rakenteiden osajoukolla. Pahimmin standardin laajuudesta kärsivät c++ -kielen kääntäjien valmistajat, joiden on standardin mukaan tuettava periaatteessa kielen kaikkia mahdollisia rakenteita. Kääntäjistä tulee tällöin isoja ja monimutkaisia, mikä lisää myös virhemahdollisuuksia. C ja c++ ovat kieliä, joilla taitava ohjelmoija voi tehdä kaiken tarvitsemansa koodin. Vastapainona tarvitaan järjestelmällistä asennetta ja huolellisuutta, sillä kääntäjän hyväksymä koodi saattaa edelleen sisältää virheellisiä rakenteita. Parhaimmillaan c ja c++ ovatkin ammattimaisessa sovelluskehityksessä, jossa ohjelmoija elää kielen kanssa päivittäin. Tällöin vaaralliset rakenteet tulevat ajan mittaan tutuiksi ja niitä oppii varomaan. Satunnaisen harrastelijan sen sijaan on viisainta pysyä näistä kielistä kaukana. Vaikka c++ onkin standardoitu ja siten periaatteessa siirrettävä kieli, sen avulla rakennetut luokkakirjastot ja valmiin ohjelmarungon luovat sovelluskehikot (application frameworks) tekevät c++ -koodista usein tiettyyn ympäristöön ja jopa tiettyyn kehitystyökaluun sidottua. Siirrettävyyden ylläpito on mahdollista, mutta se on otettava huomioon jo suunnittelun alkuvaiheessa. Visual Basic ja Object Pascal (Delphi): windows-ohjelmia palikoista Microsoftin Visual Basic ja Borlandin Delphi kuuluvat niihin ohjelmointityökaluihin, jotka voisivat mainostaa itseään tunnuslauseella meissä kaikissa asuu pieni ohjelmoija. Niiden avulla nimittäin pääsee pisimmälle kirjoittamatta ensimmäistäkään riviä perinteistä koodia. Ne ovat samalla uuden komponenttiohjelmointikonseptin tarjoamien mahdollisuuksien parhaita testiympäristöjä. Molemmat työkalut ovat parhaimmillaan ohjelmien käyttöliittymien suunnittelussa. Painonapit, listat ja otsikkotekstit voi raahata ikkunaan oikealle paikalleen suoraan hiiren avulla, ja käyttöliitty- Ohjelmistojen suunnitteluun on jo käytettävissä monenlaisia paperin ja kynän korvaavia työkaluja. Toistaiseksi ohjelmakoodin täydellinen generointi suunnittelumallin pohjalta ei ole vielä yleistynyt. Kuvan suunnittelutyökalu on ohjelmoitu kokonaisuudessaan Visual Basicilla, joka kelpaa nykyään myös vaativiin ohjelmointitehtäviin. män toimivuutta pääsee testaamaan välittömästi. Sovelluskehityksen ideana on, että valtaosa toiminnallisuudesta saadaan aikaan Microsoft-sidonnaisen COM-arkkitehtuurin (Component Object Model) mukaisia ActiveX-laajennuspalikoita hyödyntämällä. ActiveX-komponenteissa voi olla sisäänrakennettuna monipuolisia käyttöliittymän määrittelyyn, tiedostojen ja tietokantojen käsittelyyn, internet-yhteyksiin ja laskennallisiin operaatioihin liittyviä toimintoja. Jos esimerkiksi sovelluksessa tarvitaan monipuolisen kalenterin toimintoja, sen saa käyttöön yksinkertaisesti raahaamalla kalenterikomponentin sovelluksen ikkunaan. Parhaimmillaan komponentit nopeuttavat sovelluskehitystä moninkertaisesti. Näilläkin työkaluilla on kuitenkin rajansa. Siinä vaiheessa, kun on tarve lisätä käyttöliittymän tueksi ohjelmallista toiminnallisuutta, jota ei komponenteissa ole valmiina, on edelleen palattava takaisin tekstieditorin käyttöön. Sovelluksen räätälöidyn toiminnallisen logiikan kirjoittamiseen nämä visuaaliset työkalut eivät tuo mitään uutta. Basic-kieli on alunperin mate- 44

o h j e l m o i n t i k i e l e t Lunastaako Java lupaukset? Java-kieli on aito internet-aikakauden tuote. Se on saanut osakseen enemmän mediajulkisuutta kuin yksikään ohjelmointikieli, vaikka kielen kehitys on vielä pahasti kesken ja lupaukset suurelta osin lunastamatta. Javan isä James Gosling kehitti uutta ohjelmointikieltä alunperin vuorovaikutteisten multimediaympäristöjen tarpeisiin, mutta www:n suosio johdatti javan uusille urille. Keskeinen javan piirre on, että se määrittelee itse oman suoritusympäristönsä eli niin sanotun java-virtuaalikoneen. Java-sovellusta pitäisikin pystyä ajamaan missä tahansa ympäristössä, johon määrityksen mukainen virtuaalikone on asennettu. Virtuaalikoneiden toteutuksissa on eri ympäristöissä vielä huomattavia eroja, ja myös toiminnallisuudessa on paljon puutteita. Niinpä javan alkuperäinen iskulause kirjoita kerran, aja kaikkialla onkin turhautuneiden kehittäjien piirissä muuntunut muotoon kirjoita kerran, testaa kaikkialla. Java-sovellukset käännetään siirrettäväksi tavukoodiksi, jota virtuaalikone sitten tulkitsee kohdekoneen tarjoamassa ajoympäristössä. Tavukoodin tulkinta on hitaampaa kuin aitojen käännettyjen sovellusten suoritus. Suorituskykyyn ja resurssivaatimuksiin liittyvät ongelmat ovatkin yhteensopivuuden ohella java-toteutusten suurimpia ongelmia tällä hetkellä. Periaatteessa java-sovelluksen tavukoodi voidaan kääntää kohdekoneessa aidoksi binäärikoodissa, mikä nopeuttaa ohjelmien suoritusta parhaimmillaan moninkertaisesti. Sun on muutoinkin luvannut javan suorituskykyongelmiin parannuksia. Roskat pois muistista Ohjelmointikielenä java on askel c-kielestä c++:n kautta aitoon olio-ohjelmointiin. Java-kielen syntaksi on tarkoituksella suunniteltu mahdollisimman pitkälle yhteensopivaksi c:n ja c++:n kanssa. Merkittävin ero on siinä, että javalla tehdyt sovellukset ovat aina aitoja luokkarakenteita käyttäviä oliosovelluksia, kun c++:ssa oliorakenteiden käyttö oli vielä optiona. Yhteensopivuuden vuoksi javaan on myös jäänyt piirteitä, joista olisi ehkä ollut parempi luopua. Javassakin ohjelmoijan on muistettava isojen ja pienten kirjainten erot, samoin taulukoiden indekseissä ja eräissä muissa rakenteissa on alunperin c:stä periytyviä rasitteita. Toisaalta java korjaa c:n ja c++:n pahimmat ongelmat. Javassa on automaattinen muistiroskien keruumekanismi, jonka ansiosta ajon aikana varattuja muistirakenteita ei tarvitse erikseen vapauttaa. Lisäksi kielen rakenteista on poistettu sekaannusta aiheuttavia piirteitä, esimerkiksi vertailuoperaattorin (==) ja sijoitusoperaattorin (=) sekoittaminen toisiinsa c-kielen tavoin ei ole enää mahdollista. Javassa on käytössä kaksitasoinen suojausmekanismi, jossa koodin tietoturvaa vaarantavia rakenteita tutkitaan sekä käännöksen että suorituksen aikana. Esimerkiksi selaimen ruutuun ladatut java-appletit eivät näe kohdekoneen kiintolevyjen sisältöä ja voivat ottaa yhteyden verkon yli vain siihen palvelimeen, jolta ne ladattiin. Näillä piirteillä pyritään estämään virusten ja erityyppisten tietoturvaongelmien pesiytyminen java-ympäristöihin. Kännykkää javalla Monissa eri ympäristöissä ajettavaksi tarkoitettu sovellus joutuu tekemään monenlaisia kompromisseja käyttöliittymän ominaisuuksien suhteen. Uusimmissa versioissa javan käyttöliittymäkehitys on lähtenyt kokonaan omaan suuntaansa, jossa ei edes yritetä matkia suoritusympäristön omaa luontaista käyttöliittymää. Niinpä java-sovellukset on jatkossa helppo tunnistaa erilaisesta käyttöliittymästä. Java etsii yhä paikkaansa. Haaveet kaikkiin tarkoituksiin sopivat yleisohjelmointikielestä eivät toistaiseksi ole toteutuneet, ja monet kunnianhimoiset java-kehitysprojektit on haudattu. Tällä hetkellä java on luontevimmillaan web-sivujen toiminnallisten laajennusten toteutuksessa sekä muissa heterogeeniseen ympäristöön kehitetyissä sovelluksissa. Itse java-kielestä on myös tullut suosittu ohjelmoinnin opetuskieli yliopistoissa ja korkeakouluissa. Jatkossa java laajentaa edelleen reviiriään. Enterprise Java- Beans -määrityksen mukaiset java-komponentit voivat sovelluspalvelimeen asennettuina huolehtia hajautettujen sovellusten liiketoimintalogiikan toiminnasta. Java-virtuaalikone on sovitettu myös Epoc-käyttöjärjestelmään, joten tulevaisuuden matkapuhelimiakin voi ohjelmoida javalla. matiikanopettajina toimineiden John Kemenyn ja Tom Kurtzin kehittämä helposti opittava ohjelmointikieli. Sillä oli keskeinen rooli myös Microsoftin alkuaikoina silloin, kun yhtiön keulakuvalla oli vielä aikaa kirjoittaa itse ohjelmakoodia. Visual Basic syntyi kuitenkin vasta, kun käyttöliittymäguru Alan Cooper toteutti näkemyksiään uudentyyppisestä sovelluskehitysympäristöstä. Delphin ytimessä puolestaan on käytössä se, mitä on jäljellä Borlandin Turbo Pascal -kielestä. Turbo Pascal kaupallisti menestyksekkäästi sveitsiläisen Niklaus Wirthin opetuskäyttöön suunnitteleman Pascal-kielen, johon oli toteutettu sen ajan ohjelmointikielten parhaat ominaisuudet. Myöhemmin Borland laajensi kieltä olio-ohjelmoinnissa tarvittavilla luokkarakenteilla, ja niin syntyi nykyisen Delphin käyttämä Object Pascal. Salamannopeaa testausta Keskeinen Delphin käyttöön vaikuttava ominaisuus on se, että vuosien kehityksen tuloksena Borlandin Pascal-kääntäjä on saatu salamannopeaksi. Tämän ansiosta sovellusta pääsee testaamaan lähes välittömästi ohjelmakoodin muokkauksen jälkeen, vaikka siinä välissä koodi käännetään aidoksi binäärikoodiksi. Visual Basicissa sama testausvaihe tehdään ajamalla ohjelmakoodia tulkatussa muodossa, ja käännös tehdään vasta myöhemmin. Ohjelmointikielinä Visual Basic ja Object Pascal eroavat toisistaan monessa merkittävässä suhteessa. Basicissa ei esimerkiksi tarvitse määritellä lainkaan käytettäviä muuttujia ennen käyttöä, mikä toisinaan saattaa johtaa vaikeasti löydettäviin ohjelmointivirheisiin. Jos esimerkiksi määrittelet ohjelmassa muuttujan nimeltä luku1 ja myöhemmin viittaat siihen vahingossa nimellä luku11, basic-tulkki kuvittelee, että olet määritellyt uuden muuttujan. Muuttujien datatyypit ovat basic-kielessä usein epämääräisiä, ja käytössä on monia erilaisia datatyyppejä tukeva variant-tyyppi. Object Pascal on sikäli aidompi ohjelmointikieli, että siinä kaikki muuttujat ja niiden datatyypit täytyy määritellä ennen käyttöä. Myös olio-ohjelmoinnin näkökulmasta Object Pascal on Visual Basicia oikeaoppisempi, sillä jälkimmäinen ei tue periytymisrakenteita. Molemmat kielet ovat miellyttäviä käyttää siksi, että isot ja pienet kirjaimet ovat samanarvoisia ja taulukkorakenteiden käsittely on intuitiivisempaa kuin c/c++:ssa. Parhaimmillaan basic on merkkijonotyyppisten muuttujien käsittelyssä. Kokonaisuutena Object Pascal on kuitenkin enemmän oikean ohjelmointikielen kaltainen. Molempien kielten suurin miinus on siinä, että ne elävät omassa maailmassaan ja niillä tehtyjen sovellusten siirrettävyys pois windows-ympäristöstä on käytännössä olematon. Lisäksi varsinkin Visual Basic sitoo käyttäjät jopa avointen web-ominaisuuksien toteutuksessa paljolti Microsoftin omiin työkaluihin, etenkin Internet Explorer -selaimeen. Rajoituksistaan huolimatta Visual Basic ja Delphi ovat heittäneet haasteen kilpailevien käyttöjärjestelmien sovelluskehitystyökaluille. Parhaimmillaan ne ovat tehtävissä, joissa toimivia tuloksia pitää saada nopeasti. Esimerkiksi asiakas-palvelin -sovelluksissa palvelinpään toiminnallisuus koodataan usein c++:n ja javan kaltaisilla kielillä, mutta asiakassovelluksen kehitys on VB:n ja Delphin valtakuntaa. 45

Tulevaisuus: Parempaa koodia nopeammin? Ohjelmistokehityksessä on perinteisesti eroteltu toisistaan suunnittelijan ja ohjelmoijan toimenkuvat. Näistä edellisen tehtävänä on ollut määritellä sovelluksen looginen rakenne ja tuottaa asiakirja, jonka pohjalta ohjelmoijat ovat sitten kirjoittaneet suoritettavan ohjelmakoodin. Suunnittelijat ovat saaneet yleensä huomattavasti korkeampaa palkkaa. Niinpä jokainen uratietoinen ohjelmoija on määrätietoisesti yrittänyt edetä urallaan ohjelmoinnista suunnittelutehtäviin tai projektipäälliköksi ja lopulta tietohallintoon kravattikaulaiseksi palaverimyyräksi, vaikka halu ohjelmakoodin kirjoittamiseen olisikin edelleen lähinnä sydäntä. Tuloksena on siis usein ollut se, että urallaan edetessään parhaat ohjelmoijat lopulta lopettavat ohjelmoinnin kokonaan, vaikka taitoa ja halua olisikin. Tilalle palkataan aloitteleva bittinikkari, joka aloittaa syklin jälleen alusta. Tämän kierteen katkaisemiseksi joissakin yrityksissä on kehitetty ohjelmoijille mahdollisuuksia edetä urallaan siten, että he saavat edelleen olla suorassa yhteydessä todellisen tuotannollisen ohjelmakoodin kanssa. Yrityksen johdolta tämä edellyttää ennakkoluulottomuutta ja ohjelmoinnin luonteen ymmärtämistä. Tässä mallissa parhaat ohjelmoijat saattavat erimerkiksi saada korkeampaa palkkaa kuin heidän esimiehensä. Hakkerikulttuurin painolasti Ohjelmistoalalla on edelleen jäljellä paljon merkkejä hakkerikulttuurista, jossa monenlaisten muille käsittämättömien kikkojen avulla toimivaksi saatu sovellus tuo tekijälleen meriittiä. Lisäksi on helppo tehdä itsensä nopeasti korvaamattomaksi jättämällä koodi kommentoimatta ja käyttämällä ohjelmointikielen vaikeimmin ymmärrettäviä rakenteita. Ohjelmissa olevat virheet ovat oma lukunsa ohjelmistoteollisuuden synkkää historiaa. Kehityksen kiivas tahti ei suinkaan ole parantanut tilannetta. Nykyään ohjelmistovirheet saattavat jäädä lopullisesti korjaamatta siksi, että uusi versio ilmestyy nopeasti markkinoille ja sisältää jälleen joukon uusia piirteitä ja uusia virheitä. Valmistaja pitää itsestään selvänä sitä, että käyttäjät päivittävät tuotteen uuteen versioon, jos ongelmia vanhan kanssa on ilmennyt. Kulut maksaa asiakas. Tälle tuotetyypille on oma nimensäkin, good-enough software eli tarpeeksi hyvät ohjelmat. Ideana on se, että ohjelman ei tarvitse olla täysin virheetön, vaan ainoastaan niin hyvä, että sen voi myydä asiakkaille. Samalla luodaan edellytykset loppumattomalle päivityskierteelle. Tätä ilmiötä on analysoinut muun muassa Edward Yourdon Rise & resurrection of the American programmer -kirjassaan. RAD: laatua liukuhihnalta? Tällä vuosikymmenellä ohjelmistosuunnittelijoiden työkalupakkiin on tarjottu termiä Rapid Application Development eli RAD. Sen ideana on pyrkiä mahdollisimman nopeasti toimintakuntoiseen sovellukseen eli prototyyppiin, jota sitten päästään testaamaan ja kehittämään edelleen. Jotta RAD-konseptilla olisi menestyksen mahdollisuuksia, ohjelmointityökalujen on tuettava nopeasti ajokuntoon saatavan sovelluksen kehitystä. Avainasemassa ovat tällöin Visual Basicin ja Delphin kaltaiset komponenttityökalut, joissa valtaosa toiminnallisuudesta voidaan ostaa suoraan kaupan hyllyltä. Vaikka RAD-konsepti ja komponenttiohjelmointi eivät yksin voi ratkaista kaikkia mahdollisia ohjelmointiongelmia, parhaimmillaan ne kuitenkin auttavat satunnaista ohjelmoijaa tuottamaan parempia sovelluksia vähemmällä työllä. C Sama tehtävä, viisi kieltä Esimerkkikoodissa lasketaan lukujen 0..100 neliöt ja tallennetaan ne myöhempää käyttöä varten käyttäen viiden eri ohjelmointikielen syntaksia. int tulos[101]; void laske() int i; /* lasketaan lukujen 0..100 neliöt */ for (i=0; i<101; i++) tulos[i] = i*i; C++ class Laskin int tulos[101]; Java class Laskin public static void laske( ) int i; tulos = new int[101]; // lasketaan lukujen 0..100 neliöt for (i=0; i<101; i++) tulos[i] = i*i; Object Pascal (Delphi) private int[] tulos; Visual Basic Dim tulos(100) As Integer Sub laske() lasketaan lukujen 0..100 neliöt For i = 0 To 100 tulos(i) = i * i Next i End Sub public: void laske(void); ; void Laskin::laske(void) // lasketaan lukujen 0..100 neliöt for (int i=0; i<101; i++) tulos[i] = i*i; unit Laskin; interface TLaskin = class(tobject) private tulos : array[0..100] of Integer; public procedure laske; end; implementation procedure TLaskin.laske; var i : Integer; begin (* lasketaan lukujen 0..100 neliöt *) for i:=0 to 100 do begin tulos[i] := i*i; end; end; 46

o h j e l m o i n t i k i e l e t W2@@@@@@@@@@@@@@@@@@@?gW2@@@@@@@@@@@@@@@@@)X?e?@@@@@@@@@@)X?e?@@@@@@@@@@@?@@@@@@@@@@@@@e?@@@@@@@@@@@ 7@@@@@@@0M?I4@@@@@@@@?f?W&@@@@@@@0M?I4@@@@@@@)Xe?@@@@@@@@@@@)Xe?@@@@@@@@@@@?@@@@@@@@@@@@5e?3@@@@@@@@@@ @@@@@@h?i'@@@@?fw&@@@@@@(mf?i'@@@@@@)x?f@@@@@@@@@)x?e?i'@@@@?f?i4@@@@@@@@?e?n@@@@@@0me @@@@@@hev'@@@?f7@@@@@@(y?gv'@@@@@@1?f@@@@@@@@@@)kfn@@@@?h@@@@@@@1e?j@@@@@?f @@@@@@@@@@6Kf?S@@@?f@@@@@@(Yh?V'@@@@@@?f@@@@@@@@@@@@6Xe?@@@@?h3@@@@@@@L?W&@@@@5?f O2@@@@@@@@6K O2@@@@@@@@@6K??O @@@@@@@@@@@@@@@@@@Y?g@@@@@@H?heN@@@@@@?f@@@@@@@@@@@@@)X??@@@@?hV'@@@@@@)?&@@@@(Y?f O2@@@@@@@@@@@@@@@@@?hO2@@@@@@@@@@@@@@6Xf?@@@@@@@@@6Xf?@@@@@@@@@@@?@@@@@@@@@@@@@e?@@@@@@@@@@@ 3@@@@@@@@@@@@@@@@@@6X?e?J@@@@@@hf?@@@@@@Lf@@@@@@@@@@@@@@)X?@@@@?h?V'@@@@@@@@@@@(Yg V'@@@@@@@@@@@@@@@@@@)Xe?7@@@@@@hf?@@@@@@1f@@@@@?I'@@@@@@@)X@@@@?heV'@@@@@@@@@(Y?g?V@@@@@@@@@@@@@@@@@@@1e?3@@@@@@hf?@@@@@@5f@@@@@??V'@@@@@@@@@@@@?he?V'@@@@@@@(Yh @@@@V4@@@@@@@@@@@@@@@@L??N@@@@@@L?he?@@@@@@Hf@@@@@?eV'@@@@@@@@@@@?hfN@@@@@@@H?h @@@@L?gI4@@@@@@@@1?e@@@@@@1?heJ@@@@@@?f@@@@@?e?V'@@@@@@@@@@?hf?@@@@@@@he @@@@)Xhe?@@@@@5?e3@@@@@@Lh?W&@@@@@5?f@@@@@?fV'@@@@@@@@@?hf?@@@@@@@he @@@@@)K?h?@@@@@H?eN@@@@@@)K?gO&@@@@@@H?f@@@@@Lf?V'@@@@@@@@?hf?@@@@@@@he @@@@@@@6K?fO2@@@@@@f?3@@@@@@@6K?eO2@@@@@@@5g@@@@@)K?fV'@@@@@@@?hf?@@@@@@@he @@@@@@@@@@@@@@@@@@@@@@f?v4@@@@@@@@@@@@@@@@@@@0ye?@@@@@@@@@@@f?v4@@@@@@?he@@@@@@@@@@@@@?g @@@@@@@@@@@@@@@@@@@0M?g?I4@@@@@@@@@@@@@@@0Mf?@@@@@@@@@@@g?I'@@@@?he@@@@@@@@@@@@@?g @@@0MI4@@@@@@@@@@0M?he?I4@@@@@@@@@@@0Mg?@@@@@@@@@@@hV4@@@?he@@@@@@@@@@@@@?g?I4@@@@0M? SANASTO COM (Component Object Model) Microsoftin määrittelemä ohjelmakomponenttien rajapinta, johon perustuvat mm. Visual Basicin ja Delphin ActiveX-laajennukset. IDE (Integrated Development Environment) Tietyn ohjelmointikielen kehitystyöväline, joka kääntäjän lisäksi sisältää mm. editorin, debuggerin ja dokumentaation. Konekieli Kääntäjän tuottama prosessorin ymmärtämä komentojoukko. Komponentti Ohjelmapalanen, joka sisältää tietyn tehtävän suorittamiseen tarvittavat muistirakenteet ja toiminnalliset piirteet. Laajamittaisessa käytössä mm. Visual Basic- ja Delphi-työkaluissa. Kääntäjä Ohjelma, joka lukee ja tulkitsee ohjelmointikielen syntaksin mukaisen lähdekodin konekieliseksi ohjelmaksi. Luokkakirjasto Olio-ohjelmoinnissa käytetty valmiiksi tiettyyn tarkoitukseen suunniteltujen olioluokkien kokoelma. Lähdekoodi Ohjelmointikielen syntaksin mukaisia rakenteita noudattava teksti, jonka ohjelmoija kirjoittaa. Olio(luokka) Olio-ohjelmoinnissa käytetty tiettyyn tarkoitukseen suunniteltu ohjelmanosa, joka yhdistää tilatietoa ja toiminnallisuutta yhteen kokonaisuuteen. RAD (Rapid Application Development) Ohjelmointitekniikka, jossa pyritään nopeasti tuottamaan ajokelpoinen ohjelman prototyyppi testattavaksi ja jatkokehitystyön pohjaksi. Syntaksi Ohjelmointikielen kielioppisäännöt, joiden mukaan ohjelmoija kirjoittaa kääntäjän ymmärtämää lähdekoodia. YHTEENVETO OHJELMOINTIKIELET Ohjelmointikielten kehitys on hidastunut. Java on ainoa tällä vuosikymmenellä syntynyt laajalle levinnyt uusi kieli. Sen sijaan ohjelmointityökalut ovat viime vuosina kehittyneet huimasti, ja ohjelmakoodin kirjoittaminen on entistä helpompaa. Tällä hetkellä yleisessä käytössä olevista kielistä c ja c++ ovat vakiintuneet laajojen kaupallisten ohjelmien ja käyttöjärjestelmien työkaluiksi. Visual Basic ja Delphi puolestaan ovat uuden komponenttipohjaisen ohjelmoinnin tehovälineitä, mutta hintana on sovellusten windows-sidonnaisuus. Java tarjoaa siirrettävyyttä ja modernin oliokielen rakenteet, mutta toistaiseksi java-sovellukset kärsivät epävakaudesta, hitaudesta ja kovista resurssivaatimuksista. Lyhyempi odotusaika. Enemmän hupia ja hyötyä. Tarjoamme sinulle yhden maailman nopeimmista CD-RW-asemista. Nyt voit entistäkin helpommin tallentaa maailmasi, olipa kyse sitten musiikista, kuvista, videoista, grafiikasta tai muista tiedostoista. CD-levyjen lähes 1 Gt:n kapasiteetti takaa, että tila ei lopu kesken. Ja koska SONYn CD-RW-asema on uudelleenkirjoittava, voit tallentaa samalle CD-levylle uudelleen, ja uudelleen, ja uudelleen... Sony CD-RW-aseman mukana saat myös monipuolisen ohjelmistopaketin: Ainutlaatuinen esiohjelmoitava varmuuskopiointiohjelma. Drag-and-drop- ohjelma, jolla lisäät tallennuskapasiteetin lähes 1 gigatavuun. Ohjelma omien CD-kansien luomiseen Tallenna oma musiikkisi Kuvakirjasto Monimutkaista? Päinvastoin - selkeiden ohjeiden ansiosta se ei enää voisi olla yksikertaisempaa. Asennusruuvit, kaapeli ja 1 vuoden ilmainen puhelintuki sisältyvät hintaan. Valittavanasi on monta vaihtoehtoa*. Hinnat alkaen 1490,- Kuvan CD-RW-asema on vain yksi esimerkki tuotteistamme. Saatavana seuraavat mallit: 4x/2x/24x sisäinen ATAPI * 4x/4x/24x sisäinen ATAPI * 8x/4x/32x sisäinen ATAPI * 8x/4x/32x sisäinen SCSI * 4x/2x/6x ulkoinen USB Win98 taiu Mac * 4x/4x/6x ulkoinen USB Win98 tai Mac. Jälleenmyyjät: Amitel Oy, Puh 09584 5411, www.amitel.fi Four Leaf Technologies Oy, Puh 07575 3100, www.fourleaf.fi