Faktorisering //... computeall(); //... }//method1. }//ComputationA //... //... //... computeall(); }//method1. }//ComputationA //...

Storlek: px
Starta visningen från sidan:

Download "Faktorisering //... computeall(); //... }//method1. }//ComputationA //... //... //... computeall(); }//method1. }//ComputationA //..."

Transkript

1 Faktorisering Föreläsning 9 Identifiering av återkommande kodavsnitt upptäcka möjliga återanvändbara komponenter: Refactoring: Implementationsarv identifiera kodavsnitt som gör samma uppgift fast på olika Design Patterns ComputationA Template Method method1() Strategy Gränssnittet Comparator Singleton State platser Refactoring: Extrahera metod implementera denna uppgift i en återanvändbar komponent omorganisera det ursprungliga programmet. Minskar risken för inkonsistent hanterande eventuella fel behöver bara lokaliseras och åtgärdas på en plats (annars behövs upprepade ändringar) //method1 //ComputationA ComputationA extends Common method1() computeall(); //method1 Dubblerad kod i olika klasser Refactoring: Implementationsarv //ComputationA Dubblerad kod i samma klass Refactoring: Extrahera metod Computation method1() //method1 method2() //method2 //Computation ComputationA method1() //method1 //ComputationA 2 abstract Common protected computeall() //computeall //Common ComputationB extends Common method2() ComputationA extends Common computeall(); method1() computeall(); ComputationB //method2 method2() //method1 //ComputationA //ComputationB Computation computeall() //computeall method1() computeall(); //method1 method2() computeall(); //method2 //Computation //method2 //ComputationB 3 ComputationB extends Common method2() computeall(); //method2 //ComputationB 4

2 Dubblerad kod i olika klasser Dubblerad kod mixad med omgivningsberoende kod Refactoring: Delegering ComputationA method1() //method1 //ComputationA Antag att vi har en grafisk plotter för att rita ut en sinus-kurva: Helper computeall() //computeall //Helper java.awt.*; Sine extends JPanel xorigin; yorigin; xratio 50; yratio 50; Sine() //constructor drawcoordinates(graphics g) g.drawline(0, getheight()/2, getwidth(), getheight()/2); g.drawline(getwidth()/2,0, getwidth()/2, getheight()); //drawcoordinates Refactoring: Delegering ComputationA ComputationA Helper helper... ; method1() method1() plotfunction(graphics g) helper.computeall(); ComputationB xorigin getwidth()/2; drawcoordinates(graphics g) getheight()/2; method2() yorigin java.awt.*; //method1 //ComputationA for ( px 0; px < getwidth(); px++) drawcoordinates(graphics g) x (px - xorigin) / () xratio; javax.swing.*; java.awt.*; ComputationB pacomponent(graphics g) y Math.sin(x); g.drawline(0,super.pacomponent(g); getheight()/2, getwidth(),getheight()/2); py yorigin - () (y * yratio); Helper helper...jpanel ; Sine extends javax.swing.*; drawcoordinates(g); method2() g.drawline(getwidth()/2,0, getwidth()/2, getheight()); g.drawline(0,plotfunction(g); getheight()/2, getwidth(), getheight()/2); extends JPanel //method2 xorigin; Cosine // pacomponent plotfunction(graphics g) //plotfunction helper.computeall(); //ComputationB //drawcoordinates g.drawline(getwidth()/2,0, getwidth()/2, getheight()); //Sine yorigin; xorigin; ComputationA //method1 //method2 //drawcoordinates xratio //ComputationB 50; getwidth()/2; yorigin; Helper helper.plotfunction(graphics..; 5 6 //ComputationA g) xorigin yratio xratio 50; method1() plotfunction(graphics g) yorigin getheight()/2; getwidth(); px++) xorigin getwidth()/2; for (Sine() px yratio 0; px <50; helper.computeall(); xorigin getwidth()/2; Cosine() yorigin getheight()/2; x (px - xorigin) / () xratio; yorigin getheight()/2; //constructor for ( px kod 0; px < getwidth(); px++) y Math.sin(x); //method1 Dubblerad kod mixad med omgivningsberoende kod Dubblerad mixad med omgivningsberoende for ( px 0; px < getwidth(); px++) xratio; kod //constructor x (px xorigin) / () //ComputationA För att rita ut en cosinus-kurva i stället för en sinus-kurva behövs endast en Varförxskall vi e- skapa en plotter som som ritarxratio; ut en cosinus-kurva y(px xorigin) / () Math.cos(x); g.filloval(px - 1, py - 1, 3, 3); liten ändring i metoden plotfunction: genom klipp-och-klistra? pacomponent(graphics g) y Math.cos(x); Math.sin(x); ComputationB py yorigin - () (y * yratio); super.pacomponent(g); py yorigin () (y * yratio); drawcoordinates(graphics g) Helper helper... ; java.awt.*; Metoden plotfunction för sinus-kurva: pacomponent(graphics g) g.filloval(px 1, py 1, 3, 3); //plotfunction drawcoordinates(g); g.filloval(px 1, py 1, 3, 3); g.drawline(0, getheight()/2, getwidth(), getheight()/2); method2() Cosine extends JPanel plotfunction(graphics g) super.pacomponent(g); g.drawline(getwidth()/2,0, getwidth()/2, getheight()); xorigin; plotfunction(g); Metoden plotfunction för cosinus-kurva: //drawcoordinates yorigin; drawcoordinates(g); plotfunction(graphics g) xorigin getwidth()/2; //plotfunction xratio 50; // pacomponent plotfunction(graphics g) yorigin getheight()/2; //plotfunction helper.computeall(); plotfunction(g); // pacomponent for ( px 0; px < getwidth(); px++) x (px - xorigin) / () xratio; y Math.sin(x); //plotfunction xorigin getwidth()/2; yorigin getheight()/2; for ( px 0; px < getwidth(); px++) x (px - xorigin) / () xratio; y Math.cos(x); //plotfunction 7 yratio 50; Cosine() //Cosine //Sine //constructor //method2 //ComputationB pacomponent(graphics g) super.pacomponent(g); drawcoordinates(g); plotfunction(g); // pacomponent xorigin getwidth()/2; yorigin getheight()/2; for ( px 0; px < getwidth(); px++) x (px - xorigin) / () xratio; y Math.cos(x); //plotfunction //Cosine 8

3 Vad är ett designmönster? Vad är ett designmönster? Ett designmönster beskriver en beprövad lösning på ett generellt återkommande problem Inom objektorienterad programutveckling är designmönster en teknik för att åstadkomma kod som är mer flexibel. - förmedlar kunskap mellan experter och noviser (lära sej av bra design e av sina misstag) Utgår från designprinciperna: - Depend on abstractions, not on concrete implementations - ger ett vokabulär för att kommunicera (möjliggör att diskutera lösningar på en abstraktare nivå). - Favor composition over inheritance - Encapsulate what varies. Designmönster finns inom många ämnesdisipliner. Introducerades först inom arkitektur av Christopher Alexander. Designmönster syftar till att bringa ordning och överblickbarhet Inom objektorienterad programutveckling lanserades designmönster av i mitten av 1990-talet av Gamma, Helm, Johnson och Vlissides, vilka kallas för Gang of Four (GoF). - reducerar antalet beroenden mellan komponenterna i systemet. 9 Beskrivning av design mönster 10 Designmönstret Template Method Mönstrets namn - ger ett vokabulär. Problem: Hur definiera en algoritm där vissa delar skiljer sig åt i olika sammanhang. Problemet - beskrivning av problemet och dess kontext. Lösning: Lösningen - hur mönstret löser problemet i kontexten Syfte: Syfte - meningen med mönstret. Beskriv algoritmen i en överordnad klass som en templatemethod, som delar upp arbetet i olika deloperationer som vid behov kan omdefinieras i ärvda klasser. Definiera ett skelett av en algoritm i en metod samt skjut upp vissa steg till subklasserna. Låt subklasserna definiera dessa steg. Enheter: En superklass som implementerar skal ( template) för en eller flera metoder, vilka nyttjar abstrakta metoder, s.k. hook-metoder. Deltagare - de olika elementen som behövs. Konkreta klasser som implementerar hook-metoderna. Konsekvenser - fördelar och nackdelar med att tillämpa mönstret. Användbarhet: 11 Används till att implementera invarianta delar i en algoritm, för att undvika duplicering av kod. 12

