annotate detailed-observer.tex @ 37:debbd3bf76ce default tip

Added tag Ausarbeitung final for changeset f03413250b39d73ca44b22ea1e4022fd3c9e825d
author meillo@marmaro.de
date Sat, 11 Aug 2007 22:43:34 +0200
parents f03413250b39
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
1 % @file
34
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
2 % @brief Ausarbeitung DesignPatterns `Observer'
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
3 % @author markus schnalke <meillo@marmaro.de>
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
4 % @since 2007-05-30
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
5
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
6
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
7 \documentclass[a4paper]{scrartcl}
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
8
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
9 \usepackage[utf8]{inputenc}
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
10 \usepackage{ngerman}
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
11 \usepackage{graphicx}
33
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
12 \usepackage{listings}
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
13 \usepackage[automark]{scrpage2}
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
14
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
15 \setkomafont{sectioning}{\normalfont\normalcolor\bfseries}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
16 \setlength{\parindent}{0em}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
17 \setlength{\parskip}{1.0ex plus 1.0ex minus 0.5ex}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
18 \pagestyle{scrheadings}
31
f567cec0d755 modified Erweiterungen; modified images; tocdepth=3
meillo@marmaro.de
parents: 30
diff changeset
19 \setcounter{tocdepth}{3}
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
20
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
21 \begin{document}
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
22
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
23
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
24
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
25
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
26
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
27 %%%% Titlepage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
28 \begin{titlepage}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
29 \title{Observer-Pattern}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
30 \author{Markus Schnalke}
34
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
31 \date{2007-08-11}
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
32
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
33
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
34 \thispagestyle{empty}
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
35
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
36
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
37 \begin{flushright}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
38
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
39 \rule[8cm]{0cm}{0cm}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
40 {\Huge Design Pattern\\ \textbf{Observer}}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
41
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
42 \rule[2cm]{0cm}{0cm}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
43 \textsc{Markus Schnalke\\MatNr: 039131}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
44
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
45 \end{flushright}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
46
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
47
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
48
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
49 \rule[7cm]{0cm}{0cm}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
50
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
51 \textit{Dies ist meine Ausarbeitung zum Design Pattern ``Observer'' im Rahmen der Vorlesung Softwaretechnik im Studiengang Wirtschaftsinformatik an der Hochschule Ulm.}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
52
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
53 {\tiny Dieses Dokument darf gerne zitiert, kopiert und weitergegeben werden. Ich bitte nur darum meinen Namen und einen Verweis auf meine Website (http://marmaro.de) zu erwähnen --- danke! }
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
54
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
55
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
56 \end{titlepage}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
57
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
58
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
59
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
60
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
61 \tableofcontents
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
62
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
63
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
64
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
65
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
66
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
67
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
68
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
69
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
70
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
71
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
72
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
73
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
74
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
75
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
76 %%%% Einleitung %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
77 \newpage
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
78 \section{Einleitung}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
79
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
80 Ich möchte im Folgenden einen Ansatz zum Verstehen von Design Patterns aufzeigen. Dazu nehme ich das Design Pattern ``Observer'', das ich Stück für Stück aus einer Situation der realen Welt herleiten werde. Es geht mir dabei nicht primär darum euch dieses Pattern zu erklären, vielmehr soll das Erfassen des Zusammenhangs zwischen Realität und Design Patterns gefördert werden.
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
81
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
82 Mein Ziel ist es die \textit{Natürlichkeit} von Design Patterns darzustellen --- weil sie dem Vorgehen in der Realität entsprechen!
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
83
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
84
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
85
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
86
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
87 \section{Meine Vorgehensweise}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
88
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
89 \begin{quote}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
90 Design Pattern sind ``Best Practices'' (= Erfolgsrezepte), meist \textbf{nach Vorbildern in der Realität}.
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
91 \end{quote}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
92
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
93 Aus diesem Grund möchte ich nun anhand eines Beispiels aus dem täglichen Leben zeigen, dass das Design Pattern \textbf{Observer} ein absolut natürliches Vorgehen ist, das bei ähnlichen Situationen in Programmen deshalb ebenso verwendet werden sollte. Dass ich hier gerade das Pattern \textbf{Observer} verwende, hat keinen besonderen Grund; es kann wohl (fast) jedes Pattern auf diese Weise verständlich und logisch gemacht werden.
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
94
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
95
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
96
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
97
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
98
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
99
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
100
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
101
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
102
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
103
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
104
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
105
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
106
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
107
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
108
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
109 \newpage
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
110 \section{Erarbeitung des Patterns}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
111
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
112 \subsection{Ausgangssituation}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
113 Meine Ausgangssituation von der ich mich zu einer möglichst optimalen Lösung vorarbeiten möchte ist Folgende:
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
114
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
115 \begin{itemize}
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
116 \item Es gibt Personen die Etwas verkaufen möchten
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
117 \item Es gibt Personen die Etwas kaufen möchten
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
118 \item Sie wollen/sollen sich nicht kennen
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
119 \end{itemize}
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
120
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
121 Gesucht ist natürlich ein möglichst effektives Vorgehen. Eben das ist der Grund, weshalb wir Patterns verwenden möchten: Wir suchen eine effektive Standardlösung für regelmäßig auftretende Problemstellungen.
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
122
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
123
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
124
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
125
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
126 \subsection{Mögliche Ansätze}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
127
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
128 Um systematisch vorzugehen, überlegen wir uns zunächst, welche primitiven Lösungen für unser Problem in Frage kommen. Dies wären zum Beispiel:
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
129 \begin{itemize}
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
130 \item Personen direkt ansprechen
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
131 \item Laut in die Menge rufen
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
132 \item Den Freunden erzählen, die es dann weitererzählen
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
133 \end{itemize}
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
134
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
135 Vermutlich wäre der Eine oder Andere (unbewusst) gleich höher eingestiegen, dennoch zeigen auch (oder gerade) diese simplen Vorgehensweisen Probleme auf, die sonst kaum explizit wahrgenommen werden.
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
136
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
137 Dies sind unter anderem:
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
138
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
139 \begin{itemize}
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
140 \item Man weiß nicht wer Interesse hat
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
141 \item nicht mal wieviele
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
142 \item Manche Interessenten sind vielleicht nur zu bestimmten Zeiten da
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
143 \item (... oder sie sind taub)
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
144 \end{itemize}
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
145
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
146
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
147
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
148
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
149
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
150 \subsection{Erarbeitung einer Lösung}
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
151
29
f3b4061ec3b4 added new content
meillo@marmaro.de
parents: 28
diff changeset
152 Im Folgenden möchte ich nun eine Lösung Schritt für Schritt erarbeiten und verbessern, bis sie das unsere Situation auf eine gute Weise löst.
f3b4061ec3b4 added new content
meillo@marmaro.de
parents: 28
diff changeset
153
f3b4061ec3b4 added new content
meillo@marmaro.de
parents: 28
diff changeset
154 Meine Lösung, die ich nun präsentieren möchte, ist eine Pinnwand. Pinnwände werden in der Realität normalerweise verwendet um derartige Problem zu lösen --- kein Wunder, wie wir gleich sehen werden. Die Pinnwand bietet von sich aus schon eine gute Lösung für unsere Problemsituation.
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
155
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
156
29
f3b4061ec3b4 added new content
meillo@marmaro.de
parents: 28
diff changeset
157 \subsubsection{Eine (gute) Lösung: Pinnwand}
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
158
29
f3b4061ec3b4 added new content
meillo@marmaro.de
parents: 28
diff changeset
159 Die Funktionen die eine Pinnwand anbietet sind:
f3b4061ec3b4 added new content
meillo@marmaro.de
parents: 28
diff changeset
160
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
161 \begin{itemize}
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
162 \item Man kann Zettel anpinnen
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
163 \item Hingehen und nach neuen Zetteln schauen
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
164 \item Zettel lesen
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
165 \item Zettel abnehmen
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
166 \end{itemize}
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
167
29
f3b4061ec3b4 added new content
meillo@marmaro.de
parents: 28
diff changeset
168 Nun sind zwar einige unserer Probleme (wie z.B. dass sich die Personen nicht kennen müssen) gelöst, doch es gibt auch welche die weiterhin bestehen. Dies sind vor allem:
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
169
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
170 \begin{itemize}
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
171 \item Man muss hingehen, nur um festzustellen, dass nichts Neues dabei ist
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
172 \item Man kann wichtige Zettel verpassen
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
173 \item Zettel sollten nicht weggenommen werden können
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
174 \end{itemize}
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
175
29
f3b4061ec3b4 added new content
meillo@marmaro.de
parents: 28
diff changeset
176 Diese Unzulänglichkeiten der jetzigen Lösung gilt es nun Schritt für Schritt zu eliminieren.
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
177
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
178
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
179 \subsubsection{Verbesserung: Pinnwand-Sekretärin}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
180
29
f3b4061ec3b4 added new content
meillo@marmaro.de
parents: 28
diff changeset
181 Mit diesem Semester wurden bei uns Studiengebühren eingeführt. Die häufigen Diskussionen deswegen waren es wohl, die mich auf die Idee gebracht haben, das Geld doch sinnvoll(er) zu investieren. Und so erweitern wir unsere Pinnwand um eine Sekretärin die die Pinnwand verwaltet \dots natürlich mit Studiengebühren finanziert ;-)
f3b4061ec3b4 added new content
meillo@marmaro.de
parents: 28
diff changeset
182
f3b4061ec3b4 added new content
meillo@marmaro.de
parents: 28
diff changeset
183 Nachfolgend möchten wir die Sekretärin und die Pinnwand als Einheit betrachten. Die neuen Features dieser Pinnwand-Sekretärin-Einheit sind folgende:
f3b4061ec3b4 added new content
meillo@marmaro.de
parents: 28
diff changeset
184
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
185 \begin{itemize}
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
186 \item Man kann bei ihr einen Zettel in Auftrag geben (auch telefonisch)
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
187 \item (Sie schreibt mit lesbarer Schrift)
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
188 \item Sie verhindert, dass Zettel abgenommen werden
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
189 \end{itemize}
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
190
29
f3b4061ec3b4 added new content
meillo@marmaro.de
parents: 28
diff changeset
191 \dots und wir sind der optimalen Lösung unserer Problemsituation wieder einen Schritt näher. Jedoch nur einen Schritt, denn nicht alle Probleme sind gelöst.
f3b4061ec3b4 added new content
meillo@marmaro.de
parents: 28
diff changeset
192 Bestehen bleibt, dass man immer noch oft unnötig zur Pinnwand läuft.
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
193
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
194
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
195
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
196
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
197 \subsubsection{2. Verbesserung: Pinnwand-Sekretärin mit Benachrichtigung}
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
198
29
f3b4061ec3b4 added new content
meillo@marmaro.de
parents: 28
diff changeset
199 Die Studiengebühren sollen uns an dieser Stelle noch nicht ausgedient haben ---immerhin sind es 500 Euro--- und so ist noch genug übrig um userer Sekretärin verlängerte Arbeitszeiten finanzieren zu können. In dieser zusätzlichen Zeit kann sie nun natürlich weitere Aufgaben übernehmen. Dies sind:
f3b4061ec3b4 added new content
meillo@marmaro.de
parents: 28
diff changeset
200
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
201 \begin{itemize}
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
202 \item Man kann sich bei der Sekretärin nun als ``Interessierter'' registrieren
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
203 \item Die Sekretärin trägt die Telefonnummer in eine Liste ein
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
204 \item Zukünftig ruft sie alle Personen der Liste an, wenn sie einen neuen Zettel anpinnt
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
205 \end{itemize}
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
206
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
207
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
208
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
209
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
210 \subsection{Zusammenfassung des Beispiels}
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
211
30
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
212 Wir haben nun eine Lösung die die meisten Probleme unserer Situation löst. Ich möchte hier die Funktionsweise nochmals aufzählen:
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
213
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
214 \begin{itemize}
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
215 \item Man kann neue Zettel anpinnen lassen
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
216 \item Man kann sich als Interessierter anmelden (und auch abmelden)
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
217 \item Interessierte werden bei Änderungen der Pinnwand benachrichtigt
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
218 \item Sie können dann zur Pinnwand gehen und sie sich anschauen
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
219 \end{itemize}
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
220
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
221
30
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
222 Sind jetzt alle Anforderungen abgedeckt? Ist die geschaffene Struktur zufriedenstellend? Welche Wünsche sind noch offen? Was fehlt?
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
223
30
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
224 Es gibt natürlich weitere Anforderungen/Wünsche die über das jetzige Modell hinausgehen. Auf einige der verbreitendsten Erweiterungen des Observer-Modells werde ich weiter unten noch eingehen.
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
225
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
226
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
227
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
228
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
229
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
230
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
231
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
232
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
233
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
234
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
235
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
236
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
237
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
238
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
239
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
240
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
241
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
242
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
243
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
244
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
245
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
246
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
247
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
248 \newpage
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
249 \section{Das Pattern}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
250
30
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
251 Nun haben wir uns eine Lösung für unser Problem erarbeitet und der nächste Schritt ist es ein allgemein gültiges Lösungsmodell zu erstellen. Ein solches Modell wird ``Pattern'' genannt.
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
252
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
253
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
254 \subsection{Überleitung}
30
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
255
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
256 Um unsere Lösung in das Pattern zu überführen bedarf es ein paar anderer Bezeichnungen:
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
257
30
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
258 \begin{itemize}
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
259 \item Pinnwand-Sekretärin-Einheit $\rightarrow$ ``Subject''
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
260 \item Die Zettel auf der Pinnwand $\rightarrow$ ``subjectState''
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
261 \item Interessenten $\rightarrow$ ``Observers''
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
262 \end{itemize}
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
263
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
264
30
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
265 Beim Programmieren sind besonders Interfaces (also Schnittstellen) wichtig. Diese entsprechen den Fähigkeiten die Pinnwand/Sekretärin und Interessenten haben oder anbieten. Dies wären zum Beispiel, dass Interessenten nicht taub sein dürfen, lesen und zur Pinnwand hingehen können müssen. Oder auch die leserliche Schrift der Sekretärin. (Siehe dazu auch die Erarbeitung der Pinnwand-Sekretärin.)
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
266
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
267
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
268
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
269
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
270 \subsection{UML-Diagramme}
30
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
271
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
272 Um das Pattern darzustellen bieten sich UML-Diagramme an.
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
273
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
274
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
275 \begin{figure}[hbt]
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
276 \centering
31
f567cec0d755 modified Erweiterungen; modified images; tocdepth=3
meillo@marmaro.de
parents: 30
diff changeset
277 \includegraphics[width=8cm]{pics/observer_big.png}
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
278 \caption{Struktur-Diagramm des Observers}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
279 \end{figure}
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
280
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
281
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
282
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
283 \begin{figure}[hbt]
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
284 \centering
31
f567cec0d755 modified Erweiterungen; modified images; tocdepth=3
meillo@marmaro.de
parents: 30
diff changeset
285 \includegraphics[width=8cm]{pics/observer-interaction_big.png}
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
286 \caption{Interaktions-Diagramm des Observers}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
287 \end{figure}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
288
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
289
30
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
290 Wer den ersten Teil der Ausarbeitung verstanden hat und UML kann, sollte hier keine Probleme haben die Diagramme zu verstehen --- es ist quasi das Gleiche, nur in einer anderen Darstellungsform.
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
291
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
292
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
293
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
294
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
295 \subsubsection{Klassifizierung nach GoF}
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
296
30
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
297 Die ``Gang of Four'' (sie formulierten die ersten Design-Patterns für die Informatik) habe ein einheitliches Schema zu ihrer Klassifizierung erstellt. Anhand diesem ist der Observer folgendermaßen einzuordnen:
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
298
36
f03413250b39 some typos and cleanups
meillo@marmaro.de
parents: 35
diff changeset
299 \paragraph{Klassifizierung:}
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
300 Verhaltensmuster, objektbasierend
36
f03413250b39 some typos and cleanups
meillo@marmaro.de
parents: 35
diff changeset
301
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
302
36
f03413250b39 some typos and cleanups
meillo@marmaro.de
parents: 35
diff changeset
303 \paragraph{Auch bekannt als:}
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
304 Publish-Subscribe, Dependents
36
f03413250b39 some typos and cleanups
meillo@marmaro.de
parents: 35
diff changeset
305
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
306
36
f03413250b39 some typos and cleanups
meillo@marmaro.de
parents: 35
diff changeset
307 \paragraph{Zweck:}
32
3d6e01222e28 added content
meillo@marmaro.de
parents: 31
diff changeset
308 Abhängigkeiten zwischen Objekten erstellen, sodass sich abhängige Objekte ändern, wenn sich das Objekt selbst ändert.
36
f03413250b39 some typos and cleanups
meillo@marmaro.de
parents: 35
diff changeset
309
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
310
36
f03413250b39 some typos and cleanups
meillo@marmaro.de
parents: 35
diff changeset
311 \paragraph{Kurzbeschreibung:}
32
3d6e01222e28 added content
meillo@marmaro.de
parents: 31
diff changeset
312 Schnittstellen anlegen, damit Abhängigkeiten zwischen Objekten registriert
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
313 werden können, und um die abhängigen Objekte über Zustandsänderungen zu
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
314 informieren.
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
315
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
316
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
317
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
318
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
319
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
320 \subsection{Beispiele für den Observer in der Praxis}
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
321
30
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
322 Wo ist das Observer-Pattern nun im täglichen Leben anzutreffen? Natürlich ist hier das Leben in der digitalen Welt gemeint, schließlich geht es uns ja um ein Design-Pattern für die Programmierung.
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
323
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
324 Zuerst einmal ist anzuführen, dass der Observer ein sehr verbreitetes Design-Pattern ist, das recht häufig bei passenden Problemstellungen eingesetzt wird.
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
325
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
326 Primär wäre das alles was mit Model-View-Controller (kurz: MVC) zusammenhängt. MVC wird vor allem für grafische Oberflächen eingesetzt. Dabei fungiert das Model als Subject und die View als Observer. Der Controller ist eher von untergeordneter Bedeutung. (MVC ist übrigens ein Architektur-Pattern.)
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
327
30
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
328 Aber auch Mailinglisten und Such-Abos (wie bei Ebay) sind optimalerweise nach dem Observer-Pattern implementiert.
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
329
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
330
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
331 \textbf{Kein} Beispiel für das Observer-Pattern ist aber der Weblog mit RSS-Feed! Denn hier findet kein Abonnement-Vorgang statt, der Client (Observer) meldet sich nicht bei der Website (Subject) an, und bekommt auch keine Änderungsinformationen zugeschickt. Stattdessen ruft der Client nur Informationen ab, die die Website ständig zur Verfügung stellt. (vgl. Pinnwand ohne Sekretärin)
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
332
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
333
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
334
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
335
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
336
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
337
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
338
31
f567cec0d755 modified Erweiterungen; modified images; tocdepth=3
meillo@marmaro.de
parents: 30
diff changeset
339
f567cec0d755 modified Erweiterungen; modified images; tocdepth=3
meillo@marmaro.de
parents: 30
diff changeset
340 \subsection{Erweiterungen des Patterns}
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
341
31
f567cec0d755 modified Erweiterungen; modified images; tocdepth=3
meillo@marmaro.de
parents: 30
diff changeset
342 \subsubsection{Ein Observer und mehrere Subjects}
f567cec0d755 modified Erweiterungen; modified images; tocdepth=3
meillo@marmaro.de
parents: 30
diff changeset
343 Oft ist es nicht nur ein einziges Subject, das beobachtet werden soll. Damit ein Observer mehrere Subjects beobachten kann, muss er den Namen des Subjects mitsenden. So kann festgestellt werden welches Subject betroffen ist.
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
344
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
345
31
f567cec0d755 modified Erweiterungen; modified images; tocdepth=3
meillo@marmaro.de
parents: 30
diff changeset
346 \subsubsection{Nur für bestimmte Informationen anmelden}
36
f03413250b39 some typos and cleanups
meillo@marmaro.de
parents: 35
diff changeset
347 Eine weitere kleine Erweiterung ist die Anmeldung am Subject für nur bestimmte Informationen. Dies ist sicher auch eine Ergänzung die unsere Pinnwand verbessert hätte. So wäre es dann möglich gewesen sich nur für Zimmerangebote oder ähnliches anzumelden. Auf diese Weise werden auch die unnötigen Updates verringert, was sich positiv auf die Performance auswirken kann.
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
348
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
349
32
3d6e01222e28 added content
meillo@marmaro.de
parents: 31
diff changeset
350 \subsubsection{ChangeManager}
36
f03413250b39 some typos and cleanups
meillo@marmaro.de
parents: 35
diff changeset
351 Bei komplexen Update-Zusammenhängen ist es empfehlenswert einen ChangeManager zwischen die verschiedenen Subjects und Observers zu stellen. Dieser vermittelt dann unter den Beteiligten und koordiniert die Update-Vorgänge. Der ChangeManager ist eine Instanz vom Mediator-Pattern und üblicherweise Singleton, da normalerweise nur ein ChangeManager für alle Observer-Beziehungen verwendet wird.
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
352
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
353
31
f567cec0d755 modified Erweiterungen; modified images; tocdepth=3
meillo@marmaro.de
parents: 30
diff changeset
354 \subsubsection{Wer ruft notify() auf?}
36
f03413250b39 some typos and cleanups
meillo@marmaro.de
parents: 35
diff changeset
355 Dies kommt stark auf das Programm an. Beide Alternativen haben ihre Vor- und Nachteile.
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
356
36
f03413250b39 some typos and cleanups
meillo@marmaro.de
parents: 35
diff changeset
357 \paragraph{Das Subject:}
34
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
358 Auf diese Weise wird notify() sicher bei jedem setState() aufgerufen, jedoch können die Update-Kosten bei vielen Änderungen in kurzer Zeit sehr hoch werden.
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
359
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
360
36
f03413250b39 some typos and cleanups
meillo@marmaro.de
parents: 35
diff changeset
361 \paragraph{Der Observer:}
34
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
362 Hier darf nun der Observer den Aufruf von notify() nicht vergessen, dieser kann jedoch zu einem günstigen Zeitpunkt erfolgen, was sich bei Änderungen en-block positiv auswirkt.
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
363
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
364
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
365
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
366
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
367
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
368
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
369
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
370
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
371
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
372
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
373 \newpage
33
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
374
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
375 \section{Zusammenfassung}
33
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
376
36
f03413250b39 some typos and cleanups
meillo@marmaro.de
parents: 35
diff changeset
377 Ich habe in meiner Ausarbeitung bisher ganz bewusst auf Quellcode verzichtet, denn ich wollte Design Patterns einmal von der anderen Seite her erklären. Ich wollte vermitteln weshalb das Observer-Pattern so aufgebaut ist wie es ist. Ich wollte Verständnis für Design Patterns entwickeln und zeigen, dass sie absolut logische Lösungen sind.
33
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
378
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
379 \paragraph{In drei Sätzen:}
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
380 \begin{itemize}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
381 \item Menschen denken basierend auf der Realität
36
f03413250b39 some typos and cleanups
meillo@marmaro.de
parents: 35
diff changeset
382 \item deshalb Design Patterns auf die Realität zurückführen
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
383 \item Patterns anwenden weil man es in der Realität auch so machen würde
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
384 \end{itemize}
33
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
385
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
386
34
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
387 Design Patterns sind dabei Modelle wie Quellcode aufgebaut werden sollte. Sie sind kein Code --- sie beschreiben nur wie Code sein sollte. Das ist auch ganz gut so, denn:
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
388
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
389 \begin{quote}
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
390 \textbf{Implementierungen sind Schall und Rauch,\\
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
391 Konzepte dagegen bleiben bestehen! }
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
392 \end{quote}
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
393
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
394 Design Patterns sind Konzepte --- Programmiersprachen kommen und gehen, Design Patterns überleben. Wenn man also in die Zukunft investieren möchte, dann sollte man sich Design Patterns aneignen, denn diese Investition ist risikofrei und zudem hoch rentabel!
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
395
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
396 \vspace{10ex}
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
397
35
05f432307ba2 trivial change
meillo@marmaro.de
parents: 34
diff changeset
398 \textit{Ich wollte euch die Natürlichkeit von Patterns nahebringen und euch dafür begeistern.\\ Ich hoffe das ist mir gelungen :-) }
34
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
399
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
400 \begin{flushright}
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
401 markus schnalke
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
402 \end{flushright}
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
403
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
404
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
405
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
406
33
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
407
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
408
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
409
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
410 \appendix
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
411
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
412 \newpage
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
413
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
414 \section{Beispiel-Implementierung}
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
415
34
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
416 Ich möchte mich mit Quelltext auf dieses Beispiel im Anhang beschränken. Dennoch finde ich es wichtig, zumindest eine Beispiel-Implementierung vorzeigen zu können, da Quellcode sehr aussagekräftig sein kann. In jeden Fall wird er meine sonstigen Ausführungen gut abrunden. Hier also eine Realisierung in Java:
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
417
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
418 \vspace{4ex}
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
419
33
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
420 {\scriptsize
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
421 \lstinputlisting[language=java]{code/observer-example.java}
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
422 }
34
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
423 \begin{flushright}
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
424 {\tiny Quellcode von http://java2s.com}
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
425 \end{flushright}
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
426
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
427
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
428
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
429
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
430
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
431
33
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
432 \section{Verwendete Software}
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
433 \begin{itemize}
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
434 \item Debian GNU/Linux
32
3d6e01222e28 added content
meillo@marmaro.de
parents: 31
diff changeset
435 \item \texttt{pdflatex}
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
436 \item Vim
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
437 \item qiv und ImageMagick
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
438 \item Mercurial
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
439 \end{itemize}
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
440
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
441
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
442
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
443
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
444
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
445
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
446 \end{document}