Trinvis forfinelse vha. STREAM Systematisk, gradvis udvikling af programmer.

Slides:



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

Test First Development
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
09 – Arv og polymorfi i java
Hvordan man skriver koden.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
STREAM processen – Programmering i praksis
Forelæsning 3.1 Collections Javas for-each løkke
Interfaces – brug. Overblik Tidligere: –Interfaces Comparable gør det muligt at bruge Collections metoderne –min, max, sort, … –Algoritmemønstre Find.
Delphi og C++ Builder C++ Builder. C++ Historie Sproget blev designet for AT&T af danskeren Bjarne Stoustrup En objektorienteret videreudvikling.
Items 4, 14, 24, 34, 44, 54 Orange gruppe Liv, Jonas, Thorkil, Søren S og Martin D.
Lektion 7 Læsestof: Kopier fra Caranno
FEN KbP/seminar2: design11 Kontraktbaseret programmering Seminar 2 Klassedesign – grundprincipper Eksempler: Stack Dictionary.
Electric power is electric particles moving through metal, semiconductor or graphite and special fluids (electrolysis). Some kind of gas are able to conduct.
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.
11 - Exceptions. 2 NOEA2009Java-kursus – Exceptions Hvad er en exception? En undtagelse. Typisk en fejl der opstår runtime Afbryder det normale programflow.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
Fundamentale sprogbegreber
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
C#: Udtryk og metoder Kilde: Joe Hummel. 2 Nordjyllands Erhvervakademi – 2008 Indhold “With regards to programming statements and methods, C# offers what.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Kjeld Svidt  Institut for Byggeri og Anlæg  Aalborg Universitet IT i Byggeriet Semester 6, kursusgang Databaser (1) Kjeld Svidt
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;
Repetition af dIntProg v/ Morten D. Bech. Tour de force Variabler Løkker Comparable ImErKo-reglen Eksamenssæt dIntProg, E13.
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
DB analyse og modellering Jesper Tørresø DAB1 F Februar 2008.
Deadlock Definition deadlock (baglås) er en tilstand som en mængde af processer kan være i en mængde processer er i deadlock hvis alle processerne står.
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
OPERATIONEL ANALYSE AF WEBADFÆRD OAW – LEKTIONSGANG 4.
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.
DIEB10.1 Kursusgang 10 Oversigt: Sidste kursusgang Eksempler på løsning af opgaven Arkitektur for brugergrænsefladen og for systemet Dokumentation af designet.
 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.
 Jens Bennedsen 2002Objektorienteret systemudvikling GRASP mønstre Basale ansvarsplaceringsregler.
 Jens Bennedsen 2002Objektorienteret systemudvikling Design -> kode Mapning af et klassediagram til kode.
 Jens Bennedsen 2002Objektorienteret systemudvikling GRASP mønstre Basale ansvarsplaceringsregler.
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.
 Henrik B. Christensen, 1999Introducerende objektorienteret programmering8B.1 Interfaces En ren kontrakt.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Trinvis forfinelse Systematisk, gradvis udvikling af programmer.
Klassehierarkier Specialisering vha. subklasser. dIntProg, E05Klassehierarkier.2 Oversigt Eksempler på specialisering –Aktør, Koreograf, Skuespiller,
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
Objektorienteret analyse og design Ó Bennedsen 2001 Design - part Programmering og systemudvikling Lektion 7 Design - part 2.
 Jens Bennedsen 2002Objektorienteret systemudvikling Modelleringsperspektiver Hvad betyder en klassemodel egentlig?
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
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 programmering10B.1 Interfaces En ren kontrakt.
 Jens Bennedsen 2002Objektorienteret systemudvikling1.1 Objektorienteret design Persistens - introduktion.
Et Audio/ Video Framework Et framework for en audio/video applikation baseret på lokale og kilder tilgængelige på 1394 via AV/C protokollen.
Klasser og objekter. dIntProg, F08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Eksamen Praktisk prøve.
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;
Forelæsning Uge 4 – Torsdag
SCALE-UP DENMARK Tue David Bak Direktør, Innovation & Vækst, Region Sjælland & Formand for Scale-Up Denmark Thank you to the Ambassador, Mrs Louise Jespersen.
Dorte, Ida, Janne, Nikolaj, Alexander og Erla
Introduction to synopsis writing
DB analyse og modellering
Compositional Design Principles “SemiCiv”
Software Testing Software testing.
Klasser og objekter (Afsnit i manualen).
AIDA Reinsurance Working Party Meeting
Præsentationens transcript:

Trinvis forfinelse vha. STREAM Systematisk, gradvis udvikling af programmer

dIntProg, E08STREAM.2 Oversigt Eksempel på udvikling af et program –forfinelse af en klasse (Date) Proces –systematisk, gradvis fremgangsmåde Teknikker –separation of concerns –nedbrydning i løst koblede delproblemer –mañana-princippet

