comparison detailed-observer.tex @ 32:3d6e01222e28

added content
author meillo@marmaro.de
date Mon, 06 Aug 2007 02:25:32 +0200
parents f567cec0d755
children 97b57d24fd7b
comparison
equal deleted inserted replaced
31:f567cec0d755 32:3d6e01222e28
304 \paragraph{Auch bekannt als} 304 \paragraph{Auch bekannt als}
305 Publish-Subscribe, Dependents 305 Publish-Subscribe, Dependents
306 306
307 307
308 \paragraph{Zweck} 308 \paragraph{Zweck}
309 Abhängigkeiten zwischen Objekten zu erstellen, sodass sich abhängige Objekte ändern, wenn sich das Objekt selbst ändert. 309 Abhängigkeiten zwischen Objekten erstellen, sodass sich abhängige Objekte ändern, wenn sich das Objekt selbst ändert.
310 % todo: besser formulieren 310 % todo: besser formulieren
311 311
312 312
313 \paragraph{Kurzbeschreibung} 313 \paragraph{Kurzbeschreibung}
314 Schnittstellen anlegen, um Abhängigkeiten zwischen Objekten registriert 314 Schnittstellen anlegen, damit Abhängigkeiten zwischen Objekten registriert
315 werden können, und um die abhängigen Objekte über Zustandsänderungen zu 315 werden können, und um die abhängigen Objekte über Zustandsänderungen zu
316 informieren. 316 informieren.
317 % todo: Formulierung überdenken 317 % todo: Formulierung überdenken
318 318
319 319
349 \subsubsection{Ein Observer und mehrere Subjects} 349 \subsubsection{Ein Observer und mehrere Subjects}
350 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. 350 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.
351 351
352 352
353 \subsubsection{Nur für bestimmte Informationen anmelden} 353 \subsubsection{Nur für bestimmte Informationen anmelden}
354 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. 354 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.
355 \item Oberservers melden sich nur für bestimmte Informationen an 355
356 \item Es werden weniger uninteressante Updates gesendet 356
357 357 \subsubsection{ChangeManager}
358 358 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.
359 \subsubsection{UpdateManager} 359
360 \begin{itemize}
361 \item Bei komplexen Update-Zusammenhängen empfehlenswert
362 \item vermittelt zwischen Subject und Observer
363 \item (Mehr dazu in der Ausarbeitung)
364 \end{itemize}
365
366
367
368 360
369 \subsubsection{Wer ruft notify() auf?} 361 \subsubsection{Wer ruft notify() auf?}
362 Dies kommt stark auf das Programm an. Beide Alternativen haben ihre Vor- und Nachteile:
370 363
371 \paragraph{Das Subject} 364 \paragraph{Das Subject}
372 \begin{itemize} 365 \begin{itemize}
373 \item[+] notify() wird sicher bei jedem setState() aufgerufen 366 \item[+] notify() wird sicher bei jedem setState() aufgerufen
374 \item[-] hohe Update-Kosten bei Änderungen en-block 367 \item[-] hohe Update-Kosten bei Änderungen en-block
379 \begin{itemize} 372 \begin{itemize}
380 \item[+] intelligenter Zeitpunkt des notify()-Aufrufs möglich 373 \item[+] intelligenter Zeitpunkt des notify()-Aufrufs möglich
381 \item[-] der Client darf den notify()-Aufruf nicht vergessen 374 \item[-] der Client darf den notify()-Aufruf nicht vergessen
382 \end{itemize} 375 \end{itemize}
383 376
384
385
386
387
388
389
390
391
392
393
394
395 377
396 378
397 379
398 380
399 381
416 398
417 399
418 400
419 401
420 402
421 Erklaerung des Vorgehens 403
422 Frage: war es erfolgreich?
423 \textbf{}
424
425 \paragraph{}
426
427 404
428 405
429 406
430 \section{Abschließend} 407 \section{Abschließend}
431 \paragraph{Verwendete Software} 408 \paragraph{Verwendete Software}
432 \begin{itemize} 409 \begin{itemize}
433 \item Debian GNU/Linux 410 \item Debian GNU/Linux
434 \item \LaTeX-Beamer und \texttt{pdflatex} 411 \item \texttt{pdflatex}
435 \item Vim 412 \item Vim
436 \item qiv und ImageMagick 413 \item qiv und ImageMagick
437 \item Mercurial 414 \item Mercurial
438 \end{itemize} 415 \end{itemize}
439 416
440
441 \paragraph{}
442 \vspace{3ex}
443 \centerline{\textbf{Danke für eure Aufmerksamkeit}}
444
445 417
446 418
447 419
448 420
449 421
450 422
451 423
452 \appendix 424 \appendix
453 425
454 \section{Code} 426 \section{Code}
455 \textbf{Code? --- Nein, kein Code!} 427 \textbf{ Implementierungen sind Schall und Rauch,\\ Konzepte dagegen bleiben bestehen! }
456 \paragraph{Denn}
457 \begin{center}
458 \textbf{ Implementierungen sind Schall und Rauch,\\
459 Konzepte dagegen bleiben bestehen! }
460 \end{center}
461
462
463 \vspace{4ex}
464 {\scriptsize
465 \paragraph{}
466 \textit{ Beispiel-Implementierung in der Ausarbeitung. }
467
468 }
469 428
470 429
471 430
472 431
473 432