Concurrency Forår 2005, Q3

Størrelse: px
Starte visningen fra side:

Download "Concurrency Forår 2005, Q3"

Transkript

1 Concurrency Forår 2005, Q3 Mini Project Railroad Crossing Gruppe Klaus Leth Pedersen Jan Egberg Lauritzen Mads Pedersen Klaus Leth Pedersen, Jan Egberg Lauritzen, Mads Pedersen Side 1 af 21

2 Indholdsfortegnelse Indholdsfortegnelse Model Indledning Processer SENSOR_ARRAY GATE CAR TRAIN LIGHT CROSSING ( Task a ) SAFE_CROSSING ( Task d ) RAILROAD Properties Safety property ( Task c ) Liveness property ( Task f ) Struktur ( Task g ) Test Usikker CROSSING ( Task b ) Sikker SAFE_CROSSING Verifikation Safety check med usikker CROSSING Safety check med sikker SAFE_CROSSING ( Task e ) Liveness check Implementation Struktur ( Task h ) Java-implementation ( Task i ) Crossing Train Car Light Gate Railroad Test Konklusion...21 Klaus Leth Pedersen, Jan Egberg Lauritzen, Mads Pedersen Side 2 af 21

3 1 Model 1.1 Indledning Systemet består af følgende processer: SENSOR_ARRAY Array af sensorer GATE Modellerer bommen, som biler skal passere for at komme ind i crossing area CAR Modellerer bilerne i systemet TRAIN Modellerer systemets tog LIGHT Modellerer togets lyssignal, som kan være rødt eller grønt CROSSING Modellerer den usikre jernbaneoverskæring, dvs. hvor der kan ske kollisioner mellem tog og biler SAFE_CROSSING Modellerer den sikre jernbaneoverskæring, dvs. hvor controlleren sikrer, at der ikke sker kollisioner Derudover er der følgende properties: NO_CRASH En safety property, der sikrer, at der ikke sker kollisioner LIVE_TRAIN En liveness property, der sikrer, at et tog engang vil kunne enter crossing area Til sidst er der: RAILROAD Modellerer det samlede Raiload Crossing -system Det er valgt, at CAR og TRAIN er aktive processer, mens de resterende er passive. Alternativt kan controlleren SAFE_CROSSING være aktiv og dermed styre alle andre processer. Grunden til dette valg skal ses i, at det logisk set er biler og tog, der er aktive entiteter og de andre passive. Det diskuteres senere, hvilke implikationer dette har for Java-implementationen. Klaus Leth Pedersen, Jan Egberg Lauritzen, Mads Pedersen Side 3 af 21