4 Designmönstret Template Method Encapsulate what varies! FrameWorkClass abstract templatemethod() stepone() steptwo() Refaktorering med Template Method Design av Sine och Cosine med användning av designmönstret Template Method: templatemethod() stepone(); steptwo(); abstract pacomponent(graphics) drawcoordinates(graphics) plotfunction(graphics) func() plotfunction() func(); java.awt.*; //template method Sine extends plotfunction(graphics g) abstract extends JPanel func( x) xorigin; Hollywood principen: Don't call us, we'll call you! principen Math.sin(x); EnkeltattgetWidth()/2; skapa kurvritare för andra funktioner. xorigin yorigin; Stöder The Open-Closed Principle. //func yorigin getheight()/2; xratio 50; //Sine 13 for ( px 0; px < getwidth(); px++) yratio 50; x (px - xorigin) / () xratio; () y func(x); func(x) //constructor g.filloval(px - 1,förpysinus-funktionen - 1, 3, 3); Klassen Konkret plotter pacomponent(graphics g) Main //som tidigare För att skapa en plotter för att rita ut en sinus-funktionen behöver vi static main(string[] args) //plotfunction a) implementera en konkret klass där vi specificerar hook-metoden: // pacomponent java.awt.*; JFrame w//template new JFrame(); //hook-method method Sine extends Sine(); plotfunction(graphics g) g) abstract extends JPanelps new drawcoordinates(graphics protected abstract x) func( x) func( x); xorigin; Math.sin(x); yorigin; xorigin getwidth()/2; yorigin getheight()/2; //som tidigare // //func xratio 50; //Sine for ( px 0; px < getwidth(); px++) //drawcoordinates yratio 50; x (px - xorigin) / () xratio; () y func(x); b) samt en main-metod : func(x) //constructor pacomponent(graphics g) Main //som tidigare static main(string[] args) //plotfunction //main // pacomponent JFrame w new JFrame(); //hook-method ps new Sine(); drawcoordinates(graphics g) protected abstract func( x); func( x) //Main //som tidigare // ApplicationClassB ApplicationClassB ApplicationClassC stepone() steptwo() stepone() steptwo() stepone() setptwo() //drawcoordinates 15 Sine Cosine func() func() //main //Main 14 16

5 Konkret plotter för cosinus-funktionen Hur rita flera funktioner med samma plotter? Om vi vill rita ut två funktioner samtidig med samma plotter måste vi skapa en plotter med två hook-metoder: För att skapa en plotter för att rita ut en cosinus-funktionen behöver vi a) implementera en konkret klass där vi specificerar hook-metoden: Cosine extends func( x) Math.cos(x); //func //Cosine Two abstract pacomponent(graphics) drawcoordinates(graphics) plotfunctions(graphics) funca() funcb() abstract Two extends JPanel // template-method plotfunctions(graphics g) xorigin getwidth()/2; yorigin getheight()/2; for ( px 0; px < getwidth(); px++) x (px - xorigin) / () xratio; y funca(x); funca(x) y funcb(x); funcb(x) py yorigin - () (y * yratio); //plotfunctions // hook-methods protected abstract funca( funca( x); x) protected abstract funcb( funcb( x); x) //Two SineAndCosine extends Two abstract Two extends JPanel funca( x) Math.sin(x); Main extends // template-method static main(string[] args)cosine //funca JFrame w new JFrame(); plotfunctions(graphics g) func( ps new Cosine(); funcb( x) x) Math.cos(x); Math.cos(x); xorigin getwidth()/2; //func //funcb yorigin getheight()/2; //main //Cosine 17 //Main //SineAndCosine for ( px 0; px < getwidth(); px++) b) samt en main-metod : SineAndCosine AnOtherTwo funca() funcb() funca() funcb() 18 x (px - xorigin) / () xratio; y funca(x); funca(x) javax.swing.*; Main samma plotter? Hur rita flera funktioner med Hur flera funktioner med samma plotter? y rita funcb(x); funcb(x) static Main main(string[] args) py yorigin - () (y * yratio); JFrame w static new JFrame(); main(string[] args) SineAndCosine extends Two Om vi vill rita tre funktioner ps wnew SineCosine(); Two funca( x) JFrame new JFrame(); samtidigt måste de konkreta Math.sin(x); //funca klasserna implementera tre ps new Cosine(); //plotfunctions funcb( x) hook-metoder. Math.cos(x); // hook-methods //funcb //SineAndCosine protected abstract funca( x); x) protected abstract funcb( x); Strider mot Open-Closed Principle. x) //main //Two Main () Three abstract pacomponent(graphics) drawcoordinates(graphics) plotfunctions(graphics) funca() funcb() funcc Önskvärt att ha en Multi som //Main static main(string[] args) JFrame w new JFrame(); Two ps new SineCosine(); //main //Main ritar ut godtyckligt antal funktioner. //main //Main 19 AThree AnOtherThree funca funcb() funcc() funca() funcb() funcc() 20

