10. Kohti suurempia sulautettuja ohjelmistoja

Koko: px
Aloita esitys sivulta:

Download "10. Kohti suurempia sulautettuja ohjelmistoja"

Transkriptio

1 164 Sulautettu ohjelmointi 10. Kohti suurempia sulautettuja ohjelmistoja Monet sulautetut järjestelmät ovat ajan myötä muodostuneet paljon monimutkaisemmiksi kuin mitä alun perin suunnittelijoilla on alun perin ollut mielessä. Esimerkkejä tällaisista järjestelmistä ovat esimerkiksi kännykät, joissa voi nykyisin olla varsin suorituskykyinen suoritin (tai jopa useita suorittimia) sekä gigatavuittain muistia. Vaikka kyseessä ehkä onkin edelleen pohjimmiltaan sulautettu järjestelmä, ohjelmoijan kannalta tilanne on kuitenkin toinen kuin aivan pienten ohjelmistojen tapauksessa. Yhtäältä muistia, suorituskykyä ja muita resursseja ohjelmistoteknisesti kestävän ratkaisun saavuttamiselle on yleensä merkittävästi enemmän, mutta toisaalta tavoitteena on toteuttaa ohjelmistolla paljon suurempi osa kuin mitä aiemmin oli tavoitteena, sillä hyvin pienissä sulautetuissa järjestelmissä ohjelmiston rooli on usein vähäinen. Käymme seuraavassa läpi jotakin vähän suuremman sulautetun ohjelmiston rakentamisen haasteita Ohjelmistopino Erilaiset ohjelmistokokonaisuudet, joita sulautettujen järjestelmien rakentamiseen on tarjolla useita, saattavat sisältää tukea sovelluskehitykselle. Tilanteesta riippuen käyttöjärjestelmän mukana saattaa tulla laajojakin kirjastoja, joiden varaan sovellusohjelmia on helppo rakentaa kohtuullisen nopeasti. Tällaisessa tilanteessa käytetään usein termiä ohjelmistopino (software stack) kuvaamaan ohjelmiston eri komponentteja. Eräs sulautetuissa järjestelmissä (OMAP4-ympäristö) käytetty ohjelmistopino on esitetty kuvassa 10.1.

2 Kohti suurempia sulautettuja ohjelmistoja 165 3D grafiikka- ja sovellusympäristö Sovelluskehys Symbian/Linux/Windows -sovellukset Selain Puhelin Kamera Multimedia Tietoturvallisuus 3D API Peruslaiteajurit Grafiikkakiihdytin DSPliityntä Virranhallinta Käyttöjärjestelmä (Symbian, Linux, Windows) Laitteisto Kuva 10.1 OMAP4-ohjelmistopino Varsinkin suuria järjestelmiä rakennettaessa on oikeastaan pakko myöskin hyödyntää jonkinlaisia kirjastoja (tai kokonaista valmista ohjelmistopinoa), sillä muussa tapauksessa kehitystyöstä tulisi liian pitkäkestoinen projekti. Toisin sanoen myös sulautettujen järjestelmien tapauksessa ollaan menossa kohti tilannetta, jossa ohjelmoijan on osattava ottaa huomioon oikeat kirjastot ja niiden tarjoamat rajoitukset ohjelmointivirheineen ja suorituskykyoletuksineen. Valitettavasti valmiiden kirjastojen käyttö sulautetussa ympäristössä ei aina ole aivan helppoa. Monet avoimen lähdekoodin ohjelmistot ovat periaatteessa helposti hyödynnettävissä, mutta esimerkiksi lisenssiehdot voivat asettaa rajoituksia, jotka eivät ole hyväksyttävissä sulautettujen järjestelmien toteutuksessa. Saattaa jopa olla niin, että valmiiden kirjastojen käyttö voi pakottaa sulautetun laitteen toteuttajan julkaisemaan kaiken laitekohtaisen ohjelmakoodin, varsinkin jos käytetyn kirjaston lisensseissä on voimakas copyleft-vaikutus 22. Toinen mahdollinen, valmiisiin kirjastoihin liittyvä ongelma on, että sulautetut järjestelmät ovat usein laitteistoltaan pitkälle optimoituja

3 166 Sulautettu ohjelmointi johonkin tiettyyn ja spesifiin tarkoitukseen. Tästä syystä ohjelmistotekniset ratkaisut, jotka toimivat hyvin esimerkiksi silloin, kun ohjelmistoa käytetään PC-ympäristössä, eivät olekaan toimivia silloin, kun laitteessa on vähän muistia tai erilainen suoritinarkkitehtuuri. Esimerkkinä mainittakoon vaikka Linux-käyttöjärjestelmän ydin, jossa on useita sellaisia ominaisuuksia, joista ei ole välttämättä hyötyä (pienten) sulautettujen järjestelmien toteutuksessa, mutta joiden poistaminen ytimestä yhden laitteen vuoksi ei välttämättä ole tarkoituksenmukaista, ainakaan jos tarkastellaan koko Linux-ytimen elinkaarta ja kaikkia mahdollisia käyttäjiä. Tästä syystä valmistaja voi joutua tekemään poistotyön aina uudelleen, kun ytimestä julkaistava uusi versio halutaan sisällyttää laitteeseen Ohjelmistojen siirrettävyydestä Jopa sellaisessa tilanteessa, jossa kohdelaitteita on vain yksi, voidaan joutua hallitsemaan eri ympäristössä toimivia ohjelmia. Mitä enemmän erilaisia kohdelaitteita on tarkoitus rakentaa, ja mitä enemmän käyttöympäristöjä ohjelmalle on odotettavissa, sitä enemmän ohjelmoija joutuu panostamaan ohjelmiston siirrettävyyteen. Lisäksi voi olla niin, että siirrettävyyteen halutaan panostaa, jotta ei jäätäisi yhden ainoan valmistajan loukkuun, vaan uuteen laite- ja ohjelmistoympäristöön siirtyminen olisi helppoa. Mikäli mahdollista, tulisi ohjelma kirjoittaa niin, että se on siirrettävissä ympäristöstä toiseen muutoksitta. Näin ei kuitenkaan voida aina tehdä. Seuraavassa käydään läpi joitakin vaihtoehtoja ongelman ratkaisemikseksi. Mikään ratkaisuista ei täytä kaikkia tarpeita. Niinpä eri vaihtoehtoja on käytettävä rinnan. Lisäksi joskus on vain yksinkertaisesti hyväksyttävä, että ohjelma ei kerta kaikkiaan ole siirrettävissä toiseen ympäristöön, vaan tällöin on rakennettava kokonaan uusi toteutus. Näin saattaa käydä esimerkiksi silloin, kun tehokkuussyistä joudutaan optimoimaan ohjelmaa tiettyyn ympäristöön Ehdollinen käännös Ehdollinen käännös on mahdollinen joissain ohjelmointikielissä. Sulautetuissa järjestelmissä yleisin toteutuskieli on C, jonka esikääntäjä osaa 22. Copyleft on sanaleikki termistä copyright, ja tarkoittaa, että koodin muutosten tekijällä on tietynlainen velvollisuus jakaa tekemiään muutoksia. Tarkat vaatimukset vaihtelevat lisenssikohtaisesti.

4 Kohti suurempia sulautettuja ohjelmistoja 167 toteuttaa ehdollisen kääntämisen. Ehdollinen kääntäminen on yleensä mahdollista myös symbolisella konekielellä kirjoitetuissa ohjelmissa ja monissa C:n sukulaiskielissä kuten C++:ssa. Ehdollisessa kääntämisessä voidaan käännösaikaisten symbolien avulla hallita käännöstä. Jollain symbolilla voidaan kertoa kohdekoneen käyttöjärjestelmä, jolloin sopivilla testeillä voidaan generoida tälle käyttöjärjestelmälle sopivaa ohjelmakoodia. Vastaavalla tavalla voidaan asettaa ehdon taakse testausaikaisia välitulostuksia tai muuta vastaavaa. Tarvittavat symbolit voidaan määritellä joko erillisessä ympäristökohtaisessa otsikkotiedostossa (esimerkiksi header.h) tai sitten ne voidaan asettaa kääntäjälle komentorivin määreinä tai osana esimerkiksi makefilen sisältämiä määreitä. Ehdollinen käännös on kyllä toimiva tapa, mutta se tekee ohjelmakoodista helposti sotkuista luettavaa, ja muutosten ja korjausten tekeminen vaikeutuu. Tämän takia ehdollista käännöstä ei pidetä parhaana tapana huolehtia siirrettävyydestä Ohjelmamakrot Makrot korvaavat pieniä aliohjelmia. Aliohjelmakutsun asemesta kääntäjä generoi makron ohjelmakoodin sen kutsun paikalle. Esimerkiksi C-kielen printf-funktio onkin itse asiassa makro. Joissain kielissä ei ole makroja lainkaan, mutta niiden asemesta aliohjelma voidaan määritellä inline-tyyppiseksi. Tällöin kääntäjä voi generoida kutsusta joko aidon kutsun tai sitten laajentaa ohjelmakoodin kutsun paikalle. On myös mahdollista antaa kääntäjän itse päättää, milloin se toteuttaa jokin aliohjelman makroamistekniikalla. Makrojen sisältö voidaan toteuttaa ympäristökohtaisesti, esimerkiksi niin, että makrokirjasto on erillinen eri ympäristöissä. Toinen vaihtoehto on käyttää makrojen sisällä ehdollista kääntämistä, jolloin ohjelmakoodissa ehdollisuus ei näy, mutta sen tarjomat hyödyt ovat käytettävissä. Makrot voivat olla vaarallisia käyttää, sillä niiden ohjelmointi vaatii erityistä tarkkuutta varsinkin C-kielen ja sen sukulaisten yhteydessä. Esimerkiksi määritelmä #define nelio(x) x * x näyttäisi määrittelevän makron, joka palauttaa parametrina annetun luvun toisen potenssin. Näin onkin, jos parametrina annetaan yksittäinen muuttuja tai luku. Mutta tuloskoodi voi yllättää, jos parametriksi laitetaan vaikkapa lauseke b - 1. Näin ohjelma

