Simulointi. Oliopohjainen



Samankaltaiset tiedostot
Simulointi. Simulointi. Esimerkkejä. Mallit. Kurssirunko. Esimerkkejä

Simulointi. Tapahtumapohjainen

Tavoite. Monitorit. Monitori Hoare Monitori. Minimoi virhemahdollisuuksia. Monitori Synkronointimenetelmiä Esimerkkejä

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen,

Lue ohjeet huolellisesti ennen laitteen käyttöä.

Ohjelmoinnin peruskurssien laaja oppimäärä

11/20: Konepelti auki

Monitorit. Monitori Synkronointimenetelmiä Esimerkkejä. Andrews , Stallings 5.5

Monitorit. Tavoite. Monitori Synkronointimenetelmiä Esimerkkejä. Andrews , Stallings 5.5. Minimoi virhemahdollisuuksia

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

Käyttöjärjestelmät: Virtuaalimuisti

Luento 6. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä

Simulointi. Johdanto

String-vertailusta ja Scannerin käytöstä (1/2) String-vertailusta ja Scannerin käytöstä (2/2) Luentoesimerkki 4.1

Luento 6. June 1, Luento 6

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Dynaamisen järjestelmän siirtofunktio

UML -mallinnus TILAKAAVIO

Rinnakkaisuus. parallel tietokoneissa rinnakkaisia laskentayksiköitä concurrent asioita tapahtuu yhtaikaa. TTY Ohjelmistotekniikka

7/20: Paketti kasassa ensimmäistä kertaa

Osion kaksi kertaus. Jukka Juslin. Jukka Juslin

Sisällys. 12. Monimuotoisuus. Johdanto. Alityypitys. Johdanto. Periytymismekanismi määrittää alityypityksen.

5/20: Algoritmirakenteita III

Osio 4: Graafinen käyttöliittymä

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

Veto-visualisointityökalu

Liite 1. Projektin tulokset (Semaforit Javassa) Jukka Hyvärinen Aleksanteri Aaltonen

Ohjelmoinnin peruskurssien laaja oppimäärä

Graafinen käyttöliittymä, osa 1

Aalto Yliopisto T Informaatioverkostot: Studio 1. Oliot ja luokat Javaohjelmoinnissa

19/20: Ikkuna olio-ohjelmoinnin maailmaan

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Graafisen käyttöliittymän ohjelmointi Syksy 2013

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

Mikä yhteyssuhde on?

815338A Ohjelmointikielten periaatteet

Projekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla

Jaetun muistin muuntaminen viestin välitykseksi. 15. lokakuuta 2007

Kassanhallintapalvelu muuttuu alkaen

Vesisika. metsiemme työmyyrä.

Palvelujen ja prosessien johtaminen olennaisen tiedon avulla

KELAN INDUKTANSSI VAASAN YLIOPISTO TEKNILLINEN TIEDEKUNTA SÄHKÖTEKNIIKKA. Miika Manninen, n85754 Tero Känsäkangas, m84051

P-Frami sopimusasiakkaan käyttöohje

Käyttöjärjestelmät: prosessit

8/20: Luokat, oliot ja APIt

Rinnakkaisuuden hyväksikäyttö peleissä. Paula Kemppi

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

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Klubitalot neljä case-elinkaarilaskelmaa kustannuksista ja hyödyistä. Harri Hietala

Ajankohtaista Liikenneviraston hankinnan ohjauksesta. Vesiväyläpäivä 2016,

RINNAKKAINEN OHJELMOINTI A,

1 / 11. Digitaalisen arkkitehtuurin yksikkö Aalto-yliopisto. Pikaopas Maxwelliin. ARK-A2500 DA-alkeet Elina Haapaluoma, Heidi Silvennoinen Syksy 2015

- Kommentoi koodisi. Koodin kommentointiin kuuluu kuvata metodien toiminta ja pääohjelmassa tapahtuvat tärkeimmät toiminnat. Esim.

Miksi kysyttäisiin sosiaalityön asiakkailta?

812347A Olio-ohjelmointi, X Reflektiivisyys

