Presentation av trafiksimuleringsprojektet

Relevanta dokument
Presentation av trafiksimuleringsprojektet

Presentation av obligatoriska uppgiften trafiksimulering. Ett större program med flera klasser

trafiksimulering Intro OU5 trafiksimulering

Obligatorisk uppgift: Simulering av köer i ett trafiksystem

Obligatorisk uppgift: Simulering av köer i ett trafiksystem

Obligatorisk uppgift: Simulering av köer i ett trafiksystem

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Tentamen i Programmeringsteknik I

Del A (obligatorisk för alla)

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Klasshierarkier - repetition

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Föreläsning 8: Exempel och problemlösning

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Tentamen OOP

Del A (obligatorisk för alla)

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Konstruktion av klasser med klasser

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Tentamen i Programmeringsteknik I

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

Laboration 3, uppgift En klass för en räknare

Tentamen i Programmeringsteknik I

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

Tentamen i Programmering

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Objektorienterad programmering i Java

Tentamen i Algoritmer & Datastrukturer i Java

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen, EDA501 Programmering M L TM W K V

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

OOP Objekt-orienterad programmering

Programmering för språkteknologer II, HT2011. Rum

TENTAMEN OOP

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Del A (obligatorisk för alla)

Objekt, Klasser, Paket m. m.

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Lösningsförslag övning 2.

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Tentamen FYTA11 Javaprogrammering

Att skriva till och läsa från terminalfönstret

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

Lösningsförslag till exempeltenta 2

TENTAMEN OOP

Föreläsnings 9 - Exceptions, I/O

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Tentamen, EDAA10 Programmering i Java

Tentamen, EDAA20/EDA501 Programmering

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Grundläggande programmering med C# 7,5 högskolepoäng

Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

PROGRAMMERINGSTEKNIK TIN212

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Tentamen. Lösningsförslag

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Tentamen , Introduktion till Java, dtaa98, dtea53

Föreläsning 5-6 Innehåll

Lösningar för tenta 2 DAT043,

Modeller, Objekt och Klasser

DAT043 Objektorienterad Programmering

Transkript:

(28 februari 2019 Trafiksimulering 1 ) Presentation av trafiksimuleringsprojektet Skall diskutera Ett lite större program med flera klasser Hur man designar ett system Hur man ritar klassdiagram i UML Hur man gör simuleringar

(28 februari 2019 Trafiksimulering 2 ) Trafiksystem Korsning kontrollerad av ljussignaler (s1, s2, s3 och s4) N s4 s1 W E s3 s2 S

(28 februari 2019 Trafiksimulering 3 ) Trafiksystem Korsning med filer för vänstersväng och ljussignaler N s6 W s5 s1 s2 E s4 s3 S

(28 februari 2019 Trafiksimulering 4 ) Trafiksystem Initialt skall ett program för följande testsystem konstrueras s1 W S s2 E Testsystemet består alltså av en väg med en svängfil och två ljussignaler (s1 och s2). Komponenterna skall utformas så att andra typer av system kan implementeras.

(28 februari 2019 Trafiksimulering 5 ) Vad vill gatukontoret veta? W S s1 s2 E Det är dyrare att göra en lång svängfil men man vill inte kön på svängfilen ska växa in i filen som går rakt fram. Gatukontoret vill se ur kösitutionen beror på Filernas längder Olika ankomstintensiteter vid punkten E Olika längd på signalerna grön- och rödperioder Dessa systemparametrar ska alltså kunna ges som indata till simuleringen.

(28 februari 2019 Trafiksimulering 6 ) Hur gör man simuleringen? Vi har ett system av något slag innehållande objekt som interagerar. Exempel: en damm med sköldpaddor, en skog med rävar och kaniner, ett biljardbord med bollar, ett trafiksystem. Givet ett visst starttillstånd och ett antal systemparametrar (storlekar, sannolikheter för vissa händelser,... ). Vi vill veta hur systemet utvecklar sig med tiden.

(28 februari 2019 Trafiksimulering 7 ) Hur gör man simuleringen? Gör en diskretisering av tiden. Beskriv för varje ingående del i systemet vad som händer eller kan hända vid en viss tidpunkt (egentligen under ett tidssteg). time = 0 while (true) time = time + 1 uppdatera alla komponenter presentera det nya tillståndet (eventuellt) samla eventuell statistikinformation Demo Simulation

