comparison detailed-observer.tex @ 36:f03413250b39 Ausarbeitung final

some typos and cleanups
author meillo@marmaro.de
date Sat, 11 Aug 2007 22:42:24 +0200
parents 05f432307ba2
children
comparison
equal deleted inserted replaced
35:05f432307ba2 36:f03413250b39
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. 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.
291 291
292 292
293 293
294 294
295 % Daten aus der Beschreibung des Observers von GoF
296 % in welche Gruppen wird er eingeordnet
297 \subsubsection{Klassifizierung nach GoF} 295 \subsubsection{Klassifizierung nach GoF}
298 296
299 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: 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:
300 298
301 \paragraph{Klassifizierung} 299 \paragraph{Klassifizierung:}
302 Verhaltensmuster, objektbasierend 300 Verhaltensmuster, objektbasierend
303 301
304 302
305 \paragraph{Auch bekannt als} 303 \paragraph{Auch bekannt als:}
306 Publish-Subscribe, Dependents 304 Publish-Subscribe, Dependents
307 305
308 306
309 \paragraph{Zweck} 307 \paragraph{Zweck:}
310 Abhängigkeiten zwischen Objekten erstellen, sodass sich abhängige Objekte ändern, wenn sich das Objekt selbst ändert. 308 Abhängigkeiten zwischen Objekten erstellen, sodass sich abhängige Objekte ändern, wenn sich das Objekt selbst ändert.
311 % todo: besser formulieren 309
312 310
313 311 \paragraph{Kurzbeschreibung:}
314 \paragraph{Kurzbeschreibung}
315 Schnittstellen anlegen, damit Abhängigkeiten zwischen Objekten registriert 312 Schnittstellen anlegen, damit Abhängigkeiten zwischen Objekten registriert
316 werden können, und um die abhängigen Objekte über Zustandsänderungen zu 313 werden können, und um die abhängigen Objekte über Zustandsänderungen zu
317 informieren. 314 informieren.
318 % todo: Formulierung überdenken
319 315
320 316
321 317
322 318
323 319
324 \subsection{Beispiele für den Observer in der Praxis} 320 \subsection{Beispiele für den Observer in der Praxis}
325 % Einsatzgebiete (MVC) und RL (Mailingslisten, Ebay-Suchabo)
326 % nicht aber (Blog + RSS)
327 321
328 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. 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.
329 323
330 Zuerst einmal ist anzuführen, dass der Observer ein sehr verbreitetes Design-Pattern ist, das recht häufig bei passenden Problemstellungen eingesetzt wird. 324 Zuerst einmal ist anzuführen, dass der Observer ein sehr verbreitetes Design-Pattern ist, das recht häufig bei passenden Problemstellungen eingesetzt wird.
331 325
341 335
342 336
343 337
344 338
345 339
346 %\subsection{Erweiterungen}
347 %% Erweiterungen, verbleibende Probleme, Kompromisse beim Design
348 \subsection{Erweiterungen des Patterns} 340 \subsection{Erweiterungen des Patterns}
349 341
350 \subsubsection{Ein Observer und mehrere Subjects} 342 \subsubsection{Ein Observer und mehrere Subjects}
351 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. 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.
352 344
353 345
354 \subsubsection{Nur für bestimmte Informationen anmelden} 346 \subsubsection{Nur für bestimmte Informationen anmelden}
355 Eine weitere kleine Erweiterung ist die Anmeldung am Subject für nur bestimmte Informationen. Dies ist sicher auch eine Ergänzung die unsere Pinnwand verbesser hätte. So wäre es dann möglich gewesen sich nur für Zimmerangebote oder ähnliches anzumelden. So werden auch die unnötigen Updates verringert, was positiv auf die Performance wirken kann. 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.
356 348
357 349
358 \subsubsection{ChangeManager} 350 \subsubsection{ChangeManager}
359 Bei komplexen Update-Zusammenhängen ist es empfehlenswert einen ChangeManager zwischen die verschiedenen Subjects und Observers zu stellen. Dieser vermittelt dann zwischen den Beteiligten und koordiniert die Update-Vorgänge. Der ChangeManager ist eine Instanz vom Mediator-Pattern und üblicherweise Singleton, da normalerweise nur einer für alle Observer-Beziehungen verwendet wird. 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.
360 352
361 353
362 \subsubsection{Wer ruft notify() auf?} 354 \subsubsection{Wer ruft notify() auf?}
363 Dies kommt stark auf das Programm an. Beide Alternativen haben ihre Vor- und Nachteile: 355 Dies kommt stark auf das Programm an. Beide Alternativen haben ihre Vor- und Nachteile.
364 356
365 \paragraph{Das Subject} 357 \paragraph{Das Subject:}
366 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. 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.
367 %\begin{itemize} 359
368 % \item[+] notify() wird sicher bei jedem setState() aufgerufen 360
369 % \item[-] hohe Update-Kosten bei Änderungen en-block 361 \paragraph{Der Observer:}
370 %\end{itemize}
371
372
373 \paragraph{Der Observer}
374 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. 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.
375 %\begin{itemize}
376 % \item[+] intelligenter Zeitpunkt des notify()-Aufrufs möglich
377 % \item[-] der Client darf den notify()-Aufruf nicht vergessen
378 %\end{itemize}
379
380
381
382 363
383 364
384 365
385 366
386 367
391 372
392 \newpage 373 \newpage
393 374
394 \section{Zusammenfassung} 375 \section{Zusammenfassung}
395 376
396 Ich habe in meiner Ausarbeitung bisher ganz bewusst auf Quellcode verzichtet, denn ich wollte Design Pattern 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. 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.
397 378
398 \paragraph{In drei Sätzen:} 379 \paragraph{In drei Sätzen:}
399 \begin{itemize} 380 \begin{itemize}
400 \item Menschen denken basierend auf der Realität 381 \item Menschen denken basierend auf der Realität
401 \item deshalb Design Patterns auf Realität zurückführen 382 \item deshalb Design Patterns auf die Realität zurückführen
402 \item Patterns anwenden weil man es in der Realität auch so machen würde 383 \item Patterns anwenden weil man es in der Realität auch so machen würde
403 \end{itemize} 384 \end{itemize}
404 385
405 386
406 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: 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: