DAIMIIntroducerende objektorienteret programmering4C.1 Systemdesign Design med flere klasser, En kaffeautomat.

Slides:



Advertisements
Lignende præsentationer
Dialog og samarbejde om uddannelsesparathed
Advertisements

Forsiden 1.Denne knap bruges når du vil taste dagens resultater ind. 2.Denne knap skal kun bruges hvis du allerede har gemt data og du finder ud af at.
Lean Salgskonsulentuddannelsen
Hvordan programmerer man?? STREAM - en model. Programmører arbejder ofte i teams Hver programmør arbejder på sin del af en større helhed.
1 Problemkompleksitet 2 Problemers kompleksitet En ineffektiv algoritme: køretiden vokser eksponentielt med input- størrelsen Et problem, der ikke kan.
Velkommen til Softwarekonstruktion
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Selve objektet versus referencen til objektet Nedarvning
Informationsteknologi B-A, HHX, 2005,
Hvordan man skriver koden.
VOOP, 8 april Refleksion i objekt orienterede programmeringssprog Mandag 8/ Kasper Østerbye.
FEN Rekursion og induktion1 Induktion og (især) rekursion Mange begreber defineres ud fra en basis og så en gentagen anvendelse af et antal regler.
STREAM processen – Programmering i praksis
Grundlæggende elementer i UML
Rapporter (Access, del 5). RHS – Informationsteknologi – Udgangspunkt Vi har oprettet en database Vi har defineret en eller flere tabeller, og.
OOMI Præsentation 28: Eksamen. Ingeniørhøjskolen i Århus Slide 2 af 6 Pensum Pensum har været noget fragmenteret (ny struktur for faget, nyt indhold og.
Lektion 7 Læsestof: Kopier fra Caranno
Fundamentale datastrukturer
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
Objektorienteret Netværkskommunikation Præsentation 28: Eksamen.
Objekter og klasser Rasmus D. Lehrmann DM
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Repetition: Introduktion til OOP med C# og .NET
DIEB4.1 Kursusgang 4 Oversigt: Sidste kursusgang Opgaver Aktivitet 2: Generer design (fortsat) Design af interaktionselementer.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
 Jens Bennedsen 2002Objektorienteret systemudvikling Design klasse model ”Klassemodellen på vej til kode”
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
DAIMIIntroducerende objektorienteret programmering3C.1 Design af klasser Specifikation og implementation.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
 Jens Bennedsen 2002Objektorienteret systemudvikling Design -> kode Mapning af et klassediagram til kode.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Henrik B. Christensen, 1999Introducerende objektorienteret programmering8B.1 Interfaces En ren kontrakt.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.
DAIMIIntroducerende objektorienteret programmeringkd.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
Fejlfinding Kunsten at finde og rette fejl. DAIMIIntroducerende Objektorienteret Programmering10C.2 Taxonomi  Ingen skriver programmer uden fejl!  Fejl.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
 Henrik Bærbak, 2000Introducerende objektorienteret programmering11B.1 Destilleret UML Oversættelse fra UML til Java.
DAIMIIntroducerende objektorienteret programmering1B.1 Skildpadder Modeller, objekter og opførsel.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
Trinvis forfinelse Systematisk, gradvis udvikling af programmer.
Indledende Programmering Uge 6 - Efterår 2006
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation.
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
 Jens Bennedsen 2001Multimedie programmering1.1 Skildpadder Modeller, objekter og opførsel.
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation,
Klassevariable- og metoder Funktionalitet på klasseniveau.
 Jens Bennedsen 2001Multimedie programmering3A.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
Tutankhamons Grav Et modellerings eksempel
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
DAIMI, AUIntroducerende objektorienteret programmering11A.1 Destilleret UML Oversættelse fra UML til Java.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
DAIMIIntroducerende objektorienteret programmering15A.1 Eksamen…
DAIMIIntroducerende objektorienteret programmering12B.1 Obligatorisk Opgave 2 Et program til planlægning af madplaner.
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
Skildpadder Modeller, objekter og opførsel.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSkildpadder.2 Model Modeller bruges.
Quiz Uge 2 – torsdag. Hvorfor har vi clicker quizzer? Formålet med quizzerne er –at afveksle undervisningsformen – så I ikke falder i søvn –at tvinge.
Quiz Uge 2 – mandag.
Quiz Uge 2 – mandag.
Quiz Uge 2 – mandag.
Præsentationens transcript:

DAIMIIntroducerende objektorienteret programmering4C.1 Systemdesign Design med flere klasser, En kaffeautomat

DAIMIIntroducerende objektorienteret programmering4C.2 Relation til kapitel 4  Arnow & Weiss’ angiver i kapitel 4 deres 4+1 proces for design af en enkelt klasse.  Kapitel 5 udvidere denne proces til design af et system/program bestående af flere klasser som samarbejder om at realisere et mere komplekst system.

DAIMIIntroducerende objektorienteret programmering4C.3 Et par bemærkninger  Hvorfor flere klasser? Kunne vi ikke lave én klasse med hele den komplekse funktionalitet?  Jo, og det er (tilnærmelsesvis) tilgangsvinklen i ‘klassiske’ sprog som Pascal og C. Disse sprog tilbyder kun metoder, ikke klasser, så deres ‘programmeringsmodel’ kan opfattes som ét objekt med (alt for) mange metoder.  Styrken ved objekt-orienterede sprog er at forskellige kompetancer/modelelementer kan beskrives hver for sig.

DAIMIIntroducerende objektorienteret programmering4C.4 Systemdesign  Processen har flg. hovedelementer Problembeskrivelse (kravspecifikation) Beskrivelse af typisk (brugs-)scenarie Finde primære objekter/begreber Beskrive ønskede opførsel for hvert objekt/klasse For hver klasse gennemføres en (tilnærmet) 4+1 klassedesign process: –Definition af interface –Realisation af implementation  Husk: Det er ofte nødvendigt at gentage dele af processen flere gange: Iterativ design

DAIMIIntroducerende objektorienteret programmering4C.5 Eksempel: En kaffeautomat  Problembeskrivelse:  Der skal laves en kaffeautomat. Automaten kan lave en kop kaffe, prisen er 3 kr. Automaten accepterer et DanMønt/kantinekort som det debiterer for hver kop kaffe, men kun hvis der er dækning på kortet. Automaten viser hele tiden hvor mange penge der er på kortet.  Automaten kan oplyse, hvor meget den har solgt til et givet tidspunkt.

DAIMIIntroducerende objektorienteret programmering4C.6 Brugsscenarie  Kurt har et nyt kantinekort på 100 kr. Han indsætter kortet i automaten, ser at der er 100kr tilbage på det, og trykker på ‘bryg’ knappen. Derefter får han en kop kaffe, og displayet viser 97kr tilbage. Han brygger endnu en kop kaffe inden han tager kortet ud igen.  Ejeren kommer forbi senere og får oplyst at automaten har solgt for ialt 6kr kaffe.

DAIMIIntroducerende objektorienteret programmering4C.7 Finde primære objekter  Navneord i problembeskrivelsen er ofte gode kandidater til klasser  Der skal laves en kaffeautomat. Automaten kan lave en kop kaffe, prisen er 3 kr. Automaten accepterer et DanMønt/kantinekort som det debiterer for hver kop kaffe, men kun hvis der er dækning på kortet. Automaten viser hele tiden hvor mange penge der er på kortet.  Automaten kan oplyse, hvor meget den har solgt til et givet tidspunkt.  Hvilke er så mest ‘vigtige’?

DAIMIIntroducerende objektorienteret programmering4C.8 Designperspektiv  Enhver model er bygget ud fra et ganske bestemt perspektiv. Perspektivet fortæller os hvilke elementer i modellen det er vigtigt at modellere, og hvilke vi kan se bort fra.  Eks: Den vigtigste funktion for arkitektens papmodel af et hus er at give et helhedsindtryk, derfor ignoreres detaljer og materialevalg, styrke, osv.

DAIMIIntroducerende objektorienteret programmering4C.9 Perspektiv: Automat  Vores designperspektiv (krav til funktionalitet) er dikteret ud fra automatens synsvinkel: “Der skal laves en kaffeautomat”.  Derfor er det denne synsvinkel der dikterer, hvilke elementer vi vil se bort fra i vores program, og hvilke der er vigtige.  Centrale objekter: Kaffeautomat Betalingskort Ydelsen - en kop kaffe

DAIMIIntroducerende objektorienteret programmering4C.10 Basale opførsel  Næste skridt er at definere den basale opførsel for ens klasser. Arnow og Weiss deler dette op for hver klasse. Dette er mindre heldigt, da man let overser det vigtigste: Samspillet mellem klasserne.  Vi foreslår at man skitserer et/flere brugsscenarier i form af små testprogrammer. Med disse kan man afgøre, hvilken opførsel man ønsker og hvorledes objekterne spiller sammen.  Se “TestCoffeeVendingMachine” i us4-projektet.

DAIMIIntroducerende objektorienteret programmering4C.11 Klassedesign  Her kan Arnow og Weiss’s 4+1 designproces bruges for hver klasse: Definere opførsel Definere interface (metodeprototyper) Definere testprogram Definere klasseskelet Implementere metodekroppe, definere instans variable  For små systemer kan man ofte springe over testprogrammet; men er klassen i sig selv kompliceret er dette skridt vigtigt.

DAIMIIntroducerende objektorienteret programmering4C.12 Kaffeautomat systemet  Det anbefales at studere kaffeautomatsystemet grundigt.  De næste slides forklarer nogle detaljer og valg i mere deltalje.

DAIMIIntroducerende objektorienteret programmering4C.13 Java’s toString()  Java kan automatisk konvertere grundlæggende datatyper til strenge:  int x=7; System.out.println( “x=“+x );  Java tilbyder det samme for klasser, hvis man definerer en metode med prototypen:  public String toString()  toString() vil blive kaldt alle steder hvor et objekt evalueres og Java forventer en String-værdi

DAIMIIntroducerende objektorienteret programmering4C.14 Brug af ‘null’  Metoden i CoffeeVendingMachine, som sælger en kop kaffe, returnerer en instans af CoffeeCup. Men - hvad hvis der ikke er penge nok på kortet?  Værdien ‘null’ betyder: “Referencen refererer ikke til noget objekt” og dette er derfor en naturlig værdi at returnerer: Kunden får jo vitterlig ingen kaffe.

DAIMIIntroducerende objektorienteret programmering4C.15 Test for fejlmuligheder  Metoden buyCoffee() i CoffeeVendingMachine bruger if-sætninger til at teste fejlmuligheder inden der brygges kaffe: if ( chargeFrom == null ) { System.out.println( "Der er ikke indsat noget kreditkort." ); return null; } if ( chargeFrom.balance() < priceForCoffee ) { System.out.println( "Fejl: Der er ikke penge nok på kortet: "+ chargeFrom ); return null; } System.out.println( "Der brygges..." ); chargeFrom.withdraw( priceForCoffee ); soldFor += priceForCoffee; System.out.println( chargeFrom ); return new CoffeeCup(); Bemærk: Ved at bruge return inde i if’erne kan man her helt undgå at bruge ‘else’.

DAIMIIntroducerende objektorienteret programmering4C.16 Konstanter  Prisen for en kop kaffe er 3 kroner. Men vi kan forvente dette ikke varer evigt. Hvis prisen ændrer sig, skal vi rundt og rette alle steder, hvor der forekommer et tretal i javakoden –  Eller næsten alle steder - hvad hvis der er andre sammenhænge hvor 3 indgår: F.eks. antal gram sukker i en sødet kop kaffe?  Løsningen: Brug en konstant istedet:  private static final int priceForCoffee = 3;

DAIMIIntroducerende objektorienteret programmering4C.17 ‘Halvtomme’ klasser  Klassen CoffeeCup er stort set en ‘tom’ klasse. Men dens eksistens er vigtig, da den jo netop repræsenterer et vigtig element i vores model: At kunden får en kop kaffe i hånden.  Og hvis senere krav opstår, kan vi let udvide klassen; en kop kaffe med fløde, sukker, osv…

DAIMIIntroducerende objektorienteret programmering4C.18 Test af programmer  Vores testprogram tjekker kun at vores klasser virker i de korrekte tilfælde.  Det er naturligvis vigtig at man også forsøger de mulige ‘forkerte’ situationer: For lidt penge på kortet, kortet ikke indsat, osv., for at godtgøre at vores klasser er korrekt implementeret.