Velkommen til. INF våren 2012

Like dokumenter
(MVC - Model, View, Control)

Velkommen til INF våren 2011

Velkommen til. INF våren 2016

INF april 2017

INF april 2016

INF våren 2017

IN våren 2019 Onsdag 16. januar

IN våren 2018 Tirsdag 16. januar

INF våren 2015

2 Om statiske variable/konstanter og statiske metoder.

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

INF1000: Forelesning 7. Konstruktører Static

INF1000: Forelesning 7

IN1010 våren januar. Objektorientering i Java

2 Om statiske variable/konstanter og statiske metoder.

INF1010 våren januar. Objektorientering i Java

INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

Oblig 4Hybelhus litt mer tips enn i oppgaven

UNIVERSITETET I OSLO

1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

UNIVERSITETET I OSLO

Dagens tema Kapittel 8: Objekter og klasser

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

INF Uke 10. Ukesoppgaver oktober 2012

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon

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

Hva er en metode. Hva skjer når vi kaller en metode

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Forelesning inf Java 4

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

INF Forelesning oppsummering forts. Et meget enkelt banksystem. Oppsummering om klasser, objekter, pekere og.

Kom forberedt til tirsdag. INF1000 Tips til obligatorisk oppgave 4. Noen generelle tips. Oblig4: Komme igang

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

Gjennomgang av eksamen H99

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

INF1000 : Forelesning 4

Enkle generiske klasser i Java

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

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

Oblig4 - forklaringer. Arne og Ole Christian

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

UNIVERSITETET I OSLO

Objekter. Uke 8 - Objekter, klasser og pekere. Verden består av mange objekter, noen ganske like, noen ulike. Klasser og objekter i verden

INF1000: Forelesning 6. Klasser og objekter del 1

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

INF1000 (Uke 4) Mer om forgreninger, While-løkker

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Repetisjon. INF gruppe 13

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Repetisjon. Mer om forgrening While-løkker

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Tre måter å lese fra terminal.

Eksempel: Body Mass Index (BMI)

Oblig 3 tips litt mer tips enn i oppgaven

UNIVERSITETET I OSLO

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

Innhold. INF1000 (Uke 11) Programmering. Rep: Metoder. Rep: Hva er en metode? Litt repetisjon. To måter å programmere på

Eksempel: Body Mass Index (BMI) Forelesning inf Java 3. Ferdig program (første del) Ferdig program (siste del)

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

INF våren Fra problem til program. Utvikling av store datasystemer. Eksempel: Lage en nytt hus. Oversikt:

Forelesning inf Java 5

Forelesning inf Java 5

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

Oblig4 - forklaringer. Arne og Ole Christian

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

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

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

INF1000 : Forelesning 1 (del 2)

UNIVERSITETET I OSLO

Forelesning inf Java 3

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Tuva Kristine Thoresen

Forelesning inf Java 3

INF1000: noen avsluttende ord

INF1000: noen avsluttende ord

Kapittel 5: Objektkommunikasjon

INF100 Institutt for informatikk Universitetet i Bergen Øving 5

INF1010 MVC i tekstbaserte programmer

Seminaroppgaver IN1010, uke 2

INF 1000 (uke 2) Variabler, tilordninger og uttrykk

I dag skal vi se på. INF 1000 (uke 2) Variabler, tilordninger og uttrykk. Gruppene starter denne uken! Klart for første oblig

INF Uke 10. Løsningsforslag ukesoppgaver oktober 2012

INF1000: Forelesning 11. Oppgave 2. Oppgave 1. Husk å melde deg på prøveeksamen i INF1000! Ole Christian Lingjærde 7.november 2006

Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I Løsningsforslag

INF1000 oppgaver til uke 38 (17 sep 23 sep)

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

UNIVERSITETET I OSLO

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

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

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

Transkript:

Velkommen til INF1010 - våren 2012 I dag: Java datastrukturer Stein Gjessing Institutt for informatikk Universitetet i Oslo 1 1

I INF1010 skal du lære Å lage gode programmer Objektorientert programmering Ble funnet opp av Ole-Johan Dahl og Kristen Nygaard Det første objektorienterte språket het Simula I dag: Java datastrukturer Les: Litt om datastrukturer i Java av Stein Gjessing Det meste er repetisjon av INF1000 Litt mer om objekter i programmene våre et programmeringsmønster (så langt vi har tid) 2