(28 februari 2019 Trafiksimulering 8 ) Vilka komponenter behövs i trafiksimuleringen Bilar? Ljussignaler? Ja! Klassen Vehicle Ja! Klassen Light Vägar? Tja... Vägskäl? Tja... Vägkorsningar? Tja... Filer? Ja! Klassen Lane Det blir en enklare struktur som kan kombineras till vägar, vägskäl och vägkorsningar.

(28 februari 2019 Trafiksimulering 9 ) Klassen Light Vad vill vi göra med en ljussignal? Vi vill att den så lång som möjligt ska sköta sig själv! Skapa den dvs de måste ha konstruktorer Fråga om den är röd eller grön? Ja! Säga åt den att ändra färg? Nej! Det ska den hålla reda på själv!

(28 februari 2019 Trafiksimulering 10 ) Klassen Light Vilka egenskaper har en ljussignal? Period dvs antal tidssteg mellan två växlingar från grönt till rött Grönperiod dvs antalet tidssteg signalen är grön Aktuell färg GGGGGRRRRRRRRGGGGGRRRRRRRRGGGGG... De två första är fixa för en given signal (i detta problem). Typiska instansvariabler som definieras med hjälp av konstruktorn.

(28 februari 2019 Trafiksimulering 11 ) Klassen Light Vad behövs mer? Eftersom signalen skall byta färg vissa tidssteg så måste den ha någon uppfattning om tiden dvs en klocka. Signalens klocka ska gå cirkulärt dvs börja om på noll när en period passerats. Exempel: En signal med period 8 och grönperiod 3: Klocka: 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2... Signal: G G G R R R R R G G G R R R R R G G G... Om man lagrar klockan internt måste man ha en metod som räknar upp den. Denna måste anropas varje tidssteg. public void step() { time = (time+1)%period; }

(28 februari 2019 Trafiksimulering 12 ) Klassen Light I själva verket behöver man inte lagra tiden internt den kan räknas ut från den globala klockan Simulation.getTime(). Uttrycket Simulation.getTime()%period ger den interna tiden. Behövs det en variabel som anger signalens färg? Nej! Denna egenskap kan härledas utifrån klockans värde. Det enda som behövs är en metod som anger om signalen är grön eller ej: public boolean isgreen() { int time = Simulation.getTime()%period; return time < greentime; }

(28 februari 2019 Trafiksimulering 13 ) Klassen Light i ett UML-diagram Klassens namn: Instansvariabler: Metoder: period : int greentime : int Light Light(period : int, greentime : int) isgreen() : boolean tostring() : String Observera de omvända typdeklarationerna!

(28 februari 2019 Trafiksimulering 14 ) Klassen Vehicle Behöver ett fordon veta var det är? titta på platsen framför sig? titta på signaler? veta vad klockan är? Nej Nej Nej Nej Det är någon annan som ser till att fordonen flyttas genom systemet.

(28 februari 2019 Trafiksimulering 15 ) Klassen Vehicle Ett fordon behöver bara veta vart det ska och när det föddes. Vehicle destination : char borntime : int Vehicle(destination : char) tostring() : String getdestination() : char getborntime() : int Den globala klockan Simulation.getTime() används av konstruktorn för att sätta borntime.

(28 februari 2019 Trafiksimulering 16 ) Klassen Lane Vi låter en fil bestå av ett antal positioner som antingen kan innehålla ett fordon eller vara tom (dvs null). Använd en array. Fordon in i en änden (högsta index) och ut ur andra änden (index 0). Fordon ut 0 1 2 3 Fordon in Förenkling av verkligheten: Alla fordon tar lika stor plats

(28 februari 2019 Trafiksimulering 17 ) Vad händer på filen vid ett tidssteg? Förenkling av verkligheten: Ett fordon står antingen stilla eller flyttar sig en plats per tidssteg.

(28 februari 2019 Trafiksimulering 18 ) Vad sker i ändarna på Lane? Klassen Lane vet inte vad som finns framför eller bakom. Det är alltså någon annan som ser till att fordon kommer in på respektive lämnar filen. Lane måste tillhandahålla en metod för att ta ut från första platsen och returnerar fordonet som fanns där. Måste man kunna titta på fordonet på första platsen. Måste kunna ta ut fordonet på första platsen.

(28 februari 2019 Trafiksimulering 19 ) Klassen Lane Det måste också finnas en metod som sätter ett fordon på sista platsen: Måste man kunna se om sista platsen ledig? Ja! Vad händer annars?

