comparison detailed-observer.tex @ 30:8bdd4e54885e

added content
author meillo@marmaro.de
date Sat, 04 Aug 2007 16:42:40 +0200
parents f3b4061ec3b4
children f567cec0d755
comparison
equal deleted inserted replaced
29:f3b4061ec3b4 30:8bdd4e54885e
206 206
207 207
208 208
209 \subsection{Zusammenfassung des Beispiels} 209 \subsection{Zusammenfassung des Beispiels}
210 210
211 \paragraph{Pinnwand + Sekretärin + Benachrichtigung} 211 Wir haben nun eine Lösung die die meisten Probleme unserer Situation löst. Ich möchte hier die Funktionsweise nochmals aufzählen:
212 \begin{itemize} 212
213 \item Man kann neue Zettel anpinnen lassen 213 \begin{itemize}
214 \item Man kann sich als Interessierter anmelden (und auch abmelden) 214 \item Man kann neue Zettel anpinnen lassen
215 \item Interessierte werden bei Änderungen der Pinnwand benachrichtigt 215 \item Man kann sich als Interessierter anmelden (und auch abmelden)
216 \item Sie können dann zur Pinnwand gehen und sie sich anschauen 216 \item Interessierte werden bei Änderungen der Pinnwand benachrichtigt
217 \end{itemize} 217 \item Sie können dann zur Pinnwand gehen und sie sich anschauen
218 218 \end{itemize}
219 219
220 220
221 221 Sind jetzt alle Anforderungen abgedeckt? Ist die geschaffene Struktur zufriedenstellend? Welche Wünsche sind noch offen? Was fehlt?
222 \paragraph{Eure Meinung?} 222
223 \begin{itemize} 223 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.
224 \item Ist diese Struktur zufriedenstellend? 224
225 \item Erfüllt sie alle Anforderungen?
226 \item Was fehlt?
227 \end{itemize}
228
229 225
230 226
231 227
232 228
233 229
249 245
250 246
251 \newpage 247 \newpage
252 \section{Das Pattern} 248 \section{Das Pattern}
253 249
250 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.
251
254 252
255 \subsection{Überleitung} 253 \subsection{Überleitung}
256 254
257 \paragraph{Neue Namen} 255 Um unsere Lösung in das Pattern zu überführen bedarf es ein paar anderer Bezeichnungen:
258 \begin{itemize} 256
259 \item Pinnwand-Sekretärin-Einheit $\rightarrow$ ``Subject'' 257 \begin{itemize}
260 \item Die Zettel auf der Pinnwand $\rightarrow$ ``subjectState'' 258 \item Pinnwand-Sekretärin-Einheit $\rightarrow$ ``Subject''
261 \item Interessenten $\rightarrow$ ``Observers'' 259 \item Die Zettel auf der Pinnwand $\rightarrow$ ``subjectState''
262 \end{itemize} 260 \item Interessenten $\rightarrow$ ``Observers''
263 261 \end{itemize}
264 \paragraph{Schnittstellen} 262
265 Die Fähigkeiten der Pinnwand/Sekretärin und Interessenten sind ihre ``Interfaces''. 263
266 264 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.)
267 (vgl: taub, minimale Fähigkeiten, leserliche Schrift, ...)
268 265
269 266
270 267
271 268
272 \subsection{UML-Diagramme} 269 \subsection{UML-Diagramme}
273 \subsubsection{Struktur-Diagramm des Observers} 270
271 Um das Pattern darzustellen bieten sich UML-Diagramme an.
272
273 \subsubsection{Struktur-Diagramm des Observers}
274 274
275 \begin{figure}[hbt] 275 \begin{figure}[hbt]
276 \centering 276 \centering
277 \includegraphics[width=12cm]{pics/observer_big.png} 277 \includegraphics[width=12cm]{pics/observer_big.png}
278 \caption{Struktur-Diagramm des Observers} 278 \caption{Struktur-Diagramm des Observers}
279 \end{figure} 279 \end{figure}
280 280
281 281
282 282
283 \subsubsection{Interaktions-Diagramm des Observers} 283 \subsubsection{Interaktions-Diagramm des Observers}
284 \begin{figure}[hbt] 284 \begin{figure}[hbt]
285 \centering 285 \centering
286 \includegraphics[width=12cm]{pics/observer-interaction_big.png} 286 \includegraphics[width=12cm]{pics/observer-interaction_big.png}
287 \caption{Interaktions-Diagramm des Observers} 287 \caption{Interaktions-Diagramm des Observers}
288 \end{figure} 288 \end{figure}
289 289
290 290
291 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.
292
293
291 294
292 295
293 % Daten aus der Beschreibung des Observers von GoF 296 % Daten aus der Beschreibung des Observers von GoF
294 % in welche Gruppen wird er eingeordnet 297 % in welche Gruppen wird er eingeordnet
295 \subsubsection{Klassifizierung nach GoF} 298 \subsubsection{Klassifizierung nach GoF}
299
300 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:
296 301
297 \paragraph{Klassifizierung} 302 \paragraph{Klassifizierung}
298 Verhaltensmuster, objektbasierend 303 Verhaltensmuster, objektbasierend
299 304
300 305
319 324
320 \subsection{Beispiele für den Observer in der Praxis} 325 \subsection{Beispiele für den Observer in der Praxis}
321 % Einsatzgebiete (MVC) und RL (Mailingslisten, Ebay-Suchabo) 326 % Einsatzgebiete (MVC) und RL (Mailingslisten, Ebay-Suchabo)
322 % nicht aber (Blog + RSS) 327 % nicht aber (Blog + RSS)
323 328
324 \paragraph{Beispiele} 329 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.
325 \begin{itemize} 330
326 \item Observer ist sehr verbreitet 331 Zuerst einmal ist anzuführen, dass der Observer ein sehr verbreitetes Design-Pattern ist, das recht häufig bei passenden Problemstellungen eingesetzt wird.
327 \item v.a. MVC (Model = Subject; View = Observer) 332
328 \item Mailinglisten 333 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.)
329 \item Ebay Such-Abo 334
330 \end{itemize} 335 Aber auch Mailinglisten und Such-Abos (wie bei Ebay) sind optimalerweise nach dem Observer-Pattern implementiert.
331 336
332 337
333 \paragraph{Aber} 338 \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)
334 \begin{itemize} 339
335 \item nicht Blog mit RSS-Feed!
336 \end{itemize}
337
338 340
339 341
340 342
341 343
342 344