\documentclass{bschlangaul-aufgabe}
\bLadePakete{uml,java,entwurfsmuster}
\begin{document}
\bAufgabenMetadaten{
  Titel = {Aufgabe 4: (Entwurfsmuster)},
  Thematik = {Zustand-Entwurfsmuster bei Verwaltung von Prozessen},
  Referenz = 66116-2019-H.T1-TA1-A4,
  RelativerPfad = Examen/66116/2019/09/Thema-1/Teilaufgabe-1/Aufgabe-4.tex,
  ZitatSchluessel = examen:66116:2019:09,
  ZitatBeschreibung = {Thema 1 Teilaufgabe 1 Aufgabe 4},
  BearbeitungsStand = mit Lösung,
  Korrektheit = unbekannt,
  Ueberprueft = {unbekannt},
  Stichwoerter = {Zustandsdiagramm Wissen, Zustand (State), Implementierung in Java},
  EinzelpruefungsNr = 66116,
  Jahr = 2019,
  Monat = 09,
  ThemaNr = 1,
  TeilaufgabeNr = 1,
  AufgabeNr = 4,
}

Zu den Aufgaben eines Betriebssystems zählt die Verwaltung von
Prozessen. Jeder Prozess durchläuft verschiedene Zustände; Transitionen
werden durch Operationsaufrufe ausgelöst. Folgendes
Zustandsdiagramm\index{Zustandsdiagramm Wissen} beschreibt die Verwaltung von
Prozessen:\index{Zustand (State)}
\footcite[Thema 1 Teilaufgabe 1 Aufgabe 4]{examen:66116:2019:09}

\begin{center}
\begin{tikzpicture}
\umlstateinitial[x=0,y=5,name=initial]
\umlbasicstate[x=0,y=3]{Bereit}
\umlbasicstate[x=0,y=0]{Aktiv}
\umlbasicstate[x=6,y=0]{Suspendiert}
\umlstatefinal[x=0,y=-2, name=beendet]
\umlstatefinal[x=6,y=-2, name=abgebrochen]
\node [below=0cm of beendet] {\footnotesize{}Beendet};
\node [below=0cm of abgebrochen] {\footnotesize{}Abgebrochen};

\umltrans[arg=starten(),pos=0.5]{Bereit}{Aktiv}
\umltrans[arg=beenden(),pos=0.5]{Aktiv}{beendet}
\umltrans[arg=abbrechen(),pos=0.5]{Suspendiert}{abgebrochen}
\umltrans[pos=0.5]{initial}{Bereit}

\path[tikzuml transition style,draw,pos=0.5] (Aktiv.north east) -- node[auto]{\footnotesize{}suspendieren()} (Suspendiert.north west);
\path[tikzuml transition style,draw,pos=0.5] (Suspendiert.south west) -- node[auto]{\footnotesize{}fortsetzen()} (Aktiv.south east) ;
\end{tikzpicture}
\end{center}

\noindent
Implementieren\index{Implementierung in Java} Sie dieses
Zustandsdiagramm in einer Programmiersprache Ihrer Wahl mit Hilfe des
Zustandsmusters; geben Sie die gewählte Sprache an. Die Methoden für die
Transitionen sollen dabei die Funktionalität der Prozessverwaltung
simulieren, indem der Methodenaufruf auf der Standardausgabe
protokolliert wird. Falls Transitionen im aktuellen Zustand undefiniert
sind, soll eine Fehlermeldung ausgegeben werden.

\begin{bExkurs}[Zustand-(State)-Entwurfsmuster]
\bPseudoUeberschrift{UML-Klassendiagramm}

\bEntwurfsZustandUml

\bPseudoUeberschrift{Teilnehmer}

\bEntwurfsZustandAkteure
\end{bExkurs}

\begin{bAntwort}
Implementierung in der Programmiersprache „Java“:

\begin{center}
\begin{tabular}{l|l|l}
Methoden & Zustände & Klassennamen \\\hline\hline
& Bereit & ZustandBereit \\
starten(), fortsetzen() & Aktiv & ZustandAktiv \\
suspendieren() & Suspendiert & ZustandSuspendiert \\
beenden() & Beendet & ZustandBeendet \\
abbrechen() & Abgebrochen & ZustandAbgebrochen \\
\end{tabular}
\end{center}

\bJavaExamen{66116}{2019}{09}{prozess_verwaltung/Prozess}
\bJavaExamen{66116}{2019}{09}{prozess_verwaltung/ProzessZustand}
\bJavaExamen{66116}{2019}{09}{prozess_verwaltung/ZustandAbgebrochen}
\bJavaExamen{66116}{2019}{09}{prozess_verwaltung/ZustandAktiv}
\bJavaExamen{66116}{2019}{09}{prozess_verwaltung/ZustandBeendet}
\bJavaExamen{66116}{2019}{09}{prozess_verwaltung/ZustandBereit}
\bJavaExamen{66116}{2019}{09}{prozess_verwaltung/ZustandSuspendiert}
\end{bAntwort}
\end{document}
