Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.1 OOP – Model før funktioner Funktionsorienteret versus objektorienteret systemudvikling.

Lignende præsentationer


Præsentationer af emnet: " Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.1 OOP – Model før funktioner Funktionsorienteret versus objektorienteret systemudvikling."— Præsentationens transcript:

1  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.1 OOP – Model før funktioner Funktionsorienteret versus objektorienteret systemudvikling

2  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.2 FUP eller OOP? Et problem To løsninger (en dårlig og en god) Meget sort hvidt, men Overdrivelser fremmer forståelsen

3  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.3 Showboat A/S  von Petersen  Knudsen  Exbert

4  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.4 Situationen  Showboat A/S udlejer både på timebasis (minutbasis).  von Petersen styrer firmaet fra sin virksomhedsdomicil i midtbyen hvorfra han klarer administrative og repræsentative pligter m.m.  Knudsen klarer den daglige drift i Kaløvig Bådehavn (betjener kunder, vedligeholder både, m.m.).  Exbert er freelance systemudvikler (software engineer).

5  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.5 Krav  I forbindelse med den strategiske planlægning har von Petersen desperat brug for et beslutningsstøttesystem som kan give ham de nødvendige forretningsspecifikke informationer. Antallet af udlejninger og udlejningstid synes at være centrale nøgletal.  Af et lokalt men velrenommeret konsulentfirma får von Petersen udarbejdet en kravspecifikation for et system der skal producere en dagsrapport med information om antal udlejninger den gennemsnitlige varighed af hver udlejning  Systemet udbydes i licitation, og Exbert vinder...

6  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.6 Funktionsorienteret udvikling  Exbert er en kvik og smart programmør. Ved at granske de funktionelle krav indser han at alt hvad han behøver er et tilstandsrum med to variabler: n, antallet af afsluttede udlejninger; og totalTime, summen af varigheden af alle afsluttede udlejninger.  Det er let at ajourføre n: hver gang en udlejning afsluttes, tælles n én op.  Ajourføring af totalTime kræver lidt regnerier...

7  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.7 Exberts problemløsning s i : starttid for udlejning i e i : sluttid for udlejning i totalTime = (e 1 - s 1 ) + (e 2 - s 2 ) + … + (e n - s n ) = e 1 + e 2 + … + e n - s 1 - s 2 - … - s n beginSession: totalTime = totalTime - currentTime; endSession: totalTime = totalTime + currentTime; n++; Nu mangler kun lidt fedteri med brugergrænsefladen... starttid for udlejning sluttid for udlejning

8  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.8 Brugssituationen von Petersen Knudsen

9  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.9 Brugergrænsefladen public static void main(String[] args) { char command = '.'; int sessionNr = 0; command = getChar(); while ( command != '.' ) { switch ( command ) { case 's': case 'S': beginSession(); break; case 'e': case 'E': endSession(); break; default: ; } command = getChar(); } doDailyReport(); }

10  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.10 Systemfunktioner public static void doDailyReport() { Time avgTime; if ( n != 0 ) avgTime = totalTime.divide(n); else avgTime = new Time(0); printDailyReport(n, avgTime); } public static void beginSession () { Time now = new Time(); totalTime = totalTime.subtract(now); } public static void endSession () { Time now = new Time(); totalTime = totalTime.add(now); n++; } static int n; static Time totalTime = new Time(0); Systemtilstand

11  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.11 Time Time er en generel klasse i et klassebibliotek; en ikke-domænespecifik klasse: public class Time {... public Time(int x) public Time () public void set (int h, int m, int s) public Time add (Time t) public Time subtract (Time t) // pre: this >= t public Time divide (int n) // pre: n != 0 public boolean equalTo(Time t) public boolean greaterThan (Time t) }

12  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.12 To måneder senere...  von Petersen blev meget glad for systemet, men efter kort tid begyndte han at få gode idéer...  von Petersen ringede til Exbert og bad – naturligvis mod en rimelig betaling – om følgende harmløse tilføjelser til dagsrapporten: varigheden af dagens længste udlejning:-( specifikation af dagens travleste time:-( en ekstra rapport midt på dagen:-( det maksimale antal samtidige udlejninger:-)

13  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.13 Et objekt-orienteret perspektiv  Exberts system er udviklet alene ud fra de funktionelle krav til systemet.  Der er i systemet ingen repræsentation overhovedet af begreber og fænomener i problemområdet, og derfor er det umuligt at imødekomme nye systemkrav.  Det, der er behov for, er en model der repræsenterer relevante begreber og fænomener fra problemområdet (relevante i forhold til de funktionelle krav!).  Vi vil lave sådan en model, og vi skal erfare at den bliver fundamentet for systemet.

14  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.14 Det centrale begreb: udlejning  Relevante begreber skal først og fremmest søges i krav- specifikationen (de funktionelle krav): antal udlejninger den gennemsnitlige varighed af hver udlejning  Begge krav er udtrykt i termer af begrebet ‘en udlejning’; intet andet synes p.t. at være relevant.  Vi ønsker at kunne måle udlejningers varighed, og eftersom varigheden af en udlejning er differensen mellem udlejningens sluttid og starttid, kan det være hensigtsmæssigt at identificere disse.

15  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.15 Udlejning (UML) Vi modellerer en udlejning som en klasse: start() stop() duration() Session(...)

16  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.16 class Session { private int nr; private Time startTime; private Time stopTime; public Session (int nr) { } public int nr() { } public void start () { } public void stop () { } public Time duration () { } this.nr = nr; return nr; startTime = new Time(); stopTime = new Time(); return stopTime.subtract(startTime); Udlejning (Java)

17  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.17 Udlejningsobjekter  Tanken er at der skal være et objekt for hver uafsluttet udlejning: Tid s1s1 e2e2 s2s2 s3s3 s4s4 nr: 1 startTime: 10 stopTime: - nr: 2 startTime: 11 stopTime: 14 nr: 3 startTime: 15 stopTime: - nr: 4 startTime: 17 stopTime: - Set current;

18  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.18 Brugssituationen 123 456 789 0 doDailyReport endSession beginSession (printDailyReport) + NumPad

19  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.19 Brugergrænsefladen public static void main(String args[]) { char command = '.'; int sessionNr = 0; command = getChar(); while ( command != '.' ) { switch ( command ) { case 's': case 'S': sessionNr++; beginSession(sessionNr); break; case 'e': case 'E': showStatus(); int nr = getInt(); endSession(nr); break; default: ; } command= getChar(); } doDailyReport(); }

20  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.20 Systemfunktioner (1) public static void beginSession (int nr) { Session s = new Session(nr); s.start(); current.insert(s); } nr: 2 startTime: 11 stopTime: - s: current 1

21  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.21 Systemfunktioner (2) public static void endSession (int nr) { Session s; s = current.lookup(nr); current.remove(nr); s.stop(); n++; totalTime = totalTime.add(s.duration()); } nr: 2 startTime: 11 stopTime: 14 s: current 1 3 4 doDailyReport() er uændret!

22  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.22 Set Set current = new ArraySet; class ArraySet {... // ? public ArraySet () public boolean isEmpty() public boolean member(Session s) // post: s er i denne bag public void insert (Session s) // post: member(s) public Session lookup (int k) // pre: member(new Session(k)) public void remove (int k) // pre: member(new Session(k)) }

23  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.23 En (logisk) trelags-arkitektur statiskdynamisk Grænseflade- (View) Funktions- (Controller) Model-komponent (Model)

24  Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.24 To måneder senere...  von Petersen blev meget glad for systemet, men efter kort tid begyndte han at få gode idéer...  von Petersen ringede til Exbert og bad – naturligvis mod en rimelig betaling – om følgende harmløse tilføjelser til dagsrapporten: varigheden af dagens længste udlejning:-) specifikation af dagens travleste time:-) en ekstra rapport midt på dagen:-) det maksimale antal samtidige udlejninger:-)...:-) :-) :-)...


Download ppt " Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.1 OOP – Model før funktioner Funktionsorienteret versus objektorienteret systemudvikling."

Lignende præsentationer


Annoncer fra Google