Johdatus L A TEXiin. 6. Omat komennot ja lauseympäristöt Markus Harju. Matemaattiset tieteet

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

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

Hyvä vesihuoltohanke, suunnittelijan näkökulma

TW- EAV510: WDS- TOIMINTO KAHDEN TW- EAV510 LAITTEEN VÄLILLÄ

Ohjelmistojen mallintaminen, kurssikoe esimerkkivastauksia

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

L2TP LAN to LAN - yhteys kahden laitteen välille

Rinnakkaisohjelmointi, Syksy 2006

Tips & Tricks for TestStand development NI Days 2013

Hae Opiskelija käyttöohje

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

812315A Ohjelmiston rakentaminen. Asynkronisuus

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Opintopolku opastaa korkeakouluhakuihin

T Ohjelmistojen määrittely- ja suunnittelumenetelmät Harjoitustyöraportti TNT - Tarkistetaan Ne Tentit Analyysimalli

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

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

OHJ-1151 Ohjelmointi IIe

Suunnitteluvaihe prosessissa

Oleelliset vaikeudet OT:ssa 1/2

Asiakkaiden osallisuus mitä. Asta Niskala ja Annikki Paajanen Oulu

812341A Olio-ohjelmointi, I Johdanto

Jäsenluettelo ja henkilörekisterit. Olli Välke Opintokeskus Visio

KUNTIEN ROOLI MUUTOKSESSA Vaikuttamisiltapäivä ja EK-foorumi 3.2.

Ehto- ja toistolauseet

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

Laboratoriotyön sisältö. Pareittain tehtävä laboratoriotyö Vaatimukset: Laboratoriotyöskentely Loppuraportti (1 raportti/työ)

UML Luokkakaavio 14:41

Ohjelmistojen mallintaminen. Luento 11, 7.12.

7. Oliot ja viitteet 7.1

Huomaathan, että ohjeessa olevat näytöistä otetut kuvat voivat poiketa sinun koulutuksesi vastaavien sivujen kuvista.

Tieteelliset lehdet ja takautuva digitointi. Digitointirahaa onko sitä? -seminaari Jyrki Ilva

Mokapäivä Leppävaara

Intel Threading Building Blocks

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

Luokka- ja oliokaaviot

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Tikon yksittäismaksujen käsittely

2. Olio-ohjelmoinnin perusteita 2.1

PROJEKTIN OHJAUS JA SEURANTA JOUNI HUOTARI, ESA SALMIKANGAS

DTEK1047: Hajautet ohjelmistojärjestelmät (HOJ)

Racket ohjelmointia. Tiina Partanen 2014

2. Olio-ohjelmoinista lyhyesti 2.1

NOUHÄTÄ 2015 Grande Finale. Projektipäällikkö Teemu Jumpponen Palopäällystökurssi AmkN13

Transkriptio:

Simulointi Oliopohjainen

Prosessipohjainen s. Loogisesti yhteenkuuluvat tapahtumat kootaan yhdeksi elinkaareksi (irrallisten tapahtumarutiinien sijaan) Osakokonaisuuksien hahmottaminen helpompaa Hallittava useamman samanaikaisen elinkaaren koordinointi Mahdollisesti useampia instansseja samasta elinkaaresta/prosessista.

Asiakasprosessi Pesuesimerkissä jokaisella asiakkaalla on selkeä elinkaari. Esimerkki voidaan mallittaa yhdellä prosessilla, josta tehdään kopio jokaista asiakasta kohden. Miten hoidetaan useampi rinnakkainen asiakasprosessi, jos ohjelmointikieli ei tue rinnakkaisuutta.

Asiakasprosessi Elinkaari on jaettava vaiheisiin (tapahtuma per vaihe), joihin voidaan viitata ja jonka prosessi-instanssi muistaa. Tapahtumalistassa aika ja viittaus prosessi-instanssiin (ja vaiheeseen). Simuloinnin pääohjelma Lukee tapahtumalistaa. Kutsuu seuraavaa prosessi-instanssia suorittamaan seuraavan vaiheensa.