6 Designmönstret Strategy Designmönstret Strategy Problem: Hur designa för att kunna välja mellan olika men relaterade algoritmer. Lösning: Kapsla in de enskilda algoritmerna i en Strategy-klass. Syfte: Göra algoritmerna utbytbara. Context <<erface>> Strategy -strategy: Strategy Användbarhet: algorithm() contextmethod() när flera relaterade klasser skiljer sig endast i beteende, e i hur de används när algoritmerna som styr dessa beteenden använder information som klienten e behöver känna till java.awt.*; när olika varianter av en algoritm behövs. Enheter: Ett erface (eller en abstrakt klass) Strategy som definierar extends JPanel strategin. klasser som xorigin; Konkreta implementerar olika strategier. Klassen Context som handhar referenser till strategiobjekten. yorigin; xratio 50; yratio 50; Function function; contextmethod() strategy.algorithm(); 1 plotfunction() apply() Sine Cosine Atan apply() apply() apply() ConcreteStrategyC algorithm() algorithm() 22 plotfunction(graphics g) xorigin getwidth()/2; implementrad med designmönstret Strategy yorigin getheight()/2; for ( px 0; px < getwidth(); px++) Context:x (px - xorigin) / () xratio; y function.apply(x); drawcoordinates(graphics g) java.awt.*; py javax.swing.*; yorigin - () (y * yratio); g.drawline(0, getheight()/2, getwidth(), getheight()/2); extends JPanel g.drawline(getwidth()/2,0, getwidth()/2, getheight()); xorigin; g.filloval(px - 1, py - 1, 3, //drawcoordinates 3); yorigin; xratio 50; yratio 50; plotfunction(graphics g) Function function; //plotfunction xorigin getwidth()/2; (Function function) // yorigin getheight()/2; this.function function; pacomponent(graphics g) super.pacomponent(g); drawcoordinates(g); plotfunction(g); // pacomponent <<erface>> Function ConcreteStrategyB algorithm() 21 (Function function) implementrad med designmönstret Strategy this.function function; Design av med användning av designmönstret Strategy: //constructor -function: Function ConcreteStrategyA drawcoordinates(graphics g) g.drawline(0, getheight()/2, getwidth(), getheight()/2); g.drawline(getwidth()/2,0, getwidth()/2, getheight()); //drawcoordinates //constructor Frigör funktionen som skall ritas ut från mekanismen som ritar ut funktionen. I stället för att representera varje funktion som en metod representeras varje funktion som ett objekt, vilket tillhandahåller funktionen. pacomponent(graphics g) super.pacomponent(g); drawcoordinates(g); plotfunction(g); // pacomponent 23 for ( px 0; px < getwidth(); px++) x (px - xorigin) / () xratio; y function.apply(x); //plotfunction // 24

7 implementrad med designmönstret Strategy implementrad med designmönstret Strategy Stategy-erface: som ritar ut en sinus-kurva: erface Function apply( x); //Function MainPlotSine static main(string[] args) JFrame w new JFrame(); ps new (new Sine()); //main //MainPlotSine java.awt.*; Konkreta strategier: javax.swing.*; Sine implements Function erface Function apply( x) java.util.*; Math.sin(x); apply( x); //apply Multi extends JPanel Cosine implements Function //Sine //Function apply( x) xorigin; javax.swing.*; Math.cos(x); //apply yorigin; Atan implements Function MainPlotSine //Cosine apply( x) static xratio Math.atan(x); 50;main(String[] args) //apply yratio 50;JFrame(); //Atan JFrame w new ArrayList<Function> functions new ArrayList<Function>(); 25 ps new (new Sine()); ArrayList<Color> colors new ArrayList<Color>(); Sine implements Function Multi() apply( x)protected addfunction(function f, Color c) Math.sin(x); functions.add(f); //apply //constructor Multi med användning av Strategy-mönstret Klassen Multi colors.add(c); Cosine implements Function //Sine //main //addfunction apply( x) java.awt.*; En Multi, för att rita ut ett godtyckligt antal funktioner, kan implementeras //MainPlotSine Math.cos(x); genom att handha en dynamisk lista med objekt av typen Function. I metoden pacomponent(graphics g) java.util.*; plotfunctions genomlöps listan och genom att nyttja dynamisk bindning anropas Multi extends JPanel //apply super.pacomponent(g); apply-metoden på respektive objekt (t.ex. Sine Cosine eller Atan). xorigin; Atan implements Function yorigin; //Cosine För att göra plottningen tydligare associeras varje funktion med en färg (ett objektdrawcoordinates(g); xratio 50; apply( yratio x) 50; av typen Color). plotfunctions(g); ArrayList<Function> functions new ArrayList<Function>(); Math.atan(x); ArrayList<Color> colors new ArrayList<Color>(); //pacomponent Multi() protected addfunction(function f, Color c) //apply functions.add(f); //constructor colors.add(c); //Atan //addfunction ArrayList<Function> Muli ArrayList<Color> plotfunctions() addfunction(function, Color) * 26 <<erface>> Function apply() Sine Cosine Atan apply() apply() apply() pacomponent(graphics g) super.pacomponent(g); drawcoordinates(g); plotfunctions(g); //pacomponent 27 28

8 Klassen Multi Multi som ritar tre funktioner drawcoordinates(graphics g) g.drawline(0, getheight()/2, getwidth(), getheight()/2); g.drawline(getwidth()/2,0, getwidth()/2, getheight()); //drawcoordinates plotfunctions(graphics g) xorigin getwidth()/2; yorigin getheight()/2; for ( i 0; i < functions.size(); i++) g.setcolor(colors.get(i)); for ( px 0; px < getwidth(); px++) x (px - xorigin) / () xratio; y functions.get(i).apply(x) apply(x); //plotfunctions //Multi java.awt.*; MainMulti static main(string[] args) Multi mp new Multi(); mp.addfunction(new Sine(), Color.GREEN); mp.addfunction(new Cosine(), Color.BLUE); mp.addfunction(new Atan(), Color.RED); JFrame w new JFrame(); w.add(mp); //main //MainMulti drawcoordinates(graphics g) g.drawline(0, getheight()/2, getwidth(), getheight()/2); java.awt.*; MainMulti g.drawline(getwidth()/2,0, getwidth()/2, getheight()); Person implements Comparable static main(string[] args) <Person> //drawcoordinates String name; Multi mp new Multi(); plotfunctions(graphics id; mp.addfunction(new Sine(), Color.GREEN);g) xorigin getwidth()/2; Color.BLUE); Person(String name,cosine(), id) erface yorigin getheight()/2; mp.addfunction(new Atan(),Comparable Color.RED); <T> StringtoString() this.name name; JFrame w( new for i JFrame(); 0; i <compareto(t functions.size(); " + name + " IDnr: " + id); o);i++)(" this.id id; w.add(mp); //constructor g.setcolor(colors.get(i)); //tostring for ( px 0; px < getwidth(); getid() Gränssnitten Comparable<T> Gränssnitten / () xratio;comparable<t> compareto(person otherperson) id; x (px - xorigin) name.compareto(otherperson.name); y functions.get(i). apply(x); apply(x) Om en klass implementerar erfacet Comparable<T> blir objekten i För att lokalisera ett specifikt objekt i en samling, eller för att sortera en samling //getid //main //compareto klassen jämförbara på storlek. av objekt, är det nödvändigt att kunna jämföra objekt storlek. tvåpy påyorigin - () (y * yratio); //MainMulti Java tillhandahåller erfacet Comparable<T> för att definiera en ordning på //Person Person implements Comparable <Person> två objekt av typen T: String name; Person(String name, id) erface Comparable <T> String tostring() this.name name; (" " + name + " IDnr: " + id); compareto(t o); this.id id; //tostring //constructor getid() Ett anrop compareto(person otherperson) id; //Multi name.compareto(otherperson.name); //getid a.compareto(b) //compareto //Person skall era värdet 0 om a har samma storlek som b, era ett negativt tal om a är mindre än b och era ett positivt tal om a är större än b. Ordningen som definieras av metoden compareto kallas för den naturliga ordningen

9 Gränssnitten Comparable<T> Gränssnitten Comparator<T> För att sortera fält respektive listor tillhandahåller Java klassmetoderna Arrays.sort(T[]) och Collections.sort(List<T>). Fråga: Men hur gör vi om vi vill sortera på något annat sätt än i bokstavsordning med avseende på namnen, t.ex. i växande ordning på id? Nedan ges ett program som lagrar ett antal objekt av klassen Person i ett fält. Fältet sorteras och skrivs i den naturliga ordningen som definieras av metoden compareto, d.v.s. i bokstavsordning med avseende på namnen. Svar: Vi använder designmönstret Strategy! Java tillhandahåller (Stratey-erfacet) Comparator<T>: erface Comparator<T> compare(t o1, T o2); boolean equals(object obj); *) java.util.*; PersonTest1 static main(string[] arg) Person[] persons new Person("Kalle", 22), new Person("Bertil", 62), new Person("Sture", 42), new Person("Rune", 12); Arrays.sort(persons); Utskriften Utskriften av av programmet programmet blir: blir: System.out.prln("I bokstavordning:"); II bokstavordning: for ( i 0; i < persons.length; i++ ) bokstavordning: Bertil Bertil IDnr: IDnr: System.out.prln(persons[i]); Kalle Kalle IDnr: IDnr:22 22 //main Rune IDnr: 12 Rune IDnr: 12 //PersonTest1 Sture IDnr: 42 java.util.*; samt klassmetoderna Arrays.sort(T[], Comparator<T>) och Collections.sort(List<T>,Comparator<T>). PersonTest2 Genom att implementera erfacet Comparator<T> kan vi definera den static main(string[] arg) sorteringsstrategi vi önskar. List<Person> new ArrayList<Person>(); equals används för att undersöka om två objekt av Comparator är list erface Comparator<T> Metoden lika och behöver normalt e överskuggas. list.add(new Person("Stina ", 76)); java.util.*; java.util.*; compare(t o1, T o2); list.add(new Person("Agneta", 32)); IDComparator implements Comparator <Person> PersonTest1 *) boolean equals(object obj); static Person("Karin main(string[] arg) list.add(new ", Person[] persons new Person("Kalle", 22), new Person("Bertil", 62), list.add(new ", 98)); Person("Lisa compare(person a, Person b) Person("Rune", 12); new Person("Sture", 42), new list.add(new Person("Berit ", 52)); Exempel: Comparator<T> Fortsättning på exempel: if (a.getid() < b.getid()) Arrays.sort(persons); Nedan ges ett program som lagrar ett antal objekt av klassen Person i ett fält Collections.sort(list, new IDComparator()); och objekten skrivs ut dels i bokstavsordning med avseende på namnen och -1;medbokstavordning:"); Antag att vi vill jämföra objekt av klassen Person avseende på växande System.out.prln("I dels i växande ordning med avseende på id-numret. System.out.prln("I id-ordning:"); ordning på komponenten for id. (ifi(a.getid() 0; i < persons.length; i++ ) b.getid()) java.util.*; Vi måste då införa enfor konkret strategy-klass, vi kallar IDComparator, (Person pvilken : 0; list) System.out.prln(persons[i]); PersonTest2 som implementerar gränssnittet Comparator: static main(string[] arg) System.out.prln(p); //main List<Person> list new ArrayList<Person>(); 1; list.add(new Person("Stina ", 76)); java.util.*; //main //PersonTest1 list.add(new Person("Agneta", 32)); IDComparator implements Comparator <Person> //compare list.add(new Person("Karin ", 15)); list.add(new Person("Lisa ", 98)); //IDComparator compare(person a, Person b) list.add(new Person("Berit ", 52)); Sture IDnr: 42 *) 33 if (a.getid() < b.getid()) -1; if (a.getid() b.getid()) 0; 1; //compare //IDComparator Collections.sort(list, new IDComparator()); System.out.prln("I id-ordning:"); for (Person p : list) System.out.prln(p); //main //PersonTest Utskriften Utskriften av av programmet programmet blir: blir: II id-ordning: id-ordning: Karin Karin IDnr: IDnr:15 15 Agneta Agneta IDnr: IDnr:32 32 Berit Berit IDnr: IDnr:52 52 Stina Stina IDnr: IDnr:76 76 Lisa Lisa IDnr: IDnr:

