Tråde! Plan! Tråde! Trådbegrebet! Trådbegrebet! Synkronisering! Koordinering! Eksempel: et flertrådet spil!

Størrelse: px
Starte visningen fra side:

Download "Tråde! Plan! Tråde! Trådbegrebet! Trådbegrebet! Synkronisering! Koordinering! Eksempel: et flertrådet spil!"

Transkript

1 Tråde Plan Trådbegrebet Synkronisering Koordinering Eksempel: et flertrådet spil 1 2 Trådbegrebet Tråde En tråd er et sekventielt forløb i et program. Java tillader flere tråde at eksistere på samme tid. Tråde kan enten afvikles på en flerprocessor-maskine, eller (mere normalt) i simuleret parallel ved brug af tidsdeling. Fordele: Tillader hurtig reaktion på brugerinput Muliggør udvikling af reaktive systemer Gør det muligt for en server at servicere flere klienter samtidigt Komplikationer: Afbrydelse af en tråd kan efterlade et objekt i en inkonsistent tilstand (safety problem) En tråd kan blokere andre tråde (liveness problem) 3 4

2 Skabelse af tråde Nedarvning fra Thread Tråde kan skabes og erklæres på to måder: (1) ved nedarvning fra klassen Thread (2) ved implementation af grænsefladen Runnable public class MyThread extends Thread { public void run() { // the thread body } // other methods and fields } Start af en tråd: new MyThread().start(); 5 6 Eksempel Kørselsresultat public class Counter1 extends Thread { protected int count, inc, delay; public Counter1(int init, int inc, int delay) { this.count = init; this.inc = inc; this.delay = delay; } public void run() { try { for (;;) { System.out.print(count + " "); count += inc; sleep(delay); } } catch (InterruptedException e) {} } public static void main(string[] args) { new Counter1(0, 1, 33).start(); new Counter1(0, -1, 100).start(); } }

3 Implementering af Runnable Eksempel public class MyThread extends AnotherClass implements Runnable { public void run() { // the thread body } // other methods and fields } Start af en tråd: new Thread(new MyThread()).start(); 9 public class Counter2 implements Runnable { protected int count, inc, delay; public Counter2(int init, int inc, int delay) { this.count = init; this.inc = inc; this.delay = delay; } public void run() { try { for (;;) { System.out.print(count + " "); count += inc; Thread.sleep(delay); } } catch (InterruptedException e) {} } public static void main(string[] args) { new Thread(new Counter2(0, 1, 33)).start(); new Thread(new Counter2(0, -1, 100)).start(); } } 10 En tråds livscyklus Prioritering af tråde Alive Blocked Wait to be notified Wait for target to finish Sleeping yield() wait() notify() notifyall() join() Target finish sleep() Time out Runnable Not interrupted interrupt() Interrupted New start() Dead run() returns Enhver tråd er forsynet med en prioritet (et heltal imellem 1 og 10). Prioriteter tildeles ved skabelsen. Som standard bliver prioriteten sat til prioriteten for den tråd, der skaber tråden. Prioriteter kan ændres dynamisk. JVM vælger vilkårligt blandt de kørbare tråde, der har højst prioritet. Således vil tråde med en høj prioritet fortrænge (preempt) tråde med en lavere prioritet. interrupt() throws InterruptedException 11 12

4 Afvikling af prioriterede tråde Retningslinjer for design prioritet høj køreklare tråde Tråde, som skal reagere hurtigt på brugerinput, bør tildeles en høj prioritet. Tråde med høj prioritet bør ikke varetage opgaver med lang udførelsestid. Anvend kun prioriteter til at effektivisere et program. Et programs korrekthed må ikke afhænge af de involverede trådes prioriteter. lav Synkronisering Mens et objekt bliver modificeret, kan det være i en inkonsistent tilstand. Det er vigtigt at sikre, at andre tråde ikke tilgår objektet i denne situation. Eksempel public class Account { //... public boolean withdraw(long amount) { if (amount <= balance) { long newbalance = balance - amount; balance = newbalance; return true; } return false; } private long balance; } Implementeringen er korrekt ved kun én tråd; men ikke for flere tråde 15 16

5 Race hazard Atomiske operationer Balance Withdrawal1 Widthdrawal widthdraw( ) widthdraw( ) amount <= balance amount <= balance newbalance =...; newbalance =...; 0 balance =...; 0 balance =...; 0 return true; 0 return true; Java garanterer, at læsning og skrivning af primitive typer - med undtagelse af long og double - sker atomisk. Alle andre operationer må synkroniseres eksplicit for at sikre atomicitet. Klassen Account er ikke trådsikker Kritiske regioner Synkronisering på metoder En kritisk region er et område af et program, som kun kan udføres af én tråd ad gangen. Java anvender begrebet synkronisering til at specificere kritiske regioner i et program. Synkronisering kan foretages på en metode eller på en blok af sætninger. class MyClass { synchronized void amethod() { «do something» } } Hele metodekroppen er en kritisk region

6 Eksempel med synkronisering Synkronisering på sætningsblokke public class Account { //... public synchronized boolean withdraw(long amount) { if (amount <= balance) { long newbalance = balance - amount; balance = newbalance; return true; } return false; } private long balance; } Implementeringen er nu korrekt ved for flere tråde. synchronized(expr) { «do something» } hvor expr er et udtryk af referencetype. Sætningerne i blokken udgør en kritisk region Låse Frigivelse af låse Synkronisering er implementeret ved at forsyne ethvert objekt med en lås. En tråd må være i eksklusiv besiddelse af en lås, før den går ind i en kritisk region. For en synkroniseret instansmetode benyttes den lås, der er tilknyttet this. En lås frigives, når en tråd forlader en kritisk region. Midlertidig frigivelse kan ske ved kald af metoden wait. For en synkroniseret sætningsblok benyttes den lås, der er tilknyttet objektet givet ved expr

7 Visualisering af låsemekanismen ved hjælp af en telefonboks Et objekt er en telefonboks med plads til én person. Trådene er personer, der ønsker at benytte telefonen. Synkronisering af kollektioner Alle Collections-implementationer er usynkroniserede. Synkroniseret tilgang til en kollektion kan opnås ved brug af en synkroniseret wrapper-klasse. Eksempel: Map unsyncmap = new HashMap(); Map syncmap = Collections.synchronizedMap(unsyncMap); Synkronisering af statiske metoder Statiske metoder kan synkroniseres. class C { synchronized static void method() {... } } Der anvendes den lås, der er knyttet til klassens Class-objekt. a: En begrænset kø (implementeret med et cirkulært array) 0 front back Eksempler på synkroniserede sætningsblokke: get put synchronized(getclass()) {... } synchronized(c.class) {... } a: 0 back front 27 28

8 Cirkulært array En ikke-trådsikker begrænset kø front get size back put public class BoundedQueue { protected Object[] a; protected int front, back, size, count; public BoundedQueue(int size) { if (size > 0) { this.size = size; a = new Object[size]; back = size - 1; } } public boolean isempty() { return count == 0; } public boolean isfull() { return count == size; } public int getcount() { return count; } // put, get } fortsættes size public void put(object obj) { if (obj = null && isfull()) { back = (back + 1) % size; a[back] = obj; count++; } } public Object get() { if (isempty()) { Object result = a[front]; a[front] = null; front = (front + 1) % size; count--; return result; } return null; } front get back put En trådsikker begrænset kø public class SyncBoundedQueue extends BoundedQueue { public SyncBoundedQueue(int size) { super(size); } public synchronized boolean isempty() { return super.isempty(); } public synchronized boolean isfull() { return super.isfull(); } public synchronized int getcount() { return super.getcount(); } public synchronized void put(object obj) { super.put(obj); } public synchronized Object get() { return super.get(); } } 31 32

9 Eksempel på anvendelse En trådsikker begrænset kø kan anvendes som en buffer imellem en producent og en forbruger, der begge er tråde. Producer Thread SyncBoundedQueue Consumer Klassen Producer public class Producer extends Thread { protected BoundedQueue queue; protected int n; public Producer(BoundedQueue queue, int n) { this.queue = queue; this.n = n; } public void run() { for (int i = 0; i < n; i++) { queue.put(new Integer(i)); System.out.println("produce: " + i); try { sleep((int)(math.random() * 100)); } catch (InterruptedException e) {} } } } Klassen Consumer public class Consumer extends Thread { protected BoundedQueue queue; protected int n; public Consumer(BoundedQueue queue, int n) { this.queue = queue; this.n = n; } public void run() { for (int i = 0; i < n; i++) { Object obj = queue.get(); if (obj = null) System.out.println("\tconsume: " + obj); try { sleep((int)(math.random() * 400)); } catch (InterruptedException e) {} } } } 35 Testprogram public static void main(string args[]) { BoundedQueue queue = new SyncBoundedQueue(5); new Producer(queue, 15).start(); new Consumer(queue, 10).start(); } Enhver applikation starter med en brugertråd, der udfører main. En applikation terminerer, når alle brugertråde er temineret, eller hvis metoden exit fra System eller Runtime kaldes. 36

10 Kørselsresultat put(3) produce: 0 consume: 0 produce: 1 produce: 2 produce: 3 produce: 4 consume: 1 produce: 5 produce: 6 produce: 7 consume: 2 produce: 8 produce: 9 consume: 3 produce: 10 produce: 11 produce: 12 consume: 4 produce: 13 produce: 14 consume: 5 consume: 6 consume: 8 consume: 10 consume: 13 Forbrugeren kan ikke følge med producenten (produkter går tabt) f b put(0) 0 fb get = 0 b f put(1) 1 fb put(2) 1 2 f b f b put(4) f b get = f b put(5) b put(6) b f f put(7) b f put(10) b f put(14) f b get = 13 b f get = b f put(11) b f get = f b put(8) b f put(12) b f get = f b put(9) b f get = f b get = f b get = put(13) get = b f f b fb 39 40

11 Koordinering (samarbejde imellem tråde) wait, notify og notifyall Synkronisering benyttes til gensidig udelukkelse fra kritiske regioner. Men der også behov for, at tråde kan koordinere deres arbejde. Hertil benyttes bevogtet suspendering (guarded suspension). En tråd kan bringes til at vente midlertidigt, indtil en given betingelse (guard) bliver opfyldt. Bevogtet suspendering implementeres ved hjælp af metoderne wait(), notify() og notifyall() fra klassen Object. Metoden wait kaldes, når en tråd midlertidigt skal vente, enten fordi den selv ikke er i stand til at fortsætte, eller fordi andre tråde skal have lejlighed til det. En af metoderne notify og notifyall kaldes, når en tråd skal underrette ventende tråde om, at de gerne må fortsætte (hvis de kan) wait Skal forekomme i en synkroniseret metode eller blok Bringer tråden i en blokeret tilstand, hvor den venter på et notify-signal Frigiver låsen, som den synkroniserede kode benytter Beslaglægger igen låsen, når wait returnerer Varianterne wait(long millis) og wait(long millis, int nanos) venter højst i et tidsrum, der er angivet af parametrene notify Skal forekomme i en synkroniseret metode eller blok Vækker højst én tråd, som venter Varianten notifyall() giver alle ventende tråde en chance for at komme videre. Det lykkes imidlertid for højst én ventende tråd 43 44

12 Koordinering imellem producent og forbruger Hvis producenten forsøger at lægge et nyt element i køen, når køen er fuld, skal han vente, indtil forbrugeren har taget et element fra køen (så der bliver plads til det nye element). Hvis forbrugeren forsøger at tage et element fra køen, når køen er tom, skal han vente, indtil producenten har lagt et element i køen. En trådsikker begrænset kø med bevogtet suspendering public class BoundedQueueWithGuard extends BoundedQueue { public BoundedQueueWithGuard(int size) { super(size); } public synchronized boolean isempty() { return super.isempty(); } public synchronized boolean isfull() { return super.isfull(); } public synchronized int getcount() { return super.getcount(); } public synchronized void put(object obj) {... } public synchronized Object get() {... } public static void main(string args[]) { BoundedQueueWithGuard queue = new BoundedQueueWithGuard(5); new Producer(queue, 15).start(); new Consumer(queue, 10).start(); } } fortsættes public synchronized void put(object obj) { try { while (isfull()) wait(); } catch (InterruptedException e) {} super.put(obj); notify(); } public synchronized Object get() { try { while (isempty()) wait(); } catch (InterruptedException e) {} Object result = super.get(); notify(); return result; } 47 produce: 0 consume: 0 produce: 1 produce: 2 produce: 3 produce: 4 consume: 1 produce: 5 produce: 6 produce: 7 consume: 2 consume: 3 produce: 8 produce: 9 consume: 4 Kørselsresultat Ingen produkter går tabt consume: 5 produce: 10 consume: 6 produce: 11 produce: 12 consume: 7 consume: 8 produce: 13 produce: 14 consume: 9 consume: 10 consume: 11 consume: 12 consume: 13 consume: 14 48

13 Trådsikre køer i Java 5.0 package java.util.concurrent.*; public interface BlockingQueue<E> extends java.util.queue<e> { void put(e o) throws InterruptedException; E take() throws InterruptedException; boolean offer(e o, long timeout, TimeUnit unit) throws InterruptedException; E poll(long timeout, TimeUnit unit) throws InterruptedException; int remainingcapacity(); } public class ArrayBlockingQueue<E> implements BlockingQueue<E>; public class LinkedBlockingQueue<E> implements BlockingQueue<E>; public class PriorityBlockingQueue<E> implements BlockingQueue<E>; Retningslinjer for design Metoden wait bør altid kaldes i en løkke; ikke i en if-sætning. At blive vækket ved notify er nemlig ikke ensbetydende med, at ventebetingelsen er opfyldt. Når et synkroniseret objekt skifter tilstand, bør det normalt kalde metoden notifyall. Derved får alle ventende tråde chancen for at checke, om der er sket et tilstandsskift, som muliggør deres genoptagelse Problemer omkring koordinering Udsultning Udsultning (starvation) Dvale (dormancy) Baglås (deadlock) For tidlig terminering (premature termination) En tråd får aldrig chancen for at køre. Sker hvis der altid findes tråde med en højere prioritet, eller en tråd med samme prioritet ikke frigiver processoren (f. eks. ved kald af sleep eller yield). Undgå busy waiting". while (x < 2) ; 51 52

14 Dvale En blokeret tråd bliver aldrig kørbar. Sker hvis en tråd, der har kaldt wait, ikke bliver notificeret. Når man er i tvivl, bør notifyall kaldes fremfor notify. Baglås Når to eller flere tråde blokerer for hinanden. Kan ske, hvis flere tråde konkurrerer om de samme to eller flere ressourcer og vil være i eksklusiv besiddelse af disse på samme tid. synchronized(a) { synchronized(b) {... } } synchronized(b) { synchronized(a) {... } } thread1 thread En klasse med risiko for baglås Opståen af baglås public class DiskDrive { public synchronized InputStream openfile(string filename) {... } public synchronized void writefile(string filename, InputStream in) {... } public synchronized void copy(diskdrive destination, String filename) { InputStream in = openfile(filename); destination.writefile(filename, in); } } thread1: c.copy(d, file1) thread2: d.copy(c, file2) Kald c.copy(...) Får låsen for c Kald d.copy(...) Får låsen for d Kald c.openfile(...) Kald d.openfile(...) Kald d.writefile(...) Kan ikke få låsen for d Kald c.writefile(...) Kan ikke få låsen for c Baglås 55 56

15 Undgåelse af baglås Køretidssystemet er hverken i stand til at opdage eller undgå baglås. Det er programmørens opgave at sikre, at der aldrig kan opstå baglås. For tidlig terminering Når en tråd terminerer, før den skal, og dermed hindrer, at andre tråde ikke kan komme videre. En ofte anvendt teknik er ressource-ordning: synchronized(a) { synchronized(b) {... } } synchronized(a) { synchronized(b) {... } } thread1 thread2 Baglås kan ikke opstå Klassen Thread public class Thread implements Runnable { public Thread(); public Thread(Runnable target); public Thread(String name); public Thread(Runnable target, String name); public Thread(ThreadGroup group, String name); public Thread(ThreadGroup group, Runnable target); public Thread(ThreadGroup group, Runnable target, String name); public static final int MIN_PRIORITY = 1; public static final int NORM_PRIORITY = 5; public static final int MAX_PRIORITY = 10; public static int activecount(); public static void dumpstack(); public static boolean interrupted(); public static native void sleep(long millis) throws InterruptedException; public static native void sleep(long millis, int nanos) throws InterruptedException; public static native void yield(); public final String getname(); public final int getpriority(); public final ThreadGroup getthreadgroup(); public void interrupt(); public final native boolean isalive(); public final native boolean isdaemon(); public final native boolean isinterrupted(); fortsættes 59 fortsættes 60

16 public final synchronized void join() throws InterruptedException; public final synchronized void join(long millis) throws InterruptedException; public final synchronized void join(long millis, int nanos) throws InterruptedException; public void run(); public final void setdaemon(boolean on); public final void setname(string name); public final void setpriority(int newpriority); public String tostring(); } Et flertrådet kryds-og-bolle-spil (Tic-tac-toe) Metoderne stop, suspend, resume og destroy er deprecated (misbilligede) - på grund af deres risiko for at forårsage baglås Spillere Design To typer: En menneskespiller, der laver træk ved at klikke med musen på brættet En maskinspiller, der automatisk genererer træk (ikke nødvendigvis gode) Spillet kan spilles af to menneskespillere, to maskinspillere, eller en menneskespiller og en maskinspiller Programmet beskrevet i det følgende afviger fra bogens ved: anvendelse af Model-View-Controller-arkitekturen anvendelse af Swing en simplere implementering af den grafiske brugergrænseflade 63 64

17 MVC-arkitekturen Observer og Observable Tilstandsinformation View Model Hændelser Opdater udseende Opdater tilstand Controller Informationsstrøm Java understøtter brugen af MVC-konceptet igennem grænsefladen Observer og klassen Observable. Et Observable-objekt har en metode, addobserver, som benyttes til at registrere dets Observer-objekter. Observer-objekterne kan underrettes om ændringer ved kald af metoden notifyobservers. Disse Observerobjekter vil da få kaldt deres update-metode. Kommando Programstruktur Thread JApplet JComponent Observer Player 2 view Game 1 1 BoardView model model Observable HumanPlayer MachinePlayer observer 1 1 BoardModel Hvor er controller-delen? Klassen BoardModel public class BoardModel extends Observable { protected Player[][] board; protected int rows, columns; protected int moves, maxmoves; protected boolean isover; protected Player winner; public BoardModel(int rows, int columns) { this.rows = rows; this.columns = columns; maxmoves = rows * columns; board = new Player[rows][columns]; } public boolean islegalmove(move move) {... } public boolean makemove(move move, Player player) {... } //... Auxiliary methods } 67 68

18 islegalmove makemove public class Move { public int row, col; } public boolean islegalmove(move move) return move.row >= 0 && move.row < rows && move.col >= 0 && move.col < columns && board[move.row][move.col] == null; } public boolean makemove(move move, Player player) { if (islegalmove(move)) { board[move.row][move.col] = player; moves++; checkgame(move, player); setchanged(); notifyobservers(move); return true; } return false; } Hjælpemetoden checkgame checkrow og checkcolumn protected void checkgame(move move, Player player) { isover = checkrow(player, move.row) checkcolumn(player, move.col) checkdiagonal1(player) checkdiagonal2(player); winner = isover? player : null; if (moves >= maxmoves) isover = true; } protected boolean checkrow(player player, int row) { for (int i = 0; i < columns; i++) if (board[row][i] = player) return false; return true; } protected boolean checkcolumn(player player, int col) { for (int i = 0; i < rows; i++) if (board[i][col] = player) return false; return true; } 71 72

19 checkdiagonal1 og checkdiagonal2 Klassen BoardView protected boolean checkdiagnal1(player player) { for (int i = 0; i < rows && i < columns; i++) if (board[i][i] = player) return false; return true; } protected boolean checkdiagonal2(player player) { for (int i = 0; i < rows && i < columns; i++) if (board[i][columns - i - 1] = player) return false; return true; } public class BoardView extends JComponent implements Observer { protected BoardModel model; protected JButton[][] button; public BoardView(BoardModel model) { this.model = model; setlayout(new GridLayout(model.rows, model.columns)); button = new JButton[model.rows][model.columns]; for (int row = 0; row < model.rows; row++) for (int col = 0; col < model.columns; col++) add(button[row][col] = new SquareButton(row, col)); model.addobserver(this); } public void addbuttonlistener(actionlistener a) {... } public void update(observable obj, Object arg) {... } } Klassen SquareButton addbuttonlistener public class SquareButton extends JButton { public SquareButton(int row, int col) { this.row = row; this.col = col; setbackground(color.white); setfocuspainted(false); setborder(borderfactory.createraisedbevelborder()); setfont(new Font("Helvetica", Font.BOLD, 48)); } protected int row, col; } public void addbuttonlistener(actionlistener a) { for (int row = 0; row < model.rows; row++) for (int col = 0; col < model.columns; col++) button[row][col].addactionlistener(a); } 75 76

20 update public void update(observable obj, Object arg) { Move move = (Move) arg; Player player = model.board[move.row][move.col]; JButton b = button[move.row][move.col]; if (player.id == 1) { b.setforeground(color.red); b.settext("x"); } else if (player.id == 2) { b.setforeground(color.blue); b.settext("o"); } b.repaint(); } 77 Klassen Game public class Game extends JApplet { protected Player[] player; protected Player turn; protected BoardModel model; protected BoardView view; protected JLabel messagebar; public Game() {... } public void init() {... } public boolean makemove(move move) {... } public Player getplayer() { return turn; } public boolean isover() { return model.isover(); } public void displaymessage(string msg) { messagebar.settext(msg); } fortsættes } 78 Konstruktøren i Game Eksempel på HTML-fil public Game() { players = new Player[2]; model = new BoardModel(3, 3); view = new BoardView(model); messagebar = new JLabel("Game begin."); getcontentpane().setlayout(new BorderLayout()); getcontentpane().add(view, BorderLayout.CENTER); getcontentpane().add(messagebar, BorderLayout.SOUTH); } <html> <head> <title>tic-tac-toe Game</title> </head> <body> <h2> Human vs. Machine </h2> <applet archive=javaclasses.jar code=game.class width=200 height=225> <param name=type value="human-machine"> </applet> </body> </html> 79 80

21 init makemove public void init() { String gametype = getparameter("type"); if ("human-human".equals(gametype)) { player[0] = new HumanPlayer(this, 1); player[1] = new HumanPlayer(this, 2); } else if ("machine-machine".equals(gametype)) { player[0] = new MachinePlayer(this, 1); player[1] = new MachinePlayer(this, 2); } else { player[0] = new HumanPlayer(this, 1); player[1] = new MachinePlayer(this, 2); } player[0].setnext(player[1]); player[1].setnext(player[0]); player[0].start(); player[1].start(); player[0].hasturn(); } public boolean makemove(move move) { if (model.makemove(move, turn)) { if (isover()) { Player winner = model.winner; if (winner = null) displaymessage("player " + winner.id + " won."); else displaymessage("it's a draw"); for (int i = 0; i < player.length; i++) player[i].interrupt(); } return true; } return false; } Klassen Player abstract public class Player extends Thread { protected Game game; protected int id; protected Player next, turn; public Player(Game game, int id) { this.game = game; this.id = id; } public synchronized void setnext(player p) { next = p; } abstract public Move makemove(); public synchronized void run() {... } public synchronized void hasturn() {... } } fortsættes 83 run public synchronized void run() { while (game.isover()) { try { while (turn = this) wait(); } catch (InterruptedException e) {} if (game.isover()) return; game.displaymessage("player " + id + "'s turn"); while (true) { Move move = makemove(); if (game.makemove(move)) break; game.displaymessage("illegal move"); } turn = null; next.hasturn(); } } 84

22 hasturn public synchronized void hasturn() { turn = game.turn = this; notify(); } 85 Klassen HumanPlayer public class HumanPlayer extends Player implements ActionListener { Move move; public HumanPlayer(Game game, int id) { super(game, id); move = new Move(); game.view.addbuttonlistener(this); } public synchronized Move makemove() { try { wait(); } catch (InterruptedException e) {} return move; } public synchronized void actionperformed(actionevent event) { SquareButton b = (SquareButton) event.getsource(); move.row = b.row; move.col = b.col notify(); } } 86 Klassen MachinePlayer makemove public class MachinePlayer extends Player { Move move; public MachinePlayer(Game game, int id) { super(game, id); move = new Move(); } public Move makemove() {... } } fortsættes public Move makemove() { try { Thread.sleep(1000); } catch (InterruptedException e) {} int rows = game.model.rows; int columns = game.model.columns; int ncells = rows * columns; int i = (int) (Math.random() * ncells); while (true) { move.row = i / columns; move.col = i % columns; if (game.model.islegalmove(move)) break; i = ++i % ncells; } return move; } 87 88

23 Idiom: Taking Turns Opstart class Participant extends Thread { protected Partipant next; protected Partipant turn; public synchronized void run() { while (isdone()) { try { while (turn = this) wait(); } catch (InterruptedException e) { return; } // perform an action or make a move turn = null; next.hasturn(); } } public synchronized void hasturn() { turn = this; notify(); } } Participant[] p = new Participant[n]; for (int i = 0; i < n; i++) p[i] = new Participant(); n - 1 for (int i = 1; i < n; i++) p[i - 1].next = p[i]; n - 2 p[n - 1].next = p[0]; for (int i = 0; i < n; i++) p[i].start(); p[0].hasturn(); Korutiner En korutine er en rutine, der midlertidigt kan standse sin udførelse. I mellemtiden kan en anden korutine blive udført. En standset korutine kan senere genoptage sin udførelse. coroutine a coroutine b resume(b) resume(a) Klassen Coroutine K. Helsgaun," Discrete Event Simulation in Java public class abstract Coroutine { protected abstract void body(); public static void resume(coroutine c); public static void call(coroutine c); public static void detach(); } resume(b) resume(a) 91 92

24 Ugeseddel 8" 19. oktober oktober Læs kapitel 12 i lærebogen (side ). Løs opgave Ekstraopgave 6 Fem filosoffer sidder omkring et rundt bord i dybe tanker. Udover at tænke må de en gang imellem spise. Foran hver af filosofferne er en skål med ris. Før en filosof kan spise, må han have to kinesiske spisepinde. Han tager én pind ad gangen en fra venstre, eller en fra højre. Løs opgaven på de næste sider. Filosofferne må finde en måde at deles om pindene, således at de alle får noget at spise På de følgende sider er vist et udkast til et program, der simulerer forløbet. Programmet stopper, når alle filosoffer har indtaget 100 måltider. (a) Programmér klassen Chopstick. I denne udgave af programmet kan der opstå baglås (deadlock). Det sker, hvis alle filosoffer tager den venstre spisepind samtidigt. Så bliver de fastlåst i deres forgæves forsøg på at få en højre pind. Problemet kan løses på flere måder. En løsning er at lade ulige nummererede filosoffer tage den venstre spisepind først, og lade lige nummererede filosoffer tage den højre pind først. (b) Programmér denne løsning. En anden løsning er højst at give 4 af filosofferne adgang til bordet samtidigt. (c) Programmér denne løsning. public class DiningPhilosophers { public static void main(string args[]) { ChopStick[] chopstick = new ChopStick[N]; for (int i = 0; i < N; i++) chopstick[i] = new ChopStick(); for (int i = 0; i < N; i++) new Philosopher(i, chopstick[(i N) % N], chopstick[i]).start(); } static final int N = 5; } En tredje løsning er kun at give en filosof lov til at tage pinde op, hvis begge pinde er fri. Begge pinde tages da op som en atomisk operation. (d) Programmér denne løsning

25 class Philosopher extends Thread { public Philosopher(int id, ChopStick left, ChopStick right) { this.id = id; leftchopstick = left; rightchopstick = right; } public void run() { for (int meals = 0; meals < 100; meals++) { think(); leftchopstick.grab(); rightchopstick.grab(); eat(); leftchopstick.release(); rightchopstick.release(); } System.out.println("Philosopher #" + id + " leaves the room"); }... fortsættes void think() { System.out.println("Philosopher #" + id + " is thinking"); try { sleep((long) (Math.random() * 10)); } catch (InterruptedException e) {} System.out.println("Philosopher #" + id + " is hungry"); } void eat() { System.out.println("Philosopher #" + id + " starts eating"); try { sleep((long) (Math.random() * 20)); } catch (InterruptedException e) {} System.out.println("Philosopher #" + id + " is stuffed"); } int id; ChopStick leftchopstick, rightchopstick; } class ChopStick { /* spørgsmål (a) */ } 97 98

Plan. Trådbegrebet. Synkronisering. Koordinering. Eksempel: et flertrådet spil

Plan. Trådbegrebet. Synkronisering. Koordinering. Eksempel: et flertrådet spil Tråde 1 Plan Trådbegrebet Synkronisering Koordinering Eksempel: et flertrådet spil 2 Trådbegrebet En tråd er et sekventielt forløb i et program. Java tillader flere tråde at eksistere på samme tid. Tråde

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

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

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

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

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

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

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

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

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

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

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

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

Modern Concurrency Abstractions for C#

Modern Concurrency Abstractions for C# Modern Concurrency Abstractions for C# Nick Benton Luca Cardelli Cédric Fournet Presenter: Henrik Kragh-Hansen September 27, 2007 Motivation for concurrency Forbedring af concurrency Baggrundsinformation

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

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

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

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

Common Language Runtime. Multithreading

Common Language Runtime. Multithreading Common Language Runtime Multithreading Multithreading i.net Dedicated threads Programmøren kontrollerer starttidspunkt, levetid m.m. for den enkelte thread. Pooled threads Threads lånes fra en pulje af

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

Koordinering. dopsys

Koordinering. dopsys Koordinering At indføre flertrådethed (1) når tråde tages i brug opstår typisk konflikter (et velkendt eksempel er errno ) 2 At indføre flertrådethed (2) en del konflikter kan afhjælpes med thread-local

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

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

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

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

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

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

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

Implementation af Koordinering. dopsys 1

Implementation af Koordinering. dopsys 1 Implementation af Koordinering dopsys 1 Oversigt: Impl. af koordinering Begreber: Kritiske regioner Gensidig udelukkelse Synkroniseringsprimitiver: Binære semaforer / mutexes Tællesemaforer Betingelsesvariabler

Læs mere

Planen for idag. Synkroniseringsmekanismer. Krav til løsning. Kritiske regioner. Bagerens algoritme. Kritisk region via delt lager.

Planen for idag. Synkroniseringsmekanismer. Krav til løsning. Kritiske regioner. Bagerens algoritme. Kritisk region via delt lager. Planen for idag Synkroniseringsmekanismer Kritiske regioner Semaforer: Binære semaforer Tællesemaforer Beskedsemaforer Prioritetsinvertering Låse (spinlocks) sikrer udelelig adgang Barrierer synkroniseringspunkt

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

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

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

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

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

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

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

Serialization i Java

Serialization i Java Serialization i Java Tutorial lavet af Jákup W. Hansen TSU 2006 1.semester 06.novemter 2006 Hvad er Serialization? I vores tekstbog Objects First with Java bliver denne del af Java ikke gennemgået. Men

Læs mere

Mandatory Assignment 1

Mandatory Assignment 1 Mandatory Assignment 1 Morten Franck Peter Hansen 9. oktober 2003 Gruppe 4, Parallelle Systemer (02220) Indhold 1 Trin 1 Petri Net 1 1.1 Model af pass().................................... 1 1.2 Model

Læs mere

Parallelle algoritmer

Parallelle algoritmer Parallelle algoritmer 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

Processer og tråde. dopsys 1

Processer og tråde. dopsys 1 Processer og tråde dopsys 1 Motivation.. parallelle processer udnytter hardwaren bedre: Batch operativsystemer (50 erne) hhv. små systemer: Multiprogrammering og time-sharing (fra 60 erne og frem): dopsys

Læs mere

Processer og koordinering. dopsys 1

Processer og koordinering. dopsys 1 Processer og koordinering dopsys 1 Motivation.. parallelle processer udnytter hardwaren bedre: Batch operativsystemer (50 erne): Multiprogrammering og time-sharing (60 erne): dopsys 2 Motivation.. parallelle

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

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

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

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

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

Java Klasse nedarvninger

Java Klasse nedarvninger Denne guide er oprindeligt udgivet på Eksperten.dk Java Klasse nedarvninger Et let lille overblik i hvordan klasse nedarvning virker i java Skrevet den 07. dec 2011 af mochners I kategorien Programmering

Læs mere

9.8 Kildekode. side 88. Pakke Klasse Sidenummer. fortsætter..

9.8 Kildekode. side 88. Pakke Klasse Sidenummer. fortsætter.. 9.8 Kildekode Pakke Klasse Sidenummer db Aktivitetstype 91 Behandler 91 ConnectDB 92 DagensKommentar 93 Helligdag 94 IkkePrimaerTid 94 Patient 96 Patientaftale 96 PatientAktivitet 97 Patientgruppe 98 PatientgruppeItem

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

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

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

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag ArrayList klassen Gør det let at lave en objektsamling (collection) med et variabelt antal elementer Der er mange andre slags objektsamlinger (se Collection interfacet i JavaDoc)

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

Hvordan vælger jeg dokumentprofilen?

Hvordan vælger jeg dokumentprofilen? Hvordan vælger jeg dokumentprofilen? Valget af OIOUBL profil i en konkret dokumentudveksling vil bl.a. afhænge af, hvilke OIOUBL profiler den anden part i udvekslingen understøtter. Et konkret eksempel

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

Exceptions i Delphi. Try except

Exceptions i Delphi. Try except Exceptions i Delphi Exceptions er en teknik til at fange fejl under programafviklingen. Ikke programmeringsfejl, men fejl der opstår i forskellige situationer, f.eks. en fil der mangler en fil der er skrivebeskyttet,

Læs mere

Rekursion og dynamisk programmering

Rekursion og dynamisk programmering Rekursion og dynamisk programmering Datastrukturer & Algoritmer, Dat C Forelæsning 12/10-2004 Henning Christiansen Rekursion: at en procedure kalder sig selv eller et antal metoder kalder hinanden gensidigt.

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

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

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

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

Eksempel: Skat i år 2000

Eksempel: Skat i år 2000 Kursus 02199: Programmering afsnit 2.1-2.7 Anne Haxthausen IMM, DTU 1. Værdier og typer (bl.a. char, boolean, int, double) (afsnit 2.4) 2. Variable og konstanter (afsnit 2.3) 3. Sætninger (bl.a. assignments)

Læs mere

Løsning af skyline-problemet

Løsning af skyline-problemet Løsning af skyline-problemet Keld Helsgaun RUC, oktober 1999 Efter at have overvejet problemet en stund er min første indskydelse, at jeg kan opnå en løsning ved at tilføje en bygning til den aktuelle

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

Principper for Samtidighed og Styresystemer

Principper for Samtidighed og Styresystemer Principper for Samtidighed og Styresystemer Synkronisering og Deadlocks René Rydhof Hansen Februar 2008 PSS 08 (Forelæsning 03) Synkronisering og Deadlocks Februar 2008 1 / 33 Skemaændringer Forelæsning

Læs mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser ArrayList Collection med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Java syntax og style guide Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Brug

Læs mere

3C03 Concurrency: Model-based Design

3C03 Concurrency: Model-based Design 3C03 Concurrency: Model-based Design Wolfgang Emmerich 1 Outline Role of Modelling in System Development Refining Models into Designs FSP Actions and Operations FSP Processes and Threads FSP Processes

Læs mere

SigmaT.

SigmaT. Java + Groovy Disposition Om SigmaT Eksempel på indlejring af Groovy Overvågning af PEM Ønske om dynamisk loaded Java uden at fifle med classloaderen Groovy til hjælp Opsamling hvad jeg ikke har fortalt

Læs mere

Objektorienteret Programmering

Objektorienteret Programmering Objektorienteret Programmering Struktureret Systemudvikling Jan Bendtsen Automation and Control Indhold Lidt om programmeringssprog Klasser i Java Klasser i C++ Oversættelse og kørsel af kode Et eksempel:

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

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

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1. Programmering 1999 Forelæsning 4, fredag 10. september 1999 Klasser og objekter Felter, konstruktorer, this Eksempler på klasser: Time, Appointment Eksempler på metoder i Time og Appointment Klassefelter:

Læs mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag ArrayList Collection (samling af objekter) med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet i JavaDoc) MusicOrganizer projektet Eksempel

Læs mere

Vejledende løsninger

Vejledende løsninger Roskilde Universitetscenter side 1 af 8 sider Vejledende løsninger Opgave 1 Spørgsmål 1.1 a = b - a; b = b - a; a = b + a; Opgaven har flere løsninger. En anden løsning er: a = b + a; b = a - b; a = a

Læs mere

dmasark Aflevering - Uge 50

dmasark Aflevering - Uge 50 dmasark Aflevering - Uge 50 Michael Lind Mortensen, 20071202, DAT4 Michael Dahl, 20073943, DAT4 Katalog: http://www.daimi.au.dk/ u073943/dmasark/uge6/ 13. december 2007 Indhold 1 PingClient implementation

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

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag ArrayList Collection med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet i JavaDoc) MusicOrganizer projektet Eksempel på brug af ArrayList

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Klassevariabler og klassemetoder Levetid for variabler og parametre Virkefeltsregler Projektopgave Kaninjagt Lommeregner (for MAT studerende) Klassevariabler og klassemetoder

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

Eksamens spørgsmål Software Construction. Objekter. Spørgsmål 1: Januar Giv en beskrivelse af Objekt-begrebet og deres brug

Eksamens spørgsmål Software Construction. Objekter. Spørgsmål 1: Januar Giv en beskrivelse af Objekt-begrebet og deres brug Spørgsmål 1: Objekter Giv en beskrivelse af Objekt-begrebet og deres brug Under eksaminationen forventes du at forklare: Hvad er en type og en variabel? Hvordan erklæres en variabel? Hvad forstås ved en

Læs mere

JSP, Tomcat. Tutorial lavet af Jákup W. Hansen TSU semester 10.october 2007

JSP, Tomcat. Tutorial lavet af Jákup W. Hansen TSU semester 10.october 2007 JSP, Tomcat Tutorial lavet af Jákup W. Hansen TSU 2006 3.semester 10.october 2007 Hvad er JSP(Java Server Pages): Det er en teknik som er bygget ovenover Servlets teknikken, men fidusen er at det skal

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

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder

Læs mere

Start på Arduino og programmering

Start på Arduino og programmering Programmering for begyndere Brug af Arduino Start på Arduino og programmering EDR Hillerød Knud Krogsgaard Jensen / OZ1QK 1 Start på Arduino og programmering Sidste gang (Introduktion) Programmeringssproget

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

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

Speciale. Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende Java Optimized Processor (JOP)

Speciale. Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende Java Optimized Processor (JOP) Speciale Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende Java Optimized Processor (JOP) Speciale efterår 2005 Teknisk Informationsteknologi Jan Lauritzen & Mads

Læs mere

Forelæsning Uge 1 Torsdag

Forelæsning Uge 1 Torsdag Forelæsning Uge 1 Torsdag Objekters tilstand og opførsel Java og BlueJ Skabelse af objekter (via new-operatoren) Iteration (gentagelser) og parametrisering Java's for løkke Parametre i metoder Forskellige

Læs mere

DM507 Algoritmer og datastrukturer

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

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

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

Programmeringscamp. Implementer funktionerne én for én og test hele tiden.

Programmeringscamp. Implementer funktionerne én for én og test hele tiden. Programmeringscamp De to opgaver træner begge i at lave moduler som tilbyder services der kan bruges af andre, samt i at implementere services efter en abstrakt forskrift. Opgave 1 beder jer om at implementere

Læs mere

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

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2 DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld

Læs mere

Netværksalgoritmer 1

Netværksalgoritmer 1 Netværksalgoritmer 1 Netværksalgoritmer Netværksalgoritmer er algoritmer, der udføres på et netværk af computere Deres udførelse er distribueret Omfatter algoritmer for, hvorledes routere sender pakker

Læs mere

Det er muligt at chekce følgende opg. i CodeJudge: og

Det er muligt at chekce følgende opg. i CodeJudge: og Det er muligt at chekce følgende opg. i CodeJudge:.1.7 og.1.14 Exercise 1: Skriv en forløkke, som producerer følgende output: 1 4 9 16 5 36 Bonusopgave: Modificer dit program, så det ikke benytter multiplikation.

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

Test af It-komponent

Test af It-komponent Test af It-komponent I programmeringssproget Java Programmet Login service Elev: Mads Funch Klasse 2.4 Mat, It, Programmering Skole: Roskilde Tekniske Gymnasium HTX Underviser: Karl Dato: 31-08-2016 Side

Læs mere

Forelæsning Uge 1 Torsdag

Forelæsning Uge 1 Torsdag Forelæsning Uge 1 Torsdag Objekters tilstand og opførsel Java og BlueJ Skabelse af objekter (via new-operatoren) Iteration (gentagelser) og parametrisering Java's for løkke Parametre i metoder Forskellige

Læs mere