\documentclass{bschlangaul-aufgabe}
\bLadePakete{uml}
\begin{document}
\bAufgabenMetadaten{
  Titel = {Aufgabe 1},
  Thematik = {Critical Path Method},
  Referenz = 66116-2019-H.T1-TA1-A1,
  RelativerPfad = Examen/66116/2019/09/Thema-1/Teilaufgabe-1/Aufgabe-1.tex,
  ZitatSchluessel = examen:66116:2019:09,
  BearbeitungsStand = mit Lösung,
  Korrektheit = unbekannt,
  Ueberprueft = {unbekannt},
  Stichwoerter = {Klassendiagramm, Objektdiagramm},
  EinzelpruefungsNr = 66116,
  Jahr = 2019,
  Monat = 09,
  ThemaNr = 1,
  TeilaufgabeNr = 1,
  AufgabeNr = 1,
}

Ein CPM-Netzwerk („Critical Path Method“) ist ein benannter
Projektplan, der aus Ereignissen und Aktivitäten besteht. Ein Ereignis
wird durch eine ganze Zahl $> 0$ identifiziert. Jede Aktivität führt von
einem Quellereignis zu einem Zielereignis. Eine reale Aktivität hat
einen Namen und eine Dauer (eine ganze Zahl $> 0$). Eine Pseudoaktivität
ist anonym. Ereignisse und Pseudoaktivitäten verbrauchen keine Zeit. Zu
jedem Ereignis gibt es einen frühesten und einen spätesten Zeitpunkt
(eine ganze Zahl $> 0$), deren Berechnung nicht Gegenstand der Aufgabe
ist.
\index{Klassendiagramm}
\index{Objektdiagramm}
\footcite{examen:66116:2019:09}

\begin{enumerate}
%%
% a)
%%

\item Erstellen Sie ein UML-Klassendiagramm zur Modellierung von
CPM-Netzwerken. Geben Sie für Attribute jeweils den Namen und den Typ
an. Geben Sie für Assoziationen den Namen und für jedes Ende den
Rollennamen und die Multiplizität an. Nutzen Sie ggf. abstrakte Klassen,
Vererbung, Komposition oder Aggregation. Verzichten Sie auf Operationen
und Sichtbarkeiten.

\begin{bAntwort}
\begin{tikzpicture}
\umlclass{Projektplan}{
  name: String\\
}{}

\umlclass[below left=1.5cm and 0cm of Projektplan]{Ereignis}{
  id: int\\
  frühestens: int\\
  spätestens: int
}{}

\umlclass[below right=2cm and 0cm of Projektplan,type=abstract]{AbstrakteAktivität}{
}{}

\umlclass[below left=1cm and -1cm of AbstrakteAktivität]{Aktivität}{
  name: String\\
  dauer: int
}{}

\umlclass[below right=1.4cm and -1cm of AbstrakteAktivität]{PseudoAktivität}{
}{}

\umlVHVaggreg[arg2=ereignisse,pos2=2.5,swap,mult2=2..*,anchor1=-140]{Projektplan}{Ereignis}
\umlVHVaggreg[arg2=aktivitäten,pos2=2.5,mult2=1..*,anchor1=-40]{Projektplan}{AbstrakteAktivität}
\umlVHVreal{Aktivität}{AbstrakteAktivität}
\umlVHVreal{PseudoAktivität}{AbstrakteAktivität}

\umluniassoc[arg=quelle,mult=1,anchor1=160,anchor2=20]{AbstrakteAktivität}{Ereignis}
\umluniassoc[arg=ziel,mult=1,anchor1=-160,anchor2=-20]{AbstrakteAktivität}{Ereignis}
\end{tikzpicture}
\end{bAntwort}

%%
% b)
%%

\item Erstellen Sie für das Klassendiagramm aus a) und das Beispiel aus
der Aufgabenstellung ein Objektdiagramm. Geben Sie Rollennamen nur an,
wenn es notwendig ist, um die Enden eines Links (Instanz einer
Assoziation) zu unterscheiden.

\begin{bAntwort}
\bMetaNochKeineLoesung
\end{bAntwort}

\end{enumerate}
\end{document}