5 168 Sulautettu ohjelmointi int b = 3; int a = nelio(b - 1) * 3; ei sijoittaisi muuttujaan a odotettua arvoa 12, vaan arvon -3, koska alempi rivi laajentuisi muotoon int a = b - 1 * b - 1 * 3; Ratkaisu on kirjoittaa makroon tarpeeksi sulkeita: #define nelio(x) ((x) * (x)), jolloin esimerkki saa avattuna muodon: int a = ((b - 1) * (b - 1)) * 3; ja tulos on odotettu 12. Makroja tulee käyttää harkiten. Ne ovat varsinkin toistuvissa kohdissa kuten testausaikaisissa välitulostuksissa erinomaisia apuvälineitä, mutta eivät sovellu kovin monimutkaisiin tapauksiin. Toinen makrojen käyttöön liittyvä ongelma on se, että niiden määrän kasvaessa suureksi (niin kuin suuria ohjelmistokokonaisuuksia toteutettaessa helposti käy) tulee niiden hallinnoinnista käytännön välttämättömyys. Tämä on puolestaan osoittautunut käytännössä hankalaksi, sillä usein ainoa keino on pitää jokaisesta makrosta kirjaa erikseen. Lisäksi tällöin menetetään makrojen ehkä paras etu, ketteryys ja joustavuus pienessä mittakaavassa, sillä uuden makron luominen saattaa vaatia monimutkaisen allokointiprosessin läpikäyntiä kehitysorganisaatiossa Moduulinen erillinen toteutus Mikäli erot voidaan kerätä yhden rajapinnan taakse, voidaan toteutus vaihtaa eri ympäristöihin. Kyseessä on siis oikeastaan pikemminkin arkkitehtuuri- ja suunnittelutason ratkaisu kuin varsinainen siirrettävyyttä varten tehty muutos. Tällainen järjestelmä voidaan hallinta esimerkiksi konfiguraationhallintajärjestelmillä tai joukolla komentotiedostoja (skriptejä), joilla käännös eri kohteisiin toteutetaan. Toinen vaihtoehto on käyttää niin sanottua abstrakti tehdas -suunnittelumallia, jossa on erikseen moduuli, joka puolestaan osaa rakentaa erilaisia laillisia konfiguraatioita ajoaikaisesti. Jokaista näistä moduuleista voidaan käyttää yhteisen rajapinnan ylitse, joten järjestelmän toiminta riippuu siitä, millainen konfiguraatio rakennettiin. Suunnittelumallin heikkous pitkälle sulautettujen järjestelmien yhteydessä on se, että usein kaikkea ohjelmakoodia ei tarvita kaikissa laitteissa.

6 Kohti suurempia sulautettuja ohjelmistoja 169 Ylimääräisen koodin mukanaolo puolestaan kuluttaa muistia, ja voi aiheuttaa ongelmia esimerkiksi kaikkein korkeimpia testikattavuuksia tavoitellessa. Toisaalta suunnittelumalli on hyödynnettävissä myös esimerkiksi dynaamisten kirjastojen yhteydessä, mikäli muu osa järjestelmää sellaisia tukee. Erillinen toteutus joko erilaisten komentotiedostojen, skriptien tai suunnittelumallien avulla on usein koodin kannalta selkein ratkaisu. Toisaalta, jos erot eri ympäristöjen välillä on pienet, seuraa tästä turha saman koodin toistaminen useassa paikassa. Tämä puolestaan taas johtaa päivitysongelmiin, kun sama ohjelmakoodi pitää päivittää useaan kertaan Siirrettävyysongelmia Eivät pelkästään oheislaitteiden tai käyttöjärjestelmien erot vaikuta siirrettävyyteen. Suuri osuus siirrettävyysongelmaa on ohjelmiston kirjoittaminen siten, että ohjelmassa ei ole kääntäjästä riippuvia oletuksia. Tyypillinen tämänkaltainen oletus on se, että osoitteen pituuden odotetaan olevan saman kuin kokonaisluvun. Oletus pitää usein paikkansa, mutta ei aina. Toinen vastaava oletus on kokonaisluvun tai liukuluvun arvoalueen olettaminen joksikin tietyksi. Esimerkiksi C-kielen inttyyppi voi olla arvoalueeltaan mitä tahansa, kunhan siinä on vähintään 16 bittiä. Vastaavasti long-tyyppi on vähintään yhtä suuri kuin int, mutta voi olla suurempikin. Yksi tapa välttää tällaisia ongelmia on kääntää ja testata ohjelmisto jo kehitysympäristössä kahdella eri kääntäjällä. Näin suuri osa tällaisista oletuksista saadaan selville, samoin kääntäjien erilaiset toteutukset sellaisista ohjelmointikielen ominaisuuksista, joita kieli ei määrittele yksikäsitteisesti. Esimerkiksi C-kielen jakojäännös (%-operaattori) on hyvin määritelty vain, jos molemmat operandit ovat positiivisia. Tietysti myös virtuaalikonetta käyttämällä saadaan siirrettävyysongelmia pienennettyä olettaen, että virtuaalikone on saatavilla kaikkiin tarvittaviin ympäristöihin. Muussa tapauksessa virtuaalikoneen siirtäminen voi osoittautua paljon suuremmaksi työksi kuin mitä varsinaisen ohjelmiston siirto olisi ollut Vuotavat abstraktiot Abstraktiot ovat oikeastaan ainoa keino hallita ohjelmistojen kasvavaa monimutkaisuutta. Esimerkiksi koko olioparadigman voidaan ajatella

7 170 Sulautettu ohjelmointi hyödyntävän mahdollisuutta käyttää kohdealueen (domain) käsitteitä abstraktilla tavalla osana ohjelmistosuunnittelua. Vastaavasti modulaarisuus mahdollistuu vasta sitten, kun asiat voidaan tavalla tai toisella yhdistää abstraktisti toisiinsa. Samaten käyttöjärjestelmien tarjoamat palvelut ovat vain abstraktioita siitä, mitä lopulta tapahtuu fyysisen maailman tasolla esimerkiksi levypinnalle tiedostoa talletettaessa. Ohjelmistojen rakentamisessa käytettävät abstraktiot siis ovat käytännössä välttämättömiä, mutta niihin liittyy myös joitakin periaatteellisia ongelmia. Tarkastellaan esimerkiksi seuraavaa aliohjelmaa, jossa null-merkkiin päättyvä merkkijono kopioidaan toisen perään 23 : char* strcat(char* c1, char* c2) { char* apu = c1; while(*apu++); while(*c2) *apu++ = *c2++; *apu = 0; return c1; } Aliohjelma toimii siis siten, että se etsii ensin kohdan, jossa merkkijono c1 loppuu (eli löytyy merkkijonon päättävä 0), ja kopioi sitten merkkijonon c2 merkit yksi kerrallaan c1:n perään, kunnes c2:n loppumerkki tulee vastaan. Toiminnallisesti edellä esitetty aliohjelma täyttää sille annetut kriteerit, ehkä lukuunottamatta muistinvaraukseen liittyvää ongelmaa, mutta joissain käyttötapauksissa aliohjelman käyttö voi olla suorituskyvyn kannalta haitallista. On helppo huomata, että jos merkkijonon c1 pituus on esimerkiksi merkkiä ja c2:n pituus 3 merkkiä, suurin osa aliohjelman tarvitsemasta ajasta kuluu c1:n loppua etsiessä. Samaan tapaan, jos luodaan uusi merkkijono laittamalla miljoona kertaa yhden merkin mittainen merkkijono edellisen perään, lienee selvää, että suorituskykyongelmia on odotettavissa. Toteutusta voisi parantaa muokkaamalla tietorakennetta siten, että merkkijonossa kulkisi mukana tieto sen pituudesta (mikä toteutus on käytössä joissakin ympäristöissä, kuten esimerkiksi Symbian-käyttöjärjestelmässä), mutta esitetty ongelma on oikeastaan väistämätön tällä tietorakenteella: Jos merkkijonon pituutta ei tunneta, vaan se pitää aina etsiä tunnistamalla loppumerkki, on merkkijonon läpikäynti ainoa tapa saada pituus selville. Kyseessä on siis eräänlainen ääritapaus, jonka kohdalla ei voida tällä toteutuksella välttää ongelmaa. 23. Huomaa, että aliohjelmassa tehdään vaarallinen oletus: merkkijonon c1 lopussa pitää olla riittävästi tilaa c2:n merkeille ja loppumerkille!

8 Kohti suurempia sulautettuja ohjelmistoja 171 Yleisemmin edellä esitetty ongelma tunnetaan abstraktion vuotamisena, eli tilanteena, jossa jonkun abstraktion toteutuksessa käytetty tekniikka ja toteutuksen yksityiskohdat näkyvät ohjelmoijalle tavalla tai toisella. Koska lähes kaikki abstraktiot ovat jossakin ääritilanteessa alttiita vuotamiselle, ei ongelmia voida koskaan täysin välttää. Joka tapauksessa ohjelmoijalla on oltava jonkinasteinen ymmärrys ilmiöstä sekä siitä, miten todennäköisesti käytetyt abstraktiot vuotavat tietyssä tilanteessa. Vuotavat abstraktiot ovat varsin tavallisia sulautettujen ohjelmistojen toteuttamisessa, sillä ilmiö liittyy useinmiten tavalla tai toisella järjestelmän kannalta äärimmäiseen tilanteeseen. Tällaisia tilanteita ovat esimerkiksi muistin loppuminen, raskas kuormitus esimerkiksi useiden prosessien suorituksen vuoksi tai ongelmat tietoliikenteessä. Koska sulautetut järjestelmät perustuvat usein vaatimattomaan laitteistoon verrattuna pöytäkoneisiin, tulevat äärimmäiset tilanteet vastaan huomattavasti aiemmin, kuin mitä ohjelmoija usein ehkä olettaa. Lisäksi myös monet siirrettävyyteen liittyvät ongelmat voidaan mieltää vuotaviksi abstraktioiksi. Tällöin esimerkiksi tarjolla olevat rajapinnat eivät peitä toteutusta riittävän hyvin. Yksi käytännön ohjelmistosuunnitteluun liittyvä, helposti niukkaresurssisessa ympäristössä vuotava abstraktio on muistinkulutus. Vaikka kaikki tietorakenteet tietysti kuluttavat muistia, on erilaisilla suunnitteluratkaisuilla merkittävä vaikutus ohjelman muistinkulutukseen. Tarkastellaan esimerkiksi kuvassa 10.2 esitettyjä Java-aliohjelmia, jotka kaikki tekevät toiminnallisesti saman asian. Ohjelmien taustalla olevalle ohjelmistoinfrastruktuurille ne kuitenkin aiheuttavat melkoisesti toisistaan eroavan kuorman. Aliohjelmien aiheuttama muistinkulutus sekä niiden luomien olioiden määrä on esitetty taulukossa Toteutusympäristöstä riippuen abstraktioiden vuotamiseen varautuminen voi vaatia erilaisia ratkaisuja. Ympäristöissä, joissa ohjelmoija muutenkin joutuu ottamaan vastuun kaikista toimenpiteistä, abstraktioiden vuotamiseen valmistautuminen on oikeastaan jo osa ohjelmiston suunnittelua joka tapauksessa, sillä ohjelmoija joutuu valmistautumaan 24. Esimerkkiohjelmat ja mittaustulokset ovat peräisin Vesa-Matti Hartikaisen diplomityöstä Java application and library memory consumption, Tietotekniikan osasto, Tampereen teknillinen yliopisto, Mittauksissa on käytetty mobiililaitteisiin sovitettua MIDP Java-ympäristöä.

