annotate detailed-observer.tex @ 34:b2cefbd90180

some redesign; new content for summary and appendix
author meillo@marmaro.de
date Sat, 11 Aug 2007 12:49:00 +0200
parents 97b57d24fd7b
children 05f432307ba2
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
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
295 % Daten aus der Beschreibung des Observers von GoF
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
296 % in welche Gruppen wird er eingeordnet
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
297 \subsubsection{Klassifizierung nach GoF}
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
298
30
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
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:
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
300
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
301 \paragraph{Klassifizierung}
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
302 Verhaltensmuster, objektbasierend
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
303
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
304
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
305 \paragraph{Auch bekannt als}
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
306 Publish-Subscribe, Dependents
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
307
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
308
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
309 \paragraph{Zweck}
32
3d6e01222e28 added content
meillo@marmaro.de
parents: 31
diff changeset
310 Abhängigkeiten zwischen Objekten erstellen, sodass sich abhängige Objekte ändern, wenn sich das Objekt selbst ändert.
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
311 % todo: besser formulieren
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
312
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
313
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
314 \paragraph{Kurzbeschreibung}
32
3d6e01222e28 added content
meillo@marmaro.de
parents: 31
diff changeset
315 Schnittstellen anlegen, damit Abhängigkeiten zwischen Objekten registriert
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
316 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
317 informieren.
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
318 % todo: Formulierung überdenken
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
319
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
320
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
321
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
322
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
323
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
324 \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
325 % Einsatzgebiete (MVC) und RL (Mailingslisten, Ebay-Suchabo)
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
326 % nicht aber (Blog + RSS)
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 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
329
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
330 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
331
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
332 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
333
30
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
334 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
335
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
336
8bdd4e54885e added content
meillo@marmaro.de
parents: 29
diff changeset
337 \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
338
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
339
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
340
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
341
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
342
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
343
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
344
31
f567cec0d755 modified Erweiterungen; modified images; tocdepth=3
meillo@marmaro.de
parents: 30
diff changeset
345
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
346 %\subsection{Erweiterungen}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
347 %% Erweiterungen, verbleibende Probleme, Kompromisse beim Design
31
f567cec0d755 modified Erweiterungen; modified images; tocdepth=3
meillo@marmaro.de
parents: 30
diff changeset
348 \subsection{Erweiterungen des Patterns}
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
349
31
f567cec0d755 modified Erweiterungen; modified images; tocdepth=3
meillo@marmaro.de
parents: 30
diff changeset
350 \subsubsection{Ein Observer und mehrere Subjects}
f567cec0d755 modified Erweiterungen; modified images; tocdepth=3
meillo@marmaro.de
parents: 30
diff changeset
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.
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{Nur für bestimmte Informationen anmelden}
32
3d6e01222e28 added content
meillo@marmaro.de
parents: 31
diff changeset
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.
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
356
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
357
32
3d6e01222e28 added content
meillo@marmaro.de
parents: 31
diff changeset
358 \subsubsection{ChangeManager}
3d6e01222e28 added content
meillo@marmaro.de
parents: 31
diff changeset
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.
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
360
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
361
31
f567cec0d755 modified Erweiterungen; modified images; tocdepth=3
meillo@marmaro.de
parents: 30
diff changeset
362 \subsubsection{Wer ruft notify() auf?}
32
3d6e01222e28 added content
meillo@marmaro.de
parents: 31
diff changeset
363 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
364
34
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
365 \paragraph{Das Subject}
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
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.
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
367 %\begin{itemize}
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
368 % \item[+] notify() wird sicher bei jedem setState() aufgerufen
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
369 % \item[-] hohe Update-Kosten bei Änderungen en-block
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
370 %\end{itemize}
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
371
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
372
34
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
373 \paragraph{Der Observer}
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
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.
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
375 %\begin{itemize}
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
376 % \item[+] intelligenter Zeitpunkt des notify()-Aufrufs möglich
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
377 % \item[-] der Client darf den notify()-Aufruf nicht vergessen
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
378 %\end{itemize}
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
379
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
380
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
381
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
382
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
383
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
384
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
385
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
386
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
387
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
388
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
389
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
390
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
391
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
392 \newpage
33
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
393
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
394 \section{Zusammenfassung}
33
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
395
34
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
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.
33
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
397
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
398 \paragraph{In drei Sätzen:}
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
399 \begin{itemize}
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
400 \item Menschen denken basierend auf der Realität
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
401 \item deshalb Design Patterns auf Realität zurückführen
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
402 \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
403 \end{itemize}
33
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
404
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
405
34
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
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:
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
407
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
408 \begin{quote}
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
409 \textbf{Implementierungen sind Schall und Rauch,\\
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
410 Konzepte dagegen bleiben bestehen! }
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
411 \end{quote}
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
412
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
413 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
414
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
415 \vspace{10ex}
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
416
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
417 \textit{Ich wollte euch von dieser Erkenntnis überzeugen. Ich wollte euch für Patterns begeistern. Ich hoffe das ist mir gelungen :-) }
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
418
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
419 \begin{flushright}
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
420 markus schnalke
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
421 \end{flushright}
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
422
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
423
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
424
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
425
33
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
426
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
427
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
428
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
429 \appendix
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
430
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
431 \newpage
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
432
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
433 \section{Beispiel-Implementierung}
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
434
34
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
435 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
436
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
437 \vspace{4ex}
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
438
33
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
439 {\scriptsize
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
440 \lstinputlisting[language=java]{code/observer-example.java}
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
441 }
34
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
442 \begin{flushright}
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
443 {\tiny Quellcode von http://java2s.com}
b2cefbd90180 some redesign; new content for summary and appendix
meillo@marmaro.de
parents: 33
diff changeset
444 \end{flushright}
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
445
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
446
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
447
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
448
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
449
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
450
33
97b57d24fd7b added sample code; modified summary
meillo@marmaro.de
parents: 32
diff changeset
451 \section{Verwendete Software}
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
452 \begin{itemize}
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
453 \item Debian GNU/Linux
32
3d6e01222e28 added content
meillo@marmaro.de
parents: 31
diff changeset
454 \item \texttt{pdflatex}
11
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
455 \item Vim
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
456 \item qiv und ImageMagick
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
457 \item Mercurial
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
458 \end{itemize}
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
459
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
460
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
461
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
462
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
463
a7ab86cddfad added other parts but with few content yet
meillo@marmaro.de
parents:
diff changeset
464
28
ddd8378a539e did lot of working on detailed-observer
meillo@marmaro.de
parents: 11
diff changeset
465 \end{document}