Mercurial > docs > DesignPatterns
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 |