9 172 Sulautettu ohjelmointi static final int SIZE = 2000; private void arrayimp() { numbers = new int[size]; for (int i = 0; i < SIZE; i++) { numbers[i] = i; } } private void vectorimp() { numberv = new Vector(SIZE); for (int i = 0; i < SIZE; i++) { numberv.addelement(new Integer(i)); } } private void vectorimpsimple() { numberv2 = new Vector(); // Default size for (int i = 0; i < SIZE; i++) { numberv2.addelement(new Integer(i)); } } Kuva 10.2 Kolme erilaista toteutusta Taulukko 10.1: Aliohjelmien muistinkulutus Muistin kulutus tavuina Oliot arrayimp vectorimp vectorimpsimple muistin loppumiseen, suorituskyvyn kannalta äärimmäisiin tilanteisiin, ja niin edelleen. Yleisesti käytetty tapa huolehtia asiasta on varata ääritapauksen käsittelyn vaatimat resurssit etukäteen, mutta tämä voi kuitenkin olla hätävarjelun liioittelua. Äärimmilleen vietynä esimerkiksi kännykän pitäisi tällöin olla koko ajan tilassa, jossa laitteistolla on kaikki resurssit varattuna siihen, että hätäpuhelu voidaan soittaa milloin tahansa. Tämä ei kuitenkaan käytännössä ole mahdollista, sillä puhelimen pitäisi sallia usean puhelun samanaikainen tekeminen, mikä ei ole mahdollista kaikissa malleissa. Lisäksi akun kesto heikkenisi merkittävästi, kun

10 Kohti suurempia sulautettuja ohjelmistoja 173 Resurssi 1 Resurssin 1 ohjain Laitteen 1 ohjain Laite 1 Resurssi 2 Kuva 10.3 Resurssin 2 ohjain Laitteen 2 ohjain kaikki puhelussa tarvittava elektroniikka olisi koko ajan aktiivisessa tilassa. Tilanteessa, jossa käyttöjärjestelmä tai jonkinlainen välikerrosohjelmisto tarjoaa hallinnointipalveluita sovelluskehityksen yksinkertaistamiseksi, varautuminen abstraktioiden vuotamiseen voi olla äärimmäisen vaikeaa, sillä vuotava abstraktio saattaa olla juuri hallinnointipalvelu. Jo aiemmin todettiin, että esimerkiksi Javaa ohjelmointikielenä käytettäessä törmätään helposti ongelmiin, jos roskien keruu sattuu tapahtumaan väärään aikaan tai jos ohjelman käyttämät tietorakenteet syystä tai toisesta estävät roskien keruun toiminnan. Kyseessä on selvästi abstraktion vuoto automaattiseen muistinhallintaan liittyvän abstraktion sivutuote näkyy käyttäjälle hitaampana suorituksena Joitakin sulautetun järjestelmän suunnitteluratkaisuja Kuten monien muidenkin ohjelmistojen yhteydessä, on myös sulautetuissa järjestelmissä tavallista käyttää hyväksi havaittuja suunnitteluratkaisuja useassa eri ympäristössä. Käymme seuraavassa läpi pienen joukon tällaisia ratkaisuja. Tavoitteena ei ole niinkään kattavan suunnittelumallikokoelman esittely, vaan pikemminkin antaa esimerkkejä suunnittelutavoitteista ja siitä, miten ne on otettu huomioon osana ohjelmistosuunnittelua Kerrostaminen ja laitteiden kätkentä Laite 2 Laitteistoa mukaileva ohjelmistoarkkitehtuuri Usein sulautettuja järjestelmiä toteutettaessa päädytään ohjelmistoarkkitehtuuriin, jossa käytettävät laitteet ohjaavat suunnittelua. Tällöin jokainen erilainen rajapinta kätketään abstraktiorajapinnalla, mikä mahdollistaa käytettävän laitteiston muuntelun kohtuullisen helposti. Kuva 10.3 havainnollistaa suunnittelun lähtökohtaa.

11 174 Sulautettu ohjelmointi Laitteistoa mukailevaa ohjelmistoarkkitehtuuria on helppo pitää jonkinlaisena laitteistoa abstrahoivana kerroksena, joka tarjoaa palveluita muulle ohjelmistolle. Tällaisesta laiteabstraktiokerroksesta käytetään nimeä HAL (Hardware Abstraction Layer). Laiteabstraktiokerroksen ohjelmistotekniset edut on helppo nähdä. Periaatteessa ohjelmistot ovat siirrettävissä ympäristöstä toiseen, jos vain HAL pysyy samanlaisena, sillä ympäristön muutokset eivät ole ohjelmalle näkyvissä. Käytännössä jotkut yksityiskohdat on kuitenkin edelleen otettava huomioon ohjelmistoa suunnitellessa. Tällaisia seikkoja ovat esimerkiksi muistin kulutus, sillä erilaiset laitteistot saattavat sisältää eri määrät muistia ja niiden konfiguraatio saattaa muutenkin olla sisäisesti erilainen, ja suorituskykyyn liittyvät seikat, joita ovat esimerkiksi skeduloituvuus ja järjestelmän vasteajat. Ohjelmoijan kannalta edellä esitetyt erot tarkoittavat yleensä sitä, että vaikka varsinaisia uusia ominaisuuksia ei toteutettaisikaan, saatetaan ohjelmisto joutua testaamaan useita kertoja erilaisten laitteistokokoonpanojen yhteydessä. Toisaalta varsinainen ohjelmiston toteutustyö pysyy yleensä kohtuullisena Väyläabstraktio Noudattamalla yllä esitettyä periaatetta sulautetusta järjestelmästä muotoutuu yleensä kokoelma laitteistoriippuvaisia toimintoja. Koska toiminnot ovat usein tavalla tai toisella toisistaan riippuvaisia, niiden välinen kommunikointi on sallittava muodossa tai toisessa. Melko tavallinen tapa toteuttaa kommunikointi sulautetussa ympäristössä on käyttää väylärakennetta, jossa laitteistoa ohjaavat ohjelmiston osat voivat lähettää toisilleen viestejä käyttäen väylän tapaan toimivaa ohjelmistokomponenttia 25 viestinvälitykseen. Viestinvälityksessä käytettävä väylä tarjoaa useita merkittäviä etuja ohjelmistokehitykseen. Ensinnäkin viestit on mahdollista käsitellä siten, että niiden välitys eri komponenteille on nopeaa käyttämällä esimerkiksi hajautustaulua reititykseen, ainakin mikäli voidaan luottaa kohtuulliseen staattiseen reititysalgoritmiin. Toisekseen uusien toimintojen lisääminen on yleensä helppoa, sillä uusia toimintoja varten voidaan tarvittaessa varata kokonaan uusia viestejä, joiden käsittely ei 25. Hajautettujen sulautettujen järjestelmien yhteydessä samaa väylää käytetään usein myös yhdistämään laitteiston eri osat toisiinsa. Tällöin tarvitaan luonnollisesti myös jonkinlainen fyysinen väylä, kun taas yhden laitteen sisäisessä toteutuksessa voidaan käyttää puhtaasti ohjelmallista väylää.

12 Kohti suurempia sulautettuja ohjelmistoja 175 lainkaan vaikuta jo aiemmin käytössä olleiden viestien käsittelyyn. Lisäksi viestinvälityksen yhteydessä päästään melko usein yksinkertaistamaan myös poissulkemista, sillä jokainen ohjelmistokomponentti tyypillisesti käsittelee viestit loppuun saakka ennen seuraavan viestin käsittelyä. Tämä mahdollistaa myös lokin keräämisen käsiteltyjen viestien avulla, mikä puolestaan auttaa virheiden jäljittämisessä. Huonona puolena ohjelmistoväylään perustuvassa toiminnassa voidaan pitää sitä, että jatkuva viestien luominen voi johtaa muistin frakmentoitumiseen. Tästä syystä usein käytetään tilanteeseen sopivaa tietorakennetta, esimerkiksi rengaspuskuria, johon voidaan varata sopiva määrä viestejä käytettäväksi. Toinen joskus ongelmia aiheuttava osa on se, että koska ohjelmiston eri osien välinen kommunikointi tapahtuu kokonaan viestien ja viestinkäsittelijöiden kautta, ei missään vaiheessa välttämättä tehdä perinteistä rajapintamäärittelyä, joka ohjaisi pohtimaan komponentin toimintaa kokonaisuutena. Lisäksi ongelmia voi aiheuttaa se, että järjestelmän kannalta tärkeä viesti voi joutua odottamaan vähemmän tärkeiden viestien käsittelyä, samaan tapaan kuin mitä skeduloinnin ja poissulkemisen yhteydessä käänteisprioriteettiongelmana esitettiin. Jos ongelmat ovat suuria, viesteihin voidaan laittaa prioriteetti, jonka avulla eri viestinkäsittelijät (tai väylä) voivat ottaa huomioon viestien keskinäisen tärkeysjärjestyksen Käynnistysrutiinit Koska monet ohjelmistot ovat käytössä lähes samanlaisina erilaisissa ympäristöissä, kohdistuu niihin osin ristiriitaisia vaatimuksia. Yksi ristiriitaisuuksien lähde on se, miten jonkin laitteen ohjelmisto tai yleisemmässä tapauksessa koko laite kuuluu käynnistää, jotta kaikki sen toiminnot kytkeytyvät päälle sellaisessa vaiheessa, että tarvittava laitteistotuki suoritukselle on saatavilla. Koska laitteen eri versioiden laitteistokomponentit voivat olla erilaisia, tarvitaan usein hivenen erilaisia käynnistysrutiineja, jotka herättävät laitteiston eri komponentit vähän eri järjestyksessä ja vähän erilaisin ajoituksin. Ohjelmistoteknisessä mielessä kyseessä on siis selvästi muunneltavuuteen liittyvä ongelma, jonka ratkaisemiseksi käynnistysrutiini kannattaa rakentaa helposti muunneltavaksi tavalla tai toisella. Yksi melko usein käytetty tapa on käyttää jonkinlaista erillistä rutiinia, joka kutsuu eri käynnistysoperaatioita ohjelmallisesti. Toinen

13 176 Sulautettu ohjelmointi vaihtoehto olisi toteuttaa käynnistysvektori, jonka eri alkiot osoittavat sopiviin käynnistysrutiineihin. Kolmas vaihtoehto on rakentaa erillinen konfiguraatiotiedosto, jossa määritellään mitä laitteita on käytössä, ja miten ja missä järjestyksessä ne kuuluu herättää. Kaikissa yllä esitetyissä tapauksissa käynnistysrutiinien muuntelu on yksinkertaista, ja kahdessa jälkimmäisessä tapauksessa ei välttämättä edes tarvita käännöstä, vaan riittää että vektorin tai konfiguraatiotiedoston arvot asetetaan sopivasti. Toisaalta kääntäminenkään ei yleensä ole iso ongelma, sillä jos ollaan rakentamassa muista laitteistoista selvästi erilaista järjestelmää, myös monet muut pienet yksityiskohdat ovat saattaneet muuttua Vianjäljitysmoodi ja lokien keruu Koska sulautetut järjestelmät koostuvat sekä ohjelmistosta että laitteistosta, on niiden toiminnan tutkiminen suorituksen aikana usein vaikeaa. Kuten jo aiemmin todettiin, joudutaan usein turvautumaan erityisiin apuvälineisiin, joiden avulla voidaan selvittää mitä ohjelma missäkin kohtaa suoritusta tekee. Mitä suuremmasta järjestelmästä on kyse, sen todennäköisempää on, että järjestelmään kannattaa rakentaa sisään jonkinlaista kyvykkyyttä auttaa virheiden jäljittämisessä. Täten monia, muuten lähes mahdottomia tehtäviä voidaan yksinkertaistaa merkittävästi. Yksi keino auttaa virheiden jäljittämisessä on käyttää erityistä vianjäljitysmoodia. Tällöin esimerkiksi huoltomies voi asettaa tutkittavan järjestelmän tilaan, jossa se lähettää tilatietoa joko omalle näytölleen tai huoltomiehen tietokoneelle. Yhdistettynä muunneltavan käynnistysrutiinin kanssa tämä suunnitteluidiomi muodostaa varsin hyvän keinon jäljittää virheitä. Lisäksi lähes aina kun vain mahdollista kannattaa kerätä tietoa järjestelmän toimenpiteistä ja tilasta. Tämä tyypillisesti hoidetaan erilaisin lokimekanismein. Yleensä pyritään toimimaan siten, että loppukäyttäjä ei pääse käsiksi lokitietoon, vaikkapa sallimalla tiedon luku vain erityistä asennuskaapelia käyttäen, kuten monissa ajoneuvoissa on tapana Muisti- ja ajoitusbudjetti Muisti- ja ajoitusbudjetin laatiminen ennen ohjelman suunnittelua voi vaikuttaa melko vaikealle asialle, mutta käytännössä sellaisen laadinta on väistämätöntä, jos halutaan arvioida laitteen valmistuskustannukset

14 Kohti suurempia sulautettuja ohjelmistoja 177 edes jollakin kohtuullisen luotettavalla tasolla ennen kuin laitetta ryhdytään toteuttamaan. Muisti- ja ajoitusbudjetti on luonnollisesti vain suunnitelma siitä, miten suorituksen on ajateltu etenevän, mutta johtuen sen kiinteästä yhteydestä hintaan suuret poikkeamat voivat johtaa ongelmiin. Budjetin laatimiseksi tarvitaan luonnollisesti jonkinlaiset lähtöarvot. Huonoimmassa tapauksessa lähtökohdan muodostavat suuntaaantavat järjestelmävaatimukset, ja ohjelmistosuunnittelijan tehtäväksi annetaan ensin kokonaisuuden hahmottaminen, sitten alustavan arkkitehtuurisuunnitelman luonti, ja lopuksi muistinkulutuksen arviointi ja skedudoituvuusanalyysin teko perustuen arkkitehtuurisuunnitelmaan. Koska arvioihin liittyy paljon epävarmuustekijöitä, ei lopputuloskaan voi olla kovin tarkka. Voidaan jopa ajatella niin, että jos budjetti ennustaa ongelmia, ne ovat väistämättömiä, mutta jos budjetin mukaan näyttää hyvältä, ei siltikään vielä kannata olla huolehtimatta muistinkulutuksesta tai ajastuksista. Käytännössä budjetin laatimista helpottaa se, että yleensä aina on olemassa saman (tai vastaavan) järjestelmän aiempi versio, josta saadaan jonkin verran konkreettista mittausdataa arvojen asettamiseksi. Analysoimalla muutostarpeet aiempaan versioon verrattuna saadaan siksi aikaan hyvinkin täsmällisiä arvioita Formaali vai epäformaali menetelmä? Koska virhe on sitä kalliimpi, mitä aikaisemmassa vaiheessa se tehdään ja mitä myöhemmin se havaitaan, pyritään siihen, että jo ongelman kuvauksesta voisi päätellä, onko kaikki tarpeellinen otettu huomioon. Toisaalta kokonaisjärjestelmän hallitsemiseksi siitä pitäisi muodostaa kuvaus, joka abstrahoi pois yksityiskohtia. Koska formaalien esitystapojen ongelmana on usein juuri se, että kaikki yksityiskohdat on kerrottava, niiden käyttökelpoisuus on monesti asetettu kyseenalaiseksi. Formaalien menetelmien yksi ongelmista on sekin, että ne eivät toistaiseksi tue ohjelmistotyötä tarpeeksi, jotta ne olisivat houkuttelevia vaihtoehtoja. Lisäksi niiden esitysmuodot ovat usein ohjelmoijille liian matemaattisia, jotta niiden käyttöä pidettäisiin miellyttävänä. Tämä on todella vahinko, sillä formaaleissa määrittelymenetelmien voima on siinä, että kun jo määrittely on formaali, ominaisuuksien virheettömyys on helpompi verifioida jo määrittelyvaiheessa, ja testaukseen saadaan selkeitä kriteereitä. Määrittelyn oikeellisuuden toteaminen on tärkeää, sillä jos määrittely on virheellinen, on sen oikea toteutuskin virheellin-

15 178 Sulautettu ohjelmointi en. Oikeaksi toteaminen tarkoittaa tässä paitsi loogista järkevyyttä niin myös sitä, että määrittely täyttää järjestelmälle asetetut vaatimukset. Tämän takia myös asiakkaan tulisi voida lukea määrittelyä. Formalismien asemasta onkin esitetty useita puoliformaaleja järjestelmiä, joissa on yleensä jokin visuaalinen esitysmuoto ongelmalle. Näillä menetelmillä saadaan kuvattua järjestelmä suhteellisen helposti, mutta varjopuolena on se, että niistä ei välttämättä saada lähtötietoja testaustarkoituksiin. Tämä taas johtuu siitä, että esitys ei havainnollisuudestaan huolimatta ole täydellinen. Niinpä tällä hetkellä ei ole olemassa sellaista kuvausmenetelmää, joka ratkaisisi kaikki ongelmat. Lupaavimmilta näyttävät sellaiset formaalit menetelmät, joissa on pystytty nostamaan abstraktiotasoa niin korkealle, että sekä kokonaisnäkemys että tarpeellinen pohja testaukselle ovat olemassa. Korkea abstraktiotaso voidaan toteuttaa muun muassa siten, että menetelmässä kuvataan askeleittain pieniä kokonaisuuksia kerrallaan, ja peräkkäiset askeleet eivät voi rikkoa toistensa turvallisuusominaisuuksia (tällainen järjestelmä on muun muassa DisCo, Distributed Co-operation). Yksikään tällaiselta pohjalta tehty järjestelmä ei ole levinnyt teollisuuden normaalikäyttöön. Laitteistopuolella on hieman samantapainen järjestelmä olemassa (Bluespec). Ainoa tapa, jolla ohjelmien virheet voidaan edes teoriassa välttää, on todistaa ohjelmat oikeiksi. Ongelmana on se, että todistaminen on usein melkoisen vaikeaa: esimerkiksi vaihtuvan bitin protokolla on intuitiivisesti helppo, mutta suhteellisen vaikea todistettava. Käytännössä oikeaksi todistamista voidaan käyttää vain pienissä, suhteellinen monimutkaisissa, mutta syystä tai toisesta kriittisissä ohjelmanosissa. Oikeaksi todistamisen sijaan erilaisia tietokoneavusteisia mallintarkastimia on käytetty varsin menestyksekkäästi myös suurten ja monimutkaisten sulautettujen järjestelmien kehittämisessä. Näidenkin yhteydessä lienee tilanne oikeasti sellainen, että oikeastaan pieni osa järjestelmää kerrallaan on mielekästä mallintaa ja tarkastaa työkaluavusteisestikaan. Muussa tapauksessa tarkistimeen syötettyjen tietojen ja käytännön ohjelman vastaavuus kasvaa helposti niin monimutkaiseksi, että on vaikea sanoa, mitä mallintarkastimen ilmoittama tulos oikeastaan lopulta tarkoittaa. Lisäksi samaan tapaan kuin formaalin todistamisen yhteydessä ei ole aivan helppoa tehdä mallia, jossa kaikki todistamisen (tai mallintarkastamisen) kannalta olennaiset ominaisuudet olisivat mukana. Joidenkin sulautettujen järjestelmien toteutuksessa on myös kokeiltu koodin generointia kielestä, joka olisi lähempänä sovellusal-

16 Kohti suurempia sulautettuja ohjelmistoja 179 uetta kuin mitä C, C++ tai Java. Kokemukset tällaisista ympäristöistä ovat vaihtelevia, mutta usein näin on kyetty nostamaan tuottavuutta tai ainakin mahdollistamaan kehitysmalli, jossa osa kehittäjistä ei varsinaisesti ole ohjelmoijia vaan pikemminkin sovellusalueen asiantuntijoita. Vaikka käytetyllä korkeamman tason kielellä periaatteessa olisikin jonkinlainen formaali perusta, kehittäjät itse tuntuvat kuitenkin usein ajattelevan kirjoitettua koodia ensisijaisesti ohjelmana ja vasta sitten, jos on pakko, formaalina määrittelynä. Tästä syystä yleensä ohjelmistotuotannon hyväksi havaitut käytännöt ovat parempi tae laadusta kuin sinänsä hyvältä kuulostava lupaus teoreemantodistuksesta tai formaalista perustasta. Lisäksi ongelmia voi aiheuttaa se, että monesti tähän käytäntöön tarvittavat työkalut ovat syntyneet yrityksen omista tarpeista omaan tarpeeseen. Siksi niiden ylläpito voi osoittautua hankalaksi, ja osaavan henkilökunnan löytäminen voi olla vaikeaa Yhteenveto Painopiste laitteen hereille saamisesta laitteen pitkäaikaiseen käyttöön. Useita käyttökelpoisia tekniikoita ja uusia vaatimuksia: 1. Valmiit ohjelmistopinot. 2. Vuotavien abstraktioiden hallinta. 3. Joustavuutta tuovat suunnitteluratkaisut. 4. Määrittelyn oikeellisuus ja täsmällisyys.

10. Luento: Kohti suurempia sulautettuja ohjelmistoja. Tommi Mikkonen,

10. Luento: Kohti suurempia sulautettuja ohjelmistoja. Tommi Mikkonen, 10. Luento: Kohti suurempia sulautettuja ohjelmistoja Tommi Mikkonen, tommi.mikkonen@tut.fi Agenda Johdanto Ohjelmistopino Siirrettävyydestä Vuotavat abstraktiot Joitakin suunnitteluratkaisuja Formaali

Lisätiedot

OHJ-4301 Sulautettu Ohjelmointi

OHJ-4301 Sulautettu Ohjelmointi OHJ-4301 Sulautettu Ohjelmointi (http://www.cs.tut.fi/~sulo/) 5op, to 12-14, TB 109 Arto Salminen, arto.salminen@tut.fi Läpäisyvaatimukset Hyväksytysti suoritetut: Tentti Harjoitustyöt Harjoitustyöt 3

Lisätiedot

10. Luento: Kohti suurempia sulautettuja ohjelmistoja. Arto Salminen,

10. Luento: Kohti suurempia sulautettuja ohjelmistoja. Arto Salminen, 10. Luento: Kohti suurempia sulautettuja ohjelmistoja Arto Salminen, arto.salminen@tut.fi Viksut Vekottimet 2013 Viksut Vekottimet (Intelligent Machines) is a free seminar at Tampere University of Technology.

Lisätiedot

11/20: Konepelti auki

11/20: Konepelti auki Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon

Lisätiedot

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

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo Concurrency - Rinnakkaisuus Group: 9 Joni Laine Juho Vähätalo Sisällysluettelo 1. Johdanto... 3 2. C++ thread... 4 3. Python multiprocessing... 6 4. Java ExecutorService... 8 5. Yhteenveto... 9 6. Lähteet...

Lisätiedot

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit Ohjelmiston testaus ja laatu Ohjelmistotekniikka elinkaarimallit Vesiputousmalli - 1 Esitutkimus Määrittely mikä on ongelma, onko valmista ratkaisua, kustannukset, reunaehdot millainen järjestelmä täyttää

Lisätiedot

Agenda. Johdanto Ominaispiirteitä Kokonaisjärjestelmän määrittely Eri alojen edustajien roolit Sulautetut järjestelmät ja sulautettu ohjelmointi

Agenda. Johdanto Ominaispiirteitä Kokonaisjärjestelmän määrittely Eri alojen edustajien roolit Sulautetut järjestelmät ja sulautettu ohjelmointi 1. Luento: Sulautetut Järjestelmät Arto Salminen, arto.salminen@tut.fi Agenda Johdanto Ominaispiirteitä Kokonaisjärjestelmän määrittely Eri alojen edustajien roolit Sulautetut järjestelmät ja sulautettu

Lisätiedot

ELM GROUP 04. Teemu Laakso Henrik Talarmo

ELM GROUP 04. Teemu Laakso Henrik Talarmo ELM GROUP 04 Teemu Laakso Henrik Talarmo 23. marraskuuta 2017 Sisältö 1 Johdanto 1 2 Ominaisuuksia 2 2.1 Muuttujat ja tietorakenteet...................... 2 2.2 Funktiot................................

Lisätiedot

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta C++ - perusteet Java-osaajille luento 5/7: operaattoreiden ylikuormitus, oliotaulukko, parametrien oletusarvot, komentoriviparametrit, constant, inline, Operaattoreiden ylikuormitus Operaattoreiden kuormitus

Lisätiedot

Ohjelmistojen mallintaminen, mallintaminen ja UML

Ohjelmistojen mallintaminen, mallintaminen ja UML 582104 Ohjelmistojen mallintaminen, mallintaminen ja UML 1 Mallintaminen ja UML Ohjelmistojen mallintamisesta ja kuvaamisesta Oliomallinnus ja UML Käyttötapauskaaviot Luokkakaaviot Sekvenssikaaviot 2 Yleisesti

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien

Lisätiedot

Simulaattorin asennus- ja käyttöohje

Simulaattorin asennus- ja käyttöohje Linux ja Windows XP Versio Päiväys Muokkaaja Kuvaus 0.2 16.2.2006 Mikko Halttunen Katselmoinin jälkeen 0.1 13.2.2006 Mikko Halttunen Alustava versio Sisällysluettelo 1 Johdanto... 3 2 Simulaattorin asennus...

Lisätiedot

9. Luento: Ohjelmistotyö. Tommi Mikkonen, tommi.mikkonen@tut.fi

9. Luento: Ohjelmistotyö. Tommi Mikkonen, tommi.mikkonen@tut.fi 9. Luento: Ohjelmistotyö Tommi Mikkonen, tommi.mikkonen@tut.fi Agenda Johdanto Ristikäännös Testaus ja virheen jäljitys Yleensä Kehitysympäristössä Käyttöympäristössä Laitteiston testaus Iteratiivisesta

Lisätiedot

ohjelman arkkitehtuurista.

ohjelman arkkitehtuurista. 1 Legacy-järjestelmällä tarkoitetaan (mahdollisesti) vanhaa, olemassa olevaa ja käyttökelpoista ohjelmistoa, joka on toteutettu käyttäen vanhoja menetelmiä ja/tai ohjelmointikieliä, joiden tuntemus yrityksessä

Lisätiedot

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä 812347A Olio-ohjelmointi, 2015 syksy 2. vsk X Poikkeusten käsittelystä Sisältö 1. Yleistä poikkeusten käsittelystä 2. Poikkeuskäsittelyn perusteita C++:ssa 3. Standardissa määritellyt poikkeukset 4. Poikkeusvarmuus

Lisätiedot

Ohjelmointi 1 / syksy /20: IDE

Ohjelmointi 1 / syksy /20: IDE Ohjelmointi 1 / syksy 2007 10/20: IDE Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/8 Tämän luennon rakenne

Lisätiedot

1 Kannat ja kannanvaihto

1 Kannat ja kannanvaihto 1 Kannat ja kannanvaihto 1.1 Koordinaattivektori Oletetaan, että V on K-vektoriavaruus, jolla on kanta S = (v 1, v 2,..., v n ). Avaruuden V vektori v voidaan kirjoittaa kannan vektorien lineaarikombinaationa:

Lisätiedot

Ohjelmistojen suunnittelu

Ohjelmistojen suunnittelu Ohjelmistojen suunnittelu 581259 Ohjelmistotuotanto 154 Ohjelmistojen suunnittelu Software design is a creative activity in which you identify software components and their relationships, based on a customer

Lisätiedot

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

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14 Arkkitehtuurikuvaus Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy Ryhmä 14 Muutoshistoria Versio Pvm Päivittäjä Muutos 0.4 1.11.2007 Matti Eerola 0.3 18.10.2007 Matti Eerola 0.2

Lisätiedot

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen Chapel TIE-20306 Ryhmä 91 Joonas Eloranta Lari Valtonen Johdanto Chapel on Amerikkalaisen Cray Inc. yrityksen kehittämä avoimen lähdekoodin ohjelmointikieli. Chapel on rinnakkainen ohjelmointikieli, joka

Lisätiedot

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

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++? JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,

Lisätiedot

8/20: Luokat, oliot ja APIt

8/20: Luokat, oliot ja APIt Ohjelmointi 1 / syksy 2007 8/20: Luokat, oliot ja APIt Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/8 Kohti

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien

Lisätiedot

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

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukot C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukon muuttujilla (muistipaikoilla) on yhteinen nimi. Jokaiseen yksittäiseen

Lisätiedot

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.

Lisätiedot

Uudelleenkäytön jako kahteen

Uudelleenkäytön jako kahteen Uudelleenkäyttö Yleistä On pyritty pääsemään vakiokomponenttien käyttöön Kuitenkin vakiokomponentit yleistyneet vain rajallisilla osa-alueilla (esim. windows-käyttöliittymä) On arvioitu, että 60-80% ohjelmistosta

Lisätiedot

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4 Sisällys 12. Näppäimistöltä lukeminen Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä.. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit. Scanner-luokka.

Lisätiedot

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2 4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä muuttujia ja vakioita. Esittely

Lisätiedot

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset Tekninen määrittely: Editori Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset Sisällysluettelo 1. Johdanto...4 1.1. Tarkoitus ja kattavuus...4 1.2. Tuote ja ympäristö...4 1.3. Määritelmät,

Lisätiedot

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille: Merkkijonot C-kielessä merkkijono on taulukko, jonka alkiot ovat char -tyyppiä. Taulukon viimeiseksi merkiksi tulee merkki '\0', joka ilmaisee merkkijonon loppumisen. Merkkijono määritellään kuten muutkin

Lisätiedot

Web-palvelu voidaan ajatella jaettavaksi kahteen erilliseen kokonaisuuteen: itse palvelun toiminnallisuuden toteuttava osa ja osa, joka mahdollistaa k

Web-palvelu voidaan ajatella jaettavaksi kahteen erilliseen kokonaisuuteen: itse palvelun toiminnallisuuden toteuttava osa ja osa, joka mahdollistaa k 1 Web-palvelu voidaan ajatella jaettavaksi kahteen erilliseen kokonaisuuteen: itse palvelun toiminnallisuuden toteuttava osa ja osa, joka mahdollistaa ko. toiminnallisuuden hyödyntämisen Web-palveluna.

Lisätiedot

TIETOKONE JA TIETOVERKOT TYÖVÄLINEENÄ

TIETOKONE JA TIETOVERKOT TYÖVÄLINEENÄ aaro.leikari@hotmail.com TIETOKONE JA TIETOVERKOT TYÖVÄLINEENÄ 25.01.2016 SISÄLLYS 1. Käyttöjärjestelmän asentaminen... 1 1.1 Windowsin asettamia laitteistovaatimuksia... 1 1.2 Windowsin asentaminen...

Lisätiedot

Osoitin ja viittaus C++:ssa

Osoitin ja viittaus C++:ssa Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja

Lisätiedot

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

Sulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä. Sulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä. On arvioitu, että maailmassa on tällä hetkellä enemmän sulautettuja

Lisätiedot

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Matti Luukkainen 10.12.2009 Tässä esitetty esimerkki on mukaelma ja lyhennelmä Robert Martinin kirjasta Agile and Iterative Development löytyvästä

Lisätiedot

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

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki Sisällys JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta Abstrakti luokka ja metodi Rajapintamäärittely (interface) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E.

Lisätiedot

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa(); Sisällys 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden käsittelyä: sijoitus, vertailu ja varautuminen null-arvoon. Viite metodin paluuarvona.. 7.1 7.2 Olio

Lisätiedot

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä

Lisätiedot

Ohjelmointi 1. Kumppanit

Ohjelmointi 1. Kumppanit Ohjelmointi 1 Kumppanit November 20, 2012 2 Contents 1 Mitä ohjelmointi on 7 2 Ensimmäinen C#-ohjelma 9 2.1 Ohjelman kirjoittaminen......................... 9 A Liite 11 3 4 CONTENTS Esipuhe Esipuhe 5

Lisätiedot

Taulukot. Jukka Harju, Jukka Juslin 2006 1

Taulukot. Jukka Harju, Jukka Juslin 2006 1 Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Kurssin sisältö pääpiirteittäin Tarvittavat pohjatiedot Avainsanat Abstraktio Esimerkkiohjelman tehtäväkuvaus Abstraktion käyttö tehtävässä Abstrakti tietotyyppi Hyötyjä ADT:n

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä Sisälls 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen.. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona.. Muuttumattomat ja muuttuvat merkkijonot.

Lisätiedot

2 Konekieli, aliohjelmat, keskeytykset

2 Konekieli, aliohjelmat, keskeytykset ITK145 Käyttöjärjestelmät, kesä 2005 Tenttitärppejä Tässä on lueteltu suurin piirtein kaikki vuosina 2003-2005 kurssin tenteissä kysytyt kysymykset, ja mukana on myös muutama uusi. Jokaisessa kysymyksessä

Lisätiedot

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä Rekursiolause Laskennan teorian opintopiiri Sebastian Björkqvist 23. helmikuuta 2014 Tiivistelmä Työssä käydään läpi itsereplikoituvien ohjelmien toimintaa sekä esitetään ja todistetaan rekursiolause,

Lisätiedot

Matematiikan tukikurssi, kurssikerta 2

Matematiikan tukikurssi, kurssikerta 2 Matematiikan tukikurssi kurssikerta 1 Relaatioista Oletetaan kaksi alkiota a ja b. Näistä kumpikin kuuluu johonkin tiettyyn joukkoon mahdollisesti ne kuuluvat eri joukkoihin; merkitään a A ja b B. Voidaan

Lisätiedot

Tutoriaaliläsnäoloista

Tutoriaaliläsnäoloista Tutoriaaliläsnäoloista Tutoriaaliläsnäolokierroksella voi nyt täyttää anomuksen läsnäolon merkitsemisestä Esim. tagi ei toiminut, korvavaltimon leikkaus, yms. Hyväksyn näitä omaa harkintaa käyttäen Tarkoitus

Lisätiedot

OHJELMISTOKEHITYS -suuntautumisvaihtoehto

OHJELMISTOKEHITYS -suuntautumisvaihtoehto OHJELMISTOKEHITYS -suuntautumisvaihtoehto Suuntautumisvaihtoehdon esittely 1. vuoden opiskelijoille Kari Laitinen www.oamk.fi/~karil/opetus.html Ohjelmistokehitys -opintosuunnan valitsevista henkilöistä

Lisätiedot

12. Näppäimistöltä lukeminen 12.1

12. Näppäimistöltä lukeminen 12.1 12. Näppäimistöltä lukeminen 12.1 Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit.

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

Lisätiedot

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla 2.5. YDIN-HASKELL 19 tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla kirjaimilla. Jos Γ ja ovat tyyppilausekkeita, niin Γ on tyyppilauseke. Nuoli kirjoitetaan koneella

Lisätiedot

13/20: Kierrätys kannattaa koodaamisessakin

13/20: Kierrätys kannattaa koodaamisessakin Ohjelmointi 1 / syksy 2007 13/20: Kierrätys kannattaa koodaamisessakin Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy

Lisätiedot

Ohjelmistojen mallintaminen

Ohjelmistojen mallintaminen Ohjelmistojen mallintaminen - Mallit - Ohjelmiston kuvaaminen malleilla 31.10.2008 Harri Laine 1 Malli: abstraktio jostain kohteesta Abstrahointi: asian ilmaiseminen tavalla, joka tuo esiin tietystä näkökulmasta

Lisätiedot

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia.

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia. Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-ympäristö Java-ohjelma ja ohjelmaluokka

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Pino Pinon määritelmä Pinon sovelluksia Järjestyksen kääntäminen Palindromiprobleema Postfix-lausekkeen laskenta Infix-lausekkeen muunto postfix-lausekkeeksi Sisäkkäiset funktiokutsut

Lisätiedot

1. Mitä tehdään ensiksi?

1. Mitä tehdään ensiksi? 1. Mitä tehdään ensiksi? Antti Jussi i Lakanen Ohjelmointi 1, kevät 2010/ Jyväskylän yliopisto a) Etsitään Googlesta valmis algoritmi b) Mietitään miten itse tehtäisiin sama homma kynällä ja paperilla