10 Designmönstret Singleton Designmönstret Singleton Singleton En singleton-klass är en klass som det får finnas endast en instans av och denna instans är globalt åtkomlig. -instance: Singleton Singleton static final Singleton instance new Singleton(); // Other useful instance variables here Singleton() static Singleton getinstance() instance; //getinstance() // Other useful methods here //Singleton -Singleton() +getinstance(): Singleton Singleton static final Singleton instance new Singleton(); RunningNumberGenerator Konstruktorn i klassen är privat! // Other instance variables here useful static RunningNumberGenerator instance; Användare erhåller instansen av klassen via klassmetoden getinstance(). Statiska attribut i en klass initieras när Javas Viritual Machine laddar in thenumber; En singleton klass är i övrigt som en vanlig klass och kan självklart ha fler klassen. Eftersom en klassen måste finnas inladdad innan någon av dess LazySingleton Singleton() RunningNumberGenerator() metoder anropas kommer alltså attributet instance att initieras innan variabler och metoder. static LazySingleton instance; metoden getinstance anropas första gången. thenumber 0; static Singleton getinstance() // Other useful instance variables here //constructor instance; static synchronized LazySingleton() RunningNumberGenerator getinstance() //getinstance() if (instance null) static synchronized LazySingleton getinstance() instance new RunningNumberGenerator(); // Other useful methods here if (instance null) //Singleton Designmönstret Singleton instance; Designmönstret Singleton Den globala instansen av klassen hålls som en privat klassvariabel i klassen själv (variabeln instance i figuren ovan) instance new LazySingleton(); //getinstance() Instansieringen kan skjutas upp tills metoden getinstance anropas för första gången. Detta innebär att denna metod måste göras synchronized nextnumber() instance; trådsäker (konstruktionen synchronized). thenumber++; //getinstance() LazySingleton thenumber; static LazySingleton // Other useful methods here instance; // Other useful instance variables here //RunningNumberGenerator //LazySingleton LazySingleton() static synchronized LazySingleton getinstance() if (instance null) instance new LazySingleton(); instance; //getinstance() // Other useful methods here //LazySingleton Vi återkommer till trådsäkerhet i en senare föreläsning Exempel: En singeltonklass RunningNumberGenerator för att generera sammanhängande löpnummer. RunningNumberGenerator static RunningNumberGenerator instance; thenumber; RunningNumberGenerator() thenumber 0; //constructor static synchronized RunningNumberGenerator getinstance() if (instance null) instance new RunningNumberGenerator(); instance; //getinstance() synchronized nextnumber() thenumber++; thenumber; //RunningNumberGenerator 39 40

11 Designmönstret State Designmönstret State Objekt har tillstånd och beteenden. Objekt ändrar sina tillstånd beroende på erna och externa händelser. Om ett objekt går igenom ett antal klart identifierbara tillstånd och objektets beteende påverkas signifikant av sitt tillstånd kan det vara lämpligt att använda designmönstret State. //state-dependet method //delegate to concrete state method1() state.operation1(); Context -state: State method1() method2() Istället för att direkt implementera beteendet för ett objekt i metoderna i klassen, så delegerar objektet vidare vad som skall göras till ett annat objekt (som är av en annan klass). <<erface>> State Detta innebär att man dynamiskt kan konfigurera om och byta ut beteendet hos objekt, det är som att objektet "byter klass". Vanligt arv är ju en statisk relation som e kan förändras under runtime. operation1() operation2() method2() state.operation2(); ConcreteState1 ConcreteState2 ConcreteState3 operation1() operation2() operation1() operation2() operation1() operation2() State-mönstret kapslar in de individuella tillstånden tillsammans med den logik som används för att byta tillstånd. Designmönstret State har samma strukturell uppbyggnad som designmönstret Strategy, men har ett annat syfte. 41 Exempel på State-mönstret 42 Design Antag att vi har en amfibiebil. När amfibiebilen körs på land driver motorn bakhjulen och när den körs i vatten driver motorn två propellrar. Styrningen sker både på land och i vatten med framhjulen. //state-dependent method //delegate to concrete state go() state.moveforward(); //change state prepareforland() state car; Låt oss säga vi vill ha följande operationer på amfibiebilen: prepareforwater() prepareforland() turnright() turnleft() go() stop() byt tillstånd för att köras i vatten byt tillstånd för att köras på land sväng höger, samma både på land och i vatten sväng vänster, samma både på land och i vatten kör, är olika beroende av om amfibiebilen är på land eller i vatten stanna, är olika beroende av om amfibiebilen är på land eller i vatten 43 Amphicar -state: Conveyance -car: Conveyance -boat: Conveyance +go() +stop() +turnleft() +turnright( +prepareforwater() +prepareforland() <<erface>> Conveyance +moveforward() +slowdown() Car Boat +moveforward() +slowdown() +moveforward() +slowdown() 44

