Semestralne zadanie zaliczeniowe z Laboratorium Programowania Obiektowego. Listopad’99. Zaprojektuj i zaimplementuj w Smalltalku system symulujący ruch pociągów. Symulacja ma obejmować zamknięta (tzn. pociągi nie wyjeżdżają poza nią) sieć kolejową. Sieć składa się z węzłów. Węzły reprezentują istotne punkty sieci kolejowej i mogą być: - stacjami, - mijankami (miejsca gdzie mogą się wyminąć dwa pociągi), - rozgałęzieniami (miejsca gdzie tory się schodzą bądź rozchodzą. Uwaga: nie każda zwrotnica jest rozgałęzieniem, np. na stacji może być wiele zwrotnic z których żadna nie jest rozgałęzieniem), - punktami synchronizującymi (długie odcinki torów są podzielone na segmenty z semaforami uniemożliwiającymi wjazd pociągu na kolejny segment torów, dopóki nie opuści go poprzedni pociąg jadący w tym samym kierunku), - końcami torów (bocznica jest reprezentowana przez tor kończący się końcem torów). Węzły są połączone torami. Dwa węzły mogą być połączone dowolną liczbą torów (>=0, w praktyce <=2). Na jednym torze między dwoma węzłami może naraz znajdować się co najwyżej jeden pociąg. Wszystkie tory mają swoją długość. Dla uproszczenia zakładamy, że mijanki i stacje są na tyle długie, że zmieści się na nich każdy pociąg. Każda stacja ma określoną liczbę torów na których mogą jednocześnie stać pociągi. W sieci kursują pociągi. Pociągi składają się z wagonów. Każdy pociąg ma maksymalną dopuszczalną szybkość. Są różne rodzaje pociągów: - pasażerskie (osobowe, pośpieszne i ekspresowe), - towarowe, - drezyny. Pociągi pasażerskie mają rozkład wg którego kursują (a przynajmniej powinny). Pociągi towarowe i drezyny mają tylko miejsce przeznaczenia. Pociągi osobowe nie zmieniają swojego składu (zestawu wagonów). Pociągi towarowe mają dopuszczalną maksymalną liczbę wagonów. Wagony te są odczepiane i dołączane na stacjach. Każdy wagon towarowy ma swoje miejsce przeznaczenia (które się zmienia po dotarciu do niego). Miejsce przeznaczenia wagonu towarowego nie musi się pokrywać z miejscem przeznaczenia całego pociągu. Obsługa stacji stara się dołączać do przejeżdżających przez stacje pociągów (towarowych) wagony czekające na przejazd w kierunku zgodnym z kierunkiem jazdy przejeżdżającego pociągu. Zakładamy, że każda stacja ma górkę rozrządową i dodatkową bocznicę do przetrzymywania wagonów towarowych czekających na podłączenie do pociągu (a więc nie blokują one torów stacji). Dla uproszczenia zakładamy również, że stacje są w stanie pomieścić dowolną liczbę oczekujących wagonów towarowych. Pomijamy kwestie optymalności zestawiania pociągów towarowych, problemy z odłączaniem wagonu ze środka składu itp., jedyne wymaganie dotyczy tego, żeby wagony nie były złośliwie przetrzymywane na stacjach. Nowe miejsce przeznaczenia pociągu towarowego, który dojechał do stacji docelowej jest generowane przez system (np. na podstawie informacji o miejscach przeznaczenia wagonów towarowych znajdujących się na tej stacji). Drezyny są wysyłane co pewien czas ze stacji (np. w celu sprawdzenia torów), po dotarciu do stacji docelowej są zestawiane z torów (więc nie blokując torów mogą czekać, aż znów będą potrzebne). Minimalny czas postoju na stacji pociągu towarowego zależy liniowo od liczby dołączanych/odłączanych wagonów (w szczególności może wynosić 0, gdy nie ma takich operacji), postój pociągu pasażerskiego trwa przez czas określony w rozkładzie jazdy. Każdy pociąg ma średnią prędkość jazdy (używaną przez symulację do policzenia czasu przejazdu przez odcinek torów). Na mijankach i stacjach drezyny czekają na zbliżające się pociągi wszystkich pozostałych rodzajów, pociągi towarowe na pasażerskie, pociągi osobowe na pośpieszne i ekspresowe, a pośpieszne na ekspresowe. System powinien zapewniać bezkolizyjne i w miarę możliwości zgodne z rozkładem jazdy kursowanie pociągów pasażerskich oraz zgodne z miejscem przeznaczenia kursowanie drezyn i pociągów towarowych. System powinien ponadto umożliwiać: - podawanie w wygodny sposób parametrów symulacji (liczba pociągów i węzłów poszczególnych rodzajów, maksymalna liczba wagonów, maksymalna szybkość pociągów poszczególnych rodzajów, czasy postoju i przeładunku, średnia odległość między węzłami, itp.), - wyświetlanie informacji o stanie wybranych stacji (inf. o oczekujących pociągach) i pociągów (jedzie/stoi, liczba wagonów, szybkość, miejsce docelowe, miejsce aktualne). W wersji podstawowej (<=4) stacje i pociągi można wybierać tylko z góry, w wersji rozszerzonej (<=5) także podczas symulacji, - generowanie zdarzeń (awaria pociągu, uszkodzenie torów). W wersji podstawowej (<=4) można je generować tylko z góry (np. zadając ich prawdopodobieństwo), w wersji rozszerzonej (<=5) także podczas symulacji, - wyświetlanie wyników symulacji (minimalny/średni/maksymalny/łączny czas spóźnienia pociągu, liczba przejechanych wagono-kilometrów itp.). - W wersji rozszerzonej (<=5) można przyjąć dodatkowe założenia o rozmiarze sieci umożliwiające jej wygodną wizualizację (tak by użytkownik mógł łatwo wskazywać interesujące go obiekty). W wersji podstawowej wizualizacja symulacji może się ograniczyć do wyświetlania jedynie informacji tekstowych. Liczba parametrów symulacji/wyświetlanych wyników oraz wygoda ich zadawania/odczytywania będzie miała wpływ na końcową ocenę.