Objektorienteret design

Størrelse: px
Starte visningen fra side:

Download "Objektorienteret design"

Transkript

1 Objektorienteret design 1

2 Plan Introduktion til designmønstre Design af generiske komponenter - faktorisering - generalisering - abstrakt kobling Design case: animering af algoritmer til sortering 2

3 Genbrug Muligheden for genbrug af eksisterende programdele er en afgørende motivationsfaktor for at benytte objektorienteret programmering. Forudsætninger for genbrug: at finde det, man har brug for at forstå det, man har fundet at modificere det fundne, så det passer til det aktuelle behov at sammensætte det modificerede med de øvrige programkomponenter 3

4 Designmønstre Genbrug af enkeltklasser ved hjælp af nedarvning er relativt simpelt. Derimod er det svært at genbruge et objektorienteret design (en implementerings arkitektur, udtrykt ved samspillet imellem objekter og klasser). En designmønster er en navngiven beskrivelse af en løsning af et tilbagevendende designproblem. 4

5 Formål med designmønstre Designmønstre sammenfatter erfaringer om programdesign i nogle få mønstre, der har vist deres værdi i praksis. Formål: at understøtte genbrug af design at øge tilliden til det udviklede programmel at give designere et fælles sprog Gamma et al.: Design Patterns [1995] udgør et katalog over de 23 mest almindelige designmønstre. 5

6 6

7 Kategorisering af designmønstre Konstruerende mønstre (creational patterns) omhandler skabelse af objekter Strukturelle mønstre (structural patterns) omhandler den statiske sammensætning og struktur af klasser og objekter (deres relationer) Adfærdsmæssige mønstre (behavioral patterns) omhandler det dynamiske samspil imellem klasser og objekter (deres indbyrdes kommunikation) 7

8 Designmønstre i lærebogen Konstruerende mønstre: Singleton, Factory Factory Method Abstract Factory, Builder, Prototype Strukturelle mønstre: Composite, Decorator, Proxy Adapter Behandles Nu Senere Ikke (læs selv kapitel 10) Senere, men er ikke med i lærebogen Adfærdsmæssige mønstre: Template Method, Strategy, Iterator State, Command Observer 8

9 Beskrivelse af designmønstre Navn Kategori Hensigt Motivation Andre navne Anvendelse Struktur Deltagere Konsekvenser Implementering 9

10 Designmønsteret Singleton Navn: Singleton Kategori: Konstruerende designmønster Hensigt: At sikre, at der kun skabes én instans af en klasse Motivation: For nogle klasser er det vigtigt, at der kun er en instans af klassen. Der skal f.eks. kun være ét filsystem og én vinduesmanager. En god løsning er, at klassen selv sikrer, at der kun skabes én instans af klassen 10

11 Anvendelse: Anvend mønsteret, når der skal være eksakt én instans af en klasse Struktur: Designmønsteret Singleton (fortsat) Singleton static Singleton getinstance() operation() getdata() return theinstance static Singleton theinstance data Deltagere: Der er kun én deltager: klassen Singleton 11

