summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/schule/doc/fachInformatik.tex
blob: 3412425d217684bf0263042fb267af5a4aefeb43 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
\section{Informatik}
\label{fach:informatik}
Das Fachmodul \module{Informatik} bindet Pakete ein, um Klassen- sowie Objektdiagramme (\texttt{pgf-umlcd}), Syntaxdiagramme (\pkg{syntaxdi}, siehe \prettyref{paket:syntaxdi}), Struktogramme (\pkg{struktex}) und Sequenzdiagramme (\texttt{pgf-umlsd}) setzen zu können. Die entsprechenden Dokumentationen sind bei den jeweiligen Paketen zu finden. Hier sind lediglich Abweichungen und Erweiterungen vom Standardumfang der Pakete dokumentiert.

\subsection{Objektdiagramme}
\begin{commands}
    \command{anchormark}[\oarg{Horizontale Verschiebung} \marg{Nodename}\oarg{Skalierung}] Durch den Befehl \cs{anchormark} können Objektdiagramme mit Beziehungsattributen ausgestattet werden, die an der korrekten Stelle hinter dem Attributbezeichner beginnen.

    \achtung{Dieser Befehl ist nicht skalierungssicher!}

    % % Der folgende kenntlich gemachte Abschnitt ist in der Zusammenarbeit
    % % von Informatikreferendaren und ehemaligen Informatikreferendaren
    % % der Studienseminare (heute ZfsL) Arnsberg, Hamm und Solingen
    % % entstanden.
    % %
    % % Der Abschnitt steht unter der Lizenz: Creative Commons by-nc-sa
    % % Version 4.0
    % % http://creativecommons.org/licenses/by-nc-sa/4.0/deed.de
    % %
    % % Nach dieser Lizenz darf der Abschnitt beliebig kopiert und
    % % bearbeitet werden, sofern das Folgeprodukt wiederum unter
    % % gleichen Lizenzbedingungen vertrieben und auf die ursprünglichen
    % % Urheber verwiesen wird.  Eine kommerzielle Nutzung ist
    % % ausdrücklich ausgeschlossen.
    % %
    % % Die Namensnennung durch einen Verweis und die Lizenzangabe der
    % % ursprünglichen Urheber auf den Materialien für Schülerinnen und
    % % Schüler ist erforderlich.
    % %
    % % Die vollständige Sammlung der Dokumente steht unter
    % % http://ddi.uni-wuppertal.de/material/materialsammlung/ zur
    % % Verfügung.
    % %
    % % Das LaTeX-Paket zum Setzen der Dokumente der Sammlung steht unter
    % % http://www.ctan.org/pkg/ zur Verfügung.
    % %
    % % ----- BEGIN ------------------------------------------------------
        \begin{example}[gobble=12]
            \begin{tikzpicture}[remember picture]
                \begin{object}[text width=5.5cm]{gustavsRadiowecker}{-3,0}
                    \attribute{standort = \diastring{Gustavs Zimmer}}
                    \attribute{weckzeit = \diastring{6:30}}
                    \attribute{weckmodusAktiv = \diastring{Wahr}}
                    \attribute{hatLautsprecher = \anchormark{hatLautsprecher}[0.025]}
                    \operation{einschalten()}
                    \operation{ausschalten()}
                    \operation{alarmAusloesen()}
                \end{object}
                \begin{object}[text width=4.5cm]{gustav}{-10,0}
                    \attribute{name = \diastring{Gustav Grabert}}
                    \attribute{geburtstag = \diastring{3.10.1998}}
                    \attribute{besitzt =\anchormark{besitzt}[0.025]}
                    \attribute{kennt =\anchormark{gKennt}[0.025]}
                \end{object}
                \begin{object}[text width=4.5cm]{fridolin}{-10,-4}
                    \attribute{name = \diastring{Fridolin Wagner}}
                    \attribute{geburtstag = \diastring{1.4.1999}}
                    \attribute{kennt =\anchormark{fKennt}[0.025]}
                \end{object}
                \begin{object}[text width=5.2cm]{lautsprecher}{-3,-5}
                    \attribute{untereFrequenzInHertz = 100}
                    \attribute{obereFrequenzInHertz = 18000}
                \end{object}

                \draw (hatLautsprecher) -- (lautsprecher.north);
                \draw (gKennt.south east) -- (fridolin.north);
                \draw (besitzt.east) -- (gustavsRadiowecker.west);
                \draw (fKennt.east) -- ($(fKennt.east)+(3.5,0)$)
                    -| ($(gustav.south)+(3,0.2)$) -- ($(gustav.south east)
                    +(-0.01,0.2)$);
            \end{tikzpicture}
        \end{example}
        % % ----- END ------------------------------------------------------
\end{commands}