(28 februari 2019 Trafiksimulering 20 ) Klassen Lane Lane thelane : Vehicle[] Lane(length : int) tostring() : String step() : void getfirst() : Vehicle removefirst() : Vehicle lastfree() : boolean putlast(v : Vehicle) : void numberofvehicles() : int Vehicle destination : char borntime : int Vehicle(destination : char) tostring() : String getdestination() : char getborntime() : int

(28 februari 2019 Trafiksimulering 21 ) Klassen TrafficSystem Definierar de komponenter (filer, signaler) som ingår i ett trafiksystem. Konstruktor skapar komponenterna (filer, signaler) Metoden step() tar ett tidssteg genom att tidsstega komponenterna, flytta fordon in och ut ur systemet samt mellan filer. Metoden print() skriver ett ögonblicksbild av systemet. Metoden printsetup() skriver ut simuleringsparametrarna. Metoden printstatistics() skriver ut aktuell statistik.

(28 februari 2019 Trafiksimulering 22 ) Klassen TrafficSystem som UML TrafficSystem lanes : Lane[] lights : Light[] TrafficSystem() step() : void print() : void printstatistics() : void printsetup() : void 1* 0* Lane Light Anmärkning: Figuren antyder att lanes och lights är arrayer. Om man, som i ert fall, endast har några få objekt är det bättre att namnge dem som vanliga variabler.