12 Implementering: Designmønsteret Singleton (fortsat) public class Singleton {! public static Singleton getinstance() {! if (theinstance == null)! theinstance = new Singleton();! return theinstance;! private Singleton() {! «Initialize instance fields»! «Instance fields and methods»! private static Singleton theinstance = null;! 12

13 Forhindring af samtidig skabelse public static synchronized Singleton getinstance()! Herved forhindres to (eller flere) tråde i samtidigt at generere en instans. 13

14 Alternative løsninger (1) (brug af undtagelse) public class Singleton {! static boolean instancecreated = false;! public Singleton() throws SingletonException {! if (instancecreated)! throw new SingletonException();! instancecreated = true;! «Initialize instance fields»! «Instance fields and methods»! 14

15 Alternative løsninger (2) (brug af klasse med statiske metoder) public final class Singleton {! private Singleton() { «Static instance fields and methods»! 15

16 Design af generiske komponenter Ved design af generiske (genbrugelige uden kodemodifikation) komponenter benyttes følgende to teknikker: (1) Faktorisering sammenfatning af fælles træk ved komponenter (2) Generalisering behandling af særtilfælde i en generel kontekst Midler: nedarvning, delegering, abstrakte klasser og grænseflader 16

17 (1) Faktorisering En metode til at skabe generiske komponenter er at identificere kodesegmenter, der er ens, eller næsten ens. (1) Identificer kodesegmenter med samme logik (2) Sammenfat denne logik i en generisk komponent (3) Omorganiser programmet, således at alle forekomster af de identificerede kodesegmenter erstattes med brug af den generiske komponent Faktorisering reducerer mængden af kode, hvilket forenkler vedligeholdelse. 17

18 Faktorisering med metoder class Computation {! void method1(...) {! //...! computestep1();! computestep2();! computestep3();! //...! void method2(...) {! //...! computestep1();! computestep2();! computestep3();! //...! class FactorizedComputation {! void computeall() {! computestep1();! computestep2();! computestep3();! void method1(...) {! //...! computeall();! //...! void method2(...) {! //...! computeall();! //...! 18

19 Faktorisering ved nedarvning class ComputationA {! void method1(...) {! //...! computestep1();! computestep2();! computestep3();! //...! class ComputationB {! void method2(...) {! //...! computestep1();! computestep2();! computestep3();! //...! class Common {! void computeall() {! computestep1();! computestep2();! computestep3();! class ComputationA extends Common {! void method1(...) {! //...! computeall();! //...! class ComputationB extends Common {! void method2(...) {! //...! computeall();! //...! 19

20 Faktorisering ved delegering class Helper {! void computeall() {! computestep1();! computestep2();! computestep3();! class ComputationA {! void method1(...) {! //...! helper.computeall();! //...! Helper helper;! class ComputationB {! void method2(...) {! //...! helper.computeall();! //...! Helper helper;! 20

21 En animeringsapplet (eksempel på faktorisering ved nedarvning) Runnable Applet AnimationApplet start() stop() run() setdelay() getdelay() DigitalClock3 paint() 21

22 public class AnimationApplet extends java.applet.applet! implements Runnable {! public void start() {! if (animationthread == null)! animationthread = new Thread(this);! animationthread.start();! public void stop() { animationthread = null; public void run() {! while (animationthread!= null) {! repaint();! try {! Thread.sleep(delay);! } catch (InterruptedException e) { public final void setdelay(int delay) { this.delay = delay; public final int getdelay() { return delay; protected Thread animationthread;! protected int delay = 100;! 22

23 import java.awt.*;! import java.util.calendar;! public class DigitalClock3 extends AnimationApplet {! public DigitalClock3() {! setdelay(1000);!!! public void paint(graphics g) {! Calendar calendar = Calendar.getInstance();! int hour = calendar.get(calendar.hour_of_day);! int minute = calendar.get(calendar.minute);! int second = calendar.get(calendar.second);! g.setfont(font);! g.setcolor(color);! g.drawstring(hour +! ":" + minute / 10 + minute % 10 +! ":" + second / 10 + second % 10, 10, 60);!!! protected Font font = new Font("Monospaced", Font.BOLD, 48);! protected Color color = Color.green;! 23

24 Hvorledes undgås flimmer? Flimmer skyldes kaldet af repaint. repaint kalder update, der som standard 1. maler hele området med baggrundsfarven, 2. sætter forgrundsfarven, og 3. kalder paint Løsning: Overskriv update! Benyt et Image-objekt som buffer (mellemlager) 24

25 En animeringsapplet, der benytter dobbeltbuffer Runnable Applet AnimationApplet start() stop() run() setdelay() getddelay() DBAnimationApplet update() paint() init() initanimator() paintframe() DigitalClock3 BouncingBall paint() initanimator() paintframe() 25

26 import java.awt.*;! public abstract class DBAnimationApplet extends AnimationApplet {! public final void init() {! dim = getsize();! im = createimage(dim.width, dim.height);! offscreen = im.getgraphics();! initanimator();! public final void update(graphics g) {! paintframe(offscreen);! g.drawimage(im, 0, 0, this);! public final void paint(graphics g) { update(g); protected void initanimator() { protected abstract void paintframe(graphics g);! protected Dimension dim;! protected Image im;! protected Graphics offscreen;! Bemærk final-specifikationerne 26

27 Animering af en hoppende bold 27

28 import java.awt.*;! public class BouncingBall extends DBAnimationApplet {! protected void initanimator() {! String att = getparameter("delay");! if (att!= null)! setdelay(integer.parseint(att));! x = dim.width * 2 / 3 ;! y = dim.height - radius;! protected void paintframe(graphics g) {... protected int x, y;! protected int dx = -2, dy = -4;! protected int radius = 20;! protected Color color = Color.red;! fortsættes 28

29 protected void paintframe(graphics g) {! g.setcolor(color.white)! g.fillrect(0, 0, dim.width, dim.height);! if (x < radius x > dim.width - radius)! dx = -dx;! if (y < radius y > dim.height - radius)! dy = -dy;! x += dx; y += dy;! g.setcolor(color);! g.filloval(x - radius, y - radius, 2 * radius, 2 * radius);! (x-radius, y-radius)! dy! dx! (x,y)! 29

30 Retningslinjer for design Maksimer fleksibilitet Sørg for at komponenterne er fleksible. Jo større fleksibilitet, desto større er chancen for genbrug. Minimer chancerne for misbrug Veldesignede klasser skal minimere mulighederne for forkert brug, og så vidt muligt afsløre eventuelle fejl på oversættelsestidspunktet. 30

31 Faktorisering af fælles kodesegmenter class ContextA {! void method(...) {! computestep1();! «context specific code A»! computestep2();! abstract class Common {! void method() {! computestep1();! contextspecificcode();! computestep2();! abstract void contextspecificcode();! class ContextB {! void method(...) {! computestep1();! «context specific code B»! computestep2();! class ContextA extends Common {! void contextspecificcode() {! «context specific code A»! class ContextB extends Common {! void contextspecificcode() {! «context specific code B»! 31

32 Designmønsteret Template Method Kategori: Adfærdsmæssigt designmønster Hensigt: Definer et skelet af en algoritme i en klasses metode og overlad definitionen af nogle af skridtene til metoder i underklasser Anvendelse: For at implementere de invariante dele af en algoritme én og kun én gang og overlade det til underklasser at implementere den adfærd, der kan variere For at undgå kodeduplikering 32

33 Designmønsteret Template Method (fortsat) Struktur: GenericClass templatemethod() hookmethod1() hookmethod2()... hookmethod1()... hookmethod2()... ConcreteClass hookmethod1() hookmethod2() 33

34 Designmønsteret Template Method (fortsat) Deltagere: GenericClass (f.eks. DBAnimationApplet), der definerer abstrakte hook-metoder (f.eks. paintframe), som de konkrete underklasser (f.eks. BouncingBall) skal implementere, og en template-metode (f.eks. update), som kalder hook-metoderne (f.eks. paintframe) ConcreteClass (f.eks. BouncingBall), der implementer hook-metoderne 34

35 En generisk funktionsplotter (eksempel på brug af Template Method) Applet Plotter func() paint() plotfunction() drawcoordinates() func() PlotSine func() PlotCosine 35

36 Den generiske klasse import java.awt.*;! public abstract class Plotter extends java.applet.applet {! public abstract double func(double x);! public void init() {! «Get the parameters and initialize the fields»! }! public void paint(graphics g) {! drawcoordinates(g);! plotfunction(g);! protected void plotfunction(graphics g) {! «Plot the function func»! protected void drawcoordinates(graphics g) {! «Draw the x and y axes and tick marks»! 36

37 En konkret klasse public class PlotSine extends Plotter {! public double func(double x) {! return Math.sin(x);! 37

38 (0,0)! (x,y)! (xorigin,yorigin) yratio xratio xorigin: pixel x-koordinaten for (0, 0)! yorigin: pixel y-koordinaten for (0, 0) xratio: antal pixels for en enhed på x-aksen yratio: antal pixels for en enhed på y-aksen 38

39 Metoden plotfunction protected void plotfunction(graphics g) {! for (int px = 0; px < d.width; px++) {! double x = (double) (px - xorigin) / xratio;! double y = func(x);! int py = yorigin - (int) (y * yratio);! g.filloval(px - 1, py - 1, 2, 2);! (px-1, py-1)! 2! 2! 39

40 40

41 (2) Generalisering Generalisering er en teknik, som tager en løsning af et specifikt problem og omformer den således, at den ikke blot kan bruges til løse dette problem, men en mængde af problemer, hvoraf det oprindelige problem blot er et særtilfælde. 41

42 En generisk multiplotter (eksempel på generalisering) Applet Plotter func() paint() plotfunction() drawcoordinates() MultiPlotter initmultiplotter() init() addfuntion() plotfunction() func() PlotSineCosine initmultiplotter() creates * creates Sine apply() Function apply() Cosine apply() 42

43 public abstract class MultiPlotter extends Plotter {! abstract public void initmultiplotter();! public final void init() {! super.init();! initmultiplotter();! public final void addfunction(function f, Color c) {! if (f!= null && numoffunctions < MAX_FUNCTIONS) {! functions[numoffunctions] = f;! colors[numoffunctions++] = c;! protected void plotfunction(graphics g) {! «Plot the functions (calling their apply method)»! public double func(double x) { return 0.0; protected static final int MAX_FUNCTIONS = 5;! protected int numoffunctions = 0;! protected Function[] functions = new Function[MAX_FUNCTIONS];! protected Color[] colors = new Color[MAX_FUNCTIONS];! 43

44 Metoden plotfunction protected void plotfunction(graphics g) {! for (int i = 0; i < numoffunctions; i++) {! g.setcolor(colors[i]!= null? colors[i] : Color.black);! for (int px = 0; px < d.width; px++) {! double x = (double) (px - xorigin) / xratio;! double y = functions[i].apply(x);! int py = yorigin - (int) (y * yratio);! g.filloval(px - 1, py - 1, 2, 2);! 44

45 Funktioner interface Function {! double apply(double x);! public class Sine implements Function {! public double apply(double x) {! return Math.sin(x);! public class Cosine implements Function {! public double apply(double x) {! return Math.cos(x);! 45

46 En konkret Multiplotter public class PlotSineCosine extends MultiPlotter {! public void initmultiplotter() {! addfunction(new Sine(), Color.green);! addfunction(new Cosine(), Color.blue);! 46

47 47

48 Designmønsteret Strategy Kategori: Adfærdsmæssigt designmønster Hensigt: Definer en familie af algoritmer, indkapsl hver af dem, og gør dem udskiftelige Anvendelse: når mange beslægtede klasser kun adskiller sig ved deres adfærd (f.eks. plotter forskellige funktioner) når der bruges forskellige udgaver af en algoritme når en klasse vælger adfærd ved hjælp af betingede sætninger når en algoritme bruger data, som klienter ikke må kende (f.eks. LayOutManager) 48

49 Ekesempel på anvendelse (LayoutManager) Container! setlayout()! LayoutManager FlowLayout! GridLayout 49

50 Designmønsteret Strategy (fortsat) Struktur: Context contextmethod() Strategy algorithm() StrategyA algorithm() StrategyB algorithm() Strategy er en variant af Template Method: Ved Strategy er hook-metoderne placeret i separate klasser og kaldes ved delegering. Ved Template Method er hook-metoderne placeret i underklasser. 50

51 Designmønsteret Strategy (fortsat) Deltagere: Strategy (f.eks. Function), der definerer en grænseflade, der er fælles for alle algoritmerne ConcreteStrategy (f.eks. Sine), der implementer en algoritme, der bruger Strategy-grænsefladen Context (f.eks. MultiPlotter), der har referencer til Strategy-objekter 51

52 Abstrakt kobling Abstrakt kobling: Klienter modtager service ved hjælp abstrakte klasser eller grænseflader uden at kende de aktuelle konkrete klasser. Retningslinje for design: Programmér til en grænseflade, ikke til en implementation. Herved opnås fleksible og genbrugelige løsninger. 52

53 Direkte kobling versus abstrakt kobling klient 1 klient 2 klient 3 serviceudbyder A serviceudbyder B serviceudbyder C Direkte kobling klient 1 klient 2 klient 3 Standard serviceprotokol Abstrakt kobling serviceudbyder A serviceudbyder B serviceudbyder C 53

54 Abstrakte iteratorer Et eksempel på brug af abstrakt kobling En abstrakt iterator er en grænseflade, der specificerer faciliteter til sekventielt gennemløb af samlinger af objekter (f.eks. lister, tabeller og træer). interface Iterator {! Object next();! boolean hasnext();! void remove();! 54

55 Eksempel på implementering af en iterator interface List {! Iterator iterator();! // other methods! public class LinkedList implements List {! public Iterator iterator() {! return new LinkedListIterator();! private class LinkedListIterator implements Iterator {! // concrete methods for the Iterator interface! // other methods and constructors! 55

56 Eksempel på brug List list = new LinkedList();!...! Iterator itr = list.iterator();! while (itr.hasnext())! System.out.println(itr.next());! Der er programmeret til grænseflader (List og Iterator). Klienten er derfor uberørt af de konkrete implementeringer. 56

57 public class LinkedList implements List {! protected static class Node {! Node prev, next;! Object element;! protected Node first;! //...! Node Node null! null! prev! next! prev! next! Object Object 57

58 private class LinkedListIterator implements Iterator {!!private LinkedList.Node current;!!linkedlistiterator() { current = first;!!!!!!!!!!public boolean hasnext() { return current!= null; }!!!!!!!!!!!public Object next() {!!!!!! Object obj = null;!!!!!! if (current!= null) {!!!!!! obj = current.element;!!!!! current = current.next;!!!! }!!!!!!!! return obj;!!!!!!! }!!!!!!!!!!!public void remove() {!!!!!! throw new UnsupportedOperationException();!}!!!!!!!! 58

59 Designmønsteret Iterator Kategori: Adfærdsmæssigt designmønster Hensigt: Giver en måde til sekventielt at gennemløbe en samling af objekter Anvendelse: for at tilgå indholdet i en samling objekter uden at afsløre deres interne repræsentation for at muliggøre flere samtidige gennemløb af en samling af objekter for at understøtte polymorfe gennemløb 59

60 Designmønsteret Iterator (fortsat) Struktur: AbstractCollection iterator() Client Iterator next() hasnext() ConcreteCollection iterator() Creates ConcreteIterator next() hasnext() Return new ConcreteIterator() 60

61 Designmønsteret Iterator (fortsat) Deltagere: Iterator (f.eks. Iterator), der definerer en grænseflade for gennemløb af en samling af objekter ConcreteIterator (f.eks. LinkedListIterator), der implementer grænsefladen og holder sig ajour med den aktuelle position i samlingen AbstractCollection (f.eks. List), der definerer en grænseflade for skabelse af en konkret iterator (f.eks. metoden iterator) ConcreteCollection (f.eks. LinkedList), der implementerer iteratormetoden, så den returnerer en konkret iterator 61

62 Grænsefladen Iterable (Java 5.0) interface Iterable {! Iterator iterator();! Hvis en klasse implementerer Iterable, kan et objekt af klassen gøres til genstand for et for/eachgennemløb: for (Obj element : list)! System.out.println(element);! Arrays og Javas kollektionsklasser implementerer Iterable. 62

63 Retningslinjer for design Adskil urelaterede funktionaliteter Hvis en klasse indeholder komponenter, der tager sig af urelaterede ting, bør disse komponenter adskilles fra klassen. Minimer grænseflader Design den mindst mulige grænseflade for at minimere graden af kobling imellem komponenter. 63

64 Animering af sorteringsalgoritmer (1) AlgorithmAnimator algorithm() Sort algorithm() bubblesort() quicksort() 64

65 Class AlgorithmAnimator! public abstract class AlgorithmAnimator!!! extends DBAnimationApplet {! // the hook method! protected abstract void algorithm();! // the template method! public void run() {! algorithm();! } protected final void pause() {! if (Thread.currentTread() == animationtread) {! repaint();! try {! Thread.sleep(delay);! } catch (InterruptedException e) { 65

66 Class Sort! public class Sort extends AlgorithmAnimator {! protected void initanimator() {! String at = getparameter("alg");! algname = at!= null? at : "BubbleSort";! scramble();! protected void algorithm() {!!if ("BubbleSort".equals(algName)! bubblesort(arr);!!else if ("QuickSort".equals(algName)! quicksort(arr);! protected void paintframe() {... private void scramble(); { arr = new int[...];... private void bubblesort(int[] arr) {... private void quicksort(int[] arr) {... private String algname;! private int arr[];! Ufleksibel 66

67 Animering af sorteringsalgoritmer (2) AlgorithmAnimator algorithm() Sort2 algorithm() thealgorithm animator SortAlgorithm sort() BubbleSortAlgorithm sort() QuickSortAlgorithm sort() Tillader dynamisk udskiftning af sorteringsalgoritme 67

68 Class SortAlgorithm! public abstract class SortAlgorithm {! abstract public void sort(int[] a);! protected SortAlgorithm(AlgorithmAnimator animator) {! this.animator = animator;! protected void pause() {! if (animator!= null)! animator.pause();! protected void swap(int[] a, int i, int j) {! int temp = a[i]; a[i] = a[j]; a[j] = temp;! } private AlgorithmAnimator animator;! 68

69 Hvor skal den konkrete instans af SortAlgorithm skabes? En mulighed er at skabe instansen i metoden initanimator i klassen Sort2. Ulempe: Klienten (her Sort2) skal kende de konkrete SortAlgorithm-klasser (de konkrete strategier), hvilket gør det vanskeligt at skifte dem ud. Løsning: Indfør en klasse, hvis eneste forpligtelse er skabelse af konkrete SortAlgorithm-instanser. 69

70 Animering af sorteringsalgoritmer (3) (med designmønsteret Factory) AlgorithmAnimator algorithm() Sort2 algorithm() algorithmfactory thealgorithm animator SortAlgorithm sort() BubbleSortAlgorithm sort() QuickSortAlgorithm sort() AlgorithmFactory makesortalgorithm() Creates Creates StaticAlgoFactory makesortalgorithm() 70

71 Den abstrakte Factory interface AlgorithmFactory {! SortAlgorithm makesortalgorithm(string algname);! 71

72 En konkret Factory public class StaticAlgoFactory implements AlgorithmFactory {! public StaticAlgoFactory(AlgorithmAnimator animator) {! this.animator = animator;! public SortAlgorithm makesortalgorithm(string algname) {! if ("BubbleSort.equals(algName))! return new BubbleSortAlgorithm(animator);! else if ("QuickSort".equals(algName))! return new QuickSortAlgorithm(animator);! else! return new BubbleSortAlgorithm(animator);! protected AlgorithmAnimator animator;! 72

73 Designmønsteret Factory Kategori: Konstruerende designmønster Hensigt: Definer en grænseflade for skabelse af objekter og lad underklasser afgøre, hvilke klasser, der skal instantieres, og hvordan Anvendelse: når et system skal være uafhængigt af, hvorledes dets produkter skabes 73

74 Designmønsteret Factory (fortsat) Struktur: AbstractFactory makeproduct() Product ConcreteFactory makeproduct() Creates ConcreteProduct 74

75 Designmønsteret Factory (fortsat) Deltagere: Product (f.eks. SortAlgorithm), der definerer en grænseflade for de objekter, som skal skabes ConcreteProduct (f.eks. QuickSortAlgorithm), der implementer Product-grænsefladen AbstractFactory (f.eks. AlgorithmFactory), der definerer en metode for skabelse af et Product-objekt ConcreteFactory (f.eks. StaticAlgoFactory), der implementerer metoden til skabelse af ConcreteProduct-objekter 75

76 Valg af udseende Horizontal Bottom Vertical Bar 76

77 Animering af sorteringsalgoritmer (4) Sort2 HSortDisplay Sort3 thedisplay thedisplayfactory SortDisplay VSortDisplay BSortDisplay SortDisplayFactory BarSortDisplay StaticSortDisplayFactory Creates 77

78 SortDisplay interface SortDiplay {! void display(int[] a, Graphics g, Dimension d);! } Anvendelse i Sort3: protected void initanimator() {! String att = getparameter("dis");! thedisplayfactory = new DisplayFactory();! thedisplay = thedisplayfactory.makesortdisplay(att);! super.initanimator();! } protected void paintframe(graphics g) {! thedisplay.display(arr, g, getsize());! } 78

79 En dynamisk Factory import java.lang.reflect.*;! public class DynamicAlgoFactory implements SortAlgorithmFactory {!!!public SortAlgorithm makesortalgorithm(string algname) {!!! try {!!!!!!!!!!!!Class classforname = Class.forName(algName + "Algorithm");!!!Class animatorclass = animator.getclass();!!!constructor constructor = null;!! do {!!!!!!!!!! try {!!!!!!!!!!! constructor = classforname.getdeclaredconstructor(!!!! new Class[] { animatorclass });!!!! } catch (NoSuchMethodException e) {!!!!!!! animatorclass = animatorclass.getsuperclass();!!!!! }!!!!!!!!!!!} while (constructor == null);!!!!!return (SortAlgorithm) constructor.newinstance(!!!!!!!!! new Object[] { animator });!! } catch (Exception e) {!!!!!!!!!throw new RuntimeException(algName + ": " + e.tostring());!!}!!!!!!!!!!!}!!!!!!!!!! 79

80 En generisk Factory! public class GenericFactory {! public static Object getinstance(string classname) {!!!try {!! return Class.forName(className).newInstance();!!} catch (Exception e) {!! throw new RuntimeException(className + ": " + e.tostring());!!}!! public static Object getinstance(string classname, Object parameter) {! //...! fortsættes 80

81 public static Object getinstance(string classname, Object parameter) {!!try {!! Class classforname = Class.forName(className);!! Class parameterclass = parameter.getclass();!! Constructor constructor = null;!! do {!! try {!! constructor = classforname.getdeclaredconstructor(!! new Class[] { parameterclass });! } catch (NoSuchMethodException e) {!! parameterclass = parameterclass.getsuperclass();!!! } while (constructor == null);!! return constructor.newinstance(new Object[] { parameter });!!} catch (Exception e) {!! return null;!! 81

82 Anvendelse af den generiske Factory! thealgorithm = (SortAlgorithm) GenericFactory.! getinstance(algname + "Algorithm", animator);! thedisplay = (SortDisplay) GenericFactory.! getinstance(displayname + "Display");! 82

83 Ugeseddel september september Læs følgende sider i kapitel 8 i lærebogen: s og s (afsnit 8.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen, der kan hentes via kursets hjemmeside. Løs opgaverne 7.3 og

Objektorienteret design!

Objektorienteret design! Objektorienteret design! Plan! Introduktion til designmønstre! Design af generiske komponenter! - faktorisering! - generalisering! - abstrakt kobling! Design case: animering af algoritmer til sortering!

Læs mere

OOP e uge kursusgang. Disposition for (gennemgang af) afleveringsopgave. Deck.shuffle() 'Problemformulering', Indledning

OOP e uge kursusgang. Disposition for (gennemgang af) afleveringsopgave. Deck.shuffle() 'Problemformulering', Indledning OOP e2002 - uge 40 Disposition for (gennemgang af) afleveringsopgave IV. Teori B: Designmønstre. V. Tips til øvelser: Bold-appletten, dobbeltbufring. 1. Problemformulering 2. Design for at forklare designet

Læs mere

Objektorienterede metoder

Objektorienterede metoder Objektorienterede metoder Denne gang: Designmønstre Skabende designmønstre: Fabrikeringsmetode/Fabrik, Singleton, Abstrakt fabrik (Toolkit), Prototype, Objektpulje Singleton eksempel: Forskellige slags

Læs mere

Ugeseddel 4 1. marts - 8. marts

Ugeseddel 4 1. marts - 8. marts Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2

Læs mere

Hvordan organiseres et programs grafik-elementer? OOP e uge kursusgang. Advarsel! Component-objekter

Hvordan organiseres et programs grafik-elementer? OOP e uge kursusgang. Advarsel! Component-objekter OOP e2002 - uge 42 6. kursusgang Hvordan organiseres et programs grafik-elementer? 1. Teori: class Component og subklasser: Composite pattern layout-managere hændelsesstyret programmering 2. XP-program:

Læs mere

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004 Genbrugelige komponenter og designmønstre i Java Jacob Nordfalk Ingeniørhøjskolen i København Nykøbing F itvisioncenter 24. februar 2004 Program Om Jacob Nordfalk introduktion (ikke-teknisk del) Komponentbaseret

Læs mere

Dag 10 Flertrådet programmering

Dag 10 Flertrådet programmering Videregående programmering i Java Dag 10 Flertrådet programmering Fremlæggelse af programmering/status for projekter Dokumentation med javadoc Flertrådede designmønstre: Arbejdstråd, Producent Konsument,

Læs mere

Singleton pattern i Java

Singleton pattern i Java Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i Java Denne artikel beskriver Singleton pattern og implementation i Java. Den forudsætter kendskab til Java men ikke til Singleton.

Læs mere

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning Datalogi OB, Efterår 2002 OH er, forelæsning 10/9-2002 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Eftermiddagens opgave:

Læs mere

et enkelt kontrol flow sætningerne i programmet afvikles en ad gangen flowet følger dels den tekstlige rækkefølge

et enkelt kontrol flow sætningerne i programmet afvikles en ad gangen flowet følger dels den tekstlige rækkefølge Tråd-definition 2. XP-program: Dissektion af boldapplet (fortsat) En tråd er en separat programudførelse = separat "flow of control" = rækkefølge af programinstruktioner, der udføres En tråd kan mere konkret

Læs mere

Software Construction 1 semester (SWC) Spørgsmål 1

Software Construction 1 semester (SWC) Spørgsmål 1 Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /

Læs mere

Klasser og nedarvning

Klasser og nedarvning Datalogi C, Efterår 2004 OH er, forelæsning 21/9-2004 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Opgaven til senere: Generalisere

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 6 Komponenter (og lidt Swing og MVC) Læsning: VP 4, evt. VP 6 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html Grafiske komponenter

Læs mere

Tree klassen fra sidste forelæsning

Tree klassen fra sidste forelæsning Programmering 1999 Forelæsning 12, fredag 8. oktober 1999 Oversigt Abstrakte klasser. Grænseflader. Programmering 1999 KVL Side 12-1 Tree klassen fra sidste forelæsning class Tree { int age; // in years

Læs mere

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1 Spørgsmål 1 Grundlæggende objektorienterede begreber o Klasse (class) o Objekt (object) o Metode (method), herunder return type og parametre o Instansvariable (instance variables) & egenskaber (properties),

Læs mere

Forelæsning Uge 6 Mandag

Forelæsning Uge 6 Mandag Forelæsning Uge 6 Mandag Tingene i denne forelæsning er ikke eksamenspensum Forelæsningen afrunder kurset, og forklarer nogle af de begreber, som I har mødt under kurset uden at få detaljeret forklaring

Læs mere

Stakke, køer og lidt om hægtede lister - kapitel 16 og 17

Stakke, køer og lidt om hægtede lister - kapitel 16 og 17 Datastrukturer & Algoritmer, Datalogi C Forelæsning 2/11-2004 Henning Christiansen Stakke, køer og lidt om hægtede lister - kapitel 16 og 17 Fundamentale datastrukturer man får brug for igen og igen Et

Læs mere

Introduktion til design patterns.

Introduktion til design patterns. Introduktion til design patterns. Genbrug. Pattern languges i arkitektur. Standardbeskrivelse af design patterns. Oversigt over design patterns. Observer. Composite. Decorator. Abstract Factory. Patterns

Læs mere

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til fjj@noea.dk. Besvarelsen skal

Læs mere

Dag 10 Flertrådet programmering

Dag 10 Flertrådet programmering Videregående programmering i Java Dag 10 Flertrådet programmering Fremlæggelse af programmering/status for projekter Dokumentation med javadoc Flertrådede designmønstre: Arbejdstråd, Producent Konsument,

Læs mere

SWC eksamens-spørgsmål. Oversigt

SWC eksamens-spørgsmål. Oversigt SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition

Læs mere

Singleton pattern i C#

Singleton pattern i C# Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i C# Denne artikel beskriver Singleton pattern og implementation i C#. Den forudsætter kendskab til C# men ikke til Singleton. Der er

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 3 Skabende designmønstre Skabende designmønstre: Fabrikeringsmetode/Fabrik, Singleton, Abstrakt fabrik (Toolkit), Prototype, Objektpulje Eksempel: Forskellige slags

Læs mere

Stakke, køer og lidt om hægtede lister

Stakke, køer og lidt om hægtede lister Datastrukturer & Algoritmer, Datalogi C Forelæsning 4/11-2003 Henning Christiansen Stakke, køer og lidt om hægtede lister - kapitel 16 og 17 Hvorfor? Fundamentale datastrukturer man får brug for igen og

Læs mere

A Profile for Safety Critical Java

A Profile for Safety Critical Java A Profile for Safety Critical Java Martin Schoeberl Hans Søndergaard Bent Thomsen Anders P. Ravn Præsenteret af: Henrik Kragh-Hansen November 8, 2007 Forfatterne Martin Schoeberl Udvikler af JOP processoren

Læs mere

DANMARKS TEKNISKE UNIVERSITET

DANMARKS TEKNISKE UNIVERSITET DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler

Læs mere

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne. Exercise 1: Opgave 9.1 på CodeJudge. a) Lav klasserne Cirkel, Rektangel og Kvadrat, som implementerer vedhæftede interface From.java (se CodeJudge). Lav Rektangel før du laver Kvadrat. Kan du bruge nedarvning

Læs mere

Forelæsning Uge 12 Torsdag

Forelæsning Uge 12 Torsdag Forelæsning Uge 12 Torsdag Protected access Alternativ til public og private Abstrakte klasser og interfaces En abstrakt klasse er en klasse, som man ikke kan lave instanser (objekter) af En abstrakt klasse

Læs mere

Forelæsning Uge 12 Mandag

Forelæsning Uge 12 Mandag Forelæsning Uge 12 Mandag Protected access Alternativ til public og private Abstrakte klasser og interfaces En abstrakt klasse er en klasse, som man ikke kan lave instanser (objekter) af En abstrakt klasse

Læs mere

Objektorienteret design med arv og polymorfi:

Objektorienteret design med arv og polymorfi: Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Objektorienteret design med arv og polymorfi: Substitutionsprincippet Composite Design Pattern Finn Nordbjerg Side 1 Objektorienteret

Læs mere

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Finn Nordbjerg 1/9 Indledning I det følgende introduceres et par abstrakte

Læs mere

Løsning af møntproblemet

Løsning af møntproblemet Løsning af møntproblemet Keld Helsgaun RUC, oktober 1999 Antag at tilstandene i problemet (stillingerne) er repræsenteret ved objekter af klassen State. Vi kan da finde en kortest mulig løsning af problemet

Læs mere

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger

Læs mere

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation). Denne guide er oprindeligt udgivet på Eksperten.dk RMI introduktion Denne artikel beskriver Java RMI (Remtote Method Invocation). Den beskriver teorien bag RMI, viser et simpelt kode eksempel og forklarer

Læs mere

DATALOGI 0GB. Skriftlig eksamen tirsdag den 6. januar 2004

DATALOGI 0GB. Skriftlig eksamen tirsdag den 6. januar 2004 Københavns Universitet bacheloruddannelsen i datalogi side 1 af 6 DATALOGI 0GB Skriftlig eksamen tirsdag den 6. januar 2004 Dette opgavesæt består af 6 nummererede sider. Eksamensdeltagerne bør straks

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java VPJ dag 1 Introduktion og overblik over kurset Datastrukturer: Lister, mængder og iteratorer Opsamling: Grafikprogrammering, komponenter, containere og layout Bruge komponenter

Læs mere

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java Denne guide er oprindeligt udgivet på Eksperten.dk Threads i Java Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java Den forudsætter

Læs mere

public Set(int size) { this.listelement = new LinkedList<Integer>(); }

public Set(int size) { this.listelement = new LinkedList<Integer>(); } // Henri AYCARD import java.util.linkedlist; public class Set { private LinkedList listelement; public Set(int size) { this.listelement = new LinkedList(); public boolean contains(int

Læs mere

Parallelle algoritmer

Parallelle algoritmer Parallelle algoritmer 1 Von Neumann s model John von Neumann 1903-57 Von Neumanns model: Instruktioner og data er lagret i samme lager, og én processor henter instruktioner fra lageret og udfører dem én

Læs mere

OOP e uge kursusgang: Grafik (II) class Scribble (Tegnebrættet) Frihåndstegning: repræsentation

OOP e uge kursusgang: Grafik (II) class Scribble (Tegnebrættet) Frihåndstegning: repræsentation OOP e2002 - uge 43 class Scribble (Tegnebrættet) Det simplest mulige tegnebræt kun en funktion: tegn streger med musen ingen kontrolknapper/valgmuligheder skal dog kunne "holde til" at ændre størrelse

Læs mere

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater Design by Contract Bertrand Meyer 1986 Design and Programming by Contract Michael R. Hansen & Anne Haxthausen mrh@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark Design

Læs mere

OOP e uge kursusgang: Samtidighed (II) Safety = sikkerhed. Safety

OOP e uge kursusgang: Samtidighed (II) Safety = sikkerhed. Safety = sikkerhed I denne sammenhæng: = "trådsikkerhed" " conditions.. stipulate that nothing bad will ever happen" (XP s. 377) Trådsikkerhed betyder sikkerhed mod inkonsistens pga. flertrådning ikke f.eks.

Læs mere

BRP 6.9.2006 Kursusintroduktion og Java-oversigt

BRP 6.9.2006 Kursusintroduktion og Java-oversigt BRP 6.9.2006 Kursusintroduktion og Java-oversigt 1. Kursusintroduktion 2. Java-oversigt (A): Opgave P4.4 3. Java-oversigt (B): Ny omvendings -opgave 4. Introduktion til næste kursusgang Kursusintroduktion:

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 11 sider Skriftlig eksamen i Datalogi Modul 1 Sommer 2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 10% Opgave 2 10%

Læs mere

Introduktion til ActionScript, fortsat

Introduktion til ActionScript, fortsat Introduktion til ActionScript, fortsat Kaspar Rosengreen Nielsen kaspar@interactivespaces.net i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, kaspar@interactivespaces.net 1 Dagens program Opsamling

Læs mere

Forelæsning Uge 5 Mandag

Forelæsning Uge 5 Mandag Forelæsning Uge 5 Mandag Algoritmeskabeloner findone, findall, findnoof, findsumof (sidste mandag) findbest Brug af klassen Collections og interfacet Comparable BlueJ s Debugger Nyttig til at inspicere

Læs mere

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004 Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates),

Læs mere

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

METODER ARV KLASSER. Grundlæggende programmering Lektion 5 METODER KLASSER ARV Grundlæggende programmering Lektion 5 1 METODER Sekvenser af kode om samme emne 2 REPETITION Række af statements der udfører en handling Mindst én metode der hedder main Forskellen

Læs mere

Hvad er et distribueret objekt? Plan 12.3. Objekter, objektreferencer, metoder, parameteroverførsel. Objekter: notation

Hvad er et distribueret objekt? Plan 12.3. Objekter, objektreferencer, metoder, parameteroverførsel. Objekter: notation Plan 12.3. Oversigt over grundlæggende begreber Java: eksempel på applikation, programmering og oversættelse Uddybning af grundlæggende begreber Java RMI implementation Forklaring af øvelsen Hvad er et

Læs mere

Specifikation Abstrakt OO OS-API Rev. 1.7. Specifikation. Abstrakt, objektorienteret operativsystem-api

Specifikation Abstrakt OO OS-API Rev. 1.7. Specifikation. Abstrakt, objektorienteret operativsystem-api Specifikation Abstrakt, objektorienteret operativsystem-api Indhold 1 Indledning... 3 1.1 Introduktion... 3 1.2 Formål... 3 1.3 Overordnede krav... 3 2 Ressourcer i OS-API et... 4 2.1 Tråde... 4 2.2 Timere...

Læs mere

import java.applet.applet; import java.awt.*; public class MinApplet extends Applet { // diverse metoder her - til grafik er det nok med "paint":

import java.applet.applet; import java.awt.*; public class MinApplet extends Applet { // diverse metoder her - til grafik er det nok med paint: Noget at tegne på: Appletter. En applet (et småprogram ) er et java-program der er beregnet til at køre i et vindue på en web-side. Programmering 1999 Forelæsning 10, fredag 1. oktober 1999 Oversigt Appletter

Læs mere

Kursus navn: Indledende programmering Kursus nr. 02101

Kursus navn: Indledende programmering Kursus nr. 02101 Danmarks Tekniske Universitet Side 1 af 8 sider Skriftlig prøve, den 15. december 2007 Kursus navn: Indledende programmering Kursus nr. 02101 Tilladte hjælpemidler: Alle skriftlige hjælpemidler Vægtning

Læs mere

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11 DM503 Forelæsning 11 Generics Pakker Exceptions Indhold Generics Nedarvning og Generics Generics Nedarvning og Generics Husk Box fra sidst Generics public class Box {! private T object;! public void

Læs mere

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree. Programmering 1999 Forelæsning 11, tirsdag 5. oktober 1999 Oversigt Klasse-hierarkier: superklasser og subklasser Nedarvning Polymorfi Programmering 1999 KVL Side 11-1 Hierarkier En klasse repræsenterer

Læs mere

Datalogi OB, Efterår 2002 OH er, forelæsning 3/9-2002 - forstå datastrukturer og algoritmer (teoretisk forståelse og intuition)

Datalogi OB, Efterår 2002 OH er, forelæsning 3/9-2002 - forstå datastrukturer og algoritmer (teoretisk forståelse og intuition) Datalogi OB, Efterår 2002 OH er, forelæsning 3/9-2002 Datastrukturer og algoritmer Henning Christiansen henning@ruc.dk http://www.ruc.dk/~henning Formål: at kunne - forstå datastrukturer og algoritmer

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser Klassevariabler og klassemetoder Variabler og metoder der et tilknyttet klassen (i stedet for at være tilknyttet

Læs mere

Real-time programming safety in Java and Ada

Real-time programming safety in Java and Ada Real-time programming safety in Java and Ada Bo Sandén Presenter: Thomas Bøgholm 25. oktober 2007 Forfatteren Artiklen Synkroniserings Begreber Bo Sandén Professor på Colorado Technical University Beskæftiger

Læs mere

Kursusgang 12. Oversigt: Sidste kursusgang Layout-manager Event-håndtering. Design af brugerflader 12.1

Kursusgang 12. Oversigt: Sidste kursusgang Layout-manager Event-håndtering. Design af brugerflader 12.1 Kursusgang 12 Oversigt: Sidste kursusgang Layout-manager Event-håndtering Design af brugerflader 12.1 Sidste kursusgang Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design

Læs mere

Kursusgang 11. Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing

Kursusgang 11. Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing Kursusgang 11 Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing Design af brugerflader 11.1 Samme sted Forskellige steder Sidste kursusgang Samtidigt

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser Klassevariabler og klassemetoder Variabler og metoder der et tilknyttet klassen (i stedet for at være tilknyttet

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3 DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget

Læs mere

Overblik. Class Loader. Java. Class Libraries. Bytecode. Verifier Java. Source (.java) Just in Time Compiler. Java

Overblik. Class Loader. Java. Class Libraries. Bytecode. Verifier Java. Source (.java) Just in Time Compiler. Java OOP1 Java intro. Klasser, objekter, interfaces, nedarvning, Association, Aggregation og Composition mvh. Try and catch exceptions. Package Intro. til jar filer. Overblik Compile-time Environment Run-time

Læs mere

CodeDOM - Dynamisk generering og kompilering af kode

CodeDOM - Dynamisk generering og kompilering af kode Denne guide er oprindeligt udgivet på Eksperten.dk CodeDOM - Dynamisk generering og kompilering af kode Med CodeDOM kan man på runtime generere kode, kompilere det og derefter afvikle det. I denne artikel

Læs mere

Træer. Datastrukturer & Algoritmer, Datalogi C Forelæsning 9/

Træer. Datastrukturer & Algoritmer, Datalogi C Forelæsning 9/ Datastrukturer & Algoritmer, Datalogi C Forelæsning 9/11-2004 Træer En meget vigtig datastruktur Repræsentation af sprog (i meget generel betydning), syntakstræer: Java (i en compiler), SQL (i et databasesystem),

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser Klassevariabler og klassemetoder Variabler og metoder der et tilknyttet klassen (i stedet for at være tilknyttet

Læs mere

Søgetræer: Generel repræsentation af (sorterede) mængder og funktioner Databasesystemer...

Søgetræer: Generel repræsentation af (sorterede) mængder og funktioner Databasesystemer... Datastrukturer & Algoritmer, Datalogi C Forelæsning 11/11-2003 Træer En meget vigtig datastruktur Repræsentation af sprog (i meget generel betydning), syntakstræer: Java (i en compiler), SQL (i et databasesystem),

Læs mere

Lektion 6. Grundlæggende programmering i VR

Lektion 6. Grundlæggende programmering i VR Lektion 6 Grundlæggende programmering i VR Plan for i dag Simpelt FPS Triggerzones og animationer C# og objekt orienteret programmering Interfaces Generics Google Cardboard Video om VRs fremtid App til

Læs mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering Gråtonebilleder (som er lidt simplere end farvebilleder) Rekursive metoder Metoder der kalder sig selv Giver ofte meget elegante og simple løsninger på komplekse

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 5 Model View Controller arkitekturen Model View Controller arkitekturen (MVC) Evt.: Rekursion Læsning: VP 19 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html

Læs mere

Objektorienteret programmering. Introduktion

Objektorienteret programmering. Introduktion Objektorienteret programmering Introduktion 1 Plan Generelt om programmeludvikling Objekter og klasser (begreber) Objektorienteret programmeludvikling Programmering i Java 2 Aforisme Ordene er håndtag

Læs mere

Introduction til.net remoting i C#

Introduction til.net remoting i C# Denne guide er oprindeligt udgivet på Eksperten.dk Introduction til.net remoting i C# Denne artikel beskriver teorien bag.net remoting og viser nogle simple kode eksempler i C#. Den forudsætter kendskab

Læs mere

Objektorienteret programmering!

Objektorienteret programmering! Objektorienteret programmering! Introduktion! Plan!! Generelt om programmeludvikling!! Objekter og klasser (begreber)!! Objektorienteret programmeludvikling!! Programmering i Java! 1! 2! Aforisme! Programmeludvikling!

Læs mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering Gråtonebilleder (som er lidt simplere end farvebilleder) Rekursive metoder Metoder der kalder sig selv Giver ofte meget elegante og simple løsninger på komplekse

Læs mere

Civilingeniøreksamen 49104 12. januar 2001. Skriftelig prøve den 12. januar 2001 Kursusnummer 49104

Civilingeniøreksamen 49104 12. januar 2001. Skriftelig prøve den 12. januar 2001 Kursusnummer 49104 Skriftelig prøve den 12. januar 2001 Kursusnummer 49104 Kursusnavn: Programmering. Tilladte hjælpemidler: Alle skriftlige hjælpemidler Opgavesættet består af fire opgaver, der har følgende vægtning: Opgave

Læs mere

Introduction til.net remoting i VB.NET

Introduction til.net remoting i VB.NET Denne guide er oprindeligt udgivet på Eksperten.dk Introduction til.net remoting i VB.NET Denne artikel beskriver teorien bag.net remoting og viser nogle simple kode eksempler i VB.NET. Den forudsætter

Læs mere

Software 1 with Java. Recitation No. 7 (Servlets, Inheritance)

Software 1 with Java. Recitation No. 7 (Servlets, Inheritance) Software 1 with Java Recitation No. 7 (Servlets, Inheritance) Servlets Java modules that run on a Web server to answer client requests For example: Processing data submitted by a browser Providing dynamic

Læs mere

Databaseadgang fra Java

Databaseadgang fra Java Databaseadgang fra Java Grundlæggende Programmering med Projekt Peter Sestoft Fredag 2007-11-23 Relationsdatabasesystemer Der er mange databaseservere Microsoft Access del af Microsoft Office MySQL god,

Læs mere

Specialeforsvar: Fundamentet for et fleksibelt container bibliotek

Specialeforsvar: Fundamentet for et fleksibelt container bibliotek Specialeforsvar: Fundamentet for et fleksibelt container bibliotek Foundations of an adaptable container library Bo Simonsen Datalogisk Institut, Københavns Universitet Denne præsentation, afhandlingen,

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2013 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 5. marts, 2013 Dette projekt udleveres i to dele. Hver del har sin deadline, således

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 7 Swing og MVC Swing: MVC, Datamodeller, JTable, evt. JTree Evt.: Swing: Præsentations og kontroldel Læsning: VP 6 Dette materiale er under Åben Dokumentlicens, se

Læs mere

I profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller

I profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller Upload fil Upload fil skal ses som et alternativ til at indsende tællefiler vedhæftet til mails Upload fil kan være en hurtigere og mere håndholdt måde at få data ind i Mastra på. Man starter med via Gennemse

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 9 Andre designmønstre Andre designmønstre: Uforanderlig, Fluevægt, Lagdelt Initialisering, Komposit/Rekursiv Komposition, Kommando/Ændring Fremlæggelse af programmering/status

Læs mere

Find største element, sæt det på sidste plads. Grundidé i hobsortering. er er

Find største element, sæt det på sidste plads. Grundidé i hobsortering. er er Programming 1999 KVL Side 19-2 Tidsforbruget, dvs asymptotisk proportionalt med Sorting af element: Tidsforbrug de mindste element, sortet øvrige element 0 Løkkeinvariant for udvalgssorting osv Find tredjemindste

Læs mere

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion Polymorfi Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type Coercion Tvangskonvertering (forfremmelse og begrænsning) Oversigt Abstrakt klasse abstrakt

Læs mere

Nedarvning! Plan! Overlæsning! Signaturer! Overlæsning af metoder og konstruktører! Nedarvning fra klasser! Implementering af grænseflader!

Nedarvning! Plan! Overlæsning! Signaturer! Overlæsning af metoder og konstruktører! Nedarvning fra klasser! Implementering af grænseflader! Nedarvning! Plan! Overlæsning af metoder og konstruktører! Nedarvning fra klasser! Implementering af grænseflader! Retningslinjer for design af klasser! Animering i appletter! 1! 2! Overlæsning! Signaturer!

Læs mere

Plan. Overlæsning af metoder og konstruktører. Nedarvning fra klasser. Implementering af grænseflader. Retningslinjer for design af klasser

Plan. Overlæsning af metoder og konstruktører. Nedarvning fra klasser. Implementering af grænseflader. Retningslinjer for design af klasser Nedarvning 1 Plan Overlæsning af metoder og konstruktører Nedarvning fra klasser Implementering af grænseflader Retningslinjer for design af klasser Animering i appletter 2 Overlæsning Java tillader mulighed

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4 DM502 Forelæsning 4 Flere kontrolstrukturer for-løkke switch-case Metoder Indhold Arrays og sortering af arrays String-funktioner for-løkke Ofte har man brug for at udføre det samme kode, for en sekvens

Læs mere

Klasser og objekter. (Afsnit i manualen)

Klasser og objekter. (Afsnit i manualen) Klasser og objekter (Afsnit 4 + 5 i manualen) Grundbegreber Klasser og objekter beskrivelse oprettelse Attributter og metoder tilstand opførsel Indkapsling afskærmning datarepræsentationsuafhængighed Klasser

Læs mere

Designmønstre. Grundbegreber fra objektorienteret design

Designmønstre. Grundbegreber fra objektorienteret design Designmønstre Grundbegreber fra objektorienteret design Emner Modellering begrebsapparat og UML Introduktion til interfaces eksempel, interfacebegrebet, og kontraktbaseret design Design med interfaces

Læs mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering Gråtonebilleder (som er lidt simplere end farvebilleder) Rekursive metoder Metoder der kalder sig selv Giver ofte meget elegante og simple løsninger på komplekse

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Skriftlig eksamen i Datalogi Modul 1 Sommer 1998 Opgavesættet består af 4 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 24% Opgave 2 35% Opgave 3 15% Opgave 4 26% Alle sædvanlige hjælpemidler

Læs mere

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering Skriftlig eksamen i Grundlæggende Programmering ITU, 20. januar 2000 Alle hjælpemidler tilladt, dog ikke datamat. Eksamen er skriftlig, fire timer, og bedømmes efter 13-skalaen. Opgavesættet består af

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter Skriftlig eksamen i Datalogi Modul 1 Sommer 1999 Opgavesættet består af 5 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 15% Opgave 2 15% Opgave 3 8% Opgave

Læs mere

import java.awt.event.*; import java.awt.*; Container <- Panel <- Applet Component <- Button <- Checkbox <- ScrollPane <- Label

import java.awt.event.*; import java.awt.*; Container <- Panel <- Applet Component <- Button <- Checkbox <- ScrollPane <- Label Programmering 1999 Forelæsning 13, tirsdag 12. oktober 1999 Oversigt Grafiske brugergrænseflader. Komponenter: Knapper, tekstfelter, checkbokse... Vinduer (containere). Hændelser, hændelsesstyret programmering.

Læs mere

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11 DM01 DM01 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 18/3-2003 Side 1 af 11 DM01 Indholdsfortegnelse: BILAG:...2 1 FORMÅL:...3 2 KLASSER:...4 2.1 DILEMMA:...4 2.1.1 METODER:...4

Læs mere

Eksempel på en database: studenter, kurser, eksamener

Eksempel på en database: studenter, kurser, eksamener Udvidet Programmering 1999 Forelæsning 20, fredag 12. november 1999 Relationsdatabaser: relationer, tupler, attributter Forespørgselssproget SQL Databasesystemet PostgreSQL Tilgang til relationsdatabaser

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

DM34-1. Obligatorisk opgave Dilemma spillet. Jacob Aae Mikkelsen 191076 kok04

DM34-1. Obligatorisk opgave Dilemma spillet. Jacob Aae Mikkelsen 191076 kok04 DM34-1. Obligatorisk opgave Dilemma spillet Jacob Aae Mikkelsen 191076 kok04 April 2005 Kapitel 1 Resumé Denne rapport dokumenterer udviklingsforløbet og afprøvningen af et spil Dilemma. Spillet går ud

Læs mere