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

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

10. Kohti suurempia sulautettuja ohjelmistoja

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

15. Ohjelmoinnin tekniikkaa 15.1

Mikä yhteyssuhde on?

15. Ohjelmoinnin tekniikkaa 15.1

OHJ-4301 Sulautettu Ohjelmointi

Metodien tekeminen Javalla

9. Luento: Ohjelmistotyö. Tommi Mikkonen,

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

TIETORAKENTEET JA ALGORITMIT

2. Olio-ohjelmoinista lyhyesti 2.1

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

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

1 Tehtävän kuvaus ja analysointi

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

4. Olio-ohjelmoinista lyhyesti 4.1

7. Oliot ja viitteet 7.1

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Rutiinin muodostaminen. 2. Rutiinin muodostaminen. specification) Määrittely (specification( Määrittelyn osapuolet. Hyvän ohjelman tunnusmerkit

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

16. Javan omat luokat 16.1

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

14. Luento: Kohti hajautettuja sulautettuja järjestelmiä. Tommi Mikkonen,

Olio-ohjelmointi Javalla

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

18. Abstraktit tietotyypit 18.1

Java kahdessa tunnissa. Jyry Suvilehto

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

11. Javan valintarakenteet 11.1

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

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

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

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Taulukot. Jukka Harju, Jukka Juslin

Java-kielen perusteita

Tietorakenteet ja algoritmit

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

UML ja luokkien väliset suhteet

Java-kielen perusteet

Laskennallisesti Älykkäät Järjestelmät. Sumean kmeans ja kmeans algoritmien vertailu

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

11. Javan valintarakenteet 11.1

Luokat ja oliot. Ville Sundberg

ITKP102 Ohjelmointi 1 (6 op)

Metodit Arvotyyppi. Metodit Arvotyyppi. Metodit Parametrit. Metodit Parametrit. Metodit Kuormittaminen. Metodit Kuormittaminen. Javan perusteet

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

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

Sisältö. 2. Taulukot. Yleistä. Yleistä

Osoittimet ja taulukot

Ohjelmistotekniikan menetelmät, koe

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

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

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

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

Rajapinta (interface)

KOHDELUOKAN MÄÄRITTELY

Olio-ohjelmointi Syntaksikokoelma

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

Listarakenne (ArrayList-luokka)

A TIETORAKENTEET JA ALGORITMIT

Encapsulation. Imperative programming abstraction via subprograms Modular programming data abstraction. TTY Ohjelmistotekniikka

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

Ohjelmointi 2 / 2010 Välikoe / 26.3

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

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Luokan muodostimet (Constructors)

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

17. Javan omat luokat 17.1

private TreeMap<String, Opiskelija> nimella; private TreeMap<String, Opiskelija> numerolla;

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

9. Periytyminen Javassa 9.1

ITKP102 Ohjelmointi 1 (6 op)

Taulukoiden käsittely Javalla

Poikkeustenkäsittely

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

Javan perusteita. Janne Käki

1. Mitä tehdään ensiksi?

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

13. Loogiset operaatiot 13.1

Tietorakenteet ja algoritmit

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

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

Ohjelmoinnin peruskurssien laaja oppimäärä

Mitä poikkeuskäsittely tarkoittaa?

Tietorakenteet ja algoritmit

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VII Suunnittelumallit Adapter ja Composite

Yksikkötestaus. Kattava testaus. Moduulitestaus. Ohjelman testaus. yksikkotestaus/ Seija Lahtinen

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)

Ohjelmoinnin perusteet, syksy 2006

Java UI-komponentit (JTable) Juha Järvensivu 2007

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

public static void main (String [] args)

Java-API, rajapinnat, poikkeukset, UML,...

Metodien tekeminen Javalla

9. Periytyminen Javassa 9.1

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

Transkriptio:

10. Luento: Kohti suurempia sulautettuja ohjelmistoja Tommi Mikkonen, tommi.mikkonen@tut.fi

Agenda Johdanto Ohjelmistopino Siirrettävyydestä Vuotavat abstraktiot Joitakin suunnitteluratkaisuja Formaali vai epäformaali menetelmä? Yhteenveto

Johdanto Sulautetut järjestelmät muuttuneet monimutkaisemmiksi Vertailun vuoksi: Apollo 8:n tietokone vetää vertoja nykyiselle (yksinkertaiselle) taskulaskimelle Kännykkä on kuin muutaman vuoden takainen PC Laitteisto nopeampaa, muistia enemmän, hajautus tarpeen mukaan Ohjelmiston kasvava rooli; samat ongelmat kuin mitä aiemmin pöytätietokoneissa Muunneltavuus, ylläpidettävyys, luotettavuus, jne

Ohjelmistopino (http://focus.ti.com/general/docs/wtbu/wtbuproductcontent.tsp? templateid=6123&navigationid=12844&contentid=53244)

Siirrettävyydestä Joskus välttämätöntä vaikka vain 1 kohdelaite (esim. emulaattori, simulaattori, laite itse) Useamman kohdelaitteen tapauksessa yleensä väistämätöntä Useita käytännön menetelmiä; tässä Ehdollinen käännös ( #ifdef ARM ) Ohjelmamakrot ( #define nelio (x) ((x)*(x)) 1 ) Moduulien erillinen toteutus Skriptit, konfiguraatiotiedostot, jne. Usein kannattaa käyttää useampaa kääntäjää! 1 Miksi muuten näin monet sulut?

Vuotavat abstraktiot Esimerkki: 0-loppuinen merkkijono char * strcat(char * c1, char * c2) { int i, j; while(i = 0; 0!= c1[i]; i++); while(j = 0; 0!= c2[j]; j++, i++) c1[i] = c2[j]; c1[i+1] = 0; return c1;

Vuotavien abstraktioiden vaikutus ohjelmointiin Abstraktioiden vuotaminen (ts. toteutustekniikka näkyy ohjelmoijalle) tapahtuu yleensä ääritilanteissa Suorituskyvyn ylitys Muistin loppuminen Ongelmat tietoliikenteessä Varautuminen yleisessä tapauksessa vaikeaa sillä vuotava abstraktio voi olla juuri vuotoon varautuva resurssi Nyrkkisääntö: Varaa ääritilanteisiin tarvittavat resurssit etukäteen!

Esimerkki public void push(object e) { ensurecapasity(); // Check slots count elements[size++] = e; public Object pop() { if (size == 0) throw new EmptyStackException(); return elements[--size]; Ok?

Pino johon viitteet kerätään size Stack Objects stored in Stack

ja vuotava abstraktio! Objects stored in Vector but not in Stack size Stack/Vector Objects stored in Stack

Korjaavat toimenpiteet public Object pop() { if (size == 0) throw new EmptyStackException(); Object result = elements[--size]; elements[size] = null; return result;

Sulautetun järjestelmän erityishaasteita Niukat resurssit Muisti, prosessori, levytila, kommunikointikanavat, jne. Toteutus tulee siis näkyviin n aiemmin kuin mitä perinteisimmissä järjestelmissä; toisaalta keinoja viestittää ongelmista on vähemmän Allokointivastuu joko ohjelmoijalla (C/C++) tai jollain osalla infrastruktuuria (Java) Lopulta ohjelmoija on kuitenkin vastuussa!

Esimerkki 1 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));

Tulokset ArrayImp (minimaalinen overhead) Bytes: 8016 Objects: 1 VectorImp (integerit olioiksi) Bytes: 40000 Objects: 2002 VectorImpSimple (lisäksi koon arvaus) Bytes: 52000 Objects: 2010 [Hartikainen: Java application and library memory consumption, TUT, 2005]

Esimerkki 2 static final int AMOUNT = 100; public void usestring() { String s = ; for(int i = 0; i < AMOUNT; i++) { s = s + a ; public void usestringbuffer() { String s = ; StringBuffer sb = new StringBuffer(AMOUNT); for(int i = 0; i < AMOUNT; i++) { sb = sb.append( a ); s = sb.tostring();

Tulokset UseString(yksinkertaisin) Bytes: 39000 Objects: 450 UseStringBuffer (optimoitu) Bytes: 304 Objects: 5 [Hartikainen: Java application and library memory consumption, TUT, 2005]

Esimerkki 3 Sovellus (14 luokkaa) refaktoroitiin suoraviivaisesti siten, että jäljelle jäi 1 luokka 14 classes: 14019 1 class: 7467 [Hartikainen: Java application and library memory consumption, TUT, 2005]

Kerrostaminen ja laitteiston kätkentä Resource 3 Resource Manager 3 Resource 1 Resource 2 Resource Manager 1 Resource Manager 4 Resource 4 Resource Manager 2 Laitteet (ja laiteabstraktiot) ohjaavat suunnittelua Jokaista laitetta varten oma hallintakomponentti Resurssien valvonta yksinkertaistuu Abstraktiorajapinnalla voidaan myös helpottaa siirrettävyyttä HAL, Hardware Abstraction Layer

Väyläabstraktio Resource 1 Resource 2 Resource 3 Resource Manager 3 Resource Manager 1 Resource Manager 2 Communication bus Resource Manager 4 Laitteet usein riippumattomia -> löyhä kytkentä sanomien avulla Uudet ominaisuudet uusien sanomien lisäämisellä Sopii myös hajautettuun sulautettuun ympäristöön Frakmentoinnin esto -> sanomat rengaspuskurissa tms. Resource 4

Käynnistysrutiinit Sama ohjelmisto erilaisessa laiteympäristössä voi vaatia erilaisen käynnistysrutiinin (esim. oheislaitteiden alustus) Muunneltava bootstrap Jokainen operaatio oma rutiininsa; boot-up script/procedure Käynnistysvektori Erilaiset konfiguraatiotiedostot, joilla käynnistystä voidaan ohjata

Muisti- ja ajoitusbudjetti Suunnitelma Muistin kulutukselle Suoritusajan käytölle Tarpeen, jotta valmistuskustannukset voitaisiin arvioida Lähtökohdaksi paras mahdollinen arvaus Kokonaan uusi kohdealue -> joitakin kokeiluja Aiemman toteutuksen uusi versio -> data aiemmasta/aiemmista versioista pohjaksi Nyrkkisääntö: Mitä enemmän vanhoja datapisteitä, sitä todennäköisemmin arvio osuu kohdalle

Formaalit menetelmät? Mitä myöhemmin virhe havaitaan, sitä kalliimpaa se on korjata Idea: Mitäpä jos mallinnetaan koko järjestelmä etukäteen täsmällisesti jotta kaikki virheet/erilaiset tulkinnat löydetään (ja korjataan) etukäteen? Täsmällisessä mallinnuksessa tarvitaan ns. formaaleja menetelmiä Matemaattinen tapa ilmaista ohjelmiston toiminta; tietokoneavusteinen päättely ja laadunvarmistus

Hyvät puolet Paljon erilaisia työkaluja, joiden kautta on mahdollista löytää ongelmia etukäteen Varsinkin tavalla tai toisella rajoitettujen ongelmien ratkaisu tuntuu olevan käytännössäkin mahdollista Usein käytössä silloin kun virheet ovat todella kalliita (esim. ilmailu, massatuotetut laitteet kuten prosessorit, jne) Joskus myös koodingenerointi ja oikeaksitodistaminen mahdollista Tosin usein vain rajoitetulle osalle ongelman ratkaisua

Huonot puolet Mistä tietää että formaali määritelmä on oikein? Etäisyys valmiiseen toteutukseen on edelleen melkoinen varsinkin silloin, kun toteutetaan ohjelmistopainotteista järjestelmää Monet käytännön asiat vaatisivat hyvin sovellusaluekohtaista formalismia Ratkaisu: Erilaiset puoliformaalit menetelmät, joissa yhdistyvät visuaalisuus ja matematiikka

Yhteenveto Painopiste laitteen hereille saamisesta laitteen pitkäaikaiseen käyttöön Valmiit ohjelmistopinot Vuotavien abstraktioiden hallinta Joustavuutta tuovat suunnitteluratkaisut Määrittelyn oikeellisuus ja täsmällisyys