(28 februari 2019 Trafiksimulering 23 ) Klassen TrafficSystem public class TrafficSystem { // These instance variables can be reset by a call to the given // loadproperties method with the given file "properties.txt" // as parameter. private int lanelength = 11; // Length first lane private int lanewslength = 8; // Length lanes in front of signals private int lightperiod = 14; // Period for the signals private int lightwestgreen = 6; // Green period westbound light private int lightsouthgreen = 4; // Green period southbound light // Instance variable for the lanes, lights and the queue Deklarera filer, signaler och kön här // Instance variables for statistics Deklarera (bl. a.) två Measurements-objekt här

(28 februari 2019 Trafiksimulering 24 ) Klassen TrafficSystem: konstruktor public TrafficSystem() { try { this.loadproperties("properties.txt"); } catch (FileNotFoundException fne){} } Skapa objekten här. Använd de fördefinierade instansvariablerna! Se till att du inte har en fil med namnet properties.txt i din katalog.

(28 februari 2019 Trafiksimulering 25 ) Klassen VehicleGenerator Given klass som producerar fordon med olika intensitet. public class VehicleGenerator { public VehicleGenerator() {... } public VehicleGeneratot(int i) {... } public VehicleGenerator(String filename) {... } public Vehicle step() {... } public String tostring() {... } public void print() {... } } public static void main(string[] args) {... }

(28 februari 2019 Trafiksimulering 26 ) Klassen Simulation Denna klass är given och behöver inte ändras. Klassen innehåller en globalt tillgänglig klocka samt en main-metod som driver simuleringen och anropar utskriftsmetoder. public class Simulation { private static int globaltime = 0; public static int gettime() { return globaltime; }

+ lite extra för att sova, fråga om fortsättning mm. (28 februari 2019 Trafiksimulering 27 ) Klassen Simulation public class Simulation { } private static int globaltime = 0; public static int gettime() { return globaltime; } public static void main(string [] args) throws IOException { TrafficSystem tf = new TrafficSystem(); tf.printsetup(); while (true) { globaltime++; tf.step(); tf.print(); } }

(28 februari 2019 Trafiksimulering 28 ) Hur kommer man igång? 1. Ladda ner alla filerna enligt lektionssidan. Då finns ett embryo till alla klasser. Koden går att kompilera och köra men den producerar inte så intressanta utskrifter... 2. Klassen Vehicle kan till att börja med användas som den står. 3. Börja med att göra klassen Lane.

(28 februari 2019 Trafiksimulering 29 ) Klassen Lane Instansvariabeln Vehicle[] thelane är given. Konstruktorn skapar en array med angiven längd. tostring: En tom plats representeras av ett blanktecken, på en icke-tom plats används fordonets tostring-metod. step: Går från vänster till höger och flyttar fram alla fordon (utom det första) ett steg under förutsättning att platsen framför är ledig. getfirst, removefirst och lastfree är alla enkla.

(28 februari 2019 Trafiksimulering 30 ) Klassen Lane: metoden putlast public void putlast(vehicle v) { if (thelane[thelane.length - 1] == null) { thelane[thelane.length-1] = v; } else { throw new RuntimeException("Car crash!"); } }

(28 februari 2019 Trafiksimulering 31 ) Klassen Lane Skriv lite testkod i main! T ex: public static void main(string[] args) { Lane alane = new Lane(10); alane.putlast(new Vehicle( a )); System.out.println(aLane); for (int i=0; i<10; i++) { alane.step(); alane.step(); alane.putlast(new Vehicle( a )); System.out.println(aLane); } }

(28 februari 2019 Trafiksimulering 32 ) Klassen TrafficSystem med ett Lane-objekt Instansvariabler: private Lane lane; private VehicleGenerator vg; private ArrayList<Vehicle> queue; I konstruktorn: lane = new Lane(10); vg = new VehicleGenerator(1); queue = new ArrayList<Vehicle>();

(28 februari 2019 Trafiksimulering 33 ) Klassen TrafficSystem med ett Lane-objekt Första försök med step-metoden: lane.step(); lane.putlast(vg.step()); Bättre step-metod: lane.step(); Vehicle v = vg.step(); if (v!=null) { queue.add(v); } if (queue.size() >0 && lane.lastfree()) { lane.putlast(queue.remove(0)); }

Klassen TrafficSystem med ett Lane-objekt Och i print-metoden: System.out.print(lane); System.out.println(queue); Om man sedan kör Simulation så kan det efter ett tag se ut så här: ----------------------------------- <XXX X X >[] ----------------------------------- <XXX X X >[] ----------------------------------- <XXX X X >[] ----------------------------------- <XXXX X >[] ----------------------------------- <XXXXX X>[] ----------------------------------- <XXXXX X >[] ----------------------------------- Körexempel (28 februari 2019 Trafiksimulering 34 )

(28 februari 2019 Trafiksimulering 35 ) Implementera sedan klassen Light Instansvariabler: private int period; private int green; Eftersom isgreen-metoden är berorende av den globala klockan (se tidigare diskussion) är det svårt att testa den för sig själv. Gör i stället ett TrafficSystem endast bestående av en eller två signaler och kör Simulation.

(28 februari 2019 Trafiksimulering 36 ) Litet testsystem s1 dvs 2 filer och en signal. lightwest lanewest E 0 1 2 Filen exitw är bara till för att illustrera förloppet. Körexempel

(28 februari 2019 Trafiksimulering 37 ) Slutliga systemet s1 W S s2 E Tre filer (lane, lanew och lanes) och två ljussignaler (lightw och lights). Även här är kan det vara lämpligt att ha med två output-filer exitw och exits för illustrationernas skull.

(28 februari 2019 Trafiksimulering 38 ) Slutliga systemet lightwest lanewest lane W S lightsouth 0 1 2 lanesouth X 0 1 2 E Observera att klasserna Vehicle, Light, Lane och Simulation skall vara helt oförändrade. Lägg bara till i klassen TrafficSystem.

(28 februari 2019 Trafiksimulering 39 ) Slutliga systemet Initialt dvs i konstruktorn: 1. Simuleringsparametrar (fillängder, signalernas perioder mm) definieras i klassen TrafficSystem Dessa instansvariabler är fördeklarerade med angivna värden. Om man vill experimentera med olika uppsättningar av värden kan metoden loadproperties användas. 2. Konstruktion av de komponenter (signaler, filer) som ingår i trafiksystemet.

(28 februari 2019 Trafiksimulering 40 ) Slutliga systemet Varje tidssteg 1. ett fordon passerar en signal (om den är grön), 2. ett fordon avancerar ett steg i en fil (om platsen framför är ledig) 3. ett fordon omedelbart framför X flyttas till lanew eller lanes beroende på dess destination (W eller S), 4. ett fordon anländer till systemet vid punkten E. 5. lightw och lights kan skifta färg, Gör sakerna i denna ordning!

(28 februari 2019 Trafiksimulering 41 ) Statistik Vill veta medel- och maxtid för fordon som kommer ut mot W respektive S. Hur samlar man data? När ett fordon lämnar systemet sparar man dess ålder i ett Measurements-objekt. Använd ett Measurements-objekt för vardera utgång. Håll också reda på hur ofta det inte går att flytta vid punkten X.

(28 februari 2019 Trafiksimulering 42 ) Slutligen Följ specifikationerna! Följ kodningsreglerna!