Primitive typer, pekere og objekter Primitive typer: boolean, char, short, int, long, float, doubl Pekere til klasseobjekter til tabeller (arrayer) Objekter inneholder Variable og konstanter av de primitive typene eller pekere (data) Metoder En boks En variabel eller en konstant med en verdi av en primitiv type eller en peker inni (også kalt data) Et objekt Klasser er objektenes mønstre 3

Variable og konstanter (data) En variabel eller en konstant (av en primitiv type eller en peker) består av 3 ting: 1. Et navn 2. En (primitiv) type 3. Et innhold I programmet: int antall = 3; Når programmet utføres (inne i datamaskinen): En boks med navn og type utenpå, og en verdi inni type: int 3 navn: antall 4

Variable, tilordninger og uttrykk Vi gir variabler verdi ved en tilordningssetning, der likhetstegnet betyr settes lik: <venstreside> = <høyreside> 0. Hvis venstresiden deklarerer en variabel: Opprett denne 1. Regn ut høyresiden 2. Sett resultatet inn i variabelen på venstresiden type: int int antall = 3; antall = antall + 4; 37 navn: antall Variabelnavnet vil på venstre side av et likhetstegn bety lagerplassen som skal gis ny verdi. På høyre side av likhetstegnet betyr variabelnavnet den verdien som er lagret i boksen med dette navnet. 5

Java datastrukturer Hva skjer inne i en datamaskin når et Javaprogram blir utført? Masse elektroner farer rundt Umulig å skjønne Vi skal tegne det som foregår inne i datamaskinen når Javaprogrammet vårt blir utført Vi kaller det Java datastrukturtegninger Den som programmerer må ha fullstendig oversikt over det som foregår inne i maskinen (men ikke alt om gangen) Når jeg programmerer ser jeg for meg det som skal foregå inne i maskinen og skriver Java-instruksjoner for å få det til Noen ganger bare tenker jeg meg hvordan Java datastrukturen ser ut, andre ganger tegner jeg den (mer eller mindre fullstending) på papir 6

