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

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

Programmeringsparadigmer.
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
Array og ArrayList Et slideshow. Som er sødt.. Hvordan virker ArrayList?  ArrayList NAVN = new ArrayList ();  NAVN.add(”Værdi”);  NAVN.add(index, ”værdi”)
Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
Objektorienteret programmering
Begreber og Redskaber 2. Plan for idag Noget om bestanddelene i et programmeringssprog Syntaksbeskrivelse af java Næste gang: –Binære tal –Repræsentation.
Forelæsning 3.1 Collections Javas for-each løkke
Delphi og C++ Builder C++ Builder. C++ Historie Sproget blev designet for AT&T af danskeren Bjarne Stoustrup En objektorienteret videreudvikling.
Fundamentale datastrukturer
Mønstre En lille introduktion. Singleton Tilgå et objekt igennem klassereference i stedet for objektreference.  Overflødiggør referencer til objektet.
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.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Begreber og Redskaber 7. Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
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.
Længste plateau En klassisk problemstilling (Gries, 1981) - og her i Java!!! Denne opgave drejer sig om at bestemme længden af det længste plateau i en.
Begreber og Redskaber 11. Plan for idag Lidt afrunding: Collections Framework i Java Noget om oversættere og sprog Evaluering Sidste gang øvelser før.
Forelæsning 7.1 – repetition
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.
Søgning.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.2 Søgeproblemer... Søgning efter fil(er) Søgning i databaser.
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.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.1 OOP – Model før funktioner Funktionsorienteret versus objektorienteret systemudvikling.
Sortering.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSortering.2 Sortering Vi hartidligere set at effektiv søgning forudsætter.
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.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7B.1 Søgning.
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.
DAIMIIntroducerende objektorienteret programmeringkd.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,
Indledende Programmering Uge 6 - Efterår 2006
I o p o DAIMI, AU, Marts 1999Introducerende objektorienteret programmering5B.1 Et lille banksystem Modellering ved hjælp af UML.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.1 Rekursion.
Objektorienteret analyse og design Ó Bennedsen 2001 Design - part Programmering og systemudvikling Lektion 7 Design - part 2.
Lærde skildpadder Specialisering af skildpadder – nye kompetencer (metoder/kommandoer)
I o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14A.1 Del, løs og kombinér.
 Jens Bennedsen 2002Objektorienteret systemudvikling Modelleringsperspektiver Hvad betyder en klassemodel egentlig?
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.
Interfaces – hvorfor, hvad og hvordan?.  Michael E. Caspersen 2003IOOPInterfaces.2 Oversigt Interfaces, hvorfor –Separering af specifikation (interface)
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
I o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14B.1 Sortering.
 Jens Bennedsen 2001Multimedie programmering3B.1 Specifikationer Betingelser, specifikationer og JavaDoc.
I o p o DAIMI, AU, November 1999Introducerende objektorienteret programmering9D.1 Del, løs og kombinér.
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.1 Sweep-algoritmer Programmering med invarianter og uden kaniner.
Objektorienteret analyse og design Ó Bennedsen 2001 Programmering og systemudvikling 1.1 Programmering og systemudvikling Lektion 1 Oversigt Forskellige.
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;
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.1 Sweep-algoritmer Programmering med invarianter og uden kaniner.
Del, løs og kombinér Et algoritmemønster.
Containerklasser – klassifikation og brug.  Michael E. Caspersen, 2003IOOPContainerklasser.2 Mange objekter Containerklasser –antag at man skal repræsentere.
I o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.1 Søgning.
01.1 Mathiassen, Munk-Madsen, Nielsen & Stage, 2001 © Objektorienteret Analyse & Design (OOA&D) Grundbegreber, principper og metode Kapitel 1.
Præsentationens transcript:

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

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

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

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).

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...

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...

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

i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.8 Brugssituationen doDailyReport endSession beginSession (printDailyReport)

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(); }

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

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) }

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

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.

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.

i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.15 Udlejning (UML) Vi modellerer en udlejning som en klasse: start() stop() duration() Session(...)

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)

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;

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

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(); }

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

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 doDailyReport() er uændret!

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)) }

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

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...