Programowanie i projektowanie obiektowe



Podobne dokumenty
Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Java. Programowanie Obiektowe Mateusz Cicheński

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Metody Metody, parametry, zwracanie wartości

Programowanie obiektowe

Programowanie obiektowe

public enum Environment { Development("Deweloperskie"), Test("Testowe"), Production("Produkcyjne"); private String name;

Programowanie i projektowanie obiektowe

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Stanowe komponenty sesyjne

Języki i Techniki Programowania II. Wykład 7. Współbieżność 1

WSPÓŁBIEŻNOŚĆ. MATERIAŁY:

Programowanie współbieżne Laboratorium nr 11

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

Kurs programowania. Wykład 8. Wojciech Macyna

Programowanie obiektowe

Java: interfejsy i klasy wewnętrzne

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Tworzenie i wykorzystanie usług

Systemy Rozproszone - Ćwiczenie 4

Podstawy współbieżności

Aplikacje RMI Lab4

Kurs programowania. Wykład 8. Wojciech Macyna. 10 maj 2017

Programowanie obiektowe

Aplikacja wielowątkowa prosty komunikator

Programowanie w Javie wykład 8 Interfejsy

Języki i metody programowania Java Lab4 podejście obiektowe, zastosowanie pojemników

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003

Język Java wątki (streszczenie)

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Kurs programowania. Wykład 9. Wojciech Macyna

package pakieta; import pakietb.b; package pakietb; public class B { B(){} public class A { private B b; A(B b) { this.b = b; } }

Wykład 12. Programowanie serwera MS SQL 2005 w C#

Wykład 7: Pakiety i Interfejsy

Programowanie obiektowe i zdarzeniowe

Akademia ETI. Wprowadzenie do programowania w Javie PG Java User Group Przemysław Kulesza

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

1. Co można powiedzieć o poniższym kodzie?

Wzorce logiki dziedziny

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

1. Co można powiedzieć o poniższym kodzie (zakładając, że znajduje się on w jednym pliku A.java)?

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

Systemy Rozproszone - Ćwiczenie 6

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Programowanie obiektowe

Podstawy programowania w lejos

Wywoływanie metod zdalnych

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Języki i metody programowania Java Obsługa zdarzeń - przykłady

Jakarta POI. POIFS obsługa dokumentów OLE 2, HSSF dokumenty w formacie Excel'a, HWPF proste dokumenty w formacie Word 97,

Język Java wątki (streszczenie)

Operatory. Składnia. Typy proste. Znaki specjalne

Programowanie i projektowanie obiektowe

Wywoływanie metod zdalnych

Programowanie obiektowe

Przetwarzanie równoległe i współbieżne

Platformy Programistyczne Podstawy języka Java

Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie

Programowanie wielowątkowe: podstawowe koncepcje, narzędzia w Javie. J. Starzyński, JiMP2, rok akad. 2005/2006

Aplikacje w Javie- wykład 11 Wątki-podstawy

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Programowanie w Javie Lista nr 1. Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT]

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Programowanie obiektowe

Zaawansowane aplikacje WWW - laboratorium

Języki i metody programowania Java Lab1 Zofia Kruczkiewicz

Przykład zastosowania notacji UML dla realizacji zastosowania wzorca Mediator (materiały dla studentów na prawach rękopisu)

Język JAVA podstawy. Wykład 4, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Wykład 8: Obsługa Wyjątków

Języki i metody programowania Java. Wykład 2 (część 2)

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Programowanie obiektowe

Remote Method Invocation 17 listopada 2010

Klasy abstrakcyjne, interfejsy i polimorfizm

Instrukcja 10 Laboratorium 13 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

Dawid Gierszewski Adam Hanasko

Wątki (Threads) Potrzeby. Przetwarzanie równoległe i współbieŝne. Cechy programowania wątkowego. Concurrent programming is like

Podejście obiektowe do budowy systemów rozproszonych

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Podstawy programowania obiektowego

Projektowanie algorytmów rekurencyjnych

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

Systemy Rozproszone. Spis treści. Temat projektu: Regułowy system analizujacy logi. autorzy: Rafał Sadłowski, Sebastian Falkus, Michał Różycki

Aplikacje RMI

Transkrypt:

Programowanie i projektowanie obiektowe Przykład symulacji Paweł Daniluk Wydział Fizyki Jesień 2012 P. Daniluk (Wydział Fizyki) PO w. XII Jesień 2012 1 / 18

Symulacja sieci kolejowej A B C Zasady Na torze może przebywać tylko jeden pociąg Stacja ma określoną liczbę peronów i może przyjąć co najwyżej jeden pociąg na peron. Pociąg, który nie może wjechać na stację, czeka na torze przed wjazdem. Pociąg, który nie może wjechać na zajęty tor, czeka na stacji blokując peron. P. Daniluk (Wydział Fizyki) PO w. XII Jesień 2012 2 / 18

Klasy Pociąg public class Train { private int speed; // w km/h private String name; private Scheduler scheduler; Place location = null; Route route; Train(String name, int speed, Scheduler scheduler, Route route) { this.name = name; this.speed = speed; this.scheduler = scheduler; this.route = route;... P. Daniluk (Wydział Fizyki) PO w. XII Jesień 2012 3 / 18

Klasy c.d. Trasa public class Route { private List<Station> stops; private int pos; Route(List<Station> stops) { this.stops = new ArrayList<Station>(stops); pos = 0; public Station nextstop() { pos = (pos + 1) % stops.size(); return currentstop(); public Station currentstop() { return stops.get(pos); P. Daniluk (Wydział Fizyki) PO w. XII Jesień 2012 4 / 18

Klasy c.d. Miejsce public abstract class Place { String name; Place(String name) { this.name = name; P. Daniluk (Wydział Fizyki) PO w. XII Jesień 2012 5 / 18

Klasy c.d. Tor public class Track extends Place { int length; Train train = null; Station from, to; Track(String name, Station from, Station to, int length) { super(name); this.from = from; this.to = to; this.length = length; public boolean isempty() { return train == null; Station otherend(station s) { if (from == s) { return to; else if (to == s) { return from; throw new IllegalArgumentException("Ten tor (" + this.tostring() + ") nie biegnie do stacji " + s.tostr public int traveltime(int speed) { return (int) (Math.ceil((float) length / (float) speed * 60.0)) + ((new Random()).nextInt(20));... P. Daniluk (Wydział Fizyki) PO w. XII Jesień 2012 6 / 18

Klasy c.d. Stacja public class Station extends Place { private Map<Station, Track> outtracks; private int nplat; private Train[] platforms; Station(String name, int nplat) { super(name); this.nplat = nplat; platforms = new Train[nPlat]; outtracks = new HashMap<Station, Track>(); void addtrack(track t) { Station s = t.otherend(this); outtracks.put(s, t); private int getplatform(train t) { for (int i = 0; i < nplat; i++) { if (platforms[i] == t) { return i; return -1; private int freeplatform() { return getplatform(null); Track gettrack(station nextstation) { return outtracks.get(nextstation);... P. Daniluk (Wydział Fizyki) PO w. XII Jesień 2012 7 / 18

Klasy c.d. Scheduler public class Scheduler { PriorityQueue<Entry> queue = new PriorityQueue<Entry>(); private int time = 0; int gettime() { return time; public void add(int time, Runnable task) { Entry e = new Entry(time, task); queue.add(e); public void run() { while (!queue.isempty()) { Entry e = queue.poll(); time = e.gettime(); e.gettask().run(); try { Thread.sleep(1000); catch (InterruptedException ex) { P. Daniluk (Wydział Fizyki) PO w. XII Jesień 2012 8 / 18

Klasy c.d. Entry public class Entry implements Comparable { private int time; private Runnable task; Entry(int time, Runnable task) { this.time = time; this.task = task; @Override public int compareto(object t) { if (t instanceof Entry) { return gettime() - ((Entry) t).gettime(); throw new UnsupportedOperationException("Not supported."); public int gettime() { return time; public Runnable gettask() { return task; P. Daniluk (Wydział Fizyki) PO w. XII Jesień 2012 9 / 18

Sekwencja zdarzeń Tracks Train Station dispatch()/enter(track) leave(train) reachend(track)/queue(train) leave(train) enter(station)/dispatch() queue(train)/depart(station) P. Daniluk (Wydział Fizyki) PO w. XII Jesień 2012 10 / 18

Zachowanie miejsca public abstract class Place { Queue<Train> waiting = new LinkedList<Train>(); String name; Place(String name) { this.name = name; public void queue(train t) { waiting.add(t); this.dispatch(); @Override public String tostring() { return name; abstract void dispatch(); abstract void leave(train t); P. Daniluk (Wydział Fizyki) PO w. XII Jesień 2012 11 / 18

Zachowanie toru @Override public void dispatch() { if (!waiting.isempty() && isempty()) { train = waiting.poll(); train.enter(this); @Override public void leave(train t) { if (train!= t) { throw new IllegalArgumentException("Tego pociagu (" + t.tostring() + ") nie ma na torze " + this.tostring() + "."); train = null; this.dispatch(); P. Daniluk (Wydział Fizyki) PO w. XII Jesień 2012 12 / 18

Zachowanie stacji @Override void dispatch() { int p; if (!waiting.isempty() && (p = freeplatform()) >= 0) { platforms[p] = waiting.poll(); platforms[p].enter(this); @Override void leave(train t) { int p = getplatform(t); if (p == -1) { throw new IllegalArgumentException("Tego pociagu (" + t.tostring() + ") nie ma ma na stacji " + this.tostring() + "."); platforms[p] = null; this.dispatch(); P. Daniluk (Wydział Fizyki) PO w. XII Jesień 2012 13 / 18

Zachowanie pociągu void enter(final Track track) { int time = track.traveltime(speed) + scheduler.gettime(); if(location!=null) location.leave(this); location = track; System.out.println(String.valueOf(scheduler.getTime()) + ": Pociąg " + this.tostring() + " wjechał na tor " + track.tostring() + "."); scheduler.add(time, new Runnable() { @Override public void run() { Train.this.reachEnd(track); ); private void reachend(track track) { System.out.println(String.valueOf(scheduler.getTime())+": Pociąg " + this.tostring() + " dojechał do końca toru " + track.tostring()+"."); route.currentstop().queue(this); P. Daniluk (Wydział Fizyki) PO w. XII Jesień 2012 14 / 18

Zachowanie pociągu c.d. void enter(final Station station) { int time = scheduler.gettime() + 20 + ((new Random()).nextInt(5))-2; if(location!=null) location.leave(this); location = station; System.out.println(String.valueOf(scheduler.getTime()) + ": Pociąg " + this.tostring() + " wjechał na stację " + station.tostring() + "."); scheduler.add(time, new Runnable() { @Override public void run() { Train.this.depart(station); ); private void depart(station station) { Station nextstation = route.nextstop(); Track nexttrack = station.gettrack(nextstation); System.out.println(String.valueOf(scheduler.getTime()) + ": Pociąg " + this.tostring() + " odjeżdża ze stacji " + station.tostring() + " po torze "+nexttrack.tostring()+"."); nexttrack.queue(this); P. Daniluk (Wydział Fizyki) PO w. XII Jesień 2012 15 / 18

Inicjalizacja public class Main { public static void main(string args[]) { Station A = new Station("A", 1); Station B = new Station("B", 2); Station C = new Station("C", 2); Track AB = new Track("AB", A, B, 100); Track BA = new Track("BA", B, A, 100); Track AC = new Track("AC", A, C, 200); Track CA = new Track("CA", C, A, 200); Track BCB = new Track("BCB", B, C, 300); A.addTrack(AB); A.addTrack(AC); B.addTrack(BA); B.addTrack(BCB); C.addTrack(CA); C.addTrack(BCB); Scheduler scheduler = new Scheduler(); List<Station> l1 = new ArrayList<Station>(); l1.add(a); l1.add(b); l1.add(c); List<Station> l2 = new ArrayList<Station>(); l2.add(b); l2.add(a); l2.add(c); Route r1 = new Route(l1); Route r2 = new Route(l2); Train tr1 = new Train("tr1", 100, scheduler, r1); Train tr2 = new Train("tr2", 80, scheduler, r2); A.putTrain(tr1, 0); B.putTrain(tr2, 0); scheduler.run(); P. Daniluk (Wydział Fizyki) PO w. XII Jesień 2012 16 / 18

Zadanie 1 Symulacja sieci kolejowej Zadanie Zaimplementować i przetestować opisany przykład. P. Daniluk (Wydział Fizyki) PO w. XII Jesień 2012 17 / 18

Zadanie 2 Symulacja rynku kapitałowego (za 3 punkty) Zadanie Na giełdzie w Kogutkowie Górnym dokonuje się obrotu akcjami lokalnej spółdzielni mleczarskiej. Notowania odbywają się w trybie ciągłym. W ramach pojedynczej transakcji inwestorzy mogą dokonać zakupu lub zbycia dokładnie jednej akcji. Zlecenia mogą być wystawiane z limitem ceny (górnym w przypadku kupna i dolnym w przypadku sprzedaży) lub po bieżącym kursie. Niewykonane zlecenia są kolejkowane: sprzedaży rosnąco, a kupna malejąco wg limitu ceny. Cena transakcji jest ustalana jako średnia z limitów parowanych zleceń. Zaimplementować system transakcyjny wraz z kilkoma rodzajami agentów dokonujących operacji giełdowych. Przetestować skuteczność różnych strategii inwestycyjnych. Wskazówka Brakujące szczegóły specyfikacji należy uzupełnić w zgodzie ze zdrowym rozsądkiem. P. Daniluk (Wydział Fizyki) PO w. XII Jesień 2012 18 / 18