Program for salg av biler. public class BilSalg{ static BilSalg salgsobjekt; public static void main (String [ ] args) { salgsobjekt = new BilSalg ( ); BilSalg ( ) { int antallsteinb; Bil steinst = new Bil ( ); Bil oleso = new Bil ( ) ; steinst.foresporsel ( ); oleso.foresporsel ( ); steinst.foresporsel ( ); antallsteinb = steinst.finnantforesp(); System.out.println("Antall forespørsler på + Steins Toyota er " + antallsteinb); System.out.println("Antall forespørsler totalt + er nå " + Bil.finnTotal( ) ); //slutt konstruktør // slutt BilSalg class Bil { static private int total = 0; private int antforesporsler = 0; static int finntotal ( ) { return total; void foresporsel ( ) { antforesporsler ++; total ++; int finnantforesp ( ) { return antforesporsler; //slutt Bil 7

Vi skiller mellom Klasse-deklarasjonen i programteksten. Den er et mønster som brukes både når klassedatastrukturen lages (i det programmet starter opp) og senere når nye objekter lages. Klasse-datastrukturen, dvs. den (statiske) datastrukturen som lages i det programmet starter Objekt-datastrukturen (også bare kalt objekter eller klasse-objekter) som lages hver gang vi sier new. Utrolig Viktig! 8

BilSalg klassedatastruktur Navn: salgsobjekt null main Type: BilSalg salgsobjekt = new BilSalg ( ); Bil-objekt navn: antforesporsler 12 type: int 0 void foresporsel( ) Bil klassedatastruktur Navn: total 01 23 finntotal return total; Type: int BilSalg( ) navn: steinst Type: Bil navn: oleso Type: Bil navn: antallsteinb 2 int int antallsteinb; Bil steinst = new Bil ( ); Bil oleso = new Bil ( ) ; steinst.foresporsel ( ); oleso.foresporsel ( ); steinst.foresporsel ( ); antallsteinb = steinst.finnantforesp(); System.out.println("Antall forespørsler på + Steins Toyota er " + antallsteinb); System.out.println("Antall forespørsler totalt + er nå " + Bil.finnTotal( ) ); BilSalg-objekt antforesporsler ++; total ++; int finnantforesp( ) return (antforesporsler); Antall forespørsler på Steins Toyota er 2 Antall forespørsler totalt er nå 3 Bil-objekt navn: antforesporsler 1 type: int void foresporsel( ) 0 antforesporsler ++; total ++; int finnantforesp( ) return (antforesporsler); 9

Mer tegning (bare for å demonstrere variable og objekter) Java datastrukturtegninger m/parametre Filen heter BrukSum.java class Sum { int tall = 11; static int statt = 12; public void skrivt (int tl) { int sum; sum = tall + statt + BrukSum.tall1 + tl; System.out.println("Summen er " + sum); // slutt Sum Oversettes og kjøres med >javac BrukSum.java >java BrukSum Oversetteren lager to filer: BrukSum.class og Sum.class Java fikling public class BrukSum { static int tall1 = 16; static int tall2 = 10; int ubrukt = 15; public static void main(string [ ] args) { Sum testpeker; tall1 = 13; testpeker = new Sum( ); testpeker.skrivt(tall2+4); // slutt BrukSum 10

Java datastruktur-tegning ved kjøring av BrukSum klassedatastruktur BrukSum main navn: args navn: tall1 13 16 type: int navn: tall2 10 type: int type: String[] navn: testpeker type: Sum tall1 = 13; testpeker = new Sum( ); testpeker.skrivt(tall2+4); navn: statt 12 type: int Objekt av klassen Sum skrivt(int tl) navn: tall 11 type: int navn: sum 50 type: int navn: tl 14 type: int Klassedatastruktur Sum int sum; sum = tall + statt + BrukSum.tall1 + tl; System.out.println( Summen er + sum); Summen er 50 11

Li' om $lgang $l egenskaper i objekter private betyr at den ikke er kjent utenom klassen public betyr at den sees av alle Ingen modifikator betyr at egenskapen er kjent innenfor filen/katalogen/pakken 12

Eksempel på Java datastrukturtegning + Programmeringsmønsteret Modell - Utsyn - Kontroll (MVC - Model, View, Control) 13

Et bankprogram Vi skal lage et program som håndterer kontoene i en bank. En konto eies av en kunde, og har en saldo. Programmet skal kommunisere med en bruker i Unix/DOS- vinduet Programmet skal kunne administrere kontoene i banken, og i første omgang 1) Oppre'e en ny konto 2) Fjerne en konto 3) Se'e inn penger på en konto 4) Skrive ut bankens forvaltningskapital 14

Et bankprogram n Vi skal lage et program som håndterer kontoene i en bank. En konto eies av en kunde, og har en saldo. Vi bruker substantivmetoden til å finne forslag til klasser (som vi kan lage objekter fra) class Bank class Konto class Kunde class Saldo For kunde og saldo satser vi i denne enkle versjonen av programmet på å bare bruke h.h.v. en String og en double 15

class Bank I en bank skal vi kunne legge inn en ny kunde, _erne en kunde, se'e inn penger på en kundes konto og finne forvaltningskapitalen $l banken (summen av alle beløpene på alle kontoene) class BankData Alle kontoene blir adminstrert av klassen BankData class Konto Data og metoder for en konto 16

UML klassediagram (mer i INF1050): Bank BankData 1 1 1 Konto Sammenlign med Java datastrukturen på neste side (UML er ikke viktig i INF1010) 17

Skisse av Java datastruktur for banksystemet Bank-objekt BankData-objekt Mange Konto-objekter 18

UML klassediagram for BankData BankData Konto 1 Kan f.eks. gi denne Java datastrukturen: Konto-objekter BankData-objekt navn: type: Bank type: HashMap type: Bank HashMap-objekt En Collection 19

Skisse av class BankData Bank-objekt navn: konti type: HashMap BankData( ) lagbankkunde (...) fjernbankkunde (...) settinn (...) sumallekonti ( ) class BankData { BankData( ) {... private HashMap <String,Konto> konti = new HashMap<String,Konto>( ); public void lagbankkunde(string navn) {... public void fjernbankkunde (String n) {... public void settinn(string n, double b) {... double sumallekonti( ) {... 20

class Konto Når en konto oppre'es oppgir vi dens eier, og saldoen se'es $l null. På en konto skal vi kunne se'e inn et beløp, finne navnet på eieren og finne innestående beløp 21

Skisse av class Konto Konto-objekt Konto(String nvn) class Konto { Konto (String nvn) {... public void setinn(double belop) {... settinn(double belop) double hentsaldo( ) String henteier( ) public double hentsaldo ( ) {... public String henteier( ) {... // slutt klassen Konto 22

Kjente mønstre for programoppdeling Det er mange kjente og velprøvde måter å dele opp programkode. Slike kjente måter kalles design pa'erns. Ta' fra The Timeless Way of Building, Christoffer Alexander, Oxford University Press, 1979, ISBN 0195024028 Each pa'ern describes a problem which occurs over and over again in our environment, and then describes the core of the solu$on to that problem, in such away that you can use this solu$on a million $mes over, without doing it the same way twice Et slikt programmeringsmønster har dere lært i INF1000 med kommandoløkka som skriver ut en meny og tar kommando fra brukeren. Et av de mest kjente: Modell - Utsyn - Kontroll skal dere lære her (Trygve Reenskaug) 23

Modell Utsyn Kontroll = MVC: Model View Control Modell En ren datastruktur som holder alle data om problemet. Utsyn Egen modul for å presentere modellen for brukeren på ulike måter valgt av brukeren (via kontrollen) Kontroll Egen modul/klasse for å mo'a ordre fra brukeren og enten endre modellen (legge inn nye data, endre, _erne data) eller kalle en funksjon i utsynet for å gi et ny' bilde av modellen. Omlag samme oppdeling som i klient/tjener baserte distribuerte systemer Modell database (server) Utsyn klienten på distribuerte PCer Kontroll tjener/server med forretningslogikken Tjener (med forretningslogikk) Klienter Database server 24

Modell - Utsyn - Kontroll (MVC) Her: Et svært enkelt system for å vise mekanismen. MVC er fortrukket ved noen hundre linjer kode og oppover. Grunnen $l å skille disse funksjonene fra hverandre, er at det gjør det le'ere : Å utvikle - Konsentrere seg om en $ng om gangen Å endre - Kode om en $ng er samlet e' sted F.eks.: Linjebasert vs. Vindusbasert utskrio 25

MVC løsning for banken vår Det skal da være klasser som håndterer : Klassen BankData med hjelpeklassen Konto Utsynet for hele systemet (BankUtsyn) Kontrollen for hele systemet (Bank) 26

Java datastruktur oversikt Bank-objekt BankData-objekt konti BankUtsyn-objekt Konto-objekter <Alt som har med presentasjon og interaksjon med brukere> 27

Programskisse av hele Banksystemet Kontroll av Banksystemet public class Bank { private BankData b; private BankUtsyn u; public Bank( ) { b = new BankData( ); u = new BankUtsyn( ); public static void main (String [] args) { Bank bnk; bnk = new Bank( ); bnk.ordreløkke( ); void ordreløkke ( ) { // end Bank Prøv å kompilere (oversette) og kjøre denne skissen Utsyn for Bank class BankUtsyn { <Alt som har med presentasjon og interaksjon med brukere> BankData class BankData { <administrerer alle kontoene> Konto class Konto <data om en konto>

Bankklassedatastruktur main navn: bnk type: Bank bnk = new Bank(); bnk.ordreløkke(); navn: b Bank-objekt Bank type: BankData BankData-objekt lagnykunde lagbankkunde fjernbankkunde fjernbankkunde settinn sumallekonti sumallekonti settinn ordrelokke navn: konti BankUtsyn-objekt leskommando beomnavnogbelop hentnavn hentbelop beomoghentnavn skrivsum navn: u type: BankUtsyn HashMap-objekt type: HashMap Konto-objekter 29

Fullstendig program import java.util.; En konto har en eier identifisert av en tekst (String) @author Stein Gjessing @version 13. januar 2011 class Konto { private String navn; private double saldo; Konstruktør setter kontoens saldo til 0. @param n navn på kontoens eier Konto (String n) { navn = n; saldo =0; Setter inn et beløp. @param b beløp public void setinn(double b) { saldo += b; Henter saldoen. @return saldo på konto public double hentsaldo() { return saldo; Henter eier. @return navn på eier public String henteier() { return navn; 30

BankData er modellen / dataene i banksystemet. Denne klassen innehold er alle metoder som er nødvendige for å manipulere kontoer. En ny bank innholder ingen kontoer. Alle kontoenes eiere må ha forskjellige navn @author Stein Gjessing @versjon 13. januar 2011 class BankData { private HashMap <String,Konto> konti = new HashMap<String,Konto>(); Oppretter en ny konto i banken. @param kunde navn på kunden public void lagbankkunde(string navn) { konti.put(navn, new Konto (navn)); Fjerne en konto fra banken. @param navn navn på kunde public void fjernbankkunde(string navn) { konti.remove(navn); Summerer saldoen for alle kontoene i banken. @return summen av saldo for alle kontoer public double sumallekonti() { double sum = 0; for (Konto s: konti.values()) sum+= s.hentsaldo(); return sum; Setter inn penger på en konto. @param navn navn på kunde @param belop beløpet som settes inn. public void settinn (String navn, double belop) { Konto k = konti.get(navn); k.setinn(belop); 31

Bank er kontrollklassen for dette banksystemet. Her ligger ordreløkken som styrer det hele. Denne klassen er bindeleddet mellom utsynet og datamodellen. @author Stein Gjessing @version 17. Januar 2011 public class Bank { private BankData b; private BankUtsyn u; Bank() { b = new BankData(); u = new BankUtsyn(); public static void main(string [] args) { Bank bnk = new Bank(); bnk.ordreløkke(); Lager en ny konto. void lagnykunde () { String nvn = u.beomoghentnavn(); b.lagbankkunde(nvn); Fjerner en konto. void fjernbankkunde () { String nvn = u.beomoghentnavn(); b.fjernbankkunde(nvn); Setter inn penger på en konto. Nødvendig informasjon hentes via ustynet. void settinn() { u.beomnavnogbelop(); String navn = u.hentnavn(); double bel = u.hentbelop(); b.settinn(navn,bel); Henter summen av saldo fra alle kontoer og viser resultatet ved hjelp av utsyn void sumallekonti() { double sum = 0; sum = b.sumallekonti(); u.skrivsum(sum); Ordreløkken som styrer kommandoene. void ordreløkke () { int valg; valg = u.leskommando(); while(valg!= 0) { switch (valg) { case 1: lagnykunde(); break; case 2: fjernbankkunde(); break; case 3: settinn(); break; case 4: sumallekonti(); break; default: u.skrivfeil("gi tall mellom 0-4"); valg = u.leskommando(); // end ordreløkke // end class Bank 32

BankUtsyn brukes til innlesing og vising av kundedata. @author Stein Gjessing @version 13. Januar 2011 class BankUtsyn { private Scanner tast; // tast gir kortvarig oppbevaring av leste data private String navn; private double belop; Konstruktør BankUtsyn( ) { tast = new Scanner(System.in); Skriver ut menyen og leser inn kommandovalget. @return kommandovalget public int leskommando() { System.out.println("\nMeny: "); System.out.println("0 - avslutt"); System.out.println("1 - Opprett ny kunde "); System.out.println("2 - Fjern kunde"); System.out.println("3 - Sett inn penger"); System.out.println("4 - Finn forvaltningskapital"); System.out.print(" Velg funksjon: "); return (tast.nextint()); Ber om navn og beløp og lagrer. public void beomnavnogbelop() { System.out.print("\nGi navn og beløp (på hver sin linje): "); navn = tast.next(); belop = tast.nextdouble(); Henter navnet som er lest inn. @return navnet public String hentnavn() { return navn; Henter bløpet som er lest inn. @return beløpet public double hentbelop() { return belop; Ber om og henter et navn. @return navnet public String beomoghentnavn() { System.out.print("\nGi navn : "); return tast.next(); 33

Skriver ut bankens forvaltningskapital. @param sum kapitalen som skrives ut public void skrivsum(double sum) { System.out.println("\nBankens forvaltningskapital: + sum); Skriver ut en feilmelding. @param feil feilmeldingen public void skrivfeil(string feil) { System.out.println(feil); // end BankUtsyn Kjør: >javadoc -package Bank.java 34

Tes$ng (mer i INF1050) Alle klasser og metoder testes først separat, så samlet Regresstes$ng kjør alle gamle tester + evt. nye hver gang noe endres (ikke bare test det nye med nye tester) Tes$ng kan aldri vise fravær av feil, bare at systemet virker for visse inndata. Bevis av programmer? Særs vanskelig og dyrt Lønner seg bare i helt spesielle $lfeller 35

Dokumentasjon, brukeropplæring, innføring Ikke del av de'e kurset, men meget vik$g. Dekkes av andre kurs, bl.a. INF1050 VIKTIG! 36