\subsection{Sequenzdiagramme}
\label{fach:informatik:sequenz}
\begin{commands}
    \command{skaliereSequenzdiagramm}[\marg{Faktor}]
        \achtung{Sollte nicht mehr verwendet werden: Besser resizebox oder scalebox}

        Da es vorkommen kann, dass Sequenzdiagramme zu breit für eine Seite sind, kann mit dem Befehl \cs{skaliereSequenzdiagramm}\marg{Faktor} die Größe des Sequenzdiagramms angepasst werden, wenn er innerhalb der Umgebung \env{sequencediagram} ausgeführt wird.

    \command{newthreadtwo}[\oarg{Farbe}\marg{Bezeichnung}\marg{Name}\marg{Abstand}]
        Threads haben im Gegensatz zu Instanzen im Paket \pkg{pgf-umlsd} immer einen festen Abstand zu den Nachbarn. Durch den neuen Befehl \cs{newthreadtwo} ist es über den dritten Parameter möglich, diesen Abstand zu verändern. Dabei verhält sich der neue Parameter für den Abstand genauso wie der zugehörige optionale Parameter bei Instanzen.

        \begin{example}[gobble=12]
            \begin{sequencediagram}
                \newthread{fritz}{fritz}
                \newthreadtwo{mutter}{mutter}{3cm}
                \newinst[2]{wecker}{wecker}
                \newinst[2]{lampe}{lampe}

                \begin{callself}[2]{fritz}{schlafe()}{}
                \end{callself}
                \begin{call}{fritz}{gibUhrzeit()}{wecker}{\diastring{5:30}}
                \end{call}
                \begin{callself}[2]{fritz}{schlafe()}{}
                    \begin{call}{mutter}{gibUhrzeit()}{wecker}{\diastring{6:30}}
                    \end{call}
                \begin{call}{mutter}{schalteAn()}{lampe}{}
                    \end{call}
                    \begin{call}{mutter}{weckeAuf()}{fritz}{}
                    \end{call}
                \end{callself}
            \end{sequencediagram}
        \end{example}

    \command{nextlevel} Im Paket für Sequenzdiagramme ist vorgesehen, dass man mit \cs{prevlevel} wieder einen Schritt nach oben gehen kann. Zusätzlich wird ein Befehl \cs{nextlevel} bereitgestellt, mit dem man auch einen zusätzlichen Schritt nach unten gehen kann, um ggf. etwas mehr Platz und Abstand zu schaffen.

\end{commands}

\subsection{Struktogramme}
Mit dem Paket \pkg{struktex} lassen sich sehr einfach Struktogramme setzen:

\begin{example}[gobble=4]
    \begin{struktogramm}(130,60)[koche Kaffee]
    \assign{F"ulle 1 Liter Wasser in die Kaffekanne}
    \assign{Gie"se das Wasser in den Wasserbeh"alter}
    \assign{Lege eine Filtert"ute in den Filter}
    \ifthenelse{5}{5}{Sind die Kaffeetrinker m"ude?}{Ja}{Nein}
        \assign{Gib 6 L"offel Pulver hinein}
    \change
        \assign{Gib 5 L"offel Pulver hinein}
    \ifend
    \assign{Dr"ucke auf den Start-Knopf}
    \while{Solange der Kaffee noch nicht durchgelaufen ist}
        \assign{Warte ungeduldig}
    \whileend
    \assign{Gie"se den Kaffee in die Tasse}
    \assign{Trinke den Kaffee aus der Tasse}
    \end{struktogramm}
\end{example}

\subsection{Syntaxdiagramme}
Für ein Beispiel siehe \prettyref{paket:syntaxdi}.

\subsection{Flussdiagramme}
Für Flussdiagramme, bzw. Programmablaufpläne steht der Style \verbcode|pap| bereit, der in \env{tikzpicture} genutzt werden kann. Damit werden \cs{node} ein entsprechendes Aussehen gegeben. Es stehen zur Verfügung:
\begin{description}
    \item[startstop] Für den Beginn bzw. das Ende eines Ablaufs, als Rechteck mit runden Ecken.
    \item[verzweigung] Für Abfragen und Wiederholungen als Diamant.
    \item[aktion] Einfache Aktionen in einem Rechteck.
    \item[einausgabe] Ein Rhomboid wird für Ein- oder Ausgaben genutzt.
    \item[unterprogramm] Ein Rechteck ergänzt um freie Flächen auf der linken und rechten Seite stellt den Aufruf eines Unterprogramms dar.
\end{description}

Weiterhin können Linien mit dem Style \verbcode|linie| versehen werden, um diese deutlicher darzustellen.

\begin{example}[gobble=4]
    \begin{tikzpicture}[pap]
        \node[startstop] (s1){Los!};
        \node[verzweigung, below = of s1] (v1) {Lieblingsfach Informatik?};
        \node[unterprogramm, right = of v1] (up1) {\nodepart[text width=7em]{two} Pro\-gram\-mie\-re ein Spiel};
        \node[aktion, below = of up1] (a1) {fuehre es aus!};
        \node[einausgabe, below = of v1] (ea1) {ERROR 1337};
        \node[startstop, below = of ea1] (e1){Ende};

        \draw[linie] (s1)--(v1);
        \draw[linie] (v1)--(up1) node[near start, above] {ja};
        \draw[linie] (v1)--(ea1) node[near start, right] {nein};
        \draw[linie] (up1)--(a1);

        \draw[linie] (a1) |- ($(e1.north) + (0,0.5)$);
        \draw[linie] (ea1)--(e1);
    \end{tikzpicture}
\end{example}