Lisätiedot

Lyhyt kertaus osoittimista

Lyhyt kertaus osoittimista , syksy 2007 Kertausta Luento 10 12.10.2007 Syksy 2007 1 Lyhyt kertaus osoittimista char *p; /* char, int, jne ilmoittavat, minkä tyyppisiä */ Keskusmuisti int *q; /* olioita sisältäviin muistilohkoihin

Lisätiedot

7. Näytölle tulostaminen 7.1

7. Näytölle tulostaminen 7.1 7. Näytölle tulostaminen 7.1 Sisällys System.out.println- ja System.out.print-operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden muotoilua. 7.2 Tulostusoperaatiot System.out.println-operaatio

Lisätiedot

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana Muilla kielillä: English Suomi Pong-peli, vaihe 3 Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana Jaetaan ohjelma pienempiin palasiin (aliohjelmiin) Lisätään peliin maila (jota ei voi vielä

Lisätiedot

Tietotekniikan valintakoe

Tietotekniikan valintakoe Jyväskylän yliopisto Tietotekniikan laitos Tietotekniikan valintakoe 2..22 Vastaa kahteen seuraavista kolmesta tehtävästä. Kukin tehtävä arvostellaan kokonaislukuasteikolla - 25. Jos vastaat useampaan

Lisätiedot

Tietueet. Tietueiden määrittely

Tietueet. Tietueiden määrittely Tietueet Tietueiden määrittely Tietue on tietorakenne, joka kokoaa yhteen eri tyyppistä tietoa yhdeksi asiakokonaisuudeksi. Tähän kokonaisuuteen voidaan viitata yhteisellä nimellä. Auttaa ohjelmoijaa järjestelemään

Lisätiedot

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1 4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen ja tulkinta. - Kääntäminen,

Lisätiedot

Liite 1: KualiKSB skenaariot ja PoC tulokset. 1. Palvelun kehittäjän näkökulma. KualiKSB. Sivu 1. Tilanne Vaatimus Ongelma jos vaatimus ei toteudu

Liite 1: KualiKSB skenaariot ja PoC tulokset. 1. Palvelun kehittäjän näkökulma. KualiKSB. Sivu 1. Tilanne Vaatimus Ongelma jos vaatimus ei toteudu Liite 1: skenaariot ja PoC tulokset 1. Palvelun kehittäjän näkökulma Tilanne Vaatimus Ongelma jos vaatimus ei toteudu Palvelun uusi versio on Palveluiden kehittäminen voitava asentaa tuotantoon vaikeutuu

Lisätiedot

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit TIE-20100 Tietorakenteet ja algoritmit 1 TIE-20100 Tietorakenteet ja algoritmit TIE-20100 Tietorakenteet ja algoritmit 2 Lähteet Luentomoniste pohjautuu vahvasti prof. Antti Valmarin vanhaan luentomonisteeseen

Lisätiedot

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

C-ohjelmoinnin peruskurssi. Pasi Sarolahti C! C-ohjelmoinnin peruskurssi Pasi Sarolahti Mitä haluan oppia C-kurssilla? ja miksi? Tutustu lähimpään naapuriin Keskustelkaa miksi halusitte / jouduitte tulemaan kurssille 3 minuuttia è kootaan vastauksia

Lisätiedot

Agenda. Läpäisyvaatimukset Henkilökunta Luennot ja aikataulu Kurssimateriaali Harjoitustyöt Demoharjoitus Tentti ja arvostelu Muuta?

Agenda. Läpäisyvaatimukset Henkilökunta Luennot ja aikataulu Kurssimateriaali Harjoitustyöt Demoharjoitus Tentti ja arvostelu Muuta? OHJ-4301 Sulautettu Ohjelmointi (http://www.cs.tut.fi/~sulo/) 5op, to 12-14, 14, TB 109 Arto Salminen, arto.salminen@tut.fi Agenda Läpäisyvaatimukset Henkilökunta Luennot ja aikataulu Kurssimateriaali

Lisätiedot

Palomuurit. Palomuuri. Teoriaa. Pakettitason palomuuri. Sovellustason palomuuri

Palomuurit. Palomuuri. Teoriaa. Pakettitason palomuuri. Sovellustason palomuuri Palomuuri Teoriaa Palomuurin tehtävä on estää ei-toivottua liikennettä paikalliseen verkkoon tai verkosta. Yleensä tämä tarkoittaa, että estetään liikennettä Internetistä paikallisverkkoon tai kotikoneelle.

Lisätiedot

Software product lines

Software product lines Thomas Gustafsson, Henrik Heikkilä Software product lines Metropolia Ammattikorkeakoulu Insinööri (AMK) Tietotekniikan koulutusohjelma Asiantuntijateksti 17.11.2013 Sisällys 1 Johdanto 1 2 Software product

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Geneerinen ohjelmointi. Lueteltu tyyppi enum. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien silmukoimiseen:

Lisätiedot

Ohjelmistojen mallintaminen. Luento 11, 7.12.

Ohjelmistojen mallintaminen. Luento 11, 7.12. Ohjelmistojen mallintaminen Luento 11, 7.12. Viime viikolla... Oliosuunnittelun yleiset periaatteet Single responsibility eli luokilla vain yksi vastuu Program to an interface, not to concrete implementation,

Lisätiedot

Virtualisointiympäristössä on kolme pääosaa: isäntä (host), virtualisointikerros ja vieras (guest).

Virtualisointiympäristössä on kolme pääosaa: isäntä (host), virtualisointikerros ja vieras (guest). 1 Virtualisoinnin avulla voidaan purkaa suora linkki suoritettavan sovelluksen (tai käyttöjärjestelmän tms.) ja sitä suorittavan laitteiston välillä. Näin saavutetaan joustavuutta laitteiston käytössä.

Lisätiedot

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

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä Pekka Ryhänen & Erkki Pesonen 2002 BlueJ:n käyttö Nämä ohjeet on tarkoitettu tkt-laitoksen mikroluokan koneilla tapahtuvaa käyttöä varten. Samat asiat pätevät myös muissa luokissa ja kotikäytössä, joskin

Lisätiedot

Hyvän salasanan tunnusmerkit Hyökkääjästä salasanan pitää näyttää satunnaiselta merkkijonolta. Hyvän salasanan luominen: Luo mahdollisimman pitkä

Hyvän salasanan tunnusmerkit Hyökkääjästä salasanan pitää näyttää satunnaiselta merkkijonolta. Hyvän salasanan luominen: Luo mahdollisimman pitkä Hyvä Salis Hyvän salasanan tunnusmerkit Hyökkääjästä salasanan pitää näyttää satunnaiselta merkkijonolta. Hyvän salasanan luominen: Luo mahdollisimman pitkä salasana. Jokainen salasanaan lisäämäsi kirjain

Lisätiedot

etunimi, sukunimi ja opiskelijanumero ja näillä

etunimi, sukunimi ja opiskelijanumero ja näillä Sisällys 1. Algoritmi Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.1 1.2 Algoritmin määritelmä Ohjelmointi

Lisätiedot

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen, tommi.mikkonen@tut.fi

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen, tommi.mikkonen@tut.fi 5. Luento: Rinnakkaisuus ja reaaliaika Tommi Mikkonen, tommi.mikkonen@tut.fi Agenda Perusongelmat Jako prosesseihin Reaaliaika Rinnakkaisuus Rinnakkaisuus tarkoittaa tässä yhteydessä useamman kuin yhden

Lisätiedot

Android ohjelmointi. Mobiiliohjelmointi 2-3T5245

Android ohjelmointi. Mobiiliohjelmointi 2-3T5245 Android ohjelmointi Mobiiliohjelmointi 2-3T5245 Mikä on Android? Linux kernelin päälle rakennettu, Googlen kehittämä sovelluspino mobiilisovelluksiin Erillinen versio puhelimelle ja taulutietokoneille

Lisätiedot

Ohjelmien automaattisen verifioinnin reunamailla

Ohjelmien automaattisen verifioinnin reunamailla Ohjelmien automaattisen verifioinnin reunamailla Antti Siirtola Tietotekniikan laitos, Perustieteiden korkeakoulu, Aalto-yliopisto, antti.siirtola@aalto.fi Suomalainen Tiedeakatemia, Nuorten akatemiaklubi,

Lisätiedot

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 1 Määrittelyjoukoista Tarkastellaan funktiota, jonka määrittelevä yhtälö on f(x) = x. Jos funktion lähtöjoukoksi määrittelee vaikkapa suljetun välin [0, 1], on funktio

Lisätiedot

Ylläpito. Ylläpito. Ylläpidon lajeja Ohjelmistotuotanto, syksy 1998 Ylläpito

Ylläpito. Ylläpito. Ylläpidon lajeja Ohjelmistotuotanto, syksy 1998 Ylläpito Kaikki ohjelmistoon sen julkistamisen jälkeen kohdistuvat muutostoimenpiteet jopa 70-80% ohjelmiston elinkaarenaikaisista kehityskustannuksista Ylläpidon lajeja korjaava ylläpito (corrective) testausvaiheessa

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 28.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 28.2.2011 1 / 46 Ohjelmointiprojektin vaiheet 1. Määrittely 2. Ohjelman suunnittelu (ohjelman rakenne ja ohjelman

Lisätiedot

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla ohjelmoida useita komponenteiltaan ja rakenteeltaan

Lisätiedot

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen:

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen: Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen: S A S B Samaan jäsennyspuuhun päästään myös johdolla S AB Ab ab: S A S B Yhteen jäsennyspuuhun liittyy aina tasan yksi vasen

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Useampitasoiset ADT:t Käytetään esimerkkiohjelmaa Ratkaisuyritys 1 Ratkaisuyritys 2 Lopullinen ratkaisu Lopullisen ratkaisun toteutusyritys Lopullisen ratkaisun oikea toteutus

Lisätiedot

16. Ohjelmoinnin tekniikkaa 16.1

16. Ohjelmoinnin tekniikkaa 16.1 16. Ohjelmoinnin tekniikkaa 16.1 Sisällys For-lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. If-else-lause vaihtoehtoisesti

Lisätiedot

1. Algoritmi 1.1 Sisällys Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. Muuttujat ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.2 Algoritmin määritelmä Ohjelmointi

Lisätiedot

Yhtälönratkaisusta. Johanna Rämö, Helsingin yliopisto. 22. syyskuuta 2014

Yhtälönratkaisusta. Johanna Rämö, Helsingin yliopisto. 22. syyskuuta 2014 Yhtälönratkaisusta Johanna Rämö, Helsingin yliopisto 22. syyskuuta 2014 Yhtälönratkaisu on koulusta tuttua, mutta usein sitä tehdään mekaanisesti sen kummempia ajattelematta. Jotta pystytään ratkaisemaan

Lisätiedot

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

AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin Raimo Nikkilä Aalto-yliopiston sähkötekniikan korkeakoulu - Automaation tietotekniikan tutkimusryhmä 17. tammikuuta 2013

Lisätiedot

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4) 2. Lisää Java-ohjelmoinnin alkeita Muuttuja ja viittausmuuttuja Vakio ja literaalivakio Sijoituslause Syötteen lukeminen ja Scanner-luokka 1 Muuttuja ja viittausmuuttuja (1/4) Edellä mainittiin, että String-tietotyyppi

Lisätiedot

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten Sisällys 16. Ohjelmoinnin tekniikkaa Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. For-lause lyhemmin. If-else-lause vaihtoehtoisesti

Lisätiedot

Hahmon etsiminen syotteesta (johdatteleva esimerkki)

Hahmon etsiminen syotteesta (johdatteleva esimerkki) Hahmon etsiminen syotteesta (johdatteleva esimerkki) Unix-komennolla grep hahmo [ tiedosto ] voidaan etsia hahmon esiintymia tiedostosta (tai syotevirrasta): $ grep Kisaveikot SM-tulokset.txt $ ps aux

Lisätiedot

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

Lisätiedot

16. Ohjelmoinnin tekniikkaa 16.1

16. Ohjelmoinnin tekniikkaa 16.1 16. Ohjelmoinnin tekniikkaa 16.1 Sisällys Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. For-lause lyhemmin. If-else-lause vaihtoehtoisesti

Lisätiedot

Vaatimusmäärittely Ohjelma-ajanvälitys komponentti

Vaatimusmäärittely Ohjelma-ajanvälitys komponentti Teknillinen korkeakoulu 51 Vaatimusmäärittely Ohjelma-ajanvälitys komponentti Versio Päiväys Tekijä Kuvaus 0.1 21.11.01 Oskari Pirttikoski Ensimmäinen versio 0.2 27.11.01 Oskari Pirttikoski Lisätty termit

Lisätiedot

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

4. Luokan testaus ja käyttö olion kautta 4.1 4. Luokan testaus ja käyttö olion kautta 4.1 Olion luominen luokasta Java-kielessä olio määritellään joko luokan edustajaksi tai taulukoksi. Olio on joukko keskusmuistissa olevia tietoja. Oliota käsitellään

Lisätiedot

1. Miten tehdään peliin toinen maila?

1. Miten tehdään peliin toinen maila? Muilla kielillä: English Suomi Pong-peli, vaihe 4 Tässä oppaassa teemme toisenkin mailan. 1. Miten tehdään peliin toinen maila? Maila tehtiin edellisessä vaiheessa, aliohjelmassa LuoKentta, seuraavasti:

Lisätiedot

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

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } } Yksikkötestauksella tarkoitetaan lähdekoodiin kuuluvien yksittäisten osien testaamista. Termi yksikkö viittaa ohjelman pienimpiin mahdollisiin testattaviin toiminnallisuuksiin, kuten olion tarjoamiin metodeihin.

Lisätiedot

Ylläpito. Ylläpidon lajeja

Ylläpito. Ylläpidon lajeja Ylläpito Kaikki ohjelmistoon sen julkistamisen jälkeen kohdistuvat muutostoimenpiteet jopa 70-80% ohjelmiston elinkaarenaikaisista kehityskustannuksista Ylläpidon lajeja korjaava ylläpito (corrective)

Lisätiedot

P e d a c o d e ohjelmointikoulutus verkossa

P e d a c o d e ohjelmointikoulutus verkossa P e d a c o d e ohjelmointikoulutus verkossa Java-kielen perusteet Teoria ja ohjelmointitehtävät Java-kielen perusteet 3 YLEISKATSAUS KURSSIN SISÄLTÖIHIN 10 JAVA-KIELEN PERUSTEET 10 OPISKELUN ALOITTAMINEN

Lisätiedot

Pertti Pennanen DOKUMENTTI 1 (5) EDUPOLI ICTPro1 29.10.2013

Pertti Pennanen DOKUMENTTI 1 (5) EDUPOLI ICTPro1 29.10.2013 Virtualisointi Pertti Pennanen DOKUMENTTI 1 (5) SISÄLLYSLUETTELO Virtualisointi... 2 Virtualisointiohjelmia... 2 Virtualisointitapoja... 2 Verkkovirtualisointi... 2 Pertti Pennanen DOKUMENTTI 2 (5) Virtualisointi

Lisätiedot