Inżynieria Oprogramowania
Projekt
Ekspres do kawy
Patrycja Grabowska
IMIR, Mechatronika, gr.23
Rok akademicki 2013/2014
Spis treści
1 Wstęp
Celem projektu było stworzenie systemu ekspresu do parzenia kawy. Ekspres jest
jednym z najpopularniejszych sprzętów domowych. Zgodnie z statystykami, codziennie
korzystają z niego setki ludzi, zarówno w domach prywatnych, jak i kawiarniach,
restauracjach, biurach, itp.
2 Realizacja
Przedstawiony w projekcie ekspres jest typowym automatem, jaki można spotkać
w miejscach publicznych. Posiada otwór na monety, wyświetlacz, diody kontrolne
informujące o etapie przygotowywania kawy oraz wskaźnik pokazujący napełnienie
kubka. W przypadku pojawienia się błędu, następuje poinformowanie o nim
użytkownika.
Podczas symulacji istnieje możliwość ustawienia różnych warunków pracy
ekspresu.
System został stworzony w języku UML. Do jego realizacji wykorzystano
oprogramowanie IBM Rational Rhapsody v. 7.6.1.0. for C++.
Poniżej przedstawiono elementy stworzonego systemu.
2.1 Use Case Diagram
Jest to diagram przedstawiający główne funkcje systemu oraz osoby do nich
upoważnione. Pozwala ustalić wymagania dla systemu oraz pokazuje wzajemny wpływ
pomiędzy systemem a osobami, które z niego korzystają.
W stworzonym systemie można wyróżnić 3 typy aktorów (osób mających dostęp
do ekspresu): użytkownik przygotowujący kawę (User), właściciel ekspresu (Owner)
sprawdzający poziom zbiorników z wodą, mlekiem, kawą i kubkami oraz uzupełniający
ewentualne braki, a także serwisant (ServicePerson) odpowiedzialny za poprawne
działanie automatu.
Na rysunku 2.1 przedstawiono Use Case Diagram stworzonego systemu.
Rys. 2.1 Use Case Diagram ekspresu.
2.2 Object Model Diagram
Jest to diagram, który wyszczególnia typy obiektów w systemie, atrybuty i operacje
należące do tych obiektów, stałe relacje istniejące pomiędzy klasami oraz ich możliwe
połączenia.
Na rysunku 2.2 przedstawiono Object Model Diagram ekspresu. Jak można na nim
zauważyć, system ekspresu składa się z 3 głównych klas:
a) CoffeeMachine – główna klasa reprezentująca system. Posiada takie
atrybuty, jak: milk-, coffee- oraz cupContainer (informacje o poziomie
mleka, kawy w odpowiednich zbiornikach oraz poziomie zapełnienia
kubka), cup (informacja dotycząca pojawienia się kubka pod dyszą),
power (zasilanie), cupCounter (wyświetla ilość zakupionej kawy) oraz
waterPressure (informacja o ciśnieniu wody).
b) Display – klasa reprezentująca wyświetlacz ekspresu. Jej atrybuty to:
power (informacja o zasilaniu), rotationTime (czas rotacji), stateMessage
(informacja o etapie pracy).
c) Boiler - klasa ogrzewacza wody. Zawiera informacje dotyczące obenej
temperatury wody (waterTemp) oraz jej dopuszczalnego zakresu
(MAX_TEMP, MIN_TEMP), a także informacje dotyczące zasilania
(power).
Rys. 2.2 Object Model Diagram ekspresu
Klasy Dispaly i Boiler są połączone jednokierunkowymi relacjami z klasą
CoffeeMachine – informacje przepływają tylko w jedna stronę.
Dodatkową klasą, która nie znajduje się na diagramie, jest MachineTester. Została
ona stworzona w celu przetestowania działania systemu. Zostanie ona bliżej
przedstawiona w dalszej części sprawozdania.
Na rys. 2.2 można również zauważyć obiekty klas: MachineTester oraz
CoffeeMachine połączonych jednokierunkową reacją. Widoczne jest także , że element
klasy CoffeeMachine zawiera obiekty klas: Boiler i Display.
2.3 Statecharts
Statecharts (czyli grafy stanów) definicją zachowania obiektów, biorąc pod uwagę
różnorodne stany, w jakich obiekt może się znaleźć pod wpływem otrzymania na wejściach
różnych wiadomości, zdarzeń, lub sygnałów upływu czasu. Każdy graf stanu definiuje
zachowanie pojedynczej klasy.
Poniżej przedstawiono grafy dla poszczególnych utworzonych klas.
2.3.1 CoffeeMachine
Na rysunku 2.3 przedstawiono graf obrazujący zachowanie klasy CoffeeMachine.
Możemy wyróżnić 2 charakterystyczne stany dla tej klasy: on (włączenia) oraz off
(wyłączenia). Warunkiem przejścia w jeden z nich jest zmiana wartości zmiennej power.
Stan włączenia składa się z 2 podstanów: idle (przygotowania do pracy) oraz working
(pracy ekspresu). W pierwszym z nich nastepuje uruchomienie funkcji zagrzania wody
wykonywanej aż do momentu uzykania jej odpowiedniej temperatury. Następnie należy
wrzucić monetę. CoffeMachine przejdzie wówczas w stan working składający się
z kolejnych kroków:
a) Wsypanie odpowiedniej ilości kawy do kubka.
b) Podniesienie ciśnienia wody do 190 bar.
c) Nalanie do kubka wody pod ciśnieniem do określonego poziomu.
d) Nalanie do kubka odpowiedniej ilości mleka.
e) Sprawdzenie poziomu płynów w kubku.
f) Wyświetlenie informacji o gotowości kawy do odbioru.
g) Powrót do stanu idle.
Rys. 2.3 Statechart klasy CoffeeMachine
Po otrzymaniu sygnału o braku mocy (power==0) następuje wyłączenie ekspresu,
grzałki do wody oraz wyświetlacza.
2.3.2 Boiler
Na rysunku 2.4 przedstawiono działanie klasy Boiler. Dla klasy tej można wyróżnić
2 główne stany: włączenia (on) oraz wyłączenia (off). Przejście pomiędzy nimi jest
warunkowane wartością zmiennej power oraz sygnałem otrzymanym z klasy
CoffeeMachine. Po przejściu w tryb włączenia następuje uruchomienie funkcji gotowania
wody, która generuje stosowny komunikat dla klasy CoffeeMachine. Po osiągnieciu
żądanej temperatury grzałka przechodzi w stan utrzymania temperatury wody oraz
zostaje wysłany komunikat o gotowości ekspresu do pracy. Temperatura wody jest stale
monitorowana. W przypadku jej spadku następuje powrót do stanu podgrzewania.
Rys. 2.4 Statechart klasy Boiler
2.3.3 Display
Na rysunku 2.5 przedstawiono graf stanów klasy Display. W klasie tej możemy
wyróżnić 2 główne stany: on (włączenia) oraz off (wyłączenia). Warunkami przejścia
między nimi jest zmiana wartości argumentu power lub sygnał wyłączenia przesłany
przez element klasy CoffeeMachine. Po przejściu w stan włączenia na wyświetlaczu
pojawia się stała wiadomość. Następnie po uruchomieniu procesu parzenia kawy
na wyświetlaczu pojawiają się kolejne komunikaty dotyczące etapu przygotowania
napoju. Po zakończeniu pracy ekspresu wyświetlacz powraca do stanu początkowego.
Rys. 2.5 Statechart klasy Display.
2.4 Activity Diagram
Activity Diagram (czyli diagram aktywności) określa zachowanie danej klasy,
służy do przedstawienia kolejnych kroków wykonywanych przez nią.
Na rysunku 2.6 przedstawiono diagram aktywności klasy MachineTest służącej
do przetestowania działania stworzonego systemu. Diagram ten obrazuje kolejne etapy
pracy ekspresu do kawy. Na początku system oczekuje na sygnał rozpoczynający jego
pracę. Po jego otrzymaniu ustawia wartość atrybutu power na 1, uruchamiając dzięki
temu grzałkę (Boiler) oraz wyświetlacz (Display). Ekspres przechodzi w stan
przygotowania do pracy: następuje proces grzania wody aż do osiągnięcia żądanej
temperatury. System oczekuje na wrzucenie monety. Po tym zdarzeniu następuje proces
przygotowania kawy. Na zakończenie zostaje wygenerowany komunikat o możliwości
odbioru napoju oraz powrót do stanu przygotowania do pracy aż do momentu
przygotowania piątej kawy, po czym następuje zakończenie pracy systemu.
Rys. 2.6 Active Diagram klasy MachineTester
2.5 Panel Diagram
Na rysunku 2.7 przedstawiono Panel Diagram ekspresu do kawy. Jest to graficzne
przedstawienie stworzonego systemu. Po prawej stronie widoczny jest prostopadłościan
symbolizujący ekspres, na którym można wyróżnić takie elementy, jak: wyświetlacz,
diody informujące o kolejnych etapach pracy ekspresu oraz przyciski służące
do inicjalizacji zdarzeń: wrzucenia monety (Insert coin) oraz zabrania kubka (Take the
cup). Po prawej stronie widoczne wnętrze ekpresu: wskaźniki poziomu kawy, mleka,
napełnienia kubka oraz temperatury i ciśnienia wody, licznik wydanych kaw, a także
uruchomienie zasilania. Poniżej znajduje się konsola służąca do ustalenia warunków
testowych dla systemu oraz przycisk rozpoczynający sprawdzanie działania ekspresu.
Celem stworzenia diagramu było umożliwienie łatwego przetestowania działania
systemu.
Rys. 2.7 Panel Diagram
3 Efekt kompilacji programu
Pomimo braku błędów podczas generowania kodu oraz budowania aplikacji
podczas próby uruchomienia programu występuje komunikat o nieznanym błędzie,
co uniemożliwia przetestowanie działania systemu. Nie znaleziono źródła błędu.
4 Podsumowanie
Teoretycznie stworzony system w pełni obrazuje działanie ekspresu do kawy.
Stworzony system zawiera klasy symbolizujące zarówno samo urządzenie, jak i jego
podzespoły. Utworzono również funkcje realizujące charakterystyczne zadania ekspresu
oraz diagramy przedstawiające je pracę.
Trudno jednak stwierdzić poprawność działania systemu bez przeprowadzenia
testów, co jest niemożliwe z nieznanych powodów.