@@ -109,10 +109,267 @@ \section{Organisatorisches}
109109
110110\section {Exceptions }
111111
112+
113+
114+ \begin {frame }{Exceptions}
115+ \begin {block }{}
116+ \begin {itemize }
117+ \item \textit {Exceptions } dienen der Ankündigung und Behandlung von \textbf {Ausnahmesituationen } (e.g., Fehler, unerwartete Ergebnisse) innerhalb eines Programms.
118+ \item Dabei kann die Information über die Ausnahmesituation an eine andere Programmebene zur Behandlung übergeben werden.
119+ \end {itemize }
120+ \end {block }
121+
122+ \end {frame }
123+
124+ \begin {frame }{Exceptions}
125+ \textit {Was passiert jetzt also bei einem Fehler ? }
126+ \vspace {.2in}
127+ \begin {enumerate }
128+ \item Das Programm meldet den Vorfall in dem es eine \textbf {Exception } \textit {wirft }.
129+ \item Der \quotes {normale} Kontrollfluss wird unterbrochen und es wird nach einem Zuständigen gesucht, der den Fehler behandelt.
130+ \item Wenn dieser existiert, dann wird die Exception \textit {aufgefangen } und der entsprechende Code wird ausgeführt (z. B. der Fehler wird geloggt, das Programm wird terminiert\dots ).
131+ \end {enumerate }
132+ \end {frame }
133+
134+
135+ \subsection {try und catch }
136+
137+
138+ \begin {frame }[fragile]{try-catch}
139+ \begin {itemize }
140+ \item In den \textbf {try }-Block kommt der Code, der potentiell eine Exception wirft.
141+ \item Im \textbf {catch }-Block steht dann der Code, der die Exception behandelt, falls eine auftritt.
142+ \item Nach dem \textbf {try-catch }-Block steht der Code, welcher anschließend \\
143+ \textit {in jedem Fall } ausgeführt wird.
144+ \end {itemize }
145+
146+ \begin {exampleblock }{Syntax}
147+ \ begin{lstlisting} [language=Java,basicstyle=\scriptsize]
148+ try {
149+ ... // code that might throw an exception
150+ } catch (ExceptionType e) {
151+ ... // code that handles the exception
152+ }
153+ ... // code that will be executed after try-catch block
154+ \end {lstlisting }
155+
156+ \end {exampleblock }
157+ \end {frame }
158+
159+ \subsection {Exception werfen mit throw }
160+
161+
162+ \begin {frame }[fragile]{throw}
163+ \textit {Wann wird eine Exception geworfen ? }
164+ \begin {itemize }
165+ \item Java wirft einige Exceptions automatisch, wenn etwas zur Laufzeit schiefläuft\dots
166+ \begin {itemize }
167+ \item \texttt {Integer.parseInt() } wirft eine \texttt {NumberFormatException }, falls das Argument keine gültige Zahl darstellt.
168+ \end {itemize }
169+ \item Man kann auch selbst Exceptions werfen ! (mit \texttt {throw })
170+ \end {itemize }
171+
172+ \begin {exampleblock }{Syntax}
173+ throw new SomeExceptionType();
174+ \end {exampleblock }
175+
176+ \begin {itemize }
177+ \item Es wird also ein \textbf {Objekt } vom Typ \texttt {SomeExceptionType } erstellt und geworfen !
178+ \end {itemize }
179+
180+ \end {frame }
181+
182+
183+ \begin {frame }[fragile]{Exceptions}
184+ Was wird hier ausgegeben ?
185+ \begin {exampleblock }{}
186+ \ begin{lstlisting} [language=Java,basicstyle=\scriptsize]
187+ public static void main(String[] args) {
188+ try {
189+ doSomething();
190+ } catch (ArrayIndexOutOfBoundsException e) {
191+ System.out.println("Oh noes!");
192+ }
193+ System.out.println("Whatever.");
194+ }
195+
196+ public static void doSomething() {
197+ int[] foo = new int[4];
198+ foo[4] = 1337;
199+ System.out.println("I know arrays.");
200+ }
201+ \end {lstlisting }
202+
203+ \end {exampleblock }
204+
205+ \end {frame }
206+
207+ \begin {frame }[fragile]{Exceptions}
208+ \begin {block }{Output}
209+ \ begin{lstlisting}
210+ Oh noes!
211+ Whatever.
212+ \end {lstlisting }
213+
214+ \end {block }
215+
216+ \pause
217+
218+ \begin {itemize }
219+ \item Die Zeile \begin {lstlisting }[language=Java,basicstyle=\scriptsize ]
220+ foo[4] = 1337;
221+ \end {lstlisting }
222+ löst eine \texttt {ArrayIndexOutOfBoundsException } aus.
223+ \item Der Kontrollfluss springt in den \texttt {catch }-Block, der diese Ausnahme abfängt.
224+ \item Anschließend geht es \textbf {\alert {nach dem \texttt {catch }} } weiter !
225+ \item Die Ausgabe \quotes {\texttt {I know arrays. }} wird somit nie erreicht.
226+
227+ \end {itemize }
228+
229+ \end {frame }
230+
231+
232+ \begin {frame }[fragile]{Exceptions}
233+ Was wird hier ausgegeben ?
234+ \begin {exampleblock }{}
235+ \ begin{lstlisting} [language=Java,basicstyle=\scriptsize]
236+ public static void main(String[] args) {
237+ try {
238+ doMagic(42);
239+ System.out.println("Okay, I fixed it!");
240+ } catch (MagicException e) {
241+ System.out.println("Wrong magic.");
242+ }
243+ System.out.println("Whatever.");
244+ }
245+
246+ public static void doMagic(int magic) {
247+ if (magic != 1337) {
248+ throw new MagicException();
249+ }
250+ System.out.println("Do magic...");
251+ }
252+ \end {lstlisting }
253+
254+ \end {exampleblock }
255+
256+ \end {frame }
257+
258+ \begin {frame }[fragile]{Exceptions}
259+ \begin {block }{Output}
260+ \ begin{lstlisting} [language=Java]
261+ Wrong magic.
262+ Whatever.
263+ \end {lstlisting }
264+
265+ \end {block }
266+
267+ \end {frame }
268+
112269\begin {frame }{Exceptions}
270+ \alert {\huge {\textsc {Nach einer aufgefangenen Exception geht es immer nach catch weiter !!!}}}
271+ \end {frame }
272+
273+ \subsection {Checked versus Unchecked }
274+
275+
276+ \begin {frame }{Eigene Exceptions}
277+ \begin {itemize }
278+ \item Man kann die \quotes {built-in} Exceptions von Java verwenden:
279+ \begin {itemize }
280+ \item \texttt {IllegalArgumentException }
281+ \item \texttt {UnsupportedOperationException }
282+ \item \texttt {IndexOutOfBoundsException }
283+ \item \texttt {IllegalStateException }
284+ \item \dots
285+ \end {itemize }
286+ \vspace {.2in}
287+ \item Benötigt man eigene Exceptions, kann man die Klasse \texttt {Exception } bzw. \texttt {RuntimeException } \textbf {erweitern }.
288+ \end {itemize }
113289
114290\end {frame }
115291
292+
293+ \begin {frame }{Checked vs. Unchecked Exceptions}
294+ In Java gibt es \textbf {checked } und \textbf {unchecked } Exceptions.
295+ \vspace {.2in}
296+ \begin {itemize }
297+ \item \textbf {Checked Exceptions }
298+ \begin {itemize }
299+ \item Ausnahmesituation oder Problem, dessen Ursache \textbf {außerhalb } des Zuständigkeitsbereichs des aktuellen Moduls liegt
300+ \item \textit {Ungültige Benutzereingabe, Datenbank-Problem, keine Netzwerkverbindung, nicht vorhandene Datei \dots }
301+ \item Müssen \textbf {immer } abgefangen werden und durch \texttt {throws } kenntlich gemacht werden
302+ \item Unterklassen von \texttt {Exception }
303+ \end {itemize }
304+ \end {itemize }
305+
306+ \end {frame }
307+
308+ \begin {frame }{Checked vs. Unchecked Exceptions}
309+
310+ \begin {itemize }
311+ \item \textbf {Unchecked Exceptions }
312+ \begin {itemize }
313+ \item Ausnahmesituation oder ungültiger Zustand, dessen Ursache meistens ein Bug im Programmcode selbst ist
314+ \item In den meisten Fällen kann das Programm dann ohnehin nicht sinnvoll weiterlaufen
315+ \item \textit {Ungültige Argumente, division by 0, ungültiger Index bei Zugriff auf Array \dots }
316+ \item Können, müssen aber nicht abgefangen werden
317+ \item Unterklassen von \texttt {RuntimeException }
318+ \end {itemize }
319+ \end {itemize }
320+
321+ \end {frame }
322+
323+
324+ \begin {frame }{Checked vs. Unchecked Exceptions}
325+
326+ \begin {itemize }
327+ \item \texttt {RuntimeException } ist auch Unterklasse von \texttt {Exception }.
328+ \end {itemize }
329+
330+
331+ \vspace {.2in}
332+
333+ \begin {figure }
334+ \includegraphics [scale=.5]{img/whoa.jpg}
335+ \end {figure }
336+
337+ \end {frame }
338+
339+ \begin {frame }[fragile]{throws}
340+
341+ \begin {itemize }
342+ \item Methoden, die \textbf {checked Exceptions } werfen können, müssen mit \texttt {throws } kenntlich gemacht werden.
343+ \end {itemize }
344+
345+
346+ \begin {exampleblock }{Syntax}
347+ \ begin{lstlisting} [language=Java,basicstyle=\scriptsize]
348+ public void foo() throws SomeCheckedException {
349+ ...
350+ }
351+ \end {lstlisting }
352+
353+ \end {exampleblock }
354+
355+ \end {frame }
356+
357+ \begin {frame }{Exceptions}
358+ \begin {itemize }
359+ \item Eine \textbf {Exception } ist eine \alert {Ausnahmesituation !}
360+ \item \textbf {Exceptions } sollten nicht den normalen Kontrollfluss steuern
361+ \end {itemize }
362+ \end {frame }
363+
364+ \begin {frame }{Javadoc @throws}
365+ Alle Exceptions sollten mittels \texttt {@throws } im Javadoc-Kommentar kurz erklärt werden:
366+ \begin {itemize }
367+ \item Was bedeutet diese Exception für das Programm
368+ \item Wann wird sie von der Methode \quotes {geworfen}
369+ \end {itemize }
370+ \end {frame }
371+
372+
116373\begin {frame }{Fragen ?}
117374 \begin {figure }
118375 \includegraphics [scale=.5]{img/question_to_idea.jpg}
@@ -133,23 +390,30 @@ \section{Programmieraufgabe}
133390 \textbf {Super List 9K } soll eine verbesserte Version der bereits bekannten \textit {verketteten Liste } werden.
134391
135392 \begin {itemize }
136- \item \textbf {doppelt verkettete Liste }
393+ \item Diesmal \textbf {doppelt } verkettete Liste
394+ \item Natürlich mit \textbf {Generics ! }
395+ \end {itemize }
396+
397+ \end {frame }
398+
399+ \begin {frame }{Super List 9K}
400+ \dots \textit {und so sieht die Schnittstelle aus: }
401+ \vspace {.2in}
402+ \begin {itemize }
137403 \item \texttt {addFirst() } und \texttt {addLast() } fügen ein Element an den Anfang bzw. das Ende der Liste ein.
138404 \item \texttt {remove() } löscht alle Elemente aus der Liste, die mit der \texttt {equals() }-Methode gleich einem gegebenen Element sind.
139405 \item \texttt {contains() } prüft nach, ob ein Element in der Liste vorhanden ist.
140406 \item \texttt {size() } gibt die Länge der Liste (Anzahl Elemente) aus.
141407 \item \texttt {count() } zählt, wie oft ein Element in der Liste vorkommt.
142- \item \textbf {Abstrakter Datentyp }
143- \item \textbf {Generics ! }
144408 \end {itemize }
145-
146409\end {frame }
147410
411+
148412\begin {frame }[fragile]{Super List 9K}
149413 \begin {enumerate }
150414 \item Download and unzip the template\\ \url {http://younishd.fr/prog/superlist9k-template.zip}
151415 \item Think\dots
152- \item Code \dots
416+ \item Write code
153417 \item Compile and test:\\
154418 \ begin{lstlisting} [language=Java,basicstyle=\scriptsize]
155419% javac superlist9k/SuperCell.java \\
0 commit comments