Objektorienteret design
|
|
- Carl Hedegaard
- 6 år siden
- Visninger:
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! Plan! Introduktion til designmønstre! Design af generiske komponenter! - faktorisering! - generalisering! - abstrakt kobling! Design case: animering af algoritmer til sortering!
Læs mereOOP 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 mereObjektorienterede metoder
Objektorienterede metoder Denne gang: Designmønstre Skabende designmønstre: Fabrikeringsmetode/Fabrik, Singleton, Abstrakt fabrik (Toolkit), Prototype, Objektpulje Singleton eksempel: Forskellige slags
Læs mereUgeseddel 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 mereSkriftlig 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 mereHvordan 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 mereJacob 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 mereDag 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 mereSingleton 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 mereDatalogi 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 mereet 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 mereSoftware 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 mereKlasser 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 mereVideregå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 mereTree 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 mereSoftware 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 mereForelæ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 mereStakke, 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 mereIntroduktion 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 mereAAU, 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 mereDag 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 mereSWC 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 mereSingleton 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 mereVideregå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 mereStakke, 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 mereA 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 mereDANMARKS 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 mereb) 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 mereForelæ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 mereForelæ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 mereObjektorienteret 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 mereAlgoritmeskabeloner: 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 mereLø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 mereKursus 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 mereRMI 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 mereDATALOGI 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 mereVideregå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 mereThreads 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 merepublic 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 mereParallelle 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 mereOOP 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 mereDesign 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 mereOOP 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 mereBRP 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 mereSkriftlig 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 mereIntroduktion 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 mereForelæ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 mereVideregå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 mereMETODER 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 mereHvad 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 mereSpecifikation 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 mereimport 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 mereKursus 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 mereUniversity 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 mereclass 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 mereDatalogi 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 mereForelæ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 mereReal-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 mereKursusgang 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 mereKursusgang 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 mereForelæ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 mereUniversity 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 mereOverblik. 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 mereCodeDOM - 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 mereTræ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 mereForelæ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 mereSø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 mereLektion 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 mereForelæ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 mereVideregå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 mereObjektorienteret 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 mereIntroduction 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 mereObjektorienteret programmering!
Objektorienteret programmering! Introduktion! Plan!! Generelt om programmeludvikling!! Objekter og klasser (begreber)!! Objektorienteret programmeludvikling!! Programmering i Java! 1! 2! Aforisme! Programmeludvikling!
Læs mereForelæ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 mereCivilingeniø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 mereIntroduction 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 mereSoftware 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 mereDatabaseadgang 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 mereSpecialeforsvar: 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 mereDM507 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 mereVideregå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 mereI 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 mereVideregå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 mereFind 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 merePolymorfi. 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 mereNedarvning! 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 merePlan. 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 mereDM507 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 mereUniversity 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 mereKlasser 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 mereDesignmø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 mereForelæ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 mereSkriftlig 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 mereGrundlæ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 mereSkriftlig 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 mereimport 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 mereDM01 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 mereEksempel 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 mereDM507 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 mereDM34-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