Invarianter, +lstander og li1 mer seman+kk

Like dokumenter
IN1010 våren Repetisjon av tråder. 15. mai 2018

INF1010 Tråder II 6. april 2016

INF våren 2015

Tråder del 2 Våren 2012

Tråder del 2 Våren Stein Gjessing Institutt for informatikk Universitetet i Oslo

Start opp. Prosess 3 Meldingsutveksling Operativsystemet (styrer alt og sørger for kommunikasjon mellom prosesser)

Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen.

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

INF1010 Tråder mars 2016

INF1010 våren januar. Objektorientering i Java

Enkle generiske klasser i Java

Ukeoppgaver fra kapittel 3 & 4

Sortering med tråder - Quicksort

IN1010 våren januar. Objektorientering i Java

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

Oppgave 1 a. INF1020 Algoritmer og datastrukturer. Oppgave 1 b

INF1010 våren Grensesnitt

UNIVERSITETET I OSLO

INF1010, 21. januar Klasser med parametre = Parametriserte klasser = Generiske klasser

INF1010 våren Grensesnitt

INF Seminaroppgaver til uke 3

TOD063 Datastrukturer og algoritmer

INF1010, 15. januar time. Parametriserte klasser (generiske klasser) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

UNIVERSITETET I OSLO

Repetisjon. INF gruppe 13

Antall sider (inkl. forsiden): 7. Alle trykte og håndskrevne

UNIVERSITETET I OSLO

Forelesning 9 mandag den 15. september

IN Våren 2019 Tråder del mars 2019

UNIVERSITETET I OSLO

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

Stein Gjessing. Institutt for informatikk. Universitetet i Oslo. Institutt for informatikk

1. Krav til klasseparametre 2. Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF Våren 2017 Tråder del 1

Løse reelle problemer

Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 %

Prøveeksamen INF2440 v Arne Maus PSE, Inst. for informatikk

Forelesningsquiz. Forelesning inf Java 5. Sett dere to (eller tre) sammen og besvar de fire spørsmålene på utdelt ark. Tid: 15 min.

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

Spørsmål fra forrige forelesning. INF1000 Forelesning 7. Oppførselen til inword()/inint()/etc. Operator-presedens i Java

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

Dagens tema INF1010 INF1010 INF1010 INF1010

J2EE. CMP Entity Beans, Transaksjoner, JSP

Rekursjon. Binærsøk. Hanois tårn.

INF1000: Forelesning 7

INF1010 våren Grensesnitt (interface)

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

Kapittel 14, Hashing. Tema. Definere hashing Studere ulike hashfunksjoner Studere kollisjonsproblemet 17-1

INF1010. Grensesnittet Comparable<T>

Ta inn og ut av 2D-array. Java 6. Liste over ulike verdier i 2D-array. Det ferdige programmet. Vi skal lage et program som illustrerer hvordan man

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.

UNIVERSITETET I OSLO

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 11 sider inklusiv vedlegg og denne forsiden.

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

Utførelse av programmer, metoder og synlighet av variabler i JSP

INF1010 Eksamenstips. Løsningsforslag prøveeksamen del 1.

Objektorientert design av kode. Refaktorering.

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

INF1000: Forelesning 7. Konstruktører Static

UNIVERSITETET I OSLO

Oversikt. INF1000 Uke 6. Objekter, pekere og null. Lese og skrive fra/til fil. Litt om objekter, pekere og null Filer og easyio. Litt mer om tekster

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

ALGORITMER OG DATASTRUKTURER

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær:

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

G høgskolen i oslo. Emne: Algoritmer og datastrukturer. Emnekode: 80131A. Faglig veileder: UlfUttersrud. Gruppe(r) : Dato:

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

Binære søketrær. Et notat for INF1010 Stein Michael Storleer 16. mai 2013

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

UNIVERSITETET I OSLO

PRØVEEKSAMEN (rettet versjon 27/11)

INF2440 Prøveeksamen, løsningsforslag, 20 mai Arne Maus PSE, Inst. for informatikk

GUI 3 JavaFX. Mer interaksjon Hvordan gi input :l programmet. INF1010 Stein Michael Storleer

Post-it spørsmål fra timen (Arv og subklasser)

Obligatorisk oppgave 4: Lege/Resept

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring AITeL

Inf1000 (Uke 10) HashMap og ArrayList

NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

INF1000 Metoder. Marit Nybakken 16. februar 2004

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Oppgave 1 (Programtolkning) INF1000 Eksamen V06. Oppgave 1 (Programtolkning) Oppgave 1 (Programtolkning)

INF Notater. Veronika Heimsbakk 10. juni 2012

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

UNIVERSITETET I OSLO

Ordliste. Obligatorisk oppgave 1 - Inf 1020

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

Generelt om oblig 3. Oppgaveteksten kort sammendrag. Deloppgaver/menyvalg 15/03/2010. INF1000 Forelesning 9

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

UNIVERSITETET I OSLO

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

"Nelsons kaffebutikk"

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

Transkript:

Invarianter, +lstander og li1 mer seman+kk INF1010 14.april 2016 Stein Gjessing April 13, 2016 1