12 Interfacet Conveyance och klasserna Car och Boat Exempel: Klassen Amphicar erface Conveyance abstract moveforward(); abstract slowdown(); //Conveyance Amphicar Conveyance state; Conveyance car; Conveyance boat; Amphicar() car new Car(); boat new Boat(); state car; //constructor go() state.moveforward(); //go stop() state.slowdown(); //stop // Turning doesn't depend on the state //so it is implemented here. turnright() System.out.prln("Turn wheels right."); //turnright turnleft() System.out.prln("Turn wheels left."); //turnleft prepareforwater() state boat; //prepareforwater prepareforland() state car; //prepareforland //Amphicar Main erface Conveyance Amphicar abstract args) //moveforward(); Turning static main(string[] doesn't depend on the state Conveyance state; //so slowdown(); it is implemented here. Amphicar aabstract car; new Amphicar(); Conveyance turnright() //Conveyance a.go(); Conveyance boat; System.out.prln("Turn wheels right."); a.turnright(); Amphicar() //turnright Boat implements Conveyance implements cara.stop(); Car new Car(); Conveyance Boat() turnleft() Car() a.prepareforwater(); boat new Boat(); System.out.prln("Turn wheels left."); moveforward() state moveforward() car; a.go(); Testkörning: System.out.prln( //turnleft System.out.prln( //constructor a.turnright(); "Forward power to propeller"); "Forward power to rear wheels"); Forward prepareforwater() power to rear wheels Exempel: Testprogram //moveforward a.stop(); go() //moveforward state boat; Turn wheels right. slowdown() state.moveforward(); //main slowdown() //prepareforwater Main Apply System.out.prln( breaks on each wheel //go System.out.prln( static main(string[] args) //Main prepareforland() Amphicar a new Amphicar(); "Reverse power topropeller"); Forward power to propeller "Apply breaks on each wheel"); a.go(); stop() state car; //slowdown a.turnright(); //slowdown Turn wheels right. state.slowdown(); a.stop(); //Boat //prepareforland //Car a.prepareforwater(); //stop Reverse power to propeller a.go(); Testkörning: //Amphicar Car implements Conveyance Car() moveforward() System.out.prln( "Forward power to rear wheels"); //moveforward slowdown() System.out.prln( "Apply breaks on each wheel"); //slowdown //Car Boat implements Conveyance Boat() moveforward() System.out.prln( "Forward power to propeller"); //moveforward slowdown() System.out.prln( "Reverse power to propeller"); //slowdown //Boat 45 a.turnright(); a.stop(); //main //Main Forward power to rear wheels Turn wheels right. Apply breaks on each wheel Forward power to propeller Turn wheels right. Reverse power to propeller 47 46

Föreläsning 10. Designmönstrer

Föreläsning 10. Designmönstrer Föreläsning 10 Designmönstrer Faktorisering Identifiering av återkommande kodavsnitt upptäcka möjliga återanvändbara komponenter: identifiera kodavsnitt som gör samma uppgift fast på olika platser implementera

Läs mer

Föreläsning 9. Designmönstrer

Föreläsning 9. Designmönstrer Föreläsning 9 Designmönstrer Faktorisering Identifiering av återkommande kodavsnitt upptäcka möjliga återanvändbara komponenter: identifiera kodavsnitt som gör samma uppgift fast på olika platser implementera

Läs mer

Föreläsning 9. Designmönstrer

Föreläsning 9. Designmönstrer Föreläsning 9 Designmönstrer Faktorisering Identifiering av återkommande kodavsnitt upptäcka möjliga återanvändbara komponenter: identifiera kodavsnitt som gör samma uppgift fast på olika platser implementera

Läs mer

Föreläsning 9. Designmönstrer

Föreläsning 9. Designmönstrer Föreläsning 9 Designmönstrer Faktorisering Identifiering av återkommande kodavsnitt upptäcka möjliga återanvändbara komponenter: identifiera kodavsnitt som gör samma uppgift fast på olika platser implementera

Läs mer

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta

Läs mer

DAT043 - Föreläsning 7

DAT043 - Föreläsning 7 DAT043 - Föreläsning 7 Model-View-Controller, mer om klasser och interface (arv, ) 2017-02-06 Designmönstret Observer avläser Observer Observable meddelar Observer avläser En eller flera objekt registrerar

Läs mer

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning 2I1049 Föreläsning 5 Objektorienterad programmering i Java KTH-MI Peter Mozelius Objektorientering Världar uppbyggda av objekt Inte helt olikt vår egen värld Ett sätt att modularisera våra system Objekten

Läs mer

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel Lösningar till Fiktiv Tentamen på kursen 2D4135 Objektorienterad programmering, design och analys med Java vt2004 Teoridel T1) (4p) Förklara kort följande grundläggande begrepp inom objektorienterad programmering:

Läs mer

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 5 Innehåll Subklasser och arv Inledning till grafik (JFrame och JPanel).

Läs mer

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011) Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Innehåll Föreläsning 8 Två designmönster, MVC och Observer/Observable. Designrekommendation

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Konstruktorer Statiska metoder & attribut

Läs mer

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2 TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2 Pelle Evensen, Daniel Wetterbro 5 november 2009 Sammanfattning Denna vecka ska vi titta på abstrakta klasser kontra interface,

Läs mer

Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015

Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015 Objektorienterad Programkonstruktion Föreläsning 6 23 nov 2015 Designmönster Färdiga "recept" för att lösa (del-)problem i struktureringen av ens program Mönster kan beskriva små komponenter eller stora

Läs mer

Föreläsning 8. Undantag Designmönstert Strategy Gränssnittet Comparable Gränssnittet Comparator

Föreläsning 8. Undantag Designmönstert Strategy Gränssnittet Comparable Gränssnittet Comparator Föreläsning 8 Undantag Designmönstert Strategy Gränssnittet Comparable Gränssnittet Comparator Fel i program När man skriver program uppkommer alltid olika typer av fel: Kompileringsfel, fel som beror

Läs mer

Polymorfi. Objektorienterad och komponentbaserad programmering

Polymorfi. Objektorienterad och komponentbaserad programmering Polymorfi Objektorienterad och komponentbaserad programmering Polymorfi, mångtydighet Polymorfi innebär att en viss konstruktion kan exekveras på olika sätt Överlagring av metoder ger ett polymorft beteende

Läs mer

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14. Tentamen 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.00, sal E33 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel

Läs mer

Design Patterns. En kort introduktion

Design Patterns. En kort introduktion Design Patterns En kort introduktion Vad är ett designmönster? Ett designmönster är en (namngiven) lösning på ett i en viss omgivning ofta återkommande problem. I mjukvaru-världen: En uppsättning klasser

