10. Kohti suurempia sulautettuja ohjelmistoja
|
|
- Erkki Penttilä
- 8 vuotta sitten
- Katselukertoja:
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, tommi.mikkonen@tut.fi Agenda Johdanto Ohjelmistopino Siirrettävyydestä Vuotavat abstraktiot Joitakin suunnitteluratkaisuja Formaali
LisätiedotOHJ-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ätiedot10. 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ätiedot11/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ätiedotConcurrency - 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ätiedotOhjelmiston 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ätiedotAgenda. 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ätiedotELM 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ätiedotOperaattoreiden 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ätiedotOhjelmistojen 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ätiedot15. 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ätiedotSimulaattorin 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ätiedot9. 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ätiedotohjelman 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ätiedot812347A 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ätiedotOhjelmointi 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ätiedot1 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ätiedotOhjelmistojen 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ätiedotArkkitehtuurikuvaus. 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ätiedotChapel. 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ätiedotJAVA-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ätiedot8/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ätiedotOhjelmoinnin 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ätiedotAlgoritmit 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ätiedotC-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ätiedot815338A 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ätiedotUudelleenkä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ätiedotSisä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ätiedotSisä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ätiedotDigi-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ätiedotMerkkijono 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ätiedotWeb-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ätiedotTIETOKONE 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ätiedotOsoitin 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ätiedotSulautettujen 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ätiedotOliosuunnitteluesimerkki: 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ätiedotSisä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ätiedotOlion 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ätiedotSisä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ätiedotOhjelmointi 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ätiedotTaulukot. 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ätiedotTietorakenteet 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ätiedotJava-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ätiedotSisä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ätiedot2 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ätiedotRekursiolause. 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ätiedotMatematiikan 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ätiedotTutoriaalilä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ätiedotOHJELMISTOKEHITYS -suuntautumisvaihtoehto
OHJELMISTOKEHITYS -suuntautumisvaihtoehto Suuntautumisvaihtoehdon esittely 1. vuoden opiskelijoille Kari Laitinen www.oamk.fi/~karil/opetus.html Ohjelmistokehitys -opintosuunnan valitsevista henkilöistä
Lisätiedot12. 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ätiedot815338A 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ätiedottää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ätiedot13/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ätiedotOhjelmistojen 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ätiedotOhjelmointitaito (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ätiedotTietorakenteet 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ätiedot1. 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ätiedotLyhyt 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ätiedot7. 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ätiedotPong-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ätiedotTietotekniikan 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ätiedotTietueet. 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ätiedot4. 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ätiedotLiite 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ätiedotTIE 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ätiedotC-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ätiedotAgenda. 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ätiedotPalomuurit. 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ätiedotSoftware 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ätiedot15. 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ätiedotOhjelmistojen 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ätiedotVirtualisointiympä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ätiedotBlueJ 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ätiedotHyvä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ätiedotetunimi, 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ätiedot5. 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ätiedotAndroid 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ätiedotOhjelmien automaattisen verifioinnin reunamailla
Ohjelmien automaattisen verifioinnin reunamailla Antti Siirtola Tietotekniikan laitos, Perustieteiden korkeakoulu, Aalto-yliopisto, antti.siirtola@aalto.fi Suomalainen Tiedeakatemia, Nuorten akatemiaklubi,
LisätiedotMatematiikan 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ätiedotYllä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ätiedotOhjelmoinnin 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ätiedotOngelma(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ätiedotVasen 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ätiedotTietorakenteet 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ätiedot16. 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ätiedot1. 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ätiedotYhtä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ätiedotAS-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ätiedot2. 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ätiedotSisä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ätiedotHahmon 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ätiedot12. 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ätiedot16. 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ätiedotVaatimusmää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ätiedot4. 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ätiedot1. 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ätiedotYksikkö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ätiedotYllä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ätiedotP 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ätiedotPertti 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