Target beskriver gränssnittet såsom Client vill ha det. I klassen Adapter sker konverteringen av anropen, till gränsnittet som klassen
|
|
- Viktoria Öberg
- för 7 år sedan
- Visningar:
Transkript
1 Designmönstret Adapter Föreläsning 10 Fler Design Patterns PegAdapter implements SquarePeg RoundPeg Adapter, FactoryroundPeg; Method PegAdapter(RoundPeg peg) Decorator, Observer this.roundpeg = peg; Model-- //constructor Bridge, Composite insert(string str) Command roundpeg.insertintohole(str); //insert //PegAdapter Designmönstret Adapter Designmönstret Adapter Pattern konverterar gränsnittet hos en klass till ett annat gränssnitt så att inkomplatibla klasser kan samarbeta. Client Target +request(): Adapter Adaptee +request(): +otherrequest():... adaptee.otherrequest();... Target beskriver gränssnittet såsom Client vill ha det. I klassen Adapter sker konverteringen av anropen, till gränsnittet som klassen 2 Adaptee tillhandahåller Designmönstret Adapter PegAdapter implements SquarePeg RoundPeg roundpeg; PegAdapter(RoundPeg peg) this.roundpeg = peg; //constructor insert(string str) roundpeg.insertintohole(str); //insert TestPegs //PegAdapter static main(string[] args) RoundPeg roundpeg = new RoundPeg(); SquarePeg squarepeg = new ConcreteSquarePeg(); SquarePeg adapter = new PegAdapter(roundPeg); squarepeg.insert("inserting square peg!"); adapter.insert("inserting round peg!"); //main //TestPegs interface SquarePeg insert(string str); //SquarePeg ConcreteSquarePeg implements SquarePeg insert(string str) System.out.println("SquarePeg insert: " + str); //insert //ConcreteSquarePeg RoundPeg insertintohole(string msg) System.out.println("RoundPeg insertintohole: " + msg); //InsertIntoHole //RoundPeg 3 Utskrift: Utskrift: SquarePeg insert: Inserting square peg! RoundPeg insertintohole: Inserting round peg! 4
2 Designmönstret Factory Method Designmönstret Factory Method Produkter Factory method används när man interface Product abstract String shipfrom(); ProductA implements Product String shipfrom () return " from South Africa"; ProductB implements Product String shipfrom () return " from Spain"; ProductC implements Product först vid exekveringen kan avgöra vilken typ av objekt som skall skapas vill undvika beroenden av konkreta klasser. interface Product abstract String shipfrom(); Main ProductA Product interface Creator implements static main(string[] args) String shipfrom () return " "; String shipfrom () abstract Product factorymethod(int month); Creator c = new ConcreteCreatorA(); return " from South Africa"; System.out.println("From ConcreteCreatorA:"); DefaultProduct implements Product String shipfrom () ConcreteCreatorA implements Creator printyearlydeliver(c); return " not available"; ConcreteCreatorB(); Product factorymethod(int month) c = new ProductB implements Product 5 6 if (month >= 4 ConcreteCreatorB:"); && month <=11) System.out.println("From String shipfrom () return new ProductA(); printyearlydeliver(c); return " from Spain"; else if (month == 1 month == 2 month == 12) return new ProductB(); staticelse printyearlydeliver(creator c) Product ProductC implements Designmönstret Factory Method Designmönstret Factory Method for (int i = 1;return i <= 12; i++) shipfrom () String new DefaultProduct(); Körningsexempel: Client Product = c.factorymethod(i); Fabriker " "; product return From ConcreteCreatorA: from Spain System.out.println(" " + product.shipfrom()); Main from Spain ConcreteCreatorB implements interface Creator Creator static main(string[] args) not available from South Africa abstract Product factorymethod(int month); Creator c = new ConcreteCreatorA(); from South Africa Product factorymethod(int month) System.out.println("From ConcreteCreatorA:"); DefaultProduct implements Product from South Africa ConcreteCreatorA implements Creator printyearlydeliver(c); from South Africa Product factorymethod(int month) c = new ConcreteCreatorB(); return new ProductC(); String shipfrom () from South Africa //Main from South Africa if (month >= 4 && month <=11) System.out.println("From ConcreteCreatorB:"); from South Africa return new ProductA(); printyearlydeliver(c); return " not available"; from South Africa else if (month == 1 month == 2 month == 12) from Spain return new ProductB(); static printyearlydeliver(creator c) From ConcreteCreatorB: else for (int i = 1; i <= 12; i++) return new DefaultProduct(); Product product = c.factorymethod(i); Creator Client +factorymethod() Product ConcreteProductA ConcreteProductB ConcreteCreatorA ConcreteCreatorB +factorymethod() +factorymethod() System.out.println(" " + product.shipfrom()); ConcreteCreatorB implements Creator Product factorymethod(int month) Klie return new ProductC(); nt //Main 7 8
3 Designmönstret Decorator Designmönstret Decorator används för att lägga till funktionalitet på individuella objekt utan att använda arv. Mönstret används ofta då arv skulle ge alldeles för många nivåer i arvshierarkin, eller då arv inte är möjligt. Rekommenderad struktur för Decorator-mönstret är enligt: Component abstract Component: En klass som definierar gränssnittet för de objekt som dynamiskt kan ges ytterligare funktionalitet. 1 operation() ConcreteComponent Decorator abstract operation() operation() ConcreteComponent: En klass som definierar objekt till vilka ytterligare funktionalitet kan ges. component.operation(); ConcreteDecoratorA ConcreteDecoratorB addedstate operation() addedbehavior() super.operation(); addedbehavior(); Antag att vi har en smörgåsbutik. Det finns ett antal brödsorter att välja mellan och ett antal olika pålägg. operation() addedbehavior() Decorator: Har en referens till ett Component-objekt och definierar ett gränssnitt som överensstämmer med gränssnittet för Component. Kunden skall kunna kombinera sin smörgås efter eget önskemål. ConcreteDecorator: Lägger till funktionalitet på objektet Antag att vi har en smörgåsbutik. Kunden kan kombinera sin smörgås efter eget önskemål. Det finns ett antal brödsorter att välja mellan och ett antal olika pålägg. Vi startar med att skapa en abstrakt klass Sandwich enligt: Sandwich Baguette Panini SandwichDecorator abstract interface Sandwich String ; double ; //Sandwich Salami Ham Cheese Tomato 11 12
4 Sedan inför vi vår Decorator-klass, SandwichDecorator, vilken är en abstrakt klass som ärver från Sandwich-klassen och som har en instansvariabel av klassen Sandwich: Sedan skapar vi en klass för var och en av de brödsorter vi har. Dessa klasser ärver klassen Sandwich. Säg att vi har panini och baguetter: abstract SandwichDecorator implements Sandwich protected Sandwich decoratedsandwich; SandwichDecorator(Sandwich sandwich) decoratedsandwich = sandwich; //constructor String return decoratedsandwich.; //getname double return decoratedsandwich.; //getprice //SandwichDecorator Panini implements Sandwich String return "Panini"; Baguette implements Sandwich //getname String double return "Baguette"; return 10.5; //getname //getprice double //Panini return 8.5; //getprice //Baguette Nu kan vi skapa konkreta klasser, t.ex. för att lägga ost, skinka, salami eller tomater på smörgåsen Nu kan vi skapa konkreta klasser, t.ex. för att lägga ost, skinka, salami eller tomater på smörgåsen: Salami extends SandwichDecorator Salami (Sandwich sandwich) super(sandwich); //constructor Tomato extends SandwichDecorator String Tomato (Sandwich sandwich) return super. + " + Salami"; super(sandwich); //getnam //constructor double chargesalami() String return 8.5; return super. + " + Tomato"; //getname double double chargetomato() return decoratedsandwich. return 2.5; + chargesalami(); //getprice double //Salami return decoratedsandwich. + chargetomato(); //getprice //Tomato Cheese extends SandwichDecorator Cheese (Sandwich sandwich) super(sandwich); Ham extends SandwichDecorator //constructor Ham (Sandwich sandwich) String super(sandwich); return super. + " + Cheese"; //constructor //getnam String double chargecheese() return super. + " + Ham"; return 5.5; //getname double chargeham() double return 7.5; return decoratedsandwich. + chargecheese(); double //getprice return decoratedsandwich. //Cheese + chargeham(); //getprice //Ham 15 16
5 Designmönstret Observer TestSandwich static main (String[] args) //lets create a baguette with cheese, ham and tomato Sandwich ourbaguette= new Baguette(); ourbaguette = new Cheese(ourBaguette); ourbaguette = new Ham(ourBaguette); ourbaguette = new Tomato(ourBaguette); System.out.println(ourBaguette. + " = " + ourbaguette. + " kronor"); //lets create a panini with salami and tomato. Sandwich ourpanini = new Panini(); ourpanini = new Salami(ourPanini); ourpanini = new Tomato(ourPanini); System.out.println(ourPanini. + " = " + ourpanini. + " kronor"); //main //TestSandwich När programmet körs erhålls utskriften: Baguette + Cheese + Ham + Tomato = 24.0 kronor Panini + Salami + Tomato = 21.5 kronor Designmönstret Observer är en teknik som tillåter ett objekt som ändrat sitt tillstånd att rapportera detta till andra berörda objekt så att de kan vidta lämpliga åtgärder. Designmönstret Observer definierar en-till-många relation minskar kopplingen mellan objekt Java stöder designmönstret Observer genom: klassen Observable och interfacet Observer klassen PropertyChangeSupport och interfacet PropertyChangeListener 17 Designmönstret Observer Observable +addobserver(o : Observer): +deleteobserver(o :Observer): #setchanged(): +notifyobservers(): Designmönstret Observer * Klassen Observable i Java har bl.a följande metoder: addobserver(observer o) lägger till en ny observatör o. Observer +update(o : Observable; arg: Object): deleteobserver(observer o) tar bort observatören o. ConcreteObserver Publisher +modifystate(): +getvalue(): Value 18 notifyobservers() meddelar alla observatörer att tillståndet har förändrats. protected setchanged() markerar att tillståndet har ändrats. Måste anropas för att notifyobservers() verkligen kommer att meddela observatörerna. +update(o: Observable; arg: Object): Det objekt som tillkännager att det ändrat sitt tillstånd är alltså observerbart (observable) och kallas ofta publisher. De objekt som underrättas om tillståndsförändringen kallas vanligtvis observers eller subscribers. Ovanstående klassdigarm överensstämmer med interfacet Observer och klassen Observable i Java. Interfacet Observer i Java har metoden: update(observable o, Object arg) som anropas av det observerbara objektet o när detta har förändrats
6 Designmönstret Observer :Publisher Exempel Datorintrång :ConcreteObserverA java.util.observable; IntrusionDetector extends Observable someonetriestobreakin() //Denna metod anropas när någon försöker hacka sig in // i datorn. Detta meddelas alla som är intresserade setchanged(); java.util.observer; notifyobservers(); java.util.observable; //someonetriestobreakin SysAdm implements Observer //IntrusionDetector String name; IntrusionDetector dectector; SysAdm( String name, IntrusionDetector dectector) this.name = name; this.dectector = dectector; //constructor subscribe( ) dectector.addobserver(this); //subscriber update(observable server, Object err ) System.out.println( name + " got the message!" ); //update //SysAdm :ConcreteObserverB addobserver(this) addobserver(this) modifystate() notifyobservers() update(this, obj) getvalue() update(this, obj) getvalue() 21 Exempel Datorintrång 22 Designmönstret Composite Designmönstret Composite används för att sätter samman objekt till trädstrukturer för att representera part-whole hierarkier. Composite låter klienter hantera individuella objekt och grupper av kopplade objekt på ett likformigt sätt. Main static main( String[] argv ) IntrusionDetector id = new IntrusionDetector(); SysAdm kalle = new SysAdm( "Kalle", id ); SysAdm sven = new SysAdm( "Sven", id ); SysAdm rune = new SysAdm( "Rune", id ); kalle.subscribe(); rune.subscribe(); // Nu låtsas vi att någon försöker ta sig in id.someonetriestobreakin(); //main //Main Component * +operation() +add() +remove() +getchildren() Rune got the message! Kalle got the message! 23 Leaf Composite +operation() +operation() +add() +remove() +getchildren() forall g in children g.operation(); 24
7 Designmönstret Composite Designmönstret Composite Exempel: Exempel: En folder kan innehålla filer och andra foldrar. Antag att vi i en applikation behöver en metod som när den anropas på en fil skriver filens namn och när den anropar på en folder skriver ut namnet på foldern samt innehållet i foldern och innehållet i alla underfoldlar: :Folder "TDA550" :File "t.txt" :File "a.pdf" :Folder "Java" :File :File "D.java" "C.java" Data * +list(string) TDA550 t.txt a.pdf Java D.java C.java File Folder +list(string) +list(string) +add() +remove() 25 TDA550 Folder 1 t.txt File 1 Composite a.pdf Folder Designmönstret 3 Java Folder 2 //Client Program File 2 CompositePatternD.java static main(string[] args) Folder f1 = new Folder();C.java f1.setname("folder 1"); File 3 Folder f2 = new Folder(); f2.setname("folder 2"); Folder f3 = new Folder(); f3.setname("folder 3"); File 4 File file1 = new File(); file1.setname("file 1"); Designmönstret Composite interface Data list(string str); File implements Data String name; String return name; setname(string name) this.name = name; list(string str) System.out.println(str + this.); //File 26 java.util.*; Folder implements Data String name; List<Data> folder = new ArrayList<Data>(); String return name; setname(string name) this.name = name; list(string str) System.out.println(str + this.); for(data data : folder) data.list(" " + str); add(data data) folder.add(data); remove(data data) folder.remove(data); //Folder File file2 = new File(); File file3 = new File(); File file4 = new File(); f1.add(file1); f1.add(f3); f2.add(file2); f3.add(f2); f3.add(file3); f3.add(file4); f1.list(); //CompositePattern 27 file2.setname("file 2"); file3.setname("file 3"); file4.setname("file 4"); Folder 1 File 1 Folder 3 Folder 2 File 2 File 3 File 4 28
8 Designmönstret Model - Control Model--Control Designmönstret Model--Control (MVC) frikopplar (det grafiska) användargränssnittet från den underliggande modellen. MVC delar upp en applikation i tre olika typer av klasser: Model: Den datamodell som används en abstrakt representation av den information som bearbetas i programmet. Utgörs av de klasser som ansvarar för tillståndet i applikationen. : De klasser som ansvarar för att presentera modellen (som grafiska användargränssnitt). Genom att separera modellen och vyn kan förändringar göras i vyn och flera vyer skapas utan att behöva ändra koden i den underliggande modellen. Control: De klasser som handhar de händelsers som påverkar modellens tillstånd. Model När tillståndet i modellen förändras skall vyerna uppdateras, vi har alltså designmönstret Observer, mellan modellen och vyn. 29 Model--Control 30 MVC och Java Observable +addobserver Observer): #setchanged(): +notifyobservers(): klassen PropertyChangeSupport och +update(observable; Object): +modify(): ** När man implementerar MVC-modellen i Java rekommenderas (numera) att använda Observer ** interfacet PropertyChangeListener Model +somemethod(): +update( Observable; Object): istället för Observable och Observer. Flera andra varianter på MVC-mönstret är möjliga och finns beskrivna i litteraturen
9 PropertyChangeSupport och PropertyChangeListener MVC och Java PropertyChangeListener Serializable I klassen PropertyChangeSupport finns bl.a följande metoder: +propertychange(propertychangeevent) IModel +addpropertychangelistener(...) +removepropertychangelistener(...) +modify(): addpropertychangelistener(propertychangelistener li) lägger till lyssnaren li java.beans.*; removepropertychangelistener(propertychangelistener li) Model implements IModel tar bort lyssnaren li final PropertyChangeSupport pcs = new PropertyChangeSupport(this); firepropertychange(string propertyname, Object oldvalue, Object newvalue) int degreecelsius; meddelar alla lyssnare att något har hänt genom att generera en händelse av typen PropertyChangeEvent. oldvalue och newvalue måste vara Model() olika för att verkligen skall genereras. degreecelsius = 0; I interfacet PropertyChangeListener finns endast en metod //constructor specificerad: addpropertychangelistener(propertychangelistener l) I design ovan är inte Model en subklass till PropertyChangeSupport, propertychange(propertychangeevent evt) utan istället har delegering används för att möjliggöra att Model skall Denna metod anropas när en PropertyChangeEvent inträffar. pcs.addpropertychangelistener(l); kunna ärva från någon annan klass. 33 //addpropertychangelistener removepropertychangelistener(propertychangelistener l) pcs.removepropertychangelistener(l); //removepropertychangelistener MVC ett enkelt exempel Modell: int getvalue() java.beans.*; return degreecelsius; Vi visar hur MVC-mönstret kan användas genom att skriva ett mycket Model implements IModel final PropertyChangeSupport pcs = new PropertyChangeSupport(this); enkelt program som konverterar temperaturer angivna i Celsius till Kelvin //getvalue int degreecelsius; respektive till Farenheit. Model() setvalue(int newvalue) degreecelsius = 0; //constructor int oldvalue = degreecelsius; addpropertychangelistener(propertychangelistener l) pcs.addpropertychangelistener(l); degreecelsius = newvalue; //addpropertychangelistener removepropertychangelistener(propertychangelistener l) pcs.firepropertychange("value", oldvalue, newvalue); pcs.removepropertychangelistener(l); //removepropertychangelistener IModell: //setvalue int getvalue() Avfyras endast om return degreecelsius; java.beans.*; //Model oldvalue!= newvalue //getvalue * abstract +propertychange(propertychangeevent) * Model Concrete -pcs: PropertyChangeSupport paintcomponent(graphic) +addpropertychangelistener(...) +removepropertychangelistener(...) //accessors PropertyChangeSupport +addpropertychangelistener(...) +removepropertychangelistener(...) +firepropertychange(...) //more methods java.io.*; interface IModel extends Serializable addpropertychangelistener(propertychangelistener l); removepropertychangelistener(propertychangelistener l); //IModel 34 setvalue(int newvalue) int oldvalue = degreecelsius; degreecelsius = newvalue; pcs.firepropertychange("value", oldvalue, newvalue); //setvalue //Model 35 36
10 : Konkreta vyer Kelvin: java.awt.*; javax.swing.*; java.beans.*; Kelvin extends JLabel k = new JLabel(); Kelvin(Model m) super(m); setpreferredsize(new Dimension(100,100)); k.setforeground(color.blue); setbackground(color.white); add(new JLabel("Kelvin: ")); add(k); //constructor propertychange(propertychangeevent e) double tok = model.getvalue() ; k.settext(string.format("%.2f", tok)); //propertychange //Kelvin java.beans.*; javax.swing.*; abstract extends JPanel implements PropertyChangeListener protected Model model; (Model m) model = m; model.addpropertychangelistener(this); //setmodel java.awt.*; java.awt.*; javax.swing.*; java.beans.*; javax.swing.*; javax.swing.*; java.beans.*; javax.swing.*; java.beans.*; abstract propertychange(propertychangeevent e); java.awt.event.*; // Fahrenheit extends Kelvin extends abstract extends JPanel implements PropertyChangeListener extends JPanel implements ActionListener JLabel = new JLabel(); JLabel k model; =f new JLabel(); protected Model model; Model Fahrenheit(Model m) Kelvin(Model m) JTextField(5); (Model m) f = new JTextField super(m); model =super(m); m; setpreferredsize(new (Model Dimension(100,100)); m)37 setpreferredsize(new Dimension(100,100)); model.addpropertychangelistener(this); f.setforeground(color.blue); model = m; k.setforeground(color.blue); //setmodel setbackground(color.white); add(f); setbackground(color.white); add(new JLabel("Fahrenheit: abstract propertychange(propertychangeevent e); add(new JLabel("Kelvin: ")); ")); f.addactionlistener(this); add(f); // //constructor add(k); Konkreta vyer Farhenheit: : //constructor //constructor java.awt.*; actionperformed(actionevent e) propertychange(propertychangeevent javax.swing.*; propertychange(propertychangeevent e) e) javax.swing.*; java.beans.*; model.setvalue(integer.parseint(f.gettext())); java.awt.event.*; double tof = model.getvalue()*9.0/5.0+32; Fahrenheit extends = model.getvalue() ; double tok extends JPanel implements ActionListener JLabel f = new JLabel(); //actionperformed Model model; f.settext(string.format("%.2f", tof)); Fahrenheit(Model m) k.settext(string.format("%.2f", tok)); JTextField f = new JTextField(5); super(m); //propertychange // setpreferredsize(new //propertychange Dimension(100,100)); (Model m) f.setforeground(color.blue); model = m; //Fahrenheit setbackground(color.white); //Kelvin add(f); add(new JLabel("Fahrenheit: ")); add(f); //constructor propertychange(propertychangeevent e) double tof = model.getvalue()*9.0/5.0+32; f.settext(string.format("%.2f", tof)); //propertychange //Fahrenheit 38 f.addactionlistener(this); //constructor actionperformed(actionevent e) model.setvalue(integer.parseint(f.gettext())); //actionperformed // 39 40
11 Hopkoppling av komponenterna: Designmönstret Bridge java.awt.*; javax.swing.*; MVCDemo extends JFrame MVCDemo() Model m = new Model(); kv = new Kelvin(m); fv = new Fahrenheit(m); c = new (m); setlayout(new FlowLayout()); add(c); add(kv); add(fv); pack(); setvisible(true); setdefaultcloseoperation(exit_on_close); //constructor static main(string[] arg) MVCDemo demo = new MVCDemo(); //main //MVCDemo Bridge Abstraction abstract #impl: Implementor Implementor abstract Vehicle java.awt.*; protected Engine engine; javax.swing.*; int weightinkilos; MVCDemo extends JFrame Vehicle(int weightinkilos, MVCDemo() Engine engine) this.weightinkilos weightinkilos; Model m ==new Model(); this.engine = engine; kv = new Kelvin(m); Att frigöra en abstraktion från sin implementering så att båda kan variera fv = new Fahrenheit(m); oberoende. abstract drive(); c = newengine) (m); 41 setengine(engine setlayout(new FlowLayout()); this.engine = engine; add(c); add(kv); reportonspeed(int horsepower) int ratioadd(fv); = weightinkilos / horsepower; Designmönstret Bridge Designmönstret Bridge if (ratio pack(); < 3) abstract Vehicle System.out.println("The speed."); setvisible(true); vehicle is going at a fast protected Engine engine; int weightinkilos; else if ((ratio >= 3) && (ratio <= 8)) setdefaultcloseoperation(exit_on_close); Vehicle(int weightinkilos, Engine engine) this.weightinkilos System.out.println("The vehicle is going an average speed."); = weightinkilos; //constructor this.engine = engine; else abstract drive(); static main(string[] arg) setengine(engine engine) System.out.println("The vehicle is going at a slow speed."); this.engine = engine; MVCDemo demo = new MVCDemo(); reportonspeed(int horsepower) //main int ratio = weightinkilos / horsepower; //Vehicle Med användning av if (ratio < 3) +implementation() +function() RefinedAbstractionA +function() ConcreteImplementorA ConcreteImplementorB +implementation() +implementation() RefinedAbstractionB +function() function() impl.implementation(); 42 Vehicle Car CarWithBigEngine Bus CarWithSmallEngine BusWithBigEngine BusWithSmallEngine //MVCDemo Vehicle abstract <<interface> Engine +drive(): +go(): designmönstret Bridge Car Bus SamllEngine BigEngine +drive(): +drive(): +go(): +go(): System.out.println("The vehicle is going at a fast speed."); else if ((ratio >= 3) && (ratio <= 8)) System.out.println("The vehicle is going an average speed."); else System.out.println("The vehicle is going at a slow speed."); //Vehicle 43 44
12 Designmönstret Bridge Designmönstret Bridge interface Engine int go(); //Engine SmallEngine implements Engine int horsepower; SmallEngine() horsepower = 100; int go() System.out.println("The small engine is running"); return horsepower; BigEngine implements Engine int horsepower; //SmallEngine BigEngine() horsepower = 350; int go() System.out.println("The big engine is running"); return horsepower; //BigEngine Car extends Vehicle Car(Engine engine) super(600, engine); drive() System.out.println("\nThe car is driving"); int horsepower = engine.go(); reportonspeed(horsepower); Bus extends Vehicle Bus(Engine engine) //Car super(3000, engine); drive() System.out.println("\nThe bus is driving"); int horsepower = engine.go(); reportonspeed(horsepower); //Bus interface Engine Car extends Vehicle int go(); BridgeDemo engine) //Engine Car(Engine static main(string[] args) SmallEngine implements Engine super(600, engine); Vehicle vehicle = new Bus(new SmallEngine()); int horsepower; vehicle.drive(); SmallEngine() vehicle.setengine(new BigEngine()); The bus is driving horsepower = 100; drive() vehicle.drive(); The small engine is running System.out.println("\nThe car is driving"); The vehicle is going at a slow speed. = engine.go(); int horsepower vehicle = new Car(new SmallEngine()); 45 int go() reportonspeed(horsepower); TheBus busextends is driving Vehicle vehicle.drive(); System.out.println("The small engine is running"); The big engine is running vehicle.setengine(new BigEngine()); Bus(Engine engine) return horsepower; The vehicle is going atengine a average super(3000, BigEngine implements speed. //Carvehicle.drive(); engine); int horsepower; Designmönstret Bridge //SmallEngine TheDesignmönstret caris driving Command BigEngine() //BridgeDemo The small engine horsepower = 350; drive() is running BridgeDemo static main(string[] args) The vehicle is going an average speed. Designmönstret Command kapslar in kommandon som objekt och låter System.out.println("\nThe bus is driving"); Vehicle vehicle = new Bus(new SmallEngine()); klienter få tillgång till olika uppsättningar med kommandon. vehicle.drive(); int horsepower = engine.go(); vehicle.setengine(new BigEngine()); The bus is driving The car is driving vehicle.drive(); The small engine is running go() The vehicle is going at a slow speed. int reportonspeed(horsepower); The big engine is running vehicle = new Car(new SmallEngine()); System.out.println("The big engine is running"); The bus is driving vehicle.drive(); The vehicle is going at a fast speed. The big engine is running vehicle.setengine(new BigEngine()); The vehicle is going at a average speed. return //Bus horsepower; vehicle.drive(); The car is driving //BridgeDemo The small engine is running The vehicle is going an average //BigEngine speed. Invoker Client 46 Command +execute(): <create> Receiver ConcreteCommand action() -receiver: Receiver +execute(): The car is driving The big engine is running The vehicle is going at a fast speed. receiver.action() 47 48
13 Designmönstret Command //Command interface Order abstract execute ( ); //Order Designmönstret Command // Invoker. Agent Agent() placeorder(order order) order.execute(); //placeorder //Agent SubsystemA String A1() // Receiver.return "Subsystem A, Method A1\n"; StockTrade buy() System.out.println("You want to buy stocks"); //buy String A2() sell() return want "Subsystem System.out.println("You to sell stocks "); A, Method A2\n"; //sell //StockTrade SubsystemB String B1() return "Subsystem B, Method B1\n"; Designmönstret Façade Designmönstret Façade används för att dölja komplexitet för användarna. SubsystemC lättare att använda fasaden än det ursprungliga systemet String C1() kan byta implementation av det som fasaden gömmer return "Subsystem C, Method mindre beroenden C1\n"; Client -facade: Facade Libary SubsystemA Facade SubsystemB -a: SubsystemA -b: SybsystemB -c: SubsystemC //ConcreteCommand. BuyStockOrder implements Order StockTrade stock; BuyStockOrder(StockTrade st) stock = st; //constructor execute( ) stock.buy( ); //execute //BuyStockOrder //ConcreteCommand. SellStockOrder implements Order StockTrade stock; SellStockOrder(StockTrade st) stock = st; //constructor execute( ) stock.sell( ); //execute //SellStockOrder Facade SubsystemA a = new SubsystemA(); // Client SubsystemB b = new SubsystemB(); Client main(string[] args) SubsystemC c =static new SubsystemC(); StockTrade stock = new StockTrade(); BuyStockOrder operation1() bsc = new BuyStockOrder (stock); SellStockOrder ssc = new SellStockOrder (stock); Agent agent = new Agent(); System.out.println("Operation 1\n" + agent.placeorder(bsc); // Buy Shares agent.placeorder(ssc); + a.a1() // Sell Shares //main //Client + a.a2() 49 + b.b1()); operation2() System.out.println("Operation 2\n" Designmönstret Façade + b.b1() + c.c1()); SubsystemA String A1() Facade return "Subsystem A, Method A1\n"; SubsystemA a = new SubsystemA(); Client SubsystemB b = new SubsystemB(); String A2() SubsystemC static main (String[] arg)c= new SubsystemC(); return "Subsystem A, Method A2\n"; operation1() Facade facade = new Facade(); System.out.println("Operation 1\n" + + a.a1() + a.a2() facade.operation1(); SubsystemB + b.b1()); String B1() facade.operation2(); return "Subsystem B, Method B1\n"; operation2() System.out.println("Operation 2\n" + b.b1() + c.c1()); SubsystemC String C1() return "Subsystem C, Method C1\n"; +operation1() +operation2() SubsystemC Client static main (String[] arg) Facade facade = new Facade(); facade.operation1(); facade.operation2(); 52
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 merFö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 merFö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 merProperties. Användbara metoder som kan anropas i propertychanged:
Properties Ett objekt kan ha vissa egenskaper (som beskrivs med instansvariabler). En enkel egenskap X avläses och sätts med metoderna getx() och setx(värde). En indexerad egenskap (från t.ex. en array)
Läs merFö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 merDAT043 - 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 merTvå 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 merDesignmö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 merLösningar till tentamen i EDAF25
Lösningar till tentamen i EDAF25 21 aug 2017 Lösning 1 Javaklasser (många varianter finns naturligtvis): class Client { private Invoker invoker; public void newcommand(string cmdtext) { Command cmd; if
Läs merSubklasser 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 merProgrammeringsteknik 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 merLösningar till tentamen i EDAF25
Lösningar till tentamen i EDAF25 1 juni 2017 Lösning 1 Se figur 1. Figure 1: Tillståndsdiagram espressomaskin Lösning 2 (a) Kompositmönstret (b) Se figur 2 (c) Se figur 3 : Square : Drawing : Group : Circle
Läs merFöreläsnings 11 - GUI, Händelsestyrda program, MVC
Föreläsnings 11 - GUI, Händelsestyrda program, MVC Josef Svenningsson Tisdag 20/11 Boken Denna föreläsning går igenom följande sektioner i boken: 10.1 och 10.2 11.1 Notera att kapitel 11 inte finns i boken
Läs merDagens program. Objektorienterad modellering och diskreta strukturer / design. Model/View/Control-implementering. Model/View/Control-arkitektur
Dagens program Objektorienterad modellering och diskreta strukturer / design Fler mönster och Paketdesign Lennart Andersson Model View Control Observer Paketdesign Namngivning Reviderad 2011 09 12 2011
Läs merITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter
ITK:P1 Föreläsning 4 Grafiska gränssnitt och händelsehantering 1 DSV Peter Mozelius Grafiska gränssnitt i Java Efterfrågan på program med grafiskt gränssnitt har ökat avsevärt de senaste åren I Java finns
Läs merLaboration 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 merLösningsförslag till tentamen
till tentamen 1 (5) Kurs Objektorienterad programmering Kursbeteckning DAT042 Program D2, TKDAT Läsår 2012/2013, lp 1 Examinator Uno Holmer Uppgift 1 (10 p) Ingen lösning ges. Se kurslitteraturen. Uppgift
Läs merTentamen LÖSNINGSFÖRSLAG
Tentamen 111212- LÖSNINGSFÖRSLAG Uppgift 1. a) A constructor1 B constructor2 b) Satsen är giltig. Utskriften blir: b = 0 c) Kodsegmentet är ogiltigt. Rad 4 orsakar ett kompileringsfel, eftersom en superklass
Läs merMVC-mönstret. model-view-control i Swing
MVC-mönstret model-view-control i Swing MVC Tanken bakom MVC (model view control) är att separera uppgifter i ett program från varandra. Model - Den data som behandlas View - Hur användargränssnittet ser
Läs merÖ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 merTentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.
Tentamen i EDAF5 juni 07 Skrivtid: 4-9 Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas. Skriv inte med färgpenna enda tillåtna färg är svart/blyerts. Skriv
Läs merDUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.
1 (11) DUGGA: Objektorienterade applikationer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Börja varje uppgift på ett nytt blad. Skriv ditt namn och personnummer på varje blad
Läs merLaboration 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 merDetta 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 merObserver Pattern och MVC. Objekt-orienterad programmering och design Alex Gerdes, 2016
Observer Pattern och MVC Objekt-orienterad programmering och design Alex Gerdes, 2016 Model View Controller Model View Controller (MVC) är ett design pattern (architectural pattern) som är väldigt vanligt
Läs merFöreläsning 10. Mer om grafiska komponenter Händelsestyrda program. Layout Managers. Exempel: FlowLayout. Klassen FlowLayout
Layout Managers Föreläsning 10 Mer om grafiska komponenter Händelsestyrda program Föreläsn Utplaceringen av komponenter i en behållare styrs med en layout manager. Det finns olika layout managers: FlowLayout
Läs merFöreläsning 10. Mer om grafiska komponenter Händelsestyrda program. Layout Managers
Föreläsning 10 Mer om grafiska komponenter Händelsestyrda program Layout Managers Utplaceringen av komponenter i en behållare styrs med en layout manager. Det finns olika layout managers: FlowLayout GridLayout
Läs merFöreläsning 3: Händelsestyrda program och användargränssnitt
(2 september 2015 F3.1 ) Föreläsning 3: Händelsestyrda program och användargränssnitt Idag Från sekventiella till händelsestyrda program Lyssnare Kontroller Layout för ordning av kontroller (2 september
Läs merObserver Pattern och MVC. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018
Observer Pattern och MVC Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Model View Controller Model View Controller (MVC) är ett design pattern (architectural pattern) som är
Läs merMer om grafiska komponenter. Händelsestyrda program
Layout Managers TDA143 I1 Programmerade system Föreläsning 14 (OH-bilder 10) Mer om grafiska komponenter. Händelsestyrda program Utplaceringen av komponenter i en behållare styrs med en Layout Manager.
Läs merITK:P1 Lektion 4. Lektion 4. Lektion 4. Att implementera en spelidé i Java. DSV Peter Mozelius
ITK:P1 Att implementera en spelidé i Java DSV Peter Mozelius import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Lektion4 extends JFrame implements ActionListener { final int
Läs merMediator. DD2385 Programutvecklingsteknik Några bilder till föreläsning 10 6/ Designmönster: Mediator Facade State Decorator
DD2385 Programutvecklingsteknik Några bilder till föreläsning 10 6/5 2014 Innehåll Designmönster: Mediator Facade State Decorator Mediator Objekt ska kommunicera ibland alla med alla! Var och en får en
Läs merPROG2 Tenta 2013-06-07 Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2
DSV SU/KTH sid 1 (6) PROG2 VT13 PROG2 Tenta 2013-06-07 Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2 Tentan består av tre uppgifter. Max poäng är 38. För betyget E (godkänd) krävs minst
Läs mer2I1049 Föreläsning 8. Grafiska gränssnitt i Java. AWT-komponenter. Grafiska gränssnitt, Java interface och händelsehantering
2I1049 Föreläsning 8 Grafiska gränssnitt, Java interface och händelsehantering 1 KTH-MI Peter Mozelius Grafiska gränssnitt i Java Efterfrågan på program med grafiskt gränssnitt har ökat avsevärt de senaste
Läs merDI-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 merDagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )
(26 januari 2018 F3 1 ) Dagens föreläsning Arrayer och klasser Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 2 ) Arrayer En array är en datatyp
Läs merObjektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015
Objektorienterad Programkonstruktion Föreläsning 3 9 nov 2015 Kursnämnd Namn kommer... UML: Klassdiagram UML: Relationer Ärver från superklass Implementerar gränssnitt Dubbelriktad eller oriktad relation
Läs merObserver Pattern och MVC. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017
Observer Pattern och MVC Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017 Model View Controller Model View Controller (MVC) är ett design pattern (architectural pattern) som är
Läs merFö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 merLö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 merProjekt 2 XL. Observer-mönstret
Projekt 2 XL Objektorienterad modellering och diskreta strukturer Inför nästa projekt Lennart Andersson Reviderad 2011 10 24 2011 OMD 2011 F15-1 Schema designmöten OMD 2011 F15-2 Observer-mönstret 2 och
Läs mer4.7 Observatörsmönstret
4.7 Observatörsmönstret Uppgift 4.11 Modifiera följande programfragment med hjälp av Observer/Observable så att Model-klassen kan kompileras utan tillgång till Gui-klassen. Lösningen ska redovisas med
Läs merDUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.
1 (8) DUGGA: Objektorienterade applikationer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt namn, personnummer och e-postadress på försättsbladet. Skriv rent dina svar.
Läs merInstitutionen för TENTAMEN CTH VT-15 Datavetenskap 2015-08-19 TDA550 DAG: 15-08-19 TID: 8:30 12:30
Institutionen för TENTAMEN CTH VT-15 Datavetenskap 2015-08-19 TDA550 Tentamen för TDA550 Objektorienterad programvaruutveckling IT, fk DAG: 15-08-19 TID: 8:30 12:30 Ansvarig: Christer Carlsson, ankn 1038
Läs merLektion Händelsehanterare
Lektion Händelsehanterare Händelsehanterare kallas även lyssnare. En lyssnare har som uppgift att ta hand om olika händelser som kan inträffa. För att lyssnaren skall reagera på händelser måste den registreras
Läs merLycka till! TENTAMEN: Objektorienterade applikationer. Läs detta! 1 (6) Tentamen
1 (6) TENTAMEN: Objektorienterade applikationer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Börja varje uppgift på ett nytt blad. Skriv din tentamenskod på varje blad (så att
Läs merFöreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag
Föreläsning 12 Föreläsning 12 Rörliga figurer Klassen Timer Undantag Något om applets Rörliga appletsfigurer Klassen Timer Undantag Något om applets Klassen javax.swing.timer I Swing finns en klass Timer
Läs merObjektorienterad 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 merLaborationer, moment 4 5
2D4135 Objektorienterad programmering, analys och design med Java, 5p, vt 2005 Laborationer, moment 4 5 Detta är andra delen av labkursen. Tag med denna sida till varje redovisning och se till att du får
Läs merTDDC30. 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 merTentamen LÖSNINGSFÖRSLAG
Uppgift 1. a) Utskriften blir: b) A.f C.f Tentamen 170113 - LÖSNINGSFÖRSLAG i) anropet obj1.h() ger kompileringsfel eftersom den statiska typen Base inte har metoden h. ii) anropet obj2.h() ger kompileringsfel
Läs merTentamen LÖSNINGSFÖRSLAG. c) Tilldelningen C x = new D() ger kompileringsfel eftersom klassen D är abstrakt.
Tentamen 101213 - LÖSNINGSFÖRSLAG Uppgift 1. a) Ger utskriften c( ) in D b) Ger utskriften true c) Tilldelningen C x = new D() ger kompileringsfel eftersom klassen D är abstrakt. d) Ger utskriften b( )
Läs merSvaret kan ges i Javakod (eller i UML-klassdiagram). public class A { B minb;... } public class B { <B:s många variabler och metoder> } Lösning:
Lös koppling mellan programdelar (klasser) eftersträvas ofta i objektorienterad programmering. Om klassen A beror av klassen B, hur kan man lösa upp detta beroende och åstadkomma en lösare koppling mellan
Läs merTDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Grafiskt användargränssnitt, Swing Layout och komponenter Göra
Läs merObjektorienterad Programmering DAT043. Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)
Objektorienterad Programmering DAT043 Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material) 1 Repetition: Arv En subklass ärver alla variabler och metoder från sin superklass.
Läs merOOP Objekt-orienterad programmering
OOP F16:1 OOP Objekt-orienterad programmering Föreläsning 16 Grafiska användargränssnitt, GUI Ytor Komponenter Layout-managers Lyssnare GUI - Graphical User Interface OOP F16:2 Man skapar en yta (ett fönster)
Läs merLösningsförslag till tentamen 150317
Uppgift 1 Lösningsförslag till tentamen 150317 1) Sant 2) Falskt. I ett RAM-minne är åtkomsttiden densamma för alla minnesadresser.) 3) Falskt. Det är TCP som använder sig av en fast kommunikationsförbindelse.)
Läs merHT2 2015, FÖRELÄSNING 15 (XL-PROJEKTET)
Objektorienterad modellering och diskreta strukturer (EDAF10) HT2 2015, FÖRELÄSNING 15 (XL-PROJEKTET) Dagens agenda Introduktion till projekt 2 ( XL ) EDA061 Repetition MVC-mönstret (Observer-mönstret)
Läs merLaborationer, moment 4 5
2D4135 Objektorienterad programmering, analys och design med Java, 5p, vt 2004 Laborationer, moment 4 5 Detta är andra delen av labkursen. Tag med denna sida till varje redovisning och se till att du får
Läs merDenna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se
1 F18-20-2006 Denna vecka Måndag: Ett komplext problem Tisdag: Lektion. Kväll: Essäfrågan distribueras via webben. Dead-line onsdag 17 maj, kl 12.00. Inlämning elektroniskt och på papper. Onsdag: Grafik
Läs mer2I1049 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 merUML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016
UML Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 UML Unified Modelling Language Grafiskt modelleringsspråk för att beskriva olika aspekter av objektorienterade system. Vi kommer
Läs mer12 Metaprogrammering i Java
12 Metaprogrammering i Java Reflektion, introspektion, metaprogrammering Reflektion i Java Klassladdning Tillämpningar (Litteratur: se sista sidan) Flexibilitet Utbyggbarhet Plugginbarhet Vad handlar det
Läs merObjektorienterad Programkonstruktion. Föreläsning 7 24 nov 2015
Objektorienterad Programkonstruktion Föreläsning 7 24 nov 2015 Observer (GoF) Man definierar ett "ett-till-många"-förhållande mellan objekt så att när ett objekt byter tillstånd så uppdateras alla beroende
Läs merTENTAMEN. Objektorienterade applikationer CHALMERS. 2018/2019, lp 3 DAT055. Uno Holmer
informationsteknik TENTAMEN KURSNAMN Objektorienterade applikationer PROGRAM: DAI 2 (TIDAL-2) 2018/2019, lp 3 KURSBETECKNING EXAMINATOR DAT055 Uno Holmer TID FÖR TENTAMEN Torsdagen den 21/3 2019 14.00-18.00
Läs merTentamen FYTA11 Javaprogrammering
Lunds universitet FYTA11 Institutionen för Teoretisk Fysik HT 08 Tentamen FYTA11 Javaprogrammering Fredag 9:e januari 2009, 09:00 13:00 Instruktioner Inga hjälpmedel är tillåtna. Behandla högst en uppgift
Läs merPROG2 Tenta 2014-05-02 Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2
DSV SU/KTH sid 1 (6) PROG2 PROG2 Tenta 2014-05-02 Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2 Tentan består av tre uppgifter. Max poäng är 38. För betyget E (godkänd) krävs minst
Läs merDagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?
Programmeringsteknik och Matlab Övning 6 Dagens program Övningsgrupp 2 (Sal Q22/E32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1312
Läs merThe Last Adventure. Innehåll. Objektorientering. Språket Java. Java - Paket. Java - synlighet. Den sista lektionen. Repetition.
Innehåll The Last Adventure Den sista lektionen Repetition Examination Slutar 14:45 (minnesstund) Många saker "flashar" förbi - hojta Objektorientering Språket Java Class Object Inheritance Polymorphism
Läs merOOP Objekt-orienterad programmering
OOP F16:1 OOP Objekt-orienterad programmering Föreläsning 16 Grafiska användargränssnitt, GUI Ytor Komponenter Layout-managers Lyssnare GUI - Graphical User Interface OOP F16:2 Man skapar en yta (ett fönster)
Läs merArv. 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 merTentamen i Objektorienterad programmering
CHALMERS TEKNISKA HÖGSKOLA Datavetenskap TDA547 Tentamen i Objektorienterad programmering Lördagen 12 mars 2011, 8.30 12.30. Jourhavande lärare: Björn von Sydow, tel 0762/981014. Inga hjälpmedel. Lösningar
Läs merKungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h
Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h Antalet uppgifter : 2 (20p + 20p = 40 p) ) Lärare, jourhavande lärare :
Läs merLösningar för tenta 3 DAT043,
Lösningar för tenta 3 DAT043, 2018-08-22. Uppgift 1 class Person{ public String förnamn; public String efternamn; public int ålder; private double längd; private double vikt; public Person(String förnamn,
Läs merInstuderingsuppgifter läsvecka 6 - LÖSNINGAR
Instuderingsuppgifter läsvecka 6 - LÖSNINGAR 1. 2. Om vi använder interfacet List behöver vi inte bry oss om den konkret implementation som används, därför kan implementationen bytas ut genom att endast
Läs merTentamen i Objektorienterad programmering E
CHALMERS TEKNISKA HÖGSKOLA Datavetenskap TDA546 Tentamen i Objektorienterad programmering E Måndagen 8 mars 2010, 8.30 12.30. Jourhavande lärare: Björn von Sydow, tel 1040. Inga hjälpmedel. Lösningar till
Läs merTentamen. 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 merLaboration 15 Grafiskt användargränssnitt
Laboration 15 Grafiskt användargränssnitt Avsikten med denna laboration är att du ska träna på att skriva program som använder grafiskt användargränssnitt, dvs program som använder grafiska komponenter
Läs merModelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545
Data och Informationsteknik / Computer Science and Engineering Chalmers University of Technology and University of Gothenburg Magnus Myréen Modelsvar för Tentamen för Objektorienterad programvaruutveckling,
Läs merHT1 2013, FÖRELÄSNING 5
Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061) HT1 2013, FÖRELÄSNING 5 Förra föreläsningen Projektgrupper klara?! Redovisningstid inbokad? Designmönster Strategy (exempel) Singleton
Läs merLö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 merLULEÅ TEKNISKA UNIVERSITET
LULEÅ TEKNISKA UNIVERSITET Tentamen i Objektorienterad programmering och design Totala antalet uppgifter: 5 Lärare: Håkan Jonsson, Andrey Kruglyak, 491000 Resultatet offentliggörs senast: 2010-04-09. Tillåtna
Läs merTentamen i Objektorienterad modellering och diskreta strukturer
Lunds Tekniska Högskola Datavetenskap Ulf Asklund, Sven Gestegård obertz Tentamen EDAF10 2014 10 31, 14.00 19.00 Tentamen i Objektorienterad modellering och diskreta strukturer Vid bedömningen kommer hänsyn
Läs merGrundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 18
Grundläggande programmering, STS 1, VT 2007. Sven Sandberg Föreläsning 18 Igår: Genomgång av dugga Rekursion Idag och på måndag: Om essän Lite, lite teori om konstanter Grafiska användargränssnitt Grundläggande
Läs merlgammal2.txt // Lösningar till gammal tentamen // Uppgift 1 a
// Lösningar till gammal tentamen // Uppgift 1 a /* Felet beror på att det är klassen på referensen som avgör vilka metoder man får köra på ett objekt, inte klassen på objektet. På rad 5 i klassen C har
Läs merObjektorienterad programutveckling, fk
till tentamen P r e l i m i n ä r 1 (7) Kurs Objektorienterad programutveckling, fk Program DAI2 Läsår 2017/2018, lp 2 Examinator Uno Holmer Uppgift 1 (7 p) Abstrahera ut aktiviteten i ett gränssnitt Trainee
Läs merLÖ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 merSI-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 merTentamen. 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 merFakulteten för ekonomi, kommunikation och IT. Corba. Datum: Mathias Andersson
Fakulteten för ekonomi, kommunikation och IT Corba Datum: 2007-10-17 Namn: Kurs: Henrik Bäck Mathias Andersson DVGC02 Innehållsförteckning Implementation 3 IDL-fil 3 Server 3 Klient 3 Körning 3 Bilagor
Läs merInstitutionen för TENTAMEN CTH VT-15 Datavetenskap 2015-04-13 TDA550 DAG: 15-04-13 TID: 8:30 12:30
Institutionen för TENTAMEN CTH VT-15 Datavetenskap 2015-04-13 TDA550 Tentamen för TDA550 Objektorienterad programvaruutveckling IT, fk DAG: 15-04-13 TID: 8:30 12:30 Ansvarig: Christer Carlsson, ankn 1038
Läs merDesign 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 merF8 - 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 merOutline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine
Objektorienterad Programmering (TDDC77) Föreläsning XI: åsidosättning, gränssnitt, uppräkning, hierarkier Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Klassen calculator Signatur Calculator
Läs merOutline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.
Objektorienterad Programmering (TDDC77) Föreläsning XI: åsidosättning, gränssnitt, uppräkning, hierarkier Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Signatur public static int parseint (
Läs merFöreläsning 6. Designmönstret Decorator I/O-ramverket
TDA550 Objektorienterad programmering, fortsättningskurs Föreläsning 6 Designmönstret Decorator I/O-ramverket Objektorienterad programmering fk 1 Föreläsning 6 Designmönstret Decorator Decorator-mönstret
Läs merFö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 merFrivillig 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 merLösningsförslag till tentamen
Uppgift 1 a) Sant. b) Sant. c) Sant. Lösningsförslag till tentamen 170818 d) Falskt. IPv6 anger en IP-adress med 132 bitar. e) Falskt. Spoofing åsyftar användning av förfalskad eller lånad identitet på
Läs merObjektorienterad Programmering (TDDC77)
Objektorienterad Programmering (TDDC77) Föreläsning XI: åsidosättning, gränssnitt, uppräkning, hierarkier Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Outline Överlagring (overloading) Arv
Läs mer