Läs mer

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal Tentamen DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl 14.00 17.00 Hjälpmedel: penna, suddgummi, linjal Tentan har två delar om vardera 30 poäng Maximala betygsgränser (gränserna

Läs mer

Repetition av OOP- och Javabegrepp

Repetition av OOP- och Javabegrepp ArrayList Repetition av OOP- och Javabegrepp En lista i vilken man kan lagra objekt Implementerar List-interfacet Skiljer sig från ett vanligt endimensionellt fält: Dynamisk expanderar när den blir

Läs mer

Föreläsning 8. Undantag Designmönstert Strategy Gränssnittet Comparable Gränssnittet Comparator

Föreläsning 8. Undantag Designmönstert Strategy Gränssnittet Comparable Gränssnittet Comparator Föreläsning 8 Undantag Designmönstert Strategy Gränssnittet Comparable Gränssnittet Comparator Fel i program När man skriver program uppkommer alltid olika typer av fel: Kompileringsfel, fel som beror

Läs mer

DAT043 - föreläsning 8

DAT043 - föreläsning 8 DAT043 - föreläsning 8 Paket, generics, Java collections framework 2017-02-07 Paket och tillgänglighet Ovanför klasser finns en hierarkisk namespace med paket. Filer som inte deklareras i något paket finns

Läs mer

Objektorienterad programmering. Grundläggande begrepp

Objektorienterad programmering. Grundläggande begrepp Objektorienterad programmering Grundläggande begrepp Hur beskriver vi objekt? Vill ha en representationsoberoende beskrivning Abstrakta datatyper! Data Operationer Objekt Representerar en verklig eller

Läs mer

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander F8 - Arv ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Arv och subklasser Klasser innehåller attribut och beteenden En subklass ärver dessa från föräldern Detta ger: Återanvänd kod

Läs mer

Repetition av OOP- och Javabegrepp

Repetition av OOP- och Javabegrepp ArrayList Repetition av OOP- och Javabegrepp En lista i vilken man kan lagra objekt Implementerar List-interfacet Skiljer sig från ett vanligt endimensionellt fält: Dynamisk expanderar när den blir

Läs mer

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Arv Fundamental objekt-orienterad teknik arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Programmeringsmetodik -Java 165 Grafisk respresentation: Arv

Läs mer

Designmönster, introduktion. Vad är det? Varför skall man använda mönster?

Designmönster, introduktion. Vad är det? Varför skall man använda mönster? Designmönster, introduktion. Vad är det? Varför skall man använda mönster? Kent Petersson EMW, Mölndal Datavetenskap, Chalmers epost1: kentp@cs.chalmers.se epost2: kent.petersson@emw.ericsson.se URL: http://www.cs.chalmers.se/~kentp

Läs mer

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt Programmeringsteknik II - HT18 Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt 18-09-28 1 Förra gången: Arv och klasshierarkier Vi såg hur

Läs mer

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling Fulltentamen vitsord: 3=28p, 4=38p, 5= 48p, max 60p. Max 30p i denna halvtentamen Hjälpmedel:

Läs mer

Objektorientering: Lagring och livstid

Objektorientering: Lagring och livstid TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018 Objektorientering: Lagring och livstid Tre sorters variabler Tre sorters variabel (1): Lokal 2 Lokal variabel Deklareras inuti en metod Vid varje anrop

Läs mer

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning. Programmering för Språkteknologer II Markus Saers markus.saers@lingfil.uu.se Rum -040 stp.lingfil.uu.se/~markuss/ht0/pst Innehåll Associativa datastrukturer Hashtabeller Sökträd Implementationsdetaljer

Läs mer

Laboration 2: Designmönster

Laboration 2: Designmönster Laboration 2: Designmönster Bakgrund Det har visat sig väldigt svårt att beskriva hur ett system, eller en dellösning, skall konstrueras på ett bra sätt. Det har överhuvud taget varit svårt att veta om

Läs mer

Design Patterns Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

Design Patterns Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017 Design Patterns Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017 Vad är ett design pattern? Ett design pattern (designmönster) är en (ofta namngiven) generell lösning av en vanligt

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Designmönster Adapter, Factory, Iterator,

Läs mer

Övning 5. TDA550 - Objektorienterad programvaruutveckling, fk

Övning 5. TDA550 - Objektorienterad programvaruutveckling, fk TDA550 - Objektorienterad programvaruutveckling, fk Övning 5. Denna vecka ska vi titta på designmönstren Singleton, State, Observer, Composite och Decorator, samt gränssnittet Comparator. Uppgift 1 Syftet

Läs mer

Tentamen Programmering fortsättningskurs DIT950

Tentamen Programmering fortsättningskurs DIT950 Tentamen Programmering fortsättningskurs Datum: 2015-03-17 Tid: 08.30-12.30 Hjälpmedel: Engelskt-Valfritt språk lexikon Betygsgränser: U: -23 G: 24-43 VG: 44-60 (max 60) Lärare:. Någon besöker ca 10.00

Läs mer

Principles of subclasses. Objekt-orienterad programmering och design Alex Gerdes, 2018

Principles of subclasses. Objekt-orienterad programmering och design Alex Gerdes, 2018 Principles of subclasses Objekt-orienterad programmering och design Alex Gerdes, 2018 Implementation inheritance Subclassing, eller implementation inheritance (implementationsarv), ger oss två fördelar:

Läs mer

Instuderingsuppgifter läsvecka 2

Instuderingsuppgifter läsvecka 2 Instuderingsuppgifter läsvecka 2 1. 2. 3. 4. 5. 6. 7. 8. 9. En referensvariabel har både en statisk typ och en dynamisk typ. Förklara dessa båda begrepp! Förklara begreppet polymorfism. Förklara hur statisk

Läs mer

Laboration 2: Designmönster

Laboration 2: Designmönster Laboration 2: Designmönster Bakgrund Det har visat sig väldigt svårt att beskriva hur ett system, eller en dellösning, skall konstrueras på ett bra sätt. Det har överhuvud taget varit svårt att veta om

Läs mer

Design Patterns. Objekt-orienterad programmering och design Alex Gerdes, 2016

Design Patterns. Objekt-orienterad programmering och design Alex Gerdes, 2016 Design Patterns Objekt-orienterad programmering och design Alex Gerdes, 2016 Vad är ett design pattern? Ett design pattern (designmönster) är en (ofta namngiven) generell lösning av en vanligt återkommande

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Konstruktorer Statiska metoder & attribut

Läs mer

Principles of subclasses Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Principles of subclasses Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Principles of subclasses Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Implementation inheritance Subclassing, eller implementation inheritance (implementationsarv), ger oss

Läs mer

Objektorientering: Lagring, räckvidd och livstid

Objektorientering: Lagring, räckvidd och livstid TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Objektorientering: Lagring, räckvidd och livstid Tre sorters variabler, två sorters metoder Räckvidd och livstid 2 Variabler (lokala och medlemsvariabler)

Läs mer

Lösningsförslag: Övning 5.

Lösningsförslag: Övning 5. TDA550 - Objektorienterad programvaruutveckling, fk Lösningsförslag: Övning 5. Uppgift 1 Klassen är inte en singleton eftersom flera instanser kan skapas av klassen. Ett sätt att göra klassen till en singleton

Läs mer

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15 DAVA15 Objekt, klasser Vad är det? Vad är sambandet mellan dem? Vad är skillnaden mellan dem? Tillstånd Signatur Kommunikation Typ Fält, parametrar och lokala variabler Likheter och skillnader Räckvidd

Läs mer

Föreläsning 13 Innehåll

Föreläsning 13 Innehåll Föreläsning 13 Innehåll Arv Repetition Om tentamen Datavetenskap (LTH) Föreläsning 13 HT 2017 1 / 32 Diskutera Här är början på klassen MemoryWindow som använts på en lab. Vad kan menas med extends SimpleWindow?

Läs mer

1 Comparator & Comparable

1 Comparator & Comparable 1 Comparator & Comparable 1.1 Implementation av Comparable Att implementera Comparable innebär att man gör objekt av sin klass jämförbara med andra och att det därmed antas existera en naturlig ordning

Läs mer

public interface Skrivbar { void skriv(); } public class Punkt implements Skrivbar { public double x; public double y;

public interface Skrivbar { void skriv(); } public class Punkt implements Skrivbar { public double x; public double y; public interface Skrivbar { void skriv(); public class Punkt implements Skrivbar { public double x; public double y; public Punkt(double xx, double yy) { x = xx; y = yy; public Punkt() { @Override public

Läs mer

TENTAMEN OOP

TENTAMEN OOP TENTAMEN OOP 2014-01-19 ANVISNINGAR Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv tydligt - oläsbara svar beaktas ej. BETYGSÄTTNING Max antal poäng är 30. För att bli

Läs mer

Föreläsning 5. När skall man använda implementationsarv? När skall man använda implementationsarv?

Föreläsning 5. När skall man använda implementationsarv? När skall man använda implementationsarv? När skall man använda implementationsarv? Föreläsning 5 När skall implementationsarv användas? The Open-Closed Principle (OCP) Liskov Substitution Principle (LSP) Implementationsarv är en konstruktion

Läs mer

Repetition av viktiga begrepp inom objektorienterad programmering

Repetition av viktiga begrepp inom objektorienterad programmering Repetition av viktiga begrepp inom objektorienterad programmering Tema: Arv, parameteröverföring, statiska attribut och metoder. Arv U 1. Betrakta följande klasser: public class Person { protected String

Läs mer

LÖSNINGSFÖRSLAG

LÖSNINGSFÖRSLAG LÖSNINGSFÖRSLAG - 100406 Uppgift 1. a) Objekten som tillhör en icke-muterbar klass är oförändliga, dvs de behåller under hela sin livstid det tillstånd som de fick när de skapades. Icke-muterbara objekt

Läs mer

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... } En klassdefinition class A extends B {... Arv definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som är definierade för B. A är en subklass till B. B är en superklass till A. class

Läs mer

TDDD78 Objektorientering: Lagring och livstid

TDDD78 Objektorientering: Lagring och livstid jonas.kvarnstrom@liu.se 2017 TDDD78 Objektorientering: Lagring och livstid Tre sorters variabel (1): Lokal 3 Deklareras i en metod Lokal variabel Varje anrop får sin egen "kopia": Två anrop till foo()

Läs mer

SI-pass 4. Johan Brook och Jesper Persson. 25 september 2012. Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

SI-pass 4. Johan Brook och Jesper Persson. 25 september 2012. Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner. SI-pass 4 Johan Brook och Jesper Persson 25 september 2012 1. Sant eller falskt? Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner. Interfaces i Java kan innehålla privata

Läs mer

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010 Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010 interface, motivation och bakgrund Antag att vi gör en generell listklass: public class List { protected static class ListNode { public

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Prioritetskö Heap Representation som

Läs mer

Tentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal

Tentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal Tentamen DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl 10.00 13.00 Hjälpmedel: penna, suddgummi, linjal Tentan har två delar om vardera 30 poäng Maximala betygsgränser (gränserna

Läs mer

1 Repetition av viktiga begrepp inom objektorienterad programmering

1 Repetition av viktiga begrepp inom objektorienterad programmering Repetition av viktiga begrepp inom objektorienterad programmering 3 1 Repetition av viktiga begrepp inom objektorienterad programmering Tema: Arv, parameteröverföring, statiska attribut och metoder. Litteratur:

Läs mer

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/3 2014 Innehåll Kursöversikt Javarepetition/Javaintroduktion UML - klassdiagram-introduktion i anslutning till Java-exemplen Kursmål,

Läs mer

Arv. Objektorienterad och komponentbaserad programmering

Arv. Objektorienterad och komponentbaserad programmering Arv Objektorienterad och komponentbaserad programmering Arv Regel nr 1: Ett objektorienterat språk ska tillåta inkapsling av data Regel nr 2: Ett objektorienterat språk ska tillåta arv Regel nr 3: Ett

Läs mer

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Kort om klasser och objekt En introduktion till GUI-programmering i Java Kort om klasser och objekt En introduktion till GUI-programmering i Java Klasser En klass är en mall för hur man ska beskriva på något. Antag att vi har en klass, Bil. Den klassen innehåller en lista på

Läs mer

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA för SY2 1999-03-17, kl 14.00-18.00 Hjälpmedel: En lärobok i Java programmering Återlämningstillfälle:

Läs mer

Designmönster/Design patterns

Designmönster/Design patterns Johan Eliasson Design patterns Designmönster/Design patterns Vad är det? Beprövade lösningar till återkommande programmeringsproblem Plattformsoberoende Beskrivs ofta med hjälp av UML Baseras på en bok

Läs mer

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016 Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design Alex Gerdes, 2016 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon tripoly =

Läs mer

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 TDDE11, 725G90 Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Arv Polymorf UML (klassdiagram) 1 Arv Möt tre studenter

Läs mer

Objekt-orienterad programmering och design. DIT953 Niklas Broberg, 2018

Objekt-orienterad programmering och design. DIT953 Niklas Broberg, 2018 Objekt-orienterad programmering och design DIT953 Niklas Broberg, 2018 Kursteamet Niklas Broberg kursansvarig, föreläsare, examinator Johannes Åman Pohjola föreläsare Assistenter: Karin Wibergh Sarosh

Läs mer

Algoritmer. Två gränssnitt

Algoritmer. Två gränssnitt Objektorienterad programmering E Algoritmer Sökning Linjär sökning Binär sökning Tidsuppskattningar Sortering Insättningssortering Föreläsning 9 Vad behöver en programmerare kunna? (Minst) ett programspråk;

Läs mer

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design (DIT95) Niklas Broberg, 2018 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon

Läs mer

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1 Objektorienterad programmering Vi började med att programmera i main, sedan gick vi vidare till flera metoder i en klass. Nu är det dags för flera klasser. Objektorienterad programmering Relationer mellan

Läs mer

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 TDDE11, 725G90/1 Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Introduktion OOP Instanser, instansvariabler, instansmetoder

Läs mer

Tentamen. DD2385 Programutvecklingsteknik vt Fredagen den 5 juni 2009 kl Inga hjälpmedel utom penna, sudd och linjal

Tentamen. DD2385 Programutvecklingsteknik vt Fredagen den 5 juni 2009 kl Inga hjälpmedel utom penna, sudd och linjal Tentamen DD2385 Programutvecklingsteknik vt 2009 Fredagen den 5 juni 2009 kl 10.00 13.00 Inga hjälpmedel utom penna, sudd och linjal Tentans del I omfattar 22 poäng. Del II har också 22 poäng Preliminära

Läs mer

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt Föreläsning 4 Klasser Och Objekt Klass Beskrivning av en objekttyp Beskriver egenskaper och beteende (fält och metoder) Klassen fungerar som en ritning Objekt skapas från klassbeskrivningen - instansieras

Läs mer

Föreläsning 8. Designmönster

Föreläsning 8. Designmönster Föreläsning 8 Designmönster Designmönster När man designar program kan det vara viktigt att förstå hur man tidigare gått till väga när man konstruerat program. Kännedom om dessa tillvägagångssätt kan snabba

Läs mer

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016 Objektorienterad Programkonstruktion Föreläsning 2 2 nov 2016 Objekt - klass Namn Fält1 Fält2 Fält3 Metod1 Metod2 Metod3 Metod4 Objekt - klass Objekt - klass Objekt - klass + Objekt - klass public class

Läs mer

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Tentamen Programmeringsteknik II Inledning. Anmälningskod: Tentamen Programmeringsteknik II 2016-01-11 Inledning I bilagan finns ett antal mer eller mindre ofullständiga klasser. Några ingår i en hierarki: List, SortedList, SplayList och ListSet enligt vidstående

Läs mer

Design Patterns. Objekt-orienterad programmering och design Alex Gerdes, 2018

Design Patterns. Objekt-orienterad programmering och design Alex Gerdes, 2018 Design Patterns Objekt-orienterad programmering och design Alex Gerdes, 2018 Vad är ett design pattern? Ett design pattern (designmönster) är en (ofta namngiven) generell lösning av en vanligt återkommande

Läs mer

Föreläsning 7. Designmönstret Singleton. Designmönstret State. Trådar

Föreläsning 7. Designmönstret Singleton. Designmönstret State. Trådar TDA550 Objektorienterad programmering, fortsättningskurs Föreläsning 7 Designmönstret Singleton Designmönstret State Trådar Objektorienterad programmering fk 1 Föreläsning 7 Singleton Pattern En singleton-klass

Läs mer

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser Föreläsning 8 Arv och abstrakta klasser Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen (extends) Den nya klassen behåller alla egenskaper som den gamla

Läs mer

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om? Algoritmer och datastrukturer Allmänt om kursen Kort javagrund repetition - Klasser, metoder, objekt och referensvariabler, - Hierarkiska klass strukturer - Arrayer och arrayer av objekt - Collection ramverket

Läs mer

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p UMEÅ UNIVERSITET Datavetenskap 010530 LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p Betygsgränser 3 21,5-27 4 27,5-33,5 5 34-43 Uppgift 1. (4p) Hitta de fel som finns i nedanstående klass (det

Läs mer

TDDD78 Viktiga begrepp, del 2

TDDD78 Viktiga begrepp, del 2 jonas.kvarnstrom@liu.se 2015 TDDD78 Viktiga begrepp, del 2 Identitet och likhet Är likhet och identitet samma sak? Oj, vi har samma kläder på oss idag! Nej, men likadana! Besserwisser 3 Detta är två rutor

Läs mer

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016 Objektorienterad Programkonstruktion Föreläsning 3 7 nov 2016 Klass/instans Med hjälp av nyckelordet static kan vi bestämma att en metod eller ett fält ska tillhöra själva klassen i stället för en specifik

Läs mer

Uno Holmer, Chalmers, :17 Uno Holmer, Chalmers, :17

Uno Holmer, Chalmers, :17   Uno Holmer, Chalmers, :17 Föreläsning 3 Generiska klasser och metoder (Weiss kap. 4.7-8, Skansholm 17.1) Generiska klassmetoder Råa typer Typbegränsningsuttryck Jämförelseklasser Definition av generisk klass

Läs mer

Mer om metoder och abstraktioner

Mer om metoder och abstraktioner Mer om metoder och abstraktioner Föreläsning 5 TDA540 - Objektorienterad Programmering Sammanfattning Abstraktion, top-down design Gränsnitt av en metod Parameteröverföring För- och eftervilkor (kompilera

Läs mer

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3 TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3 Laboration 3 Visualisering (och implementering) av sortering Exempel på grafik (med Swing-paketet) Frågor 1 Laboration 3 Visualisering

Läs mer

Föreläsning 10 Innehåll. Diskutera. Inordertraversering av binära sökträd. Binära sökträd Definition

Föreläsning 10 Innehåll. Diskutera. Inordertraversering av binära sökträd. Binära sökträd Definition Föreläsning Innehåll Diskutera Binära sökträd algoritmer för sökning, insättning och borttagning implementering effektivitet balanserade binära sökträd, AVL-träd Jämföra objekt interfacet Comparable Interfacet

Läs mer

Föreläsning 9 Innehåll

Föreläsning 9 Innehåll Föreläsning 9 Innehåll Binära sökträd algoritmer för sökning, insättning och borttagning, implementering effektivitet balanserade binära sökträd, AVL-träd Abstrakta datatyperna mängd (eng. Set) och lexikon

Läs mer

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes Idag statiska metoder och variabler private/public/protected final, abstrakta klasser, gränssnitt, delegering wrapper classes ett lite större exempel Objectorienterad programmering Sida 1 Vad vi vet om

Läs mer

Föreläsning 9: Arv och UML

Föreläsning 9: Arv och UML TDA 545: Objektorienterad programmering Föreläsning 9: Arv och UML Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Quiz Vad betyder static? Varför skriver man get-metoder? public int getpos() { return pos;

Läs mer

Lösningsförslag till tentamen i EDAF25 Objektorienterad modellering och design Helsingborg

Lösningsförslag till tentamen i EDAF25 Objektorienterad modellering och design Helsingborg LUNDS TEKNISKA HÖGSKOLA 1(7) Institutionen för datavetenskap Lösningsförslag till tentamen i EDAF25 Objektorienterad modellering och design Helsingborg 1. a) Figure 1 2015 06 04 GeometryApp GraphicalApp

Läs mer

Classes och Interfaces, Objects och References, Initialization

Classes och Interfaces, Objects och References, Initialization Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018 Abstract class En abstract class är en class

Läs mer

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/3 2017 Innehåll Abstrakta klasser Klasshierarki och typhierarki Polymorfism och dynamisk bindning Polymorfi-exempel: Schack Klassen Object

Läs mer

Föreläsning 10 Innehåll

Föreläsning 10 Innehåll Föreläsning 10 Innehåll Binära sökträd algoritmer för sökning, insättning och borttagning implementering effektivitet balanserade binära sökträd, AVL-träd Jämföra objekt interfacet Comparable Interfacet

Läs mer

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 3

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 3 TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 3 Pelle Evensen, Daniel Wetterbro 16 oktober 2012 Sammanfattning Denna vecka ska vi titta på polymorfism, dynamisk kontra statisk

Läs mer

Konstruktion av klasser med klasser

Konstruktion av klasser med klasser Konstruktion av klasser med klasser Klasser kan byggas på redan denierade klasser genom att klassobjekt används som dataattribut när en ny klass beskrivs. Exempel: Klassen PairOfDice har två attribut attribut

Läs mer

Övningen vill visa på vikten av valet av datastruktur, trots att de ofta erbjuder samma funktionalitet genom sina gränssnitt.

Övningen vill visa på vikten av valet av datastruktur, trots att de ofta erbjuder samma funktionalitet genom sina gränssnitt. 1 Samlingar 1.1 Frekvenstabell En Integer är icke-muterbar (precis som String, Float, Boolean et.c.). Ickemuterbarhet har många fördelar, men en nackdel är att ett helt nytt objekt måste skapas när ett

Läs mer

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02 Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02 Denna laboration är frivillig och syftar till att låta dig lära mer om grafik i java. Labben är ganska grundlig och går igenom vad du skall

Läs mer

Föreläsning 11 Innehåll. Diskutera. Binära sökträd Definition. Inordertraversering av binära sökträd

Föreläsning 11 Innehåll. Diskutera. Binära sökträd Definition. Inordertraversering av binära sökträd Föreläsning Innehåll Diskutera Binära sökträd algoritmer för sökning, insättning och borttagning implementering effektivitet balanserade binära sökträd, AVL-träd Jämföra objekt interfacet Comparable Interfacet

Läs mer

Klasshierarkier - repetition

Klasshierarkier - repetition Klasshierarkier - repetition Klasser kan byggas på redan denierade klasser, egna och/eller färdigskrivna, genom: I att klassobjekt används som attribut (instansvariabler): har-relation. Exempel: traksystemet

Läs mer

Programmering för språkteknologer II, HT2011. Rum

Programmering för språkteknologer II, HT2011. Rum Programmering för språkteknologer II, HT2011 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv11/pst2/ Kursplan Mål Efter avslutad kurs skall studenten för att förtjäna betyget

Läs mer