Invariant (= Invariant +lstandspåstand) Vi har se3 flere ganger at det er svært nyjg å formulere +lstandspåstander som styrer programmet (neste side). Når du lager en løkke er det all0d en invariant eller 0lstandspåstand som sier hvor langt arbeidet i løkka er kommet Data i et objekt er all0d styrt av en (eller flere) invarianter (konsistensregler, 0lstandspåstander) Tilstandspåstand = engelsk: asser0on 2

Eksempel fra Stein Michaels forelesning 3. mars om lister Tilstandsdiagram. Engelsk: state diagram 3

WIKIPEDIA: Ins0tu3 for informa0kk Invariant (computer science) In computer science, an invariant is a condi0on that can be relied upon to be true during execu0on of a program, or during some por0on of it. It is a logical asser0on that is held to always be true during a certain phase of execu0on. For example, a loop invariant is a condi0on that is true at the beginning and end of every execu0on of a loop...... Programmers o[en use asser0ons in their code to make invariants explicit. Some object oriented programming languages have a special syntax for specifying class invariants. 4

5 Invarianter på data i løkker Eksempel: Finne minste verdi i tabell minsttilnaa Ins0tu3 for informa0kk 0 minsttilnaa inneholder minste verdi i området fra og med tabell [0] til og med tabell[indeks] = Inv(indeks): indeks Induksjons- basis Induksjons- skri3 999

Invarianter på data i løkker Eksempel: Finne minste verdi i tabell // Vi vet ingenting annet enn at tabell [0] til og med // tabell[999] inneholder tall. Vi skal finne det minste int minsttilnaa = tabell[0]; Inv(0) minsttilnaa Ins0tu3 for informa0kk 0 // minsttilnaa inneholder minste verdi i området // fra og med tabell [0] til og med tabell[0] for (indeks = 1; indeks < 1000; indeks ++) { // minsttilnaa inneholder minste verdi i området // fra og med tabell [0] til og med tabell[indeks-1] if (minsttilnaa > tabell [indeks] ) minsttilnaa = tabell[indeks] Inv(indeks) Inv(indeks-1) } // minst TilNaa inneholder minste verdi i området // fra og med tabell [0] til og med tabell[indeks] // Nå er indeks == 1000 // minsttilnaa inneholder minste verdi i området // fra og med tabell [0] til og med tabell[indeks-1] // Da følger: // minsttilnaa inneholder minste verdi i området // fra og med tabell [0] til og med tabell[999]!!!!!!! Hvis Inv(indeks) er sant og vi utfører: indeks ++ så er Inv(indeks-1) sant etterpå! Induksjons- basis Induksjons- skri3 6 999

Invarianter på data i objekter Invariant: Alle dataene vi lagrer ligger i tabell[0] til og med tabell [antall 1] og 0 <= antall <= 1000 Ins0tu3 for informa0kk 0 settinn(x) { if (antall == 1000) return ; antall ++; tabell[antall-1] = x; } antall taut ( ) { if (antall == 0) return null; antall --; return (tabell[antall]); } Overbevis deg (og andre) om at invarianten gjelder initielt og at alle metodene bevarer den!!!!!!!!!!!!!!!!!!!!! 999 Da gjelder den alltid 7

Spesifikasjon av objekters oppførsel (seman+kk) ved hjelp av sekvens av metodekall: Hvis objektet (på forrige side) har hatt følgende sekvens av kall: settinn(7), settinn(4), taut(), settinn(8), settinn(2), settinn(9), taut() Hva returnerer nå neste kall på taut()? Hva returnerer neste kall på taut() om dette var en FIFO-kø?

Invarianter og monitorer Hvordan bevare invarianter på data i objekter når vi ikke har ansvaret alene. Svar: Vi venter o*e på at andre skal gjøre objektets (monitorens) 9lsand hyggeligere. Ins0tu3 for informa0kk <Buffer-data> venter på å komme inn første gang synchronized void setinn(int verdi) If (antall == 1000) vent- 0l: Ikke- Full(); antall++; : no0fy: Ikke- Tom(); synchronized int taut() Venter på at conditions / betingelser / tilstandspåstander skal bli sanne If (antall == 0) vent- 0l: Ikke- Tom(); antall - - ; : no0fy: Ikke- Full(); En monitor (et objekt) Invariant: Alle dataene vi lagrer ligger i tabell[0] til og med tabell [antall 1] og 0 <= antall <= 1000 9

Repe0sjon: Biblioteket java.concurrent: Flere køer av ventende tråder Ins0tu3 for informa0kk Lock laas = new ReentrantLock(); Condi+on ikkefull = laas.newcondi0on(); Condi+on ikketom = laas.newcondi0on(); void se3inn ( int verdi) laas.lock(); try { while (full) ikkefull.await(); // nå er det helst sikkert ikke fult : // det er lagt inn noe, så det er // helt sikkert ikke tomt: ikketom.signal(); } finally { laas.unlock() } int taut ( )..... En kø for hver condi0on- variabel (En kø for hver be0ngelse som må holde før vi gjør en lovlig operasjon på dataene, (dvs. en operasjon som bevarer invarianten)) 10

11

12

13

14