4 1.2 Processer SENSOR_ARRAY SENSOR_ARRAY SENSOR_ARRAY = (car_enter -> SENSOR_ARRAY // sensor #1 car_exit -> SENSOR_ARRAY // sensor #2 train_enter -> SENSOR_ARRAY // sensor #3 train_exit -> SENSOR_ARRAY // sensor #4 train_arrival -> SENSOR_ARRAY // sensor #5 ). SENSOR_ARRAY bruges til at have et samlet sted at angive de actions, der laves af sensorerne, dvs. at biler kan enter og exit samt at toget kan lave arrival samt enter og exit. Disse actions deles med de andre processer, der har brug for at synkronisere med sensorerne GATE GATE = OPEN, OPEN = (close_gate -> CLOSED pass_gate -> OPEN), CLOSED = (open_gate -> OPEN). GATE GATE-processen modellerer bommen, der stopper biler i at komme ind i crossing area, når et tog er på vej CAR CAR CAR = (car_enter -> pass_gate -> car_exit -> CAR). Systemets biler modelleres ved at kunne passere bommen. Mens de er inde i crossing area, må der ikke komme tog ind på samme tid. car_enter og car_exit er synkroniseret med SAFE_CROSSING. pass_gate er synkroniseret med både SAFE_CROSSING og GATE TRAIN TRAIN TRAIN = (train_arrival -> light_green -> train_enter -> train_exit -> TRAIN). Toget modelleres, så det giver besked om, at det ankommer. Herefter ventes på grønt signal, som sættes fra controlleren SAFE_CROSSING, når eventuelle biler har forladt området. Endelig kan toget passere ved enter og exit. Toget tager ikke eksplicit hensyn til, hvis lyssignalet er rødt, men skal have grønt signal, inden det passerer. SAFE_CROSSING sørger i forvejen for, at toget ikke kører ind, hvis det ikke må (dvs. hvis der er biler i området). Lyssignalet kan derfor bare ses som et ekstra tjek, som afspejler virkeligheden, da et tog her vil vente på, at lyssignalet skifter til grønt. Klaus Leth Pedersen, Jan Egberg Lauritzen, Mads Pedersen Side 4 af 21

5 1.2.5 LIGHT LIGHT = LIGHT[Red], LIGHT[state:State] = (when(state==red) LIGHT turn_on_green -> light_green -> LIGHT[Green] when(state==green) turn_on_red -> light_red -> LIGHT[Red]). LIGHT-processen bruges til at modellere lyssignalet med. Lyssignalet styres med input fra SAFE_CROSSING-controlleren ( turn_on_green og turn_on_red ). Toget vil vente på grønt signal ( light_green ), hvilket kun kan forekomme, hvis signalet tidligere har været rødt (det sættes rødt, når toget har passeret) CROSSING ( Task a ) CROSSING CROSSING = (car[car_id].car_enter -> CROSSING train_arrival -> close_gate -> train_exit -> open_gate -> CROSSING). Dette er opgavens Task a. CROSSING-processen udgør den usikre jernbaneoverskæring. Som det ses i FSP-koden, er der ikke noget tjek på, om der i forvejen er biler inde i crossing area, når toget passerer, hvilket vil kunne resultere i en kollision. Bommen lukkes godt nok, men eventuelle biler inde i området tvinges ikke til at lave exit, inden toget passerer. I opgavens Task b skal der observeres, at der kan ske kollisioner med denne usikre CROSSING. Der laves et eksempel på en kollision i punkt I opgavens Task c skal det formelt verificeres, at der kan ske kollisioner med CROSSING. Til dette laves en safety property, som omtales nærmere i punkt og som verificeres i SAFE_CROSSING ( Task d ) SAFE_CROSSING SAFE_CROSSING = SAFE_CROSSING[0][False], SAFE_CROSSING[cars:Int][arriving:Bool] = (when (cars==0 && arriving==true) turn_on_green -> train_enter -> train_exit -> turn_on_red -> open_gate -> SAFE_CROSSING[0][False] when (cars<max_cars && arriving==false) car[car_id].car_enter -> car[car_id].pass_gate -> SAFE_CROSSING[cars+1][arriving] when (cars>0) car[car_id].car_exit -> SAFE_CROSSING[cars-1][arriving] train_arrival -> close_gate -> SAFE_CROSSING[cars][True]). Klaus Leth Pedersen, Jan Egberg Lauritzen, Mads Pedersen Side 5 af 21

6 Opgavens Task d går ud på at modellere en sikker controller (SAFE_CROSSING). Denne controller skal sikre, at der ikke sker kollisioner mellem tog og biler i crossing area. Dette sikres ved at indføre passende guards, der ud fra antallet af biler i crossing area og en boolean angivende, om der er tog på vej, kan tillade et tog at passere. Generelt bemærkes, at når toget ankommer (som kan ske til et vilkårligt tidspunkt, da der ikke er guard herfor), så lukkes bommen. Først når alle biler har forladt crossing area, sættes lyset på grønt, hvorefter toget får lov at passere og efterfølgende åbne bommen igen. Alternativt kunne det modelleres, at lyset kunne sættes på grønt, når der ikke er nogen biler i området. Vi har dog valgt kun at sætte lyset grønt, når et tog har meldt sin ankomst. Dette svarer mest til virkeligheden, hvor der kun er grønt lys, når et tog er på vej. Detaljer om hver enkelt guard findes herunder: (when (cars==0 && arriving==true) turn_on_green -> train_enter -> train_exit -> turn_on_red -> open_gate -> SAFE_CROSSING[0][False] Når der ikke er biler i crossing area og et tog er observeret, sættes lyssignalet til grønt, toget passerer ved train_enter og train_exit. Til sidst sættes lyssignalet på rødt (så der ikke kommer flere tog igennem) og bommen åbnes igen. when (cars<max_cars && arriving==false) car[car_id].car_enter -> car[car_id].pass_gate -> SAFE_CROSSING[cars+1][arriving] Når der ikke er et tog på vej og der er plads i crossing area, får bilerne lov til at enter. Herefter får bilen lov at passere bommen ved pass_gate. when (cars>0) car[car_id].car_exit -> SAFE_CROSSING[cars-1][arriving] Så længe der er biler i crossing area, får de lov til at forlade ved exit. Bemærk at der her ikke restringeres på arriving -boolean en. Det er nemlig sådan, at biler skal kunne forlade området, selvom et tog er meldt ankommende. train_arrival -> close_gate -> SAFE_CROSSING[cars][True]). Når et tog ankommer, lukkes bommen. Bemærk at f.eks. arriving==true kan forkortes til arriving og arriving==false kan forkortes til!arriving. Vi har valgt at gøre det som vist, idet vi finder det mest logisk. Denne SAFE_CROSSING skal som sagt bruges til at sikre, at der ikke kan ske kollisioner. I opgave Task e skal dette formelt verificeres vha. den i punkt omtalte safety property NO_CRASH. Denne verifikation findes i punkt Vha. den sikre SAFE_CROSSING laves et succesfuldt trace, som findes i punkt Klaus Leth Pedersen, Jan Egberg Lauritzen, Mads Pedersen Side 6 af 21

7 1.2.8 RAILROAD RAILROAD RAILROAD = (SENSOR_ARRAY car[car_id]:car TRAIN GATE LIGHT SAFE_CROSSING NO_CRASH) /car[car_id].car_enter/car_enter, car[car_id].car_exit /car_exit, car[car_id].pass_gate/pass_gate. Det samlede system samles ved at sammensætte processerne (inkl. safety property ). Her vises sammensætningen med SAFE_CROSSING. 1.3 Properties For at verificere modellen, kan man indføre såkaldte properties, både til at tjekke safety og liveness : Safety property ( Task c ) Jf. Task c konstrueres en safety property NO_CRASH, som kan verificere, at der kan ske kollisioner med den usikre CROSSING-proces. Property en NO_CRASH verificerer, at en bil vil forlade crossing area, før et tog kan passere. NO_CRASH property NO_CRASH = (train_enter -> train_exit -> NO_CRASH car[car_id].car_enter -> CAR_CONTROLLER[1] ), CAR_CONTROLLER[cars:CAR_ID] = (when (cars<max_cars) car[car_id].car_enter -> CAR_CONTROLLER[cars+1] when (cars>1) car[car_id].car_exit -> CAR_CONTROLLER[cars-1] when (cars==1) car[car_id].car_exit -> NO_CRASH). Hvis et tog laver enter, kommer exit herefter (uden der kan komme andre actions mellem). Hvis en bil derimod laver enter, går property en ned i sin sub-process, der sikrer, at der ikke returneres til NO_CRASH, inden den sidste bil er kørt ud. Denne NO_CRASH bruges i både Task c og Task e til at verificere modellen hhv. vha. den usikre CROSSING (1.6.1) og den sikre SAFE_CROSSING (1.6.2) Liveness property ( Task f ) I Task f laves en liveness property, der verificerer, at et tog på et tidspunkt i fremtiden vil kunne passere crossing area (dvs. udføre action train_enter ). LIVE_TRAIN progress LIVE_TRAIN = train_enter Denne liveness property verificeres formelt i punkt progress LIVE_CAR LIVE_CAR = car[car_id].car_enter Klaus Leth Pedersen, Jan Egberg Lauritzen, Mads Pedersen Side 7 af 21

8 Vi har lavet en ekstra liveness property, som sikrer, at biler også på et tidspunkt i fremtiden får lov at komme ind i crossing area. Denne verificeres i punkt Vi har her valgt at betragte CAR og TRAIN som to processer, som hver især ikke må udsultes. 1.4 Struktur ( Task g ) I Task g fremstilles et strukturdiagram for modellen (dog uden de nævnte properties), se figur 1 neden for. Diagrammet findes desuden i vedlagte model-structure.pdf. Figur 1: Strukturdiagram På figur 1 ses strukturdiagrammet for RAILROAD. Der er tre biler i vores implementation og det er derfor nødvendigt med renaming af car_enter, car_exit og pass_gate, da vi gerne vil have nummereret bilerne, dvs. prefixet med (car.1..3). Vi har desuden valgt, at alle actions skal være synlige i Railroad-processen. Klaus Leth Pedersen, Jan Egberg Lauritzen, Mads Pedersen Side 8 af 21

9 1.5 Test LTSA-tool et giver mulighed for at teste modellen ved at lave et såkaldt trace. Et trace skal ses som ét muligt gennemløb af modellen. Det er her relevant at lave både et trace, hvor det går galt (dvs. hvor der sker kollision), samt et succesfuldt trace (hvor der ikke sker kollision) Usikker CROSSING ( Task b ) I Task b skal det observeres, at der kan ske kollisioner, når den usikre CROSSING benyttes. Den usikre CROSSING kan give følgende trace: car.1.car_enter train_arrival turn_on_green light_green train_enter Der ses her i nederste linje, at toget får lov at enter crossing area, mens der stadig er en bil i området, hvilket kan føre til en kollision mellem bilen og toget. Dette kan forhindres ved at indføre SAFE_CROSSING som omtalt i At det går galt med denne usikre CROSSING kan også verificeres formelt med LTSA-tool et, som kan finde korteste vej til deadlock. Dette gøres i punkt Sikker SAFE_CROSSING Med den sikre SAFE_CROSSING (lavet i Task d ) kan toget sikkert passere crossing area, idet controlleren sikrer, at eventuelle biler er væk, inden toget får lov at passere. Følgende viser et eksempel, hvor et tog ankommer, mens en bil er i området. Som det ses, bliver bommen lukket (så der ikke kan komme flere biler ind), bilen skal forlade området, og endeligt får toget grønt lys til at lave enter og efterfølgende exit, fulgt af at bommen åbnes igen. car.1.car_enter car.1.pass_gate train_arrival close_gate car.1.car_exit turn_on_green light_green train_enter train_exit turn_on_red open_gate Klaus Leth Pedersen, Jan Egberg Lauritzen, Mads Pedersen Side 9 af 21

10 1.6 Verifikation LTSA-tool et giver mulighed for at lave en formel verifikation af modellen ud fra et antal properties (som angivet i punkt 1.3) Der kan verificeres i forhold til safety properties og liveness properties Safety check med usikker CROSSING I Task c skal det verificeres, at der kan ske kollisioner med den usikre CROSSING (fra 1.2.6). Følgende sammensatte RAILROAD-proces benyttes til verifikationen: RAILROAD = (SENSOR_ARRAY car[car_id]:car TRAIN GATE LIGHT CROSSING NO_CRASH)... LTSA giver ved at vælge Check Safety følgende meddelelse: Trace to property violation in NO_CRASH: car.1.car_enter train_arrival turn_on_green light_green train_enter Som nævnt i går det galt, når et tog passerer, mens en bil stadig er i området Safety check med sikker SAFE_CROSSING ( Task e ) I Task e skal det formelt verificeres, at der ikke kan ske kollisioner, når den sikre SAFE_CROSSING (fra 1.2.7) benyttes. RAILROAD = (SENSOR_ARRAY car[car_id]:car TRAIN GATE LIGHT SAFE_CROSSING NO_CRASH)... Ved i LTSA igen at vælge Check Safety fås nu følgende meddelelse: Composition: RAILROAD = SENSOR_ARRAY car.1:car car.2:car car.3:car TRAIN GATE LIGHT SAFE_CROSSING NO_CRASH State Space: 1 * 3 * 3 * 3 * 4 * 2 * 6 * 29 * 5 = 2 ** 20 Analysing... Depth States: 115 Transitions: 238 Memory used: 2327K No deadlocks/errors Analysed in: 0ms Klaus Leth Pedersen, Jan Egberg Lauritzen, Mads Pedersen Side 10 af 21

11 Det er hermed verificeret, at modellen er sikker, når SAFE_CROSSING benyttes som controller Liveness check I Task f laves en liveness property. Denne skal sikre, at et tog på et tidspunkt får lov til at passere crossing area. Denne LIVE_TRAIN findes i I LTSA-tool et vælges Check Progress, der giver følgende resultat: Composition: RAILROAD = SENSOR_ARRAY car.1:car car.2:car car.3:car TRAIN GATE LIGHT SAFE_CROSSING NO_CRASH State Space: 1 * 3 * 3 * 3 * 4 * 2 * 6 * 29 * 5 = 2 ** 20 Progress Check States: 115 Transitions: 238 Memory used: 2378K No progress violations detected. Progress Check in: 10ms Det er hermed verificeret, at modellen tillader, at toget på et tidspunkt får lov at passere. For yderligere at sikre os, at et tog får lov at passere og at property en LIVE_TRAIN virker efter hensigten, har vi forsøgt at give train_enter -action lav prioritet ved at skrive (>>train_enter) efter RAILROAD-processen. Dette gav ikke anledning til nogen progress violation, så LIVE_TRAIN virker efter hensigten. Det bemærkes endvidere her, at den ekstra liveness property LIVE_CAR også er verificeret korrekt. Klaus Leth Pedersen, Jan Egberg Lauritzen, Mads Pedersen Side 11 af 21

12 2 Implementation 2.1 Struktur ( Task h ) I Task h laves implementationsstrukturen for Raiload Crossing. Se figur 2 neden for. Det kan også ses i vedlagte implementation-structure.pdf. Figur 2: Klassediagram 2.2 Java-implementation ( Task i ) I Task i implementeres modellen i Java. Grundlæggende er teknikken her: FSP-processer er implementeret i hver sin klasse Aktive FSP-processer er i Java implementeret som tråde (implements Runnable) Actions i FSP implementeres i de passive Java-klasser som synchronized metoder Som tidligere nævnt er CAR og TRAIN valgt som aktive, da det afspejler virkeligheden mest muligt, idet biler og tog udfører noget aktivt. Alle andre processer er passive. Man kunne have valgt at gøre Crossing aktiv i stedet, og så gøre TRAIN og CAR passive. Klaus Leth Pedersen, Jan Egberg Lauritzen, Mads Pedersen Side 12 af 21

13 Dette valg bevirker, at Java-koden for Car og Train afspejler FSP-koden direkte. I controlleren (SAFE_CROSSING, som i Java implementeres i klassen Crossing) bliver FSP-koden derimod sværere at genkende, men den er dog stadig oversat til Java efter et fast system. Der følger her en forklaring til hver af klasserne: Crossing, Train, Car, Light, Gate og Railroad. Der er desuden klassen Helper, der stiller en statisk waitfornotify- og en statisk sleep-metode til rådighed for at gøre koden simplere. Vi undgår bl.a. at fylde koden med try-catch -statements, så fokus bevares på selve implementationen. FSP-processen SENSOR_ARRAY er ikke implementeret i Java. Grunden til dette valg skal ses i, at den ikke vil tilføje systemet noget yderligere i Java-koden. Alle de passive klasser Crossing, Light og Gate er lavet som Singletons, dvs. så der kun er én instans af hver klasse (jf. Gang of Four -designmønstret) Crossing public class Crossing private int cars; private boolean arriving; private static Crossing instance; public static synchronized Crossing getinstance() if (instance == null) instance = new Crossing(); return instance; private Crossing() cars = 0; arriving = false; public synchronized void train_enter() // As long as there are cars in crossing area, // the train should wait while (!(cars == 0 && arriving == true)) Helper.waitForNotify(this); Klaus Leth Pedersen, Jan Egberg Lauritzen, Mads Pedersen Side 13 af 21

14 public synchronized void train_exit() Light.getInstance().turn_on_red(); Gate.getInstance().open_gate(); // Allow cars to enter cars = 0; arriving = false; // To represent the train has just exited notifyall(); public synchronized void train_arrival() Gate.getInstance().close_gate(); // Close the gate so no cars can enter arriving = true; // Set the state change notifyall(); public synchronized void car_enter() // Only continue if there is room and no train is arriving while (!(cars < Railroad.MAX_CARS && arriving == false)) Helper.waitForNotify(this); cars++; notifyall(); public synchronized void car_exit() // Cars should always to allowed to exit if (cars > 0) cars--; else // The following println should never occur, since cars cannot exit // unless they have entered. System.out.println("car_exit when no cars in crossing area"); // Since Train is waiting for green, and Crossing is passive, we need to // check whether we need to turn to green light if (cars == 0 && arriving == true) Light.getInstance().turn_on_green(); notifyall(); Crossing er implementationen af SAFE_CROSSING-processen i FSP. Den er implementeret som en Singleton (et GoF-designmønster). Den benyttes af Car- og Train-trådene til at synkronisere i forhold til. Guards fra FSP er lavet som while(!<guard>) wait() -løkker, og låser derved den kaldende proces, indtil dens guard er opfyldt. Klaus Leth Pedersen, Jan Egberg Lauritzen, Mads Pedersen Side 14 af 21

15 2.2.2 Train public class Train implements Runnable private static final int SLEEP_TRAIN_ARRIVAL = 600; private static final int SLEEP_TRAIN_EXIT = 2500; public void run() Light light = Light.getInstance(); // TRAIN = (train_arrival -> light_green -> train_enter -> train_exit -> TRAIN). while (true) train_arrival(); light.light_green(); train_enter(); train_exit(); public void train_arrival() System.out.println("train_arrival"); Crossing.getInstance().train_arrival(); Helper.sleep(SLEEP_TRAIN_ARRIVAL); // Inserted to enforce thread switch public void train_enter() Crossing.getInstance().train_enter(); System.out.println("train_enter"); public void train_exit() System.out.println("train_exit"); Crossing.getInstance().train_exit(); Helper.sleep(SLEEP_TRAIN_EXIT); // Inserted to enforce thread switch Train-klassen indeholder implementationen af FSP-processen TRAIN. Som før nævnt er denne lavet som en tråd (aktiv). Den er lavet meget simpel med en while(true), der udfører togets actions. Alle actions synkroniseres med Crossing ved at kalde den tilsvarende metode i Crossing-klassens Singleton-instans. Klaus Leth Pedersen, Jan Egberg Lauritzen, Mads Pedersen Side 15 af 21

16 2.2.3 Car public class Car implements Runnable private int id; private static final int SLEEP_CAR_PASS_GATE = 500; private static final int SLEEP_CAR_EXIT = 2000; public Car(int id) this.id = id; public void run() // CAR = (car_enter -> pass_gate -> car_exit -> CAR). while (true) car_enter(); pass_gate(); car_exit(); private void car_enter() System.out.println("car." + id + ".car_enter"); // The car_enter action is synchronized with Crossing Crossing.getInstance().car_enter(); public void pass_gate() System.out.println("car." + id + ".pass_gate"); // The pass_gate action is synchronized with Crossing Gate.getInstance().pass_gate(); Helper.sleep(SLEEP_CAR_PASS_GATE); // Inserted to enforce thread switch private void car_exit() System.out.println("car." + id + ".car_exit"); // The car_exit action is synchronized with Crossing Crossing.getInstance().car_exit(); Helper.sleep(SLEEP_CAR_EXIT); // Inserted to enforce thread switch Car er ligeledes implementeret som en tråd. Og ligesom Train laves der ikke andet end at kalde actions i en while(true). Disse actions er også synkroniseret med Crossing for at få præcis kontrol af, hvornår man må udføre de forskellige actions. Hver bil har desuden fået et id, så der kan skelnes Klaus Leth Pedersen, Jan Egberg Lauritzen, Mads Pedersen Side 16 af 21

17 mellem dem. Dette er lavet lidt anderledes end i FSP, hvor CAR-processen ikke har et id, da dette først tilføjes i den sammensatte RAILROAD-proces Light public class Light private static Light instance; public static final int RED = 0; public static final int GREEN = 1; private int state; public static synchronized Light getinstance() if (instance == null) instance = new Light(); return instance; private Light() state = GREEN; public synchronized void turn_on_green() System.out.println("turn_on_green"); state = GREEN; notifyall(); public synchronized void turn_on_red() System.out.println("turn_on_red"); state = RED; notifyall(); public synchronized void light_red() while (state!= RED) Helper.waitForNotify(this); System.out.println("light_red"); public synchronized void light_green() while (state!= GREEN) Helper.waitForNotify(this); System.out.println("light_green"); Klaus Leth Pedersen, Jan Egberg Lauritzen, Mads Pedersen Side 17 af 21

18 Light er også lavet som en Singleton-instans. Her styres lysets tilstand, og der er mulighed for at sætte tilstanden samt at vente på en bestemt tilstand. Tilstanden sættes via turn_on_green- og turn_on_red-metoderne, og der ventes på disse tilstandsskift via light_green- og light_red-metoderne. Vi har lavet et valg med hensyn til at huske lysets tilstand. I FSP husker vi på, om det røde eller grønne lys er tændt. I Java har vi indført to ekstra tilstande ved at huske på, om lysene er tændt eller slukkede. Dette har dog ikke nogen praktisk betydning Gate public class Gate public static final int OPEN = 0; public static final int CLOSED = 1; private int state; private static Gate instance; public static synchronized Gate getinstance() if (instance == null) instance = new Gate(); return instance; private Gate() state = OPEN; public synchronized void open_gate() if (state == OPEN) System.out.println("open_gate while already open"); else System.out.println("open_gate"); state = OPEN; public synchronized void pass_gate() if (state == CLOSED) //System.out.println("pass_gate while gate closed"); else //System.out.println("pass_gate"); Klaus Leth Pedersen, Jan Egberg Lauritzen, Mads Pedersen Side 18 af 21

19 public synchronized void close_gate() if (state == CLOSED) System.out.println("close_gate while already closed"); else System.out.println("close_gate"); state = CLOSED; Gate-klassen er ligeledes lavet som en Singleton. Dens eneste opgave er at holde styr på, om bommen er åben eller ej. Der tjekkes desuden på, om der forsøges at åbne en allerede åben port (og omvendt for en lukket). I FSP-koden huskes tilstandene OPEN og CLOSED og i Java-kode har vi oversat det til en integer state-variabel, som kan være OPEN eller CLOSED Railroad public class Railroad public static final int MAX_CARS = 3; public static void main(string[] args) // Start the car processes Car[] cars = new Car[MAX_CARS]; for (int i = 0; i < cars.length; i++) cars[i] = new Car(i + 1); Thread carthread = new Thread(cars[i]); carthread.start(); // Start the train process Train train = new Train(); Thread trainthread = new Thread(train); trainthread.start(); Railroad er systemets main-klasse, dvs. hvor main-metoden findes, der står for at starte bil- og togtrådene. Ækvivalensen i FSP er den samlede RAILROAD-proces. Klaus Leth Pedersen, Jan Egberg Lauritzen, Mads Pedersen Side 19 af 21

20 2.3 Test Der er indført passende System.out.println( ), således at en kørsel af Java-programmet vil ligne et trace i LTSA mest muligt. For at lave nedenstående programkørsel er der efter pass_gate i Car-klassen og efter train_arrival i Train-klassen indført en Tread.sleep( ) for at fremtvinge trådskift. Følgende viser programudskriften fra en kørsel af Java-programmet, der præcis er magen til trace et af FSP-modellen i punkt 1.5.2: car.1.car_enter car.1.pass_gate train_arrival close_gate car.1.car_exit turn_on_green light_green train_enter train_exit turn_on_red open_gate Klaus Leth Pedersen, Jan Egberg Lauritzen, Mads Pedersen Side 20 af 21

21 3 Konklusion Vi har i denne opgave været igennem en proces, hvor vi er begyndt med at definere hovedprocesserne og herefter lavet en model for systemet i FSP-kode. Modellen er trinvis blevet forfinet, bl.a. ved at lave et strukturdiagram, som giver et meget præcist billede af, hvorledes processerne interagerer. Vi er efterfølgende gået fra model til en implementation i Java, dels fordi det var krævet i opgaven, men også fordi sproget letter implementeringen af condition synchronization samt trådoprettelse. Det har været en lærerig proces at modulere Railroad-systemet, selvom vi har lavet opgaven før. Det har især været givtigt at se, hvorledes koden bliver struktureret, når man følger en model, fordi man ikke forfalder til at lave busy waiting, som bare står og bruger en masse ressourcer til ingen verdens nytte. Vi har ifølge vores model nogle passive og aktive klasser, hvor de passive klasser blokerer de aktive, så vi netop undgår spild af processortid. En anden del af opgaven var at finde et passende abstraktionsniveau for modellen, så man undgår unødvendige detaljer, men samtidig medtager de væsentlige detaljer. Vi synes selv, at vi har fundet et passende abstraktionsniveau i modellen. Det var dog var straks lidt sværere, da modellen skulle implementeres i Java, da det flere steder var et tolkningsspørgsmål om, hvordan modellen skulle implementeres. F.eks. er implementationen af Crossing-klassen (som svarer til SAFE_CROSSINGprocessen i FSP) ikke helt givet ud fra FSP-koden. Derimod er Car- og Train-klasserne direkte implementeret ud fra FSP. Modellen er blevet verificeret formelt, dvs. ved graf-farvning i LTSA-tool et. Safety property en NO_CRASH sikrer yderligere, at SAFE_CROSSING virker og dermed at der ikke kan ske sammenstød mellem biler og tog. Vores LIVE_TRAIN-property sikrer som nævnt, at et tog på et eller andet tidspunkt i fremtiden kan komme forbi jernbaneoverskæringen. For at overbevise os selv om, at model og implementation stemmer overens, har vi sammenlignet et trace fra model og implementation og konstateret, at de er ens. Dette er i sig selv ikke nogen garanti, men set i lyset af de enkelte valg, der er gjort i translation fra model til implementation, giver det alligevel en god forsikring om, at modellen er korrekt og at systemet virker. Klaus Leth Pedersen Jan Egberg Lauritzen Mads Pedersen Klaus Leth Pedersen, Jan Egberg Lauritzen, Mads Pedersen Side 21 af 21

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

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

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

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

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

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

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

Bemærk, der er tale om ældre versioner af softwaren, men fremgangsmåden er uændret.

Bemærk, der er tale om ældre versioner af softwaren, men fremgangsmåden er uændret. Check dine svar på: https://dtu.codejudge.net/02101-e18/ Exercise 1: Installer Eclipse og Java. Dette kan f.eks. gøres ved at følge instuktionerne i dokumentet eclipse intro.pdf som ligger under Fildeling

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

Singleton pattern i C#

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

Læs mere

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

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

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

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

QUICK START Updated:

QUICK START Updated: QUICK START Updated: 24.08.2018 For at komme hurtigt og godt igang med dine nye Webstech produkter, anbefales at du downloader den senest opdaterede QuickStart fra vores hjemmeside: In order to get started

Læs mere

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

//Udskriver System.out.println(Hej  + ditfornavn +   + ditefternavn + .); System.out.println(Du er  + dinalder +  aar gammel! Denne guide er oprindeligt udgivet på Eksperten.dk Brugerinput i Java Denne her artikel gennemgår diverse ting ved brug af brugerinput i Java. Den starter med det simple og fortæller derefter skridt for

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

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

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

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

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

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

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

DM01 DM01. 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 13/5-2003. Side 1 af 7

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

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

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

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

QUICK START Updated: 18. Febr. 2014

QUICK START Updated: 18. Febr. 2014 QUICK START Updated: 18. Febr. 2014 For at komme hurtigt og godt igang med dine nye Webstech produkter, anbefales at du downloader den senest opdaterede QuickStart fra vores hjemmeside: In order to get

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

DRONNINGER (QUEENS) Opgave 1

DRONNINGER (QUEENS) Opgave 1 DRONNINGER (QUEENS) I denne opgave vil vi beskæftige os med det såkaldte 8-dronningeproblem, hvor man skal placerede 8 dronninger på et 8 x 8 skakbræt, således at ingen af dronningerne kan slå hinanden.

Læs mere

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen. Indledning...2 Variabler...13 Eksempel: 1...13 Eksempel 2:...13 Eksempel 3:...15 Eksempel 4:...16 Metoder...17 Metode (intet ind og intet ud)...17 Metode (tekst ind)...18 Metode (tekst ind og tekst ud)...19

Læs mere

Deadlocks dopsys 1 onsdag den 8. december 2010

Deadlocks dopsys 1 onsdag den 8. december 2010 Deadlocks dopsys 1 En deadlock! When two trains approach each other at a crossing, both shall come to a full stop and neither shall start up again until the other has gone. Lov - the Kansas Legislature

Læs mere

Resource types R 1 1, R 2 2,..., R m CPU cycles, memory space, files, I/O devices Each resource type R i has W i instances.

Resource types R 1 1, R 2 2,..., R m CPU cycles, memory space, files, I/O devices Each resource type R i has W i instances. System Model Resource types R 1 1, R 2 2,..., R m CPU cycles, memory space, files, I/O devices Each resource type R i has W i instances. Each process utilizes a resource as follows: request use e.g., request

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

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

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

DM502. Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/

DM502. Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/ DM502 Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/ 1 DM502 Bog, ugesedler og noter De første øvelser Let for nogen, svært for andre Kom til øvelserne! Lav opgaverne!

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

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

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

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

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

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

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

Virkefeltsregler i Java

Virkefeltsregler i Java Virkefeltsregler i Java int i; int k; Sequence s; int j; What s in a name? Brian spillede blændende i søndags! Skolen ligger i Viby Ring til Kirsten og sig at... Et navn fortolkes i en kontekst og konteksten

Læs mere

Zapier-integration mellem MailChimp og webcrm hos Azalea IT

Zapier-integration mellem MailChimp og webcrm hos Azalea IT Case: Zapier-integration mellem MailChimp og webcrm hos Azalea IT Zapier er en integrationsplatform, hvor man kan forbinde over 1500 apps uden at skrive en eneste bid kode. Du kan se, hvilke apps du kan

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

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

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

Programmering C Eksamensprojekt. Lavet af Suayb Köse & Nikolaj Egholk Jakobsen

Programmering C Eksamensprojekt. Lavet af Suayb Köse & Nikolaj Egholk Jakobsen Programmering C Eksamensprojekt Lavet af Suayb Köse & Nikolaj Egholk Jakobsen Indledning Analyse Læring er en svær størrelse. Der er hele tiden fokus fra politikerne på, hvordan de danske skoleelever kan

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

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

Abstrakte datatyper C#-version

Abstrakte datatyper C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype

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

Introduction til.net remoting i C#

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

Læs mere

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

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

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

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

Læs mere

Kursusarbejde 2 Grundlæggende Programmering

Kursusarbejde 2 Grundlæggende Programmering Kursusarbejde 2 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 31. oktober 2003 Indhold 1. Kode 2 1.1. hotel.h.................................................... 2 1.2. hotel.cc...................................................

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

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

PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU

PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU OUTLINE INEFFICIENCY OF ATTILA WAYS TO PARALLELIZE LOW COMPATIBILITY IN THE COMPILATION A SOLUTION

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

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter Skriftlig eksamen i Datalogi Modul 1 Vinter 1998/99 Opgavesættet består af 5 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 16% Opgave 2 12% Opgave 3 10% Opgave

Læs mere

Privat-, statslig- eller regional institution m.v. Andet Added Bekaempelsesudfoerende: string No Label: Bekæmpelsesudførende

Privat-, statslig- eller regional institution m.v. Andet Added Bekaempelsesudfoerende: string No Label: Bekæmpelsesudførende Changes for Rottedatabasen Web Service The coming version of Rottedatabasen Web Service will have several changes some of them breaking for the exposed methods. These changes and the business logic behind

Læs mere

Noter til C# Programmering Iteration

Noter til C# Programmering Iteration Noter til C# Programmering Iteration Programflow Programmer udfører det meste af deres arbejde vha. forgrening og løkker. Løkker Mange programmeringsproblemer kan løses ved at gentage en handling på de

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

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

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 6 DM502 Forelæsning 6 Klasser og objekter Introduktion Math-klassen Indhold Klasser vs. objekter Først et tænkt eksempel: Vi vil lave en bil i Java 1. spørgsmål: Hvad karakteriserer en bil? Model År Farve...

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

DM507 Algoritmer og datastrukturer

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

Læs mere

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

BOSK F2012, 1. del: Prædikatslogik

BOSK F2012, 1. del: Prædikatslogik ε > 0. δ > 0. x. x a < δ f (x) L < ε February 8, 2012 Prædikater Vi skal lære om prædikatslogik lad os starte med prædikater. Et prædikat er et orakel der svarer ja eller nej. Eller mere præcist: Prædikater

Læs mere

"# $%$ " # $ % $ $ " & ( ) *+!,! Sum_Cost >= 5000SirName = Beltov Continue = %!- + ( ( - True) Continue *! If Antal <= 20 Then EnhedsOmk = 1.

# $%$  # $ % $ $  & ( ) *+!,! Sum_Cost >= 5000SirName = Beltov Continue = %!- + ( ( - True) Continue *! If Antal <= 20 Then EnhedsOmk = 1. "# $$ " # $ && & ' $ $ " & ) *+, Sum_Cost >= 5000SirName = Beltov Continue = True) Continue *, + If Antal

Læs mere

Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen

Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen Sekvensafstand DM34 - Eksamensopgave Jacob Aae Mikkelsen 19 10 76 kokken@grydeske.dk 27. maj 2005 Resumé Rapporten her beskriver tre forskellige rekursive metoder til at sammenligne tekst strenge med.

Læs mere

Python 3 kursus lektion 1:

Python 3 kursus lektion 1: Python 3 kursus lektion 1: Her laves et nyt program Her køre programmet! Her skrives koden: Gem (CTRL-s) Tryk F5 (for at køre) www.madsmatik.dk d.14-01-2016 1/5 At skrive til skærmen: Hello World Man kan

Læs mere

TM4 Central Station. User Manual / brugervejledning K2070-EU. Tel Fax

TM4 Central Station. User Manual / brugervejledning K2070-EU. Tel Fax TM4 Central Station User Manual / brugervejledning K2070-EU STT Condigi A/S Niels Bohrs Vej 42, Stilling 8660 Skanderborg Denmark Tel. +45 87 93 50 00 Fax. +45 87 93 50 10 info@sttcondigi.com www.sttcondigi.com

Læs mere

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox Martin Olsen DM0 Projekt 0 Del I. marts 0 FOTO: Colourbox Indhold Indledning... Opgave... Opgave... Opgave... Opgave... Opgave... Opgave... Opgave... Kildekode til SimpleInv.java... Kildekode til MergeSort.java...

Læs mere

Forelæsning Uge 2 Mandag

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

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

Dean's Challenge 16.november 2016

Dean's Challenge 16.november 2016 O Dean's Challenge 16.november 2016 The pitch proces..with or without slides Create and Practice a Convincing pitch Support it with Slides (if allowed) We help entrepreneurs create, train and improve their

Læs mere

Kapitel 3 Betinget logik i C#

Kapitel 3 Betinget logik i C# Kapitel 3 i C# er udelukkende et spørgsmål om ordet IF. Det er faktisk umuligt at programmere effektivt uden at gøre brug af IF. Du kan skrive små simple programmer. Men når det bliver mere kompliceret

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

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

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater Design by Contract Design and Programming by Contract Anne Haxthausen ah@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark Design by Contract er en teknik til at specificere

Læs mere

Opgaven fortsat. Opfølgning på Opgave 2 og Use Cases. Opgaven. Trin 1: Væsentlige begreber. Resultatliste: 100 bryst, herrer

Opgaven fortsat. Opfølgning på Opgave 2 og Use Cases. Opgaven. Trin 1: Væsentlige begreber. Resultatliste: 100 bryst, herrer Opfølgning på Opgave 2 og Use Cases originally by Michael R. Hansen modified/extended by Anne E. Haxthausen Informatics and Mathematical Modelling Technical University of Denmark Opgaven fortsat Efter

Læs mere

Som sagt kræves der helst lidt viden om OOP hvis man virkelig vil lærer noget, og ikke bare lave copypaste

Som sagt kræves der helst lidt viden om OOP hvis man virkelig vil lærer noget, og ikke bare lave copypaste Denne guide er oprindeligt udgivet på Eksperten.dk Indkøbsvogn i PHP I denne artikel vil jeg prøve at lave en indkøbskurv som let kan udvides, og som ikke er svær at forstå. Det er bedst med viden om OOP(klasser),

Læs mere

Jacob Christiansen, Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense

Jacob Christiansen, Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense 7 DM -. Obligatoriske Opgave Løsning af ligningssystem vha. fipunktmetoden Jacob Christiansen, 8 moffe@imada.sdu.dk Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense. Opgaven Der skal implementeres

Læs mere

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

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

Læs mere

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

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner findone, findall, findnoof, findsumof Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder strenge) Opfølgning på Skildpadde

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

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

SWC Elementer i klassedefinition

SWC Elementer i klassedefinition SWC Elementer i klassedefinition Indhold Eksempel... 2 Karakteristika for en klasse... 3 Karakteristika for et instance field... 4 Karakteristika for en constructor... 5 Karakteristika for en property...

Læs mere

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999 sammenligninger, hvor Programmering 1999 Forelæsning 17, tirsdag 2 november 1999 Søgning efter en given værdi i en tabel Lineær søgning og binær søgning Effektivitet: maskinuafhængig vurdering af køretid

Læs mere

WIO200A INSTALLATIONS MANUAL Rev Dato:

WIO200A INSTALLATIONS MANUAL Rev Dato: WIO200A INSTALLATIONS MANUAL 111686-903 Rev. 1.01 Dato: 10.01.2013 Side 1 af 14 Contents Contents... 2 Introduction... 3 Pin assignment of the terminal box connector for customer... 4 Pin assignment of

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

DM507 Algoritmer og datastrukturer

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

Læs mere

DM507 Algoritmer og datastrukturer

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

Læs mere

DM507 Algoritmer og datastrukturer

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

Læs mere

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