Kontraktsprogrammering Karlstads universitet Datavetenskap DAVA 0708 JE MG

  • Slides: 19
Download presentation
Kontraktsprogrammering Karlstads universitet Datavetenskap DAVA 07/08 JE, MG, PS

Kontraktsprogrammering Karlstads universitet Datavetenskap DAVA 07/08 JE, MG, PS

Programmera med kontrakt • Samma som i vardagen • Två parter (minst), bägge följer

Programmera med kontrakt • Samma som i vardagen • Två parter (minst), bägge följer sin del Karlstads universitet Datavetenskap 2 DAVA 07/08 JE, MG, PS 2/25/2021

Bilköp Krav Förtjänst Kund Betala varje månad Få en bil Försäljare Ge kunden en

Bilköp Krav Förtjänst Kund Betala varje månad Få en bil Försäljare Ge kunden en bil och serva den en viss tid Få pengar varje månad Karlstads universitet Datavetenskap 3 DAVA 07/08 JE, MG, PS 2/25/2021

Boka biljett Krav Förtjänst Resenär Betala biljetten och vara på flygplasten i tid Få

Boka biljett Krav Förtjänst Resenär Betala biljetten och vara på flygplasten i tid Få åka till Hawaii Resebyrå Flyga resenären till Hawaii Få pengar Karlstads universitet Datavetenskap 4 DAVA 07/08 JE, MG, PS 2/25/2021

Två sidor av kontraktet Från ”insidan” • Vad kräver jag vid anrop av mig

Två sidor av kontraktet Från ”insidan” • Vad kräver jag vid anrop av mig • Vad ger jag tillbaka till anroparen Från ”utsidan” • Vad krävs för att anropa modulen • Vad får jag tillbaka Karlstads universitet Datavetenskap 5 DAVA 07/08 JE, MG, PS 2/25/2021

Division Krav Förtjänst Matematiker Nämnaren får ej vara Får kvoten noll mellan täljare och

Division Krav Förtjänst Matematiker Nämnaren får ej vara Får kvoten noll mellan täljare och nämnare Funktion för Dividera täljare med att dividera nämnare och returnera kvoten Karlstads universitet Datavetenskap 6 Slipper kontrollera om täljaren är noll DAVA 07/08 JE, MG, PS 2/25/2021

Förvillkor och Eftervillkor • Förvillkor – vad som ska gälla när funktionen anropas, om

Förvillkor och Eftervillkor • Förvillkor – vad som ska gälla när funktionen anropas, om det inte är uppfyllt är resultatet odefinierat • Eftervillkor – vad som ska gälla när funktionen är klar, under förutsättning att förvillkoret var uppfyllt Karlstads universitet Datavetenskap 7 DAVA 07/08 JE, MG, PS 2/25/2021

Funktion för division //pre: nämnare != 0 //post: kvoten mellan taljare och //namnare har

Funktion för division //pre: nämnare != 0 //post: kvoten mellan taljare och //namnare har returnerats public static double dividera(double taljare, double namnare) { return taljare/namnare; } Karlstads universitet Datavetenskap 8 DAVA 07/08 JE, MG, PS 2/25/2021

Bank-program • Saldo – en variabel, hur mycket pengar vi har • satt. In.

Bank-program • Saldo – en variabel, hur mycket pengar vi har • satt. In. Pengar – en funktion som sätter in pengar (dvs ökar saldo) • ta. Ut. Pengar – en funktion som tar ut pengar (dvs minskar saldo) Karlstads universitet Datavetenskap 9 DAVA 07/08 JE, MG, PS 2/25/2021

satt. In. Pengar & ta. Ut. Pengar public void satt. In. Pengar(double in) {

satt. In. Pengar & ta. Ut. Pengar public void satt. In. Pengar(double in) { my. Saldo = my. Saldo + in; } public void ta. Ut. Pengar(double ut) { my. Saldo = my. Saldo - ut; } Karlstads universitet Datavetenskap 10 DAVA 07/08 JE, MG, PS 2/25/2021

Variant av ta. Ut. Pengar public void ta. Ut. Pengar(double ut) { if(ut <=

Variant av ta. Ut. Pengar public void ta. Ut. Pengar(double ut) { if(ut <= my. Saldo) my. Saldo = My. Saldo – ut; else ? } Karlstads universitet Datavetenskap 11 DAVA 07/08 JE, MG, PS 2/25/2021

Variant av ta. Ut. Pengar public boolean ta. Ut. Pengar(double ut) { if(ut <=

Variant av ta. Ut. Pengar public boolean ta. Ut. Pengar(double ut) { if(ut <= saldo) { my. Saldo = my. Saldo – ut; return true; } else return false; } Karlstads universitet Datavetenskap 12 DAVA 07/08 JE, MG, PS 2/25/2021

Returvärde • Användaren måste kolla returvärdet: boolean tog. Ut; tog. Ut = ta. Ut.

Returvärde • Användaren måste kolla returvärdet: boolean tog. Ut; tog. Ut = ta. Ut. Pengar(200); if(tog. Ut == false){ System. out. println(”Du har inte tillräckligt med pengar!”); } Karlstads universitet Datavetenskap 13 DAVA 07/08 JE, MG, PS 2/25/2021

Kontrakt för ta. Ut. Pengar • Förvillkor på ta. Ut. Pengar: man får inte

Kontrakt för ta. Ut. Pengar • Förvillkor på ta. Ut. Pengar: man får inte ta ut mer än man har • pre: ut <= saldo • Eftervillkoret på ta. Ut. Pengar: man har tagit ut pengar • post: saldo har minskats med ”ut” kronor Karlstads universitet Datavetenskap 14 DAVA 07/08 JE, MG, PS 2/25/2021

Kontrakt för ta. Ut. Pengar //pre: ut <= my. Saldo //post: my. Saldo =

Kontrakt för ta. Ut. Pengar //pre: ut <= my. Saldo //post: my. Saldo = my. Saldo – ut public void ta. Ut. Pengar(double ut) { my. Saldo = my. Saldo - ut; } • Kollar före anrop till funktionen ta. Ut. Pengar if( my. Saldo >= 200) ta. Ut. Pengar(200); Karlstads universitet Datavetenskap 15 DAVA 07/08 JE, MG, PS 2/25/2021

Kontrakt för satt. In. Pengar • Förvillkor på satt. In. Pengar: man får inte

Kontrakt för satt. In. Pengar • Förvillkor på satt. In. Pengar: man får inte sätta in en negativ summa • pre: in >= 0 • Eftervillkoret på satt. In. Pengar: man har satt in pengar • post: saldo har ökats med ”in” kronor Karlstads universitet Datavetenskap 16 DAVA 07/08 JE, MG, PS 2/25/2021

Kontrakt för satt. In. Pengar //pre: in >= 0 //post: my. Saldo = my.

Kontrakt för satt. In. Pengar //pre: in >= 0 //post: my. Saldo = my. Saldo + in public void satt. In. Pengar(double in) { my. Saldo = my. Saldo + in; } • Användaren kollar innan han anropar funktionen if( in >= 0) satt. In. Pengar(200); Karlstads universitet Datavetenskap 17 DAVA 07/08 JE, MG, PS 2/25/2021

Grad av pålitlighet • • Butik litar inte på folk, gör kreditupplysning Vi litar

Grad av pålitlighet • • Butik litar inte på folk, gör kreditupplysning Vi litar inte på slutanvändare – låg pålitlighet Egna programdelar – hög pålitlighet Andras programdelar – medel pålitlighet Pålitlighet Låg Typ av användare: Åtgärd: Karlstads universitet Datavetenskap Hög Användare av programmet Användare av din modul ”Maska bort fel” Kräv uppfyllda förvillkor 18 DAVA 07/08 JE, MG, PS 2/25/2021

Varför använda kontrakt • • • Mer logisk kod Klarare ansvarsfördelning Lättare att debugga

Varför använda kontrakt • • • Mer logisk kod Klarare ansvarsfördelning Lättare att debugga Kortare kod Mindre redundans (upprepning av samma sak) • Färre fel i färdig produkt Karlstads universitet Datavetenskap 19 DAVA 07/08 JE, MG, PS 2/25/2021