Hvordan programmerer man?? STREAM - en model
description
Transcript of Hvordan programmerer man?? STREAM - en model
![Page 1: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/1.jpg)
Hvordan programmerer man??STREAM - en model
![Page 2: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/2.jpg)
Programmører arbejder ofte i teamsHver programmør arbejder på sin del af en
større helhed.
![Page 3: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/3.jpg)
Programmører arbejder ofte i teamsHver programmør arbejder på sin del af en
større helhed.
Komplekst!! Hvordan kommer man i gang??
![Page 4: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/4.jpg)
STREAM – Stepwise ImprovementProgrammøren ændrer programmet som ”en
voksende ø af funktionaliteter”
FØRSTE VERSION
UDVIDELSE 1
UDVIDELSE 2 …
![Page 5: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/5.jpg)
Programmøren starter med en lille konkret del som efterhånden udvides. Programmøren har ikke det fulde overblik over slutproduktet
undervejs
FØRSTE VERSION
UDVIDELSE 1
UDVIDELSE 2 …
![Page 6: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/6.jpg)
Modsat arkitekten, der ved præcis hvordan huset skal se ud før byggeriet går i gang…
Sidebemærkning: Denne programmeringstilgang kaldes ofte trinvis
forfining. De fleste programmører vil nok sige at den eksisterer mere i teorien end i
praksis…
![Page 7: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/7.jpg)
Nøgleord i STREAM:Udvidelse, forfining, omstrukturering
FØRSTE VERSION
UDVIDELSE 1
UDVIDELSE 2 …
ForfiningOmstrukturering
![Page 8: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/8.jpg)
Specifikation:En specifikation er en beskrivelse (ofte skriftlig) af slutproduktet. En beskrivelse at hvad programmet skal kunne.
Med STREAM er specifikationen dynamisk – den ændrer sig undervejs i programmeringsprocessen og ligger ikke fast fra starten.
FØRSTE SPECIFIKATION
UDVIDELSE 1 UDVIDELSE 2 …
![Page 9: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/9.jpg)
Udvidelse: Udvide specifikationen så slutproduktet kommer til at indeholde mere funktionalitet
Forfining: Gøre abstrakt kode til kode, der kan udføres, så programmet kan det der står i specifikationen
Omstrukturering: Forbedre programmet uden at ændre på funktionaliteten. Oprydning, effektivisering, klargøring til ny udvidelse,…
![Page 10: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/10.jpg)
Programmørens elementer:
Krav Hvad skal programmet kunne?
Kundens bestillingsliste. Ændrer sig ikke undervejs.
Krav Hvad skal programmet kunne?
Kundens bestillingsliste. Ændrer sig ikke undervejs.
Specifikation Programmørens beskrivelse af programmets funktionalitet. Ændres løbende.
Specifikation Programmørens beskrivelse af programmets funktionalitet. Ændres løbende.
ProgrammetDet implementerede program.
Ændres løbende
ProgrammetDet implementerede program.
Ændres løbende
![Page 11: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/11.jpg)
Programmørens proces:
Kan programmet det der står i specifikationen?
Krav Hvad skal programmet kunne?
Kundens bestillingsliste. Ændrer sig ikke undervejs.
Krav Hvad skal programmet kunne?
Kundens bestillingsliste. Ændrer sig ikke undervejs.
Specifikation Programmørens beskrivelse af programmets funktionalitet. Ændres løbende.
Specifikation Programmørens beskrivelse af programmets funktionalitet. Ændres løbende.
ProgrammetDet implementerede program.
Ændres løbende
ProgrammetDet implementerede program.
Ændres løbende
Er alle krav med i specifikationen?
Forfin og omstrukturer
NEJ
JA
Kan programmet opfylde alle krav?
SLUT
JA
NEJNEJ
Udvid
JA
![Page 12: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/12.jpg)
HVORDAN GØR MAN ALT DET??
STREAM har 6 skridt:StubbeTestsRepresentation Evaluering Attributter Metoder
![Page 13: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/13.jpg)
Step 1: StubbeLav ”skellet-klasser” til alle de klasser, der er brug for i programmet. Giv dem metoder uden funktionalitet – ”stubbe”. De metoder, der skal returnere en værdi sættes til at returnere en ”default værdi” (eksempelvis 0 eller null), så klassen kan kompileres.Ved slutningen af denne fase har man et program med klasser, der kan kompileres uden fejlmeddeleser, men ikke gør noget som helst.
![Page 14: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/14.jpg)
Step 2: TestsDesign tests, der kan teste alle metoderne. Hvad forventer du af den enkelte metode? Sørg for at alle muligheder tages med.
Der findes mange måder at designe tests på. Vi vil ikke gå i dybden med dette her!
![Page 15: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/15.jpg)
Step 3: Representasion
![Page 16: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/16.jpg)
Step 4: Evaluering
![Page 17: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/17.jpg)
Step 5: Attributter
![Page 18: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/18.jpg)
Step 6: Metoder
![Page 19: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/19.jpg)
Eksempel:Kunden er en pizzarestaurant. Der skal laves et bestillingssystem, så pizzabageren kan se hvilke pizzaer telefonpasseren bestiller for kunden og i hvilken rækkefølge de skal bages. Krav: Pizzaer skal kunne bestilles med et eller flere af valgene: ost, tomat, skinke og løgKunne indikere i hvilken rækkefølge pizzaerne er bestilt (skal bages)Varelageret skal indeholde alle typer af fyld og mængden skal reduceres hver gang der anvendes en bestemt ingrediens.
![Page 20: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/20.jpg)
Step 1: StubbeLav ”skellet-klasser” til alle de klasser, der er brug for i programmet. Giv dem metoder uden funktionalitet – ”stubbe”. De metoder, der skal returnere en værdi sættes til at returnere en ”default værdi” (eksempelvis 0 eller null), så klassen kan kompileres.Ved slutningen af denne fase har man et program med klasser, der kan kompileres uden fejlmeddeleser, men ikke gør noget som helst.
Åbn greenfootfilen pizza_stubbe.
![Page 21: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/21.jpg)
Step 1: StubbePizzariaets (varelagerets) stubbe:
Tilsvarende metoder til de andre ingredienser
![Page 22: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/22.jpg)
Step 1: StubbePizza stubbe:
![Page 23: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/23.jpg)
Step 2: TestsDesign tests, der kan teste alle metoderne. Hvad forventer du af den enkelte metode? Sørg for at alle muligheder tages med.
public void get_tomat() public void get_ost() public void get_skinke() public void get_løg() public int Get_pizzanummer()public void specificer_pizza()
![Page 24: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/24.jpg)
Step 3: RepresentationHvordan skal objektet implementeres – hvilken representasion skal vælges? Kom med så mange forskellige som muligt og helst mindst to!
Pizzaen
R1: alle ingredienserne lagres som tekststrenge og dynamisk nummerering af pizzaer så den med nummer 1 altid skal laves først
R2: Ingredienser som boolske variable. Nummerering efter bestillingsrækkefølge
![Page 25: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/25.jpg)
Step 4: Evaluering
R1: alle ingredienserne lagres som tekststrenge og dynamisk nummerering af pizzaer så den med nummer 1 altid skal laves først
R2: Ingredienser som boolske variable. Nummerering efter bestillingsrækkefølge
Sværhedsgrad af implementation
R1 R2
Pizza(…) Nem Nem
GetPizzanummer() Svær Nem
Pizzas kald til GetIngrediens()
udfordrendeufiks
Lidt udfordrende
![Page 26: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/26.jpg)
Step 5: AttributterVi er nu klar til at lave constructorer for klasserne og designe den visuelle del af systemet.
![Page 27: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/27.jpg)
Step 5: AttributterVi er nu klar til at lave constructorer for klasserne og designe den visuelle del af systemet.
Pizzariaet:
Her placeres pizzabestillinger af telefonpasseren
Her placeres afviklede bestillinger af pizzabageren
![Page 28: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/28.jpg)
Step 5: Attributter
![Page 29: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/29.jpg)
Step 5: Attributter
![Page 30: Hvordan programmerer man?? STREAM - en model](https://reader035.fdocument.pub/reader035/viewer/2022062518/5681409f550346895dac4fdf/html5/thumbnails/30.jpg)
Prøv programmet af og læs koden…