dIntProg, E08STREAM.3 Proces, overordnet Gør det simpleste du kan der bringer dig videre –Udgangspunkt i klassemodel –En klasse ad gangen (tag altid det simpleste først) –Sørg for hele tiden at have en ”tilfreds” compiler –Sørg hele tiden for at det du har lavet virker (lad fremdriften drives af og afspejles i resultatet fra et testprogram)

dIntProg, E08STREAM.4 Example: iDate Enter September 2008 Next iDate

dIntProg, E08STREAM.5 Example: iDate Enter September 2008 Next iDate

dIntProg, E08STREAM.6 Incremental Development of iDate 1.Construct (part of) the user interface, no functionality 2.Make it work except for the last day of a month 3.Make it work for variable number of days 4.Make it work for leap years (except centuries) 5.Make it work for centuries (except 4-centuries) 6.Make it work for 4-centuries Assume 30 days in every month; ignore leap years Enter September 2008 Next iDate req One possible development scenario

dIntProg, E08STREAM.7 For Your Eyes Only! Enter September 2008 Next iDate Prev Ready for the summer holiday season this year

dIntProg, E08STREAM.8 For Your Eyes Only! Enter September 2008 Next iDate Prev Ready for the holiday season this year

dIntProg, E08STREAM.9 For Your Eyes Only! Enter September 2008 Next iDate Prev Ready for the holiday season this year

dIntProg, E08STREAM.10 Specifications and Development Trace b c d e a f

dIntProg, E08STREAM.11 S T R E A M STREAMSTREAM Stubs Tests Representation alternatives Evaluation Attributes Methods A carefully down-scaled version of a full and rich software engineering process. Formulated for a single class

dIntProg, E08STREAM.12 Stubs STREAM We assume that the classes and their observable (public) functionality is understood and given, for example as a Java interface. Create an implementation class that implements the interface using empty stub methods. ”A walking skeleton”

dIntProg, E08STREAM.13 Tests STREAM Make sure that (an initial set of) test cases are provided for each method in the class.

dIntProg, E08STREAM.14 Representation STREAM Consider representation alternatives for the class: Rep 1, Rep 2,... Support a ”think before code” culture Avoid the ”first thing that comes to mind” syndrome Rep 1 : A short description of the first representation alternative. Rep 2 : A short description of the second representation alternative.

dIntProg, E08STREAM.15 REM: Representation Evaluation Matrix Evaluation STREAM Evaluate the representations using a Representation Evaluation Matrix (REM) IMPL. EFFORTRep 1 Rep 2 method 1 ()ChallengingTrivial method 2 ()TrivialHard method 3 ()EasyHard Apply effort qualifiers from the TEACH scale: Trivial, Easy, Average, Challenging, Hard

dIntProg, E08STREAM.16 Attributes STREAM Define the fields needed for the chosen representation. Provide appropriate initializations for each field (partial implementation of constructors).

dIntProg, E08STREAM.17 Methods STREAM Implement the methods of the class. This step takes the form of a nested loop WHILE a method is unfinished: choose an unfinished method; implement the method WHILE method not complete: improve the method; test ‘Implement the method’ is itself a repetitive activity: Choose the methods in order of simplicity

dIntProg, E08STREAM.18 Programmeringsprincip... Mañana Princippet Opmuntrer til –”separation of concerns” –mange små metoder Når du ønsker du havde en bestemt hjælpemetode, skriv da din kode som om du havde den. Implementer den senere.

dIntProg, E08STREAM og (nogle) regler Special Case –hvis du har brug for kode til håndtering af et specialtilfælde, skriv da denne kode i en separat metode Nested Loop –lav aldrig nestede løkker; lav i stedet en separat metode og lad repetenden i den første løkke være et kald af denne metode Code Duplication –hvis du skriver det samme kodesegment mere end en gang, flyt da segmentet ud i en separat metode Hard Problem –hvis du har brug for en løsning på et problem som du ikke umiddelbart kan løse, lav da en separat metode til løsning af problemet Heavy Functionality –hvis en sekvens af sætninger eller et udtryk bliver for omfattende eller kompliceret, flyt da dette (eller dele heraf) ud i en separat metode

dIntProg, E08STREAM.20 Example: iDate Enter September 2008 Next iDate

dIntProg, E08STREAM.21 iDate: STREAM class Date { /** Advance the date to the next day */ public void setToNextDate() {} /** = a rep. of this date in the format yyyy-mm-dd */ public String toString() { return null; } } Date void setToNextDate() String toString()

dIntProg, E08STREAM.22 iDate: STREAM ?

dIntProg, E08STREAM.23 iDate: STREAM R 1 : Use three integer variables: day, month, and year R 2 : Use one integervariable: number of days since...

dIntProg, E08STREAM.24 iDate: STREAM Simplicity of implementation R1R1 R2R2 setToNextDateChallengingTrivial toStringTrivialHard R 1 : Use three integer variables: day, month, and year R 2 : Use one integer variable: number of days since...

dIntProg, E08STREAM.25 iDate: STREAM class Date { private int day, // 1  day  daysInMonth month, // 1  month  12 year; /** Advance the date to the next day */ public void setToNextDate() {} /** = a rep. of this date in the format yyyy-mm-dd */ public String toString() { return null; }

dIntProg, E08STREAM.26 iDate: STREAM 1 class Date { private int day, // 1  day  daysInMonth month, // 1  month  12 year; /** Advance the date to the next day */ public void setToNextDate() {} /** = a rep. of this date in the format yyyy-mm-dd */ public String toString() { return year + “-” + month + “-” + days; }

dIntProg, E08STREAM.27 iDate: STREAM 2.1 class Date { private int day, // 1  day  daysInMonth month, // 1  month  12 year; /** Advance the date to the next day */ public void setToNextDate() { day= day + 1; }... } Violates the invariant if day is daysInMonth Mañana Principle: Special Case rule

dIntProg, E08STREAM.28 iDate: STREAM 2.2 class Date { private int day, // 1  day  daysInMonth month, // 1  month  12 year; /** Advance the date to the next day */ public void setToNextDate() { day= day + 1; checkDayOverflow(); } /** Handle special case where day > daysInMonth */ private void checkDayOverflow() {}... } Mañana Principle: Special Case rule

dIntProg, E08STREAM.29 iDate: STREAM 3.1 class Date { private int day, // 1  day  daysInMonth month, // 1  month  12 year;... /** Handle special case where day > daysInMonth */ private void checkDayOverflow() { if ( day > 30 ) { day= 1; month= month + 1; }... } Assumption: 30 days in every month Violates the invariant if month is 12 Mañana Principle: Special Case rule (again)

dIntProg, E08STREAM.30 iDate: STREAM 3.2 class Date { private int day, // 1  day  daysInMonth month, // 1  month  12 year;... /** Handle special case where day > daysInMonth */ private void checkDayOverflow() { if ( day > 30 ) { day= 1; month= month + 1; checkMonthOverflow(); } } /** Handle special case where month > 12 */ private void checkMonthOverflow() {}... } Mañana Principle: Special Case rule (again)

dIntProg, E08STREAM.31 iDate: STREAM 4.1 class Date { private int day, // 1  day  daysInMonth month, // 1  month  12 year;... /** Handle special case where month > 12 */ private void checkMonthOverflow() { if ( month > 12 ) { month= 1; year= year + 1; }... } That’s it! Except for the assumption of 30 days in every month, we’re done. Mañana Principle: Hard Problem rule

dIntProg, E08STREAM.32 iDate: STREAM 3.3 class Date { private int day, // 1  day  daysInMonth month, // 1  month  12 year;... /** Handle special case where day > daysInMonth */ private void checkDayOverflow() { if ( day > daysInMonth() ) { day= 1; month= month + 1; } } /** = the number of days in the current month */ private int daysInMonth() { return 30; }... } Mañana Principle: Hard Problem rule

dIntProg, E08STREAM.33 iDate: STREAM 5.1 class Date { private int day, // 1  day  daysInMonth month, // 1  month  12 year;... /** = the number of days in the current month */ private int daysInMonth() { // int[] daysInMonth= [0, 31, 28,..., 31]; int res= daysInMonth[month]; return res; }... } Mañana Principle: Special Case rule Except for leap years, we’re done.

dIntProg, E08STREAM.34 iDate: STREAM 5.2 class Date { private int day, // 1  day  daysInMonth month, // 1  month  12 year;... /** = the number of days in the current month */ private int daysInMonth() { int[] daysInMonth= [0, 31, 28,..., 31]; int res= daysInMonth[month]; if ( month==2 and isLeapYear() ) { res= res + 1; } return res; } /** = the current year is a leap year */ private boolean isLeapYear() { return false; }... } Mañana Principle: Heavy Functionality rule

dIntProg, E08STREAM.35 iDate: STREAM 6.1 class Date { private int day, // 1  day  daysInMonth month, // 1  month  12 year;... /** = the current year is a leap year */ private boolean isLeapYear() { return (divides(4, year) && !divides(100, year)) || divides(400, year); } /** = x divides y */ private boolean divides(int x, int y) { return false; }... } Mañana Principle: Heavy Functionality rule

dIntProg, E08STREAM.36 iDate: STREAM 7.1 class Date { private int day, // 1  day  daysInMonth month, // 1  month  12 year;... /** = x divides y */ private boolean divides(int x, int y) { return y % x == 0; }... }

dIntProg, E08STREAM.37 Programmeringsteknikker Separation of concerns –nedbryd i delproblemer –fokuser på et forhold ad gangen –opdel problemstillingen så de enkelte dele er uafhængige (løs kobling) Mañana-princippet –Special Case –Nested Loop –Code Duplication –Hard Problem –Heavy Functionality

dIntProg, E08STREAM.38 Edgar Alle Poe Top down design of the poem The Raven (1845) – Essay The Philosophy of Composition (1846) –