Program Winda

0

Witam. Mam do napisania program który ma symulować prace windy. Ciężko mi zacząć, jaką strukturę przybrać, jak to ma wyglądać, dlatego bardzo prosiłbym o waszą pomoc.

Ma to być program który miałby zadania:

zamawianie windy
wybór piętra
zamykanie/otwieranie drzwi
alarm

Oczywiście z wykorzystaniem awt i swinga graficznie. Ogolnie raczej bez jakichś polotów, prosty program. Piszę prosty a sam nie wiem jak go zacząć...(parodia) No ale nie jestem wymiataczem(jakieś pół roku znam Jave). Wiem że przyda się pewnie jakiś interfejs ale naprawdę jeśli moglibyście mi jako doświadczeni opisać mniej więcej jak to ma wyglądać jakie metody czy klasy to byłbym bardzo wdzięczny...

Pozdrawiam serdecznie i dzięki z góry za wszelką pomoc

4

Zacznij od interfejsu. Pomyśl co zwykła winda w praktyce ma.

  • Na każdym piętrze przycisk do przywołania wraz z określeniem czy chcesz jechać w górę czy w dół
  • W środku przyciski do jazdy na piętro
  • W środku przycisk alarmu

Obecnie większość wind automatycznie zamyka i otwiera drzwi. Może to powinna być wewnętrzna sprawa windy i użytkownik nie powinien robić tego ręcznie?
Druga sprawa to wyświetlanie stanu windy. Na którym jest piętrze, czy ma otwarte czy zamknięte drzwi, czy jedzie, czy stoi, itd. Rozwiązaniem jest wzorzec obserwator. Interfejs powinien zatem posiadać metodę do rejestracji obserwatora.

Mając to, możesz zbudować sobie gui. coś co będzie symulowało budynek z podziałem na piętra, na każdym po 2 przyciski. dodatkowo okienko z widoku windy gdzie ludziki w środku będą mogły wciskać przyciski. Zrób referencję do interfejsu windy i podepnij każdy przycisk do odpowiedniej funkcji. Teraz, gdyby tylko mieć implementację windy, można by było już jeździć, zatem wiesz co masz zrobić.

Do jej implementacji polecam wzorzec maszyny stanów. Jeżeli ktoś chce jechać w dół, ale wciśnie oba przyciski, a winda jedzie z dołu do góry to zatrzyma się na piętrze, ale mimo wciśniętego przycisku z niższym piętrem pojedzie dalej w górę.

No dobra, ale załóżmy że chcesz zacząć ładnie od testów. Winda musi działać na wątku, żeby odpowiednie czynności trwały ileś czasu a nie wykonywały się natychmiastowo. Trzeba do windy dodać metodę która przyjmię deltę czasu od ostatniej aktualizacji. Jedyną rzeczą jaką wątek musi zrobić to aktualizacja tego czasu. Możesz wtedy popisać testy i ręcznie aktualizować ten czas. Np test otwierania drzwi.

  • (Before) Stwórz windę z czasem czekania otwartych drzwi 5 sekund oraz czasem zamykania 1 sekunda, oraz doprowadź ją do stanu w którym drzwi na piętrze się otworzyły
  • zaczekaj 4.9s
  • sprawdź czy drzwi są otwarte
  • sprawdź czy nie wysłano do obserwatora żadnego komunikatu
  • zaczekaj 0.1s
  • sprawdz czy obserwator otrzymał komunikat o tym że drzwi zaczęły się zamykać
  • sprawdz czy stan windy to "zamykanie drzwi"
    *zaczekaj 0.9s
  • sprawdz czy stan windy to "zamykanie drzwi"
  • sprawdź czy nie wysłano do obserwatora żadnego komunikatu
  • zaczekaj 0.1s
  • sprawdz czy obserwator otrzymał komunikat o tym że drzwi zostały zamknięte
  • sprawdz czy stan windy to "postój z zamkniętymi drzwiami"

A co gdy drzwi będą się zamykać a ktoś kliknie przycisk otwarcia drzwi lub drzwi zostaną zatrzymane nogą? Też do tego testy.

Najlepiej by było jakbyś napisał kilka wersji windy. Pierwsza ma być tempa, komunistyczna i po prostu wozić tyłek. Każda kolejna ma mieć dodatkowy feature, a ostatnia być wypasiona jak te w nowych wieżowcach.

1

Wielkie dzięki @krzysiek050 za poświęcenie czasu i opisanie. Brzmi interesująco, ale czy da się napisać ten program bez wzorca projektowego ? Tak po prostu prymitywnie ? (nie miałem do czynienia ze wzorcami)

Da się, tylko brzydko i właściwie po co? Z wzorcami jest taki problem, że każdy powinien je znać, a jak przychodzi pora na ich naukę, to bierzesz książkę GoF i czytasz od początku do końca bez praktycznych testów. Tutaj zaproponowałem tylko 2 wzorce a ich użycie jest słuszne. Wystarczy że poczytasz o nich, użyjesz i po skończeniu programu nigdy już ich nie zapomnisz. Zawsze będziesz pamiętał jak ich użyć, gdzie i miał w głowie przykład jak użyłeś ich wcześniej.

0

Tak naprawdę większość logicznie myślących osób używa wzorców, nawet o tym nie wiedząc ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1