Skip to content
This repository was archived by the owner on Apr 21, 2018. It is now read-only.

Commit 8f6033a

Browse files
author
YouniS Bensalah
committed
whoa
1 parent 94c9116 commit 8f6033a

2 files changed

Lines changed: 269 additions & 5 deletions

File tree

img/whoa.jpg

13.2 KB
Loading

slides-08.tex

Lines changed: 269 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)