Asiakasprosessi AsiakasProsessi(Phase) VaiheTyyppi :: Phase CASE Phase Tulo { Auto = new Asiakas \\ Kutsuu seuraavan asiakkaan Auto.Vaihe(TuloAikaJakauma(),Tulo) Jos (Jono.Pituus< m) Jono.Lisää(*this) Palvelu.Kysy() Muuten \\Jos asiakas ei pääse jonoon, se poistuu this.vaihe(0, Lähtö) } Alku { this.seuraavavaihe(palveluaikajakauma()) }

Asiakasprosessi Loppu { Palvelu.Vapauta() Palvelu.Kysy() this.seuraavavaihe(0.) } Lahto { //Keraa statiikka PoistaAsiakas } ENDCASE

Palvelu Palvelu.Kysy() AsiakasTyyppi :: Auto { Jos(Palvelu.Vapaa() ja Jono.Pituus()>0) { Auto=Jono.Ota() Palvelu.Varaa() Auto.SeuraavaVaihe(0.) //Vaiheeseen Alku } }

Analyysiä Perinteisillä kielillä on erikseen Välitettävä suorituksen vaihe Välitettävä sisäiset muuttujat Jaettava suoritus vaiheisiin Rakennettava ehdolliset elinkaaret Ohjelmointi helpottuu, jos nämä voi kapseloida prosessi-instanssin sisään -> Olio

Oliosimulointi Oliot keksittiin kapseloimaan simuloitavia prosesseja (SIMULA-kieli, 1967). Perintämekanismit luotiin piilottamaan säikeistyksen edellyttämät kontrollirakenteet. Prosessien tiloille ja kommunikaatiolle on luotu vakioitu sanasto/metodit.

Prosessiolion tilat Neljä mahdollista tilaa Aktiivinen (parhaillaan suoritettava) Ajastettu (scheduled) Aktivoitumisaika tiedossa eli tapahtumalistassa viite tähän olioon Passiivinen (ei tiedossa tulevia tapahtumia) Jonkin toisen olion on aktivoitava/ajastettava tämä Lopetettu (terminated, ei voida enää mitenkään aktivoida)

Tilamuutokset Vain aktiivinen prosessi voi tehdä tilamuutoksia Itseensä Passivate (odottaa kunnes joku aktivoi) Hold (odottaa itse määräämänsä ajan) Terminoituu jos elinkaari päättyy Toisiin Activate (herättää passiivisen, heti tai myöhemmin) Cancel (peruuttaa ajastetun aktivoinnin) Terminate (poistaa koko prosessin)

Esimerkki Pesuesimerkki voidaan toteuttaa monin eri tavoin Jako aktiivisiin suureisiin (oma elinkaari) ja muihin (metodeja, joita aktiiviset prosessit kutsuvat) voidaan tehdä monella tapaa. Aktiiviset asiakkaat, passiivinen palveluresurssi jonoineen Passiivinen asiakas ja jono, aktiivinen palvelu

Asiakasprosessi Asiakas Auto Asema Q Auto = new Asiakas Auto.Activate(TuloAikaJakauma()) \\seuraava asiakas Jos (Q.Pituus <m+1) Q.Varaa(*this) \\ varataan palvelu mahd. \\jonotuksen jälkeen Hold(PalveluAikaJakauma()) \\ kontrolli siirtyy Q.Vapauta \\ Kerätään statistiikka Terminate \\asiakasprosessi kuolee jolloin kontrolli \\ siirtyy pois

Asema Alusta \\ Asetetaan jono tyhjäksi ja \\tehdään muut alustukset Varaa(Asiakas Auto) Jos Vapaa Vapaa=false Muuten \\ varataan palvelu, jos se on vapaa LisaaJonoon(Auto) \\ Jos ei vapaa, jäädään odottamaan Auto.Passivate() \\ Siirretään kontrolli pois Vapauta() Jos(Pituus >0) Auto = OtaJonosta() \\Jonon ensimmäinen Auto.Activate(0.) \\Aktivoidaan varaamaan asema Muuten Vapaa=true \\ Asema vapautuu

Pääohjelma AlustaStatiikka Q = New Jono Auto = New Asiakas Auto.Activate(TuloAikaJakauma()) Hold(SimuloinninKesto) Raportoi \\ Terminoi jonossa olevat asiakkaat ja jono \\ Terminoidu itse (päätymällä koodin loppuun) Pääohjelma, controller, on prosessiolio, jolla on simulointiprosessin metodit Luodaan varsinaisessa pääohjelmassa

Analyysiä Edellisessä esimerkissä tarvittiin prosesseja, joita voi suorittaa rinnakkain Taustalla säikeiden (threads) käyttö Tarvittavat luokat periytettävä käytetyn ohjelmointikielen/ympäristön säieluokista Ks esim JavaSim tai C++Sim pakettien luokkakirjastoja Käytännössä esimerkki ei toimi Dynaamiset asiakkaat luovat uusia asiakkaita Kun ensimmäinen asiakas/säie kuolee, seuraavat menevät myös sekaisin Tarvitaan erillinen pysyvä asiakasgeneraattoriprosessi

Palvelupohjainen malli Pesu-esimerkki voidaan toteuttaa kahden prosessi-instanssin avulla Asiakasgeneraattori Palveluprosessi Lisäksi asiakkaat ja jono (passiivisia) Toteutus demona JavaSim-esimerkin pohjalta

Oikeat esimerkit Kaikkia tilanteita ei voi helposti mallittaa edellä esitetyillä prosessien tiloilla ja metodeilla Voidaan tunnistaa yleisesti toistuvia tilanteita, joille prosessimallia voidaan laajentaa Tietyn tapahtuman tai tilanteen odottaminen Keskeytykset Kriittiset resurssit

Oikeat esimerkit Käsitelaajennuksia ovat Prosessi voi odottaa (wait) Tietyn ajan Tietyn prosessin päättymistä Tiettyä resurssia (semafori) Jotain muuta ärsykettä (trigger) Odottava prosessi voidaan keskeyttää (interrupt) Aktivoidaan ennen kuin odotusehto täyttyy

Oikeat esimerkit Laajennuksia tarvitaan epäsynkroonisten tapahtumien hallintaan Tulevan tapahtuman aika ja/tai sen generoiva prosessi ei ole etukäteen tiedossa Semafori välittää tietoa kriittistä resurssia käyttävän ja sitä odottavien olioiden välillä Muuten kaikki mahdolliset kombinaatiot olisi huomioitava koodissa

Oikeat esimerkit Yleensä simulointimalleissa on enemmän rakenneosia Useita palvelupisteitä, jonoja, asiakasvirtoja Yksittäisen osan elinkaari hallittavissa ja usein vakioitavissa (parametrisoitava luokka) Osien keskinäiset kytkennät hahmotettava (graafinen editori, visualisointi, reititystaulut) Käytännössä periytettävä myös graafisia luokkia.

Linkkejä http://javasim.ncl.ac.uk/ Oleellisesti SIMULA ympäristö avoimena Java toteutuksena http://asi-www.informatik.unihamburg.de/desmoj/ Java-pohjainen ympäristö tapahtuma- ja oliopohjaiseen simulointiin http://www.idsia.ch/~andrea/simtools.html Laaja kokoelma linkkejä simulointisoftiin

Konttisatama Ajateltavissa useita eri strategioita kokonaisuuden mallittamiseen Laivat voivat olla joko aktiivisia prosesseja tai passiivista työkuormaa, jolla on vain reititysinformaatio Laituri voi olla aktiivinen palvelu tai passiivinen resurssi Satama voi olla kokoelma aktiivisia palveluja tai aktiivinen palvelu, jolla tietty kapasitetti

Konttisatama Eri strategioissa omat sudenkuoppansa Miten huolehditaan passiivinen laiva oikealla hetkellä uuteen satamaan Jos satama on aktiivinen ja laituri pelkkä kapasiteetti, missä on laiva kun sitä puretaan Täysin passiivinenkin satama+laituri vaatii silti omat rakenteensa (jonot, kapasiteetin hallinta)