Kontraktsprogrammering Karlstads universitet Datavetenskap DAVA 0708 JE MG
- Slides: 19
Kontraktsprogrammering Karlstads universitet Datavetenskap DAVA 07/08 JE, MG, PS
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 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å å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 • 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 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 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 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. 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) { 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 <= 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 <= 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. 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 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 = 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 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. 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 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 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
- Miniparc
- Pashudhan nishulk dava yojana
- Kozal dava
- Dava portal
- Kto ti dáva na jar potešenie v lete ochladenie
- Alisher navoiy universiteti
- Läkarprogrammet uppsala
- Lund universitet webmail
- Studievejledning århus universitet
- Berdaq atindagi qaraqalpaq mamleketlik universiteti
- Malmö universitet rasism
- Teknisk fysik uu
- Problemformulering eksempel
- Uppsala universitet uppsatser
- Alisher navoiy instituti
- Ume universitet
- Psykologisk fakultet
- Metodeafsnit speciale
- Sjekkliste nord universitet
- Ume universitet