Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

I o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.1 OOP – Hvorfor nu det? Funktionsorienteret versus objektorienteret systemudvikling.

Lignende præsentationer


Præsentationer af emnet: "I o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.1 OOP – Hvorfor nu det? Funktionsorienteret versus objektorienteret systemudvikling."— Præsentationens transcript:

1 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.1 OOP – Hvorfor nu det? Funktionsorienteret versus objektorienteret systemudvikling

2 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.2 FUP eller OOP? Et problem To løsninger (en dårlig og en god) Meget sort hvidt, men Overdrivelser fremmer forståelsen

3 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.3 Showboat A/S  von Petersen  Knudsen  Exbert

4 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.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 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.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 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.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 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.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 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.8 Brugssituationen doDailyReport endSession beginSession (printDailyReport)

9 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.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 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.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 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.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 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.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 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.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 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.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 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.15 Udlejning (UML) Vi modellerer en udlejning som en klasse: start() stop() duration() Session(...)

16 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.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 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.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: - Bag current;

18 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.18 Brugssituationen 123 456 789 0 doDailyReport endSession beginSession (printDailyReport) + NumPad

19 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.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 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.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 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.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 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.22 Bag Bag current = new Bag; class Bag {... // ? public Bag () 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 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.23 En (logisk) trelags-arkitektur Funktions- komponent beginSession endSession doDailyReport Grænseflade- komponent Start End X printDailyReport Modelkomponent Time Session Bag Enume- ration statiskdynamisk

24 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.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 "I o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.1 OOP – Hvorfor nu det? Funktionsorienteret versus objektorienteret systemudvikling."

Lignende præsentationer


Annoncer fra Google