Hvordan programmerer man?? STREAM - en model. Programmører arbejder ofte i teams Hver programmør arbejder på sin del af en større helhed.

Slides:



Advertisements
Lignende præsentationer
Etablering af virksomhed
Advertisements

Et projekt til undersøgelse af udviklingsmetodologi.
FOKUS! På vores udvikling.
Velkommen til Softwarekonstruktion
Praktiske erfaringer med Byggeriets IKT specifikation
Et projekt til undersøgelse af udviklingsmetodologi.
V ORES A GENDA  Os og vores speciale  Godt ved specialeprocessen  Knapt så godt ved specialeprocessen  Vejledning  Grupper  Gode råd.
07 – Kort om OO Introduktion.
Kommunikation / it.
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
Et projekt til undersøgelse af udviklingsmetodologi.
Gør det simpelt Trænings planlægning.
Objektorienteret programmering
Hvordan man skriver koden.
VOOP, 8 april Refleksion i objekt orienterede programmeringssprog Mandag 8/ Kasper Østerbye.
Tietgen Skolen Kvalitet og kvalitetssikring Review Test.
Arv Idéen i arv et at kunne genbruge gennem generalisering
Programklasser for bladhus Den efterfølgende beskrivelse er ikke komplet. Der er ikke taget afsæt i use cases, sekvensdiagrammer og operationsbeskrivelser.
Problemer eller udfordringer.
Indledende Programmering Uge 5 - Efterår 2006 Om at udvikle korrekte og pålidelige programmer Susanne Lindros.
Et projekt til undersøgelse af udviklingsmetodologi.
STREAM processen – Programmering i praksis
FEN NOEA/IT Programmeringsteknologi 1 Arv og polymorfi Substitutionsprincippet Abstrakte klasser Design Patterns (Composite)
Test 1 Klik her for start. Hvor skal du klikke for at få designvisning?
Lektion 7 Læsestof: Kopier fra Caranno
Fundamentale datastrukturer
Eksempel på realisering af domænemodel
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
FEN KbP/seminar2: design11 Kontraktbaseret programmering Seminar 2 Klassedesign – grundprincipper Eksempler: Stack Dictionary.
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
Procestræ under afvikling af cp init login shell cp cp src dest.
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
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.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Delphi-evaluering og Green Field Evaluering af event Som start på Green Field.
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
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 programmering4C.1 Systemdesign Design med flere klasser, En kaffeautomat.
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.
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
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
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
Polymorfi Abstrakte klasser, substitutionsprincippet, statisk og dynamisk type.
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
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.
Collectionklasser Klassifikation og anvendelse. dIntProg, F08Collectionklasser.2 Samlinger af objekter Objektreferencer –for at holde fast i et objekt.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
 Jens Bennedsen 2001Multimedie programmering3B.1 Specifikationer Betingelser, specifikationer og JavaDoc.
Klasser og objekter. dIntProg, F08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Kommunikation Hvad er det og hvordan udvikler vi bedst muligt sproget sammen med vores børn? Hej jeg hedder Mette og er dagtilbuddets sprogvejleder, jeg.
Abstraktioner.
Dokumentation.
Planlæg gennemførelsen af jeres idé med stepwise improvement
Quiz – Uge 4 – torsdag – første time
Simulering af binomialforsøg
Præsentationens transcript:

Hvordan programmerer man?? STREAM - en model

Programmører arbejder ofte i teams Hver programmør arbejder på sin del af en større helhed.

Programmører arbejder ofte i teams Hver programmør arbejder på sin del af en større helhed. Komplekst!! Hvordan kommer man i gang??

”Stepwise Improvement” Programmøren ændrer programmet som ”en voksende ø af funktionaliteter” FØRSTE VERSION UDVIDELSE 1 UDVIDELSE 2 …

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 …

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…

Nøgleord i STREAM: Udvidelse, forfining, omstrukturering FØRSTE VERSION UDVIDELSE 1 UDVIDELSE 2 … Forfining Omstrukturering

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 …

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,…

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. Programmet Det implementerede program. Ændres løbende Programmet Det implementerede program. Ændres løbende

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. Programmet Det implementerede program. Ændres løbende Programmet Det implementerede program. Ændres løbende Er alle krav med i specifikationen? Forfin og omstrukturer NEJ JA Kan programmet opfylde alle krav? SLUT JA NEJ Udvid JA

HVORDAN GØR MAN ALT DET?? STREAM har 6 skridt: Stubbe Tests Representation Evaluering Attributter Metoder

Step 1: Stubbe Lav ”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.

Step 2: Tests Design 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!

Step 3: Representation Hvilke typer af variable skal vælges? Hvad skal inputtypen og outouttypen for metoderne være? Find så mange forskellige representationer som muligt – mindst to.

Step 4: Evaluering Sammenlign de forskellige representationer i step3. Hvordan er sværhedsgraden af den kode, der skal skrives for at få de enkelte metoder til at fungere?

Step 5: Attributter Tilføj constructor og variable, så kun koden til de enkelte metoder mangler.

Step 6: Metoder Nu skal de enkelte metoder implementeres…

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øg Kunne 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.

Step 1: Stubbe Lav ”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.

Step 1: Stubbe Pizzariaets (varelagerets) stubbe: Tilsvarende metoder til de andre ingredienser

Step 1: Stubbe Pizza stubbe:

Step 2: Tests Design 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()

Step 3: Representation Hvordan 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

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 R1R2 Pizza(…)Nem GetPizzanummer()SværNem Pizzas kald til GetIngrediens() udfordrende ufiks Lidt udfordrende

Step 5: Attributter Vi er nu klar til at lave constructorer for klasserne og designe den visuelle del af systemet.

Step 5: Attributter Vi 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

Step 5: Attributter

Prøv programmet af og læs koden… Overvej om get_tomat, get_ost, get_skinke, og get_løg kan skrives sammen til én metode get_ingrediens. Foreslå udvidelser til programmet.