<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CODEDOMCODEDOM - THE SOURCE OF CODE DOMINATION</title>
	<atom:link href="http://www.codedom.de/feed" rel="self" type="application/rss+xml" />
	<link>http://www.codedom.de</link>
	<description>THE SOURCE OF CODE DOMINATION</description>
	<lastBuildDate>Thu, 16 Feb 2012 16:31:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Ein Lebenszeichen</title>
		<link>http://www.codedom.de/ein-lebenszeichen</link>
		<comments>http://www.codedom.de/ein-lebenszeichen#comments</comments>
		<pubDate>Thu, 16 Feb 2012 16:17:24 +0000</pubDate>
		<dc:creator>Dustin Klein</dc:creator>
				<category><![CDATA[Aktuelles]]></category>

		<guid isPermaLink="false">http://www.codedom.de/?p=1177</guid>
		<description><![CDATA[Es hat mal wieder gedauert, doch nun will ich den Blog mal mit Leben füllen. Ein neuer Kern braucht auch eine neue Hülle, also habe ich auch direkt ein neues Theme aufgesetzt. Ich hoffe man liest sich hier bald wieder!]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Es hat mal wieder gedauert, doch nun will ich den Blog mal mit Leben füllen. Ein neuer Kern braucht auch eine neue Hülle, also habe ich auch direkt ein neues Theme aufgesetzt. Ich hoffe man liest sich hier bald wieder!</p>

<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.codedom.de/ein-lebenszeichen/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Design Patterns: Facade</title>
		<link>http://www.codedom.de/design-patterns-facade</link>
		<comments>http://www.codedom.de/design-patterns-facade#comments</comments>
		<pubDate>Tue, 05 Jul 2011 09:30:33 +0000</pubDate>
		<dc:creator>Dustin Klein</dc:creator>
				<category><![CDATA[Aktuelles]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Design Patterns]]></category>

		<guid isPermaLink="false">http://www.codedom.de/?p=1133</guid>
		<description><![CDATA[Nach Singleton, Memento und Prototype folgt auch schon der nächste Part der Design Patterns: Die Fassade. Sie ist das erste Entwurfsmuster aus dem Bereich der Structural Patterns (Strukturmuster) und dient als einheitliche und vereinfachte Schnittstellen zu einer beliebigen Menge von Schnittstellen eines Untersystems (Subsystems).]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Nach <a title="Design Patterns: Singleton" href="http://www.codedom.de/design-patterns-singleton">Singleton</a>, <a title="Design Patterns: Memento" href="http://www.codedom.de/design-patterns-memento">Memento</a> und <a title="Design Patterns: Prototype" href="http://www.codedom.de/design-patterns-prototype">Prototype</a> folgt auch schon der nächste Part der Design Patterns: Die <strong>Fassade</strong>. Sie ist das erste Entwurfsmuster aus dem Bereich der <strong>Structural Patterns</strong> (Strukturmuster) und dient als einheitliche und vereinfachte Schnittstellen zu einer beliebigen Menge von <strong>Schnittstellen</strong> eines <strong>Untersystems</strong> (Subsystems).</p>
<p>Die Fassade sollte also immer dann genutzt werden, wenn ein Untersystem viele Klassen enthält, die aber einzeln selten bzw. garnicht verwendet werden. Statt nun für eine gewisse Funktionalität sehr viele kleine Klassen ansprechen zu müssen, verwendet man eine Fassade, die diese Klassen vereint und Funktionalitäten weiter deligiert. Somit kann eine Fassade die Komplexität einer Implementierung erheblich senken, da das benutzte Untersystem nicht direkt sichtbar ist.</p>
<p><img class="aligncenter size-full wp-image-1139" title="Design Patterns: Facade" src="http://www.codedom.de/wp-content/uploads/2011/07/ScreenShot-235-DoFactory.GangOfFour-Microsoft-Visual-Studio-Administrator.png" alt="Design Patterns: Facade" width="588" height="273" /></p>
<p>Um die Fassade korrekt zu implementieren benötigen wir als allererstes Subklassen. Diese Klassen enthalten jeweils Teil-Strukturen unserer Fassade, hier am Beispiel eines Kunden. Ein Kunde hat bei einer Bank ein Konto, ein Darlehen und eventuell eine Kreditkarte. Nun möchte er eine Hypothek abschließen. Dazu müssen wir prüfen, ob der Kunde kreditwürdig für eine solche Hypothek ist. Zuerst erstellen wir also unseren Kunden. Dazu dient folgende, sehr vereinfachte Klasse:</p>
<p><span id="more-1133"></span></p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #6666cc; font-weight: bold;">class</span> Kunde
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">string</span> Name <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Diese dient nur der Veranschaulichung, denn die wichtigen Subklassen erstellen wir jetzt. Dazu gehören die Klassen Konto, Darlehen und Kreditkarte, welche später in der Fassade vereint werden:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #6666cc; font-weight: bold;">class</span> Konto
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">bool</span> HatGenugGuthaben<span style="color: #008000;">&#40;</span>Kunde k, <span style="color: #6666cc; font-weight: bold;">int</span> betrag<span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Format</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Prüfe Guthaben für Kunde {0} {1}&quot;</span>, k<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #6666cc; font-weight: bold;">class</span> Darlehen
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">bool</span> HatDarlehen<span style="color: #008000;">&#40;</span>Kunde k<span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Format</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Prüfe Darlehen für Kunde {0} {1}&quot;</span>, k<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #6666cc; font-weight: bold;">class</span> Kreditkarte
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">bool</span> HatNichtUeberzogen<span style="color: #008000;">&#40;</span>Kunde k<span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Format</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Prüfe Dispo für Kunden {0} {1}&quot;</span>, k<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Nun stellen wir uns die Klasse Hypothek zusammen, welche aus den 3 Subklassen Konto, Darlehen und Kreditkarte besteht, auf die wir aber später von außen nicht mehr zugreifen möchten / brauchen.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #6666cc; font-weight: bold;">class</span> Hypothek
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> Konto _konto <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Konto<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> Darlehen _darlehen <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Darlehen<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> Kreditkarte _kreditkarte <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Kreditkarte<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">bool</span> IstGeeignet<span style="color: #008000;">&#40;</span>Kunde k, <span style="color: #6666cc; font-weight: bold;">int</span> betrag<span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;{0} möchte ein Darlehen über {1:C} haben&quot;</span>, k<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span>, betrag<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #6666cc; font-weight: bold;">bool</span> geeignet <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// Prüfe kreditwürdigkeit des Kunden</span>
        <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">!</span>_konto<span style="color: #008000;">.</span><span style="color: #0000FF;">HatGenugGuthaben</span><span style="color: #008000;">&#40;</span>k, betrag<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            geeignet <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
        <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>_darlehen<span style="color: #008000;">.</span><span style="color: #0000FF;">HatDarlehen</span><span style="color: #008000;">&#40;</span>k<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            geeignet <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
        <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">!</span>_kreditkarte<span style="color: #008000;">.</span><span style="color: #0000FF;">HatNichtUeberzogen</span><span style="color: #008000;">&#40;</span>k<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            geeignet <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">return</span> geeignet<span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Diese Fassade kann nun dazu benutzt werden, um die kreditwürdigkeit des Kunden zu prüfen, ohne dabei selbst auf die Subklassen zugreifen zu müssen. Das bietet den immensen Vorteil, dass die Prüfung nun in den jeweiligen Subklassen erweitert werden kann, ohne dass die Fassade oder die explizite Prüfung des Kunden an mehreren Stellen geändert werden muss. So können wir nun prüfen:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> Main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    var k <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Kunde <span style="color: #008000;">&#123;</span> Name <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Max Mustermann&quot;</span> <span style="color: #008000;">&#125;</span><span style="color: #008000;">;</span>
    var h <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Hypothek<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #6666cc; font-weight: bold;">bool</span> geeignet <span style="color: #008000;">=</span> h<span style="color: #008000;">.</span><span style="color: #0000FF;">IstGeeignet</span><span style="color: #008000;">&#40;</span>k, <span style="color: #FF0000;">250000</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span>k<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span> <span style="color: #008000;">+</span> <span style="color: #666666;">&quot; wurde &quot;</span> <span style="color: #008000;">+</span> <span style="color: #008000;">&#40;</span>geeignet <span style="color: #008000;">?</span> <span style="color: #666666;">&quot;angenommen&quot;</span> <span style="color: #008000;">:</span> <span style="color: #666666;">&quot;abgelehnt&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Und wie immer dürft ihr den Code verwenden und ändern wie ihr lustig seid!</p>

<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.codedom.de/design-patterns-facade/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Design Patterns: Prototype</title>
		<link>http://www.codedom.de/design-patterns-prototype</link>
		<comments>http://www.codedom.de/design-patterns-prototype#comments</comments>
		<pubDate>Wed, 29 Jun 2011 11:00:41 +0000</pubDate>
		<dc:creator>Dustin Klein</dc:creator>
				<category><![CDATA[Aktuelles]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Design Patterns]]></category>

		<guid isPermaLink="false">http://www.codedom.de/?p=1093</guid>
		<description><![CDATA[Der Prototype ist ein Entwurfsmuster aus der Kategorie der Erzeugungsmuster (Creational Patterns), ähnlich wie der bereits beschriebene Singleton. Dabei erzeugt der Prototyp neue Instanzen eines Objektes bzw. einer Klasse auf Basis einer bereits definierten Vorlage, die für neue Instanzen schlichtweg geklont werden, statt alle Felder und Eigenschaften neu zu setzen.]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Der <strong>Prototype</strong> ist ein <strong>Entwurfsmuster</strong> aus der Kategorie der <strong>Erzeugungsmuster</strong> (Creational Patterns), ähnlich wie der bereits beschriebene <a title="Design Patterns: Singleton" href="http://www.codedom.de/design-patterns-singleton">Singleton</a>. Dabei erzeugt der Prototype neue Instanzen eines Objektes bzw. einer Klasse auf Basis einer bereits definierten <strong>Vorlage</strong>, die für neue Instanzen schlichtweg geklont werden, statt alle Felder und Eigenschaften neu zu setzen.</p>
<p>In den meisten Fällen kommt immer dann ein Prototype zum Einsatz, wenn das Erzeugen neuer Instanzen von Klassen sehr kostspielig ist, die Instanzen sich aber grundsätzlich sehr ähnlich sind. Es gibt hier noch eine Reihe von anderen Gründen die ich gerne zitieren möchte:</p>
<blockquote><p><em>&#8220;Ein Prototyp findet Anwendung, wenn die Erzeugung weiterer Instanzen einer Klasse teuer ist und sich die Objekte ähneln, die zu instanziierenden Klassen erst zur Laufzeit bekannt sind, eine Hierarchie von Fabriken parallel zu einer Hierarchie von Produkten vermieden werden soll oder wenn die Objekte einer Klasse nur wenige Zustandskombinationen annehmen können; oder wenn die Bearbeitung von Vorlagen sehr ähnlich oder gleich der von Objekten ist.&#8221;</em> &#8211; Quelle: <a title="Wikipedia - Entwurfsmuster Prototype" href="http://de.wikipedia.org/wiki/Prototyp_%28Entwurfsmuster%29" target="_blank">wikipedia.de</a></p></blockquote>
<p><img class="aligncenter size-full wp-image-1100" title="Design Patterns: Prototype" src="http://www.codedom.de/wp-content/uploads/2011/06/ScreenShot-231-DoFactory.GangOfFour-Microsoft-Visual-Studio-Administrator.png" alt="Design Patterns: Prototype" width="532" height="317" /></p>
<p>Um den Prototype in Aktion sehen zu können, benötigen wir zuerst ein passendes Beispiel, welches wir uns überlegen müssen. Im Internet bin ich häufig über einen Farbenmanager gestolpert, der entweder nicht korrekt implementiert oder schlecht kommentiert wurde, daher möchte in an einem solchen Beispiel einmal die Funktionsweise des Prototypes erklären.</p>
<p><span id="more-1093"></span></p>
<p>Als Erstes brauchen wir hier eine Klasse, welche von ICloneable abgeleitet ist, damit wir die Clone() Methoden nutzen können. Die Klasse enthält die Grundbausteine einer jeden Farbe, die RGB Werte, sowie die oben bereits genannte Methode.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #6666cc; font-weight: bold;">class</span> Farbe <span style="color: #008000;">:</span> ICloneable
<span style="color: #008000;">&#123;</span>
    <span style="color: #008080; font-style: italic;">// Roten Anteil der Farbe holen oder setzen</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">byte</span> R <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// Grünen Anteil der Farbe holen oder setzen</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">byte</span> G <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// Blauen Anteil der Farbe holen oder setzen</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">byte</span> B <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// Die Clone() Methode</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">object</span> Clone<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">.</span><span style="color: #0000FF;">MemberwiseClone</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Das ist nun zunächst unsere Basis-Klasse, welche die grundlegenden Farbeigenschaften enthält, die wir für jede neue Farbe brauchen. Als Nächstes definieren wir uns eine ENUM, welche bestimmte Farben bereits enthält. Hier einmal die Basis-Farben rot, grün, blau sowie eigene, selbst zu definierene Farben.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #6666cc; font-weight: bold;">enum</span> FarbTyp
<span style="color: #008000;">&#123;</span>
    Rot,
    Gruen,
    Blau,
    Eigene1,
    Eigene2,
    Eigene3
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Um das Ganze nun einfacher und sauberer handhaben zu können, basteln wir uns noch eine FarbManager Klasse, welche mit Hilfe eines Dictionary unsere Farbtypen und unsere Farben beinhaltet.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #6666cc; font-weight: bold;">class</span> FarbManager
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> Dictionary<span style="color: #008000;">&amp;</span>lt<span style="color: #008000;">;</span>FarbTyp, Farbe<span style="color: #008000;">&amp;</span>gt<span style="color: #008000;">;</span> _farben <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Dictionary<span style="color: #008000;">&amp;</span>lt<span style="color: #008000;">;</span>FarbTyp, Farbe<span style="color: #008000;">&amp;</span>gt<span style="color: #008000;">;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// Holt oder setzt die Farbe</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> Farbe <span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">&#91;</span>FarbTyp typ<span style="color: #008000;">&#93;</span>
    <span style="color: #008000;">&#123;</span>
        get <span style="color: #008000;">&#123;</span> <span style="color: #0600FF; font-weight: bold;">return</span> _farben<span style="color: #008000;">&#91;</span>typ<span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
        set <span style="color: #008000;">&#123;</span> _farben<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span>typ, value<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>(Achtung, an dieser Stelle werden &lt; als &amp;lt; und &gt; als &amp;gt; dargestellt!)</p>
<p>Und schon steht unser Grundgerüst für den Prototype! Jetzt können wir in der Main() Methode unseren FarbManager initialisieren und unsere Farbe hinzufügen. Zum Schluss sehen wir, wie wir mit der Clone() Methode einzelne Farben kopieren können.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> Main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    var farbmanager <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> FarbManager<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// Standardfarben</span>
    farbmanager<span style="color: #008000;">&#91;</span>FarbTyp<span style="color: #008000;">.</span><span style="color: #0000FF;">Rot</span><span style="color: #008000;">&#93;</span> <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Farbe <span style="color: #008000;">&#123;</span> R <span style="color: #008000;">=</span> <span style="color: #FF0000;">255</span>, G <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span>, B <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">&#125;</span><span style="color: #008000;">;</span>
    farbmanager<span style="color: #008000;">&#91;</span>FarbTyp<span style="color: #008000;">.</span><span style="color: #0000FF;">Gruen</span><span style="color: #008000;">&#93;</span> <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Farbe <span style="color: #008000;">&#123;</span> R <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span>, G <span style="color: #008000;">=</span> <span style="color: #FF0000;">255</span>, B <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">&#125;</span><span style="color: #008000;">;</span>
    farbmanager<span style="color: #008000;">&#91;</span>FarbTyp<span style="color: #008000;">.</span><span style="color: #0000FF;">Blau</span><span style="color: #008000;">&#93;</span> <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Farbe <span style="color: #008000;">&#123;</span> R <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span>, G <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span>, B <span style="color: #008000;">=</span> <span style="color: #FF0000;">255</span> <span style="color: #008000;">&#125;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// Eigene Farben</span>
    farbmanager<span style="color: #008000;">&#91;</span>FarbTyp<span style="color: #008000;">.</span><span style="color: #0000FF;">Eigene1</span><span style="color: #008000;">&#93;</span> <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Farbe <span style="color: #008000;">&#123;</span> R <span style="color: #008000;">=</span> <span style="color: #FF0000;">54</span>, G <span style="color: #008000;">=</span> <span style="color: #FF0000;">90</span>, B <span style="color: #008000;">=</span> <span style="color: #FF0000;">20</span> <span style="color: #008000;">&#125;</span><span style="color: #008000;">;</span>
    farbmanager<span style="color: #008000;">&#91;</span>FarbTyp<span style="color: #008000;">.</span><span style="color: #0000FF;">Eigene2</span><span style="color: #008000;">&#93;</span> <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Farbe <span style="color: #008000;">&#123;</span> R <span style="color: #008000;">=</span> <span style="color: #FF0000;">128</span>, G <span style="color: #008000;">=</span> <span style="color: #FF0000;">128</span>, B <span style="color: #008000;">=</span> <span style="color: #FF0000;">128</span> <span style="color: #008000;">&#125;</span><span style="color: #008000;">;</span>
    farbmanager<span style="color: #008000;">&#91;</span>FarbTyp<span style="color: #008000;">.</span><span style="color: #0000FF;">Eigene3</span><span style="color: #008000;">&#93;</span> <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Farbe <span style="color: #008000;">&#123;</span> R <span style="color: #008000;">=</span> <span style="color: #FF0000;">80</span>, G <span style="color: #008000;">=</span> <span style="color: #FF0000;">120</span>, B <span style="color: #008000;">=</span> <span style="color: #FF0000;">230</span> <span style="color: #008000;">&#125;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// Farben aus dem FarbManager benutzen</span>
    var farbe1 <span style="color: #008000;">=</span> farbmanager<span style="color: #008000;">&#91;</span>FarbTyp<span style="color: #008000;">.</span><span style="color: #0000FF;">Rot</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Clone</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #0600FF; font-weight: bold;">as</span> Farbe<span style="color: #008000;">;</span>
    var farbe2 <span style="color: #008000;">=</span> farbmanager<span style="color: #008000;">&#91;</span>FarbTyp<span style="color: #008000;">.</span><span style="color: #0000FF;">Eigene2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Clone</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #0600FF; font-weight: bold;">as</span> Farbe<span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Hier haben wir nun in den Objekten farbe1 und farbe2 die Eigenschaften R, G und B. In diesen sind die vorher durch den FarbManager festgelegten Bytes gespeichert, die unsere eigentlichen Farben darstellen. Möchte ich nun im späteren Verlauf meiner Anwendung eine Farbe benutzen, so muss ich diese nicht immer komplett neu implementieren, sondern kann über die Clone() Methode des FarbManagers mir meine Objekte jederzeit definieren. Zusätzlich hat diese Vorgehensweise den Vorteil, dass ich Farben und deren Eigenschaften, zentral an einer Stelle definieren kann ohne jederzeit im gesamten Quellcode nach neuen Farben suchen zu müssen.</p>
<p>Wie immer an dieser Stelle wünsche ich viel Spaß beim Testen und Tüfteln!</p>
<pre>Quellen: Inspiration des Prototypes, <a title=".NET Design Patterns and Architectures in C# and VB" href="http://www.dofactory.com/" target="_blank">dofactory</a></pre>

<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.codedom.de/design-patterns-prototype/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>LulzSec: Wurde mein Account gehackt?</title>
		<link>http://www.codedom.de/lulzsec-wurde-mein-account-gehackt</link>
		<comments>http://www.codedom.de/lulzsec-wurde-mein-account-gehackt#comments</comments>
		<pubDate>Tue, 28 Jun 2011 09:30:07 +0000</pubDate>
		<dc:creator>Dustin Klein</dc:creator>
				<category><![CDATA[Aktuelles]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://www.codedom.de/?p=1088</guid>
		<description><![CDATA[Da die Hackergruppe LulzSec in den letzten 50 Tagen sehr aktiv war und sich somit in den Besitz von hunderttausenden Accounts bringen konnte stellt sich dem Ein oder Anderen die Frage: "Ist mein Account denn nun auch betroffen?".]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Da die Hackergruppe <strong>LulzSec</strong> in den letzten 50 Tagen sehr aktiv war und sich somit in den Besitz von hunderttausenden <strong>Accounts</strong> bringen konnte stellt sich dem Ein oder Anderen die Frage: &#8220;Ist mein Account denn nun auch betroffen?&#8221;. Auch wenn man <strong>Passwörter</strong> immer in einem festdefinierten Zeitfenster ändern sollte, so möchte der vorsichtige <strong>User</strong> ja nicht gleich alle seine Accounts umstellen. Genau für diese Benutzer gibt es nun gleich zwei <strong>Tools</strong> mit denen sich feststellen lässt, ob sich ihr Account unter den Opfern der LulzSec Bewegung befindet.</p>
<p><span id="more-1088"></span></p>
<p><img class="aligncenter" title="LulzSec" src="http://static.gulli.com/media/2011/06/thumbs/370/lulzsec.jpg" alt="LulzSec" width="369" height="388" /></p>
<p>Nachdem die LulzSec Mitglieder nun zu Anonymous abgewandert sind, besteht wohl erstmal keine größere Gefahr mehr für den normalen Nutzer. Anonymous hat sich nämlich im Gegensatz zur LulzSec Gruppe eher dem Hacken von Regierungsmaterial verschrieben ist somit Vorreiter der #AntiSec Bewegung. Dennoch kann man rückwirkend sagen, dass die Jungs von LulzSec doch sehr motiviert bei der Sache waren. Hier ein kleiner Überblick über die neusten Hacks:</p>
<ul>
<li>50 Days of Lulz.txt 2.64 KiB</li>
<li>AOL internal data.txt 63.6 KiB</li>
<li>AT&amp;T internal data.rar 314.59 MiB</li>
<li>Battlefield Heroes Beta (550k users).csv 24.67 MiB</li>
<li>FBI being silly.txt 3.82 KiB</li>
<li>Hackforums.net (200k users).sql 111.2 MiB</li>
<li>Nato-bookshop.org (12k users).csv 941.8 KiB</li>
<li>Office networks of corporations.txt 3.87 KiB</li>
<li>Private Investigator Emails.txt 2.52 KiB</li>
<li>Random gaming forums (50k users).txt 6.08 MiB</li>
<li>Silly routers.txt 67.7 KiB</li>
<li>navy.mil owned.png 240.51 KiB</li>
</ul>
<p>Um nun sicherzugehen, dass man selbst nicht in diesen Dokumenten auftaucht, bietet die Seite &#8220;<a title="Should I Change My Password?" href="https://shouldichangemypassword.com/" target="_blank">Should I Change My Password</a>&#8221; einen Check an, der die meisten Dokumente nach E-Mail Adressen oder Nicknames überprüft und euch Bescheid gibt, sofern diese Daten in den Dokumenten bzw. Datenbanken gefunden wurde.</p>
<p>Im gleichen Atemzug hat Gizmodo ebenfalls eine <a title="Gizmodo: Online Check" href="http://gizmodo.com/5815551/find-out-if-your-personal-data-is-part-of-lulzsecs-grand-finale" target="_blank">Prüfung online gestellt</a>. Hier werden nochmals andere Dokumente nach E-Mails und Co. durchforstet. Sollten eure E-Mail Adressen bei einem dieser Checks gefunden werden, ist dringend zur Änderung eurer Passwörter zu raten! Ich jedenfalls schien diesmal verschont geblieben zu sein&#8230;</p>
<pre>Quellen: Liste der Dokumente, <a title="Gizmodo" href="http://gizmodo.com/5815551/find-out-if-your-personal-data-is-part-of-lulzsecs-grand-finale" target="_blank">Gizmodo</a></pre>

<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.codedom.de/lulzsec-wurde-mein-account-gehackt/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Design Patterns: Memento</title>
		<link>http://www.codedom.de/design-patterns-memento</link>
		<comments>http://www.codedom.de/design-patterns-memento#comments</comments>
		<pubDate>Tue, 28 Jun 2011 06:45:50 +0000</pubDate>
		<dc:creator>Dustin Klein</dc:creator>
				<category><![CDATA[Aktuelles]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Design Patterns]]></category>

		<guid isPermaLink="false">http://www.codedom.de/?p=1073</guid>
		<description><![CDATA[Nachdem ich hier bereits den Singleton beschrieben habe, folgt nun ein weiterer Design Pattern (Entwurfsmuster), diesmal allerdings aus dem Bereich der Behavioral Patterns (Verhaltensmustern). Der sogenannte Memento, oder auch als Token bezeichnet, soll den internen Zustand eines Objektes erfassen und diesen nach außen verlagern können, ohne dabei die Kapselung dieses Objektes zu beschädigen.]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Nachdem ich hier bereits den <a title="Design Patterns: Singleton" href="http://www.codedom.de/design-patterns-singleton">Singleton</a> beschrieben habe, folgt nun ein weiterer <strong>Design Pattern</strong> (Entwurfsmuster), diesmal allerdings aus dem Bereich der <strong>Behavioral Patterns</strong> (Verhaltensmustern). Der sogenannte <strong>Memento</strong>, oder auch als <strong>Token</strong> bezeichnet, soll den internen Zustand eines Objektes erfassen und diesen nach außen verlagern können, ohne dabei die Kapselung dieses Objektes zu beschädigen.</p>
<p>Der Memento sollte immer dann zum Einsatz kommen, wenn ein aktueller Zustand eines Objektes zwischengespeichert werden soll oder aber eine direkte Schnittstelle zur Ermittlung dieses Zustandes Details zur Implementierung aufzeigen würde. Letzteres kann ebenfalls mit dem Memento Pattern verhindert werden.</p>
<p><img class="aligncenter size-full wp-image-1074" title="Design Patterns: Memento" src="http://www.codedom.de/wp-content/uploads/2011/06/ScreenShot-227-DoFactory.GangOfFour-Microsoft-Visual-Studio-Administrator.png" alt="Design Patterns: Memento" width="337" height="430" /></p>
<p>Prinzipiell ist der Memento nur eine Vereinigung von Serialize und Deserialize Methoden in C# mit der Möglichkeit das Objekt so zwischen zu speichern. Wir benötigen hierzu also zunächst einmal eine Klasse die wir serialisieren können.</p>
<p><span id="more-1073"></span></p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008000;">&#91;</span>Serializable<span style="color: #008000;">&#93;</span>
<span style="color: #6666cc; font-weight: bold;">class</span> KundenKonto
<span style="color: #008000;">&#123;</span>
  <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">string</span> _vorname<span style="color: #008000;">;</span>
  <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">string</span> _nachname<span style="color: #008000;">;</span>
  <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">string</span> _kontonummer<span style="color: #008000;">;</span>
  <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">double</span> _guthaben<span style="color: #008000;">;</span>
&nbsp;
  <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">string</span> Vorname <span style="color: #008000;">&#123;</span> get <span style="color: #008000;">&#123;</span> <span style="color: #0600FF; font-weight: bold;">return</span> _vorname<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span> set <span style="color: #008000;">&#123;</span> _vorname <span style="color: #008000;">=</span> value<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span> <span style="color: #008000;">&#125;</span>
  <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">string</span> Nachname <span style="color: #008000;">&#123;</span> get <span style="color: #008000;">&#123;</span> <span style="color: #0600FF; font-weight: bold;">return</span> _nachname<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span> set <span style="color: #008000;">&#123;</span> _nachname <span style="color: #008000;">=</span> value<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span> <span style="color: #008000;">&#125;</span>
  <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">string</span> Kontonummer <span style="color: #008000;">&#123;</span> get <span style="color: #008000;">&#123;</span> <span style="color: #0600FF; font-weight: bold;">return</span> _kontonummer<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span> set <span style="color: #008000;">&#123;</span> _kontonummer <span style="color: #008000;">=</span> value<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span> <span style="color: #008000;">&#125;</span>
  <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">double</span> Guthaben <span style="color: #008000;">&#123;</span> get <span style="color: #008000;">&#123;</span> <span style="color: #0600FF; font-weight: bold;">return</span> _guthaben<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span> set <span style="color: #008000;">&#123;</span> _guthaben <span style="color: #008000;">=</span> value<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span> <span style="color: #008000;">&#125;</span>
&nbsp;
  <span style="color: #008080; font-style: italic;">// Dient zum Setzen (Serialisieren) des Memento</span>
  <span style="color: #0600FF; font-weight: bold;">public</span> Memento SaveMemento<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
    var memento <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Memento<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">return</span> memento<span style="color: #008000;">.</span><span style="color: #0000FF;">Serialize</span><span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
  <span style="color: #008000;">&#125;</span>
&nbsp;
  <span style="color: #008080; font-style: italic;">// Dient zum Zurücksetzen (Deserialisieren) des Memento</span>
  <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">void</span> RestoreMemento<span style="color: #008000;">&#40;</span>Memento memento<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
    KundenKonto konto <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span>KundenKonto<span style="color: #008000;">&#41;</span>memento<span style="color: #008000;">.</span><span style="color: #0000FF;">Deserialize</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Vorname</span> <span style="color: #008000;">=</span> konto<span style="color: #008000;">.</span><span style="color: #0000FF;">Vorname</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Nachname</span> <span style="color: #008000;">=</span> konto<span style="color: #008000;">.</span><span style="color: #0000FF;">Nachname</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Kontonummer</span> <span style="color: #008000;">=</span> konto<span style="color: #008000;">.</span><span style="color: #0000FF;">Kontonummer</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Guthaben</span> <span style="color: #008000;">=</span> konto<span style="color: #008000;">.</span><span style="color: #0000FF;">Guthaben</span><span style="color: #008000;">;</span>
  <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Wie man nun sieht, haben wir eine Klasse, die Informationen zum Konto sowie zwei Methoden zum Speichern und Zurücksetzen des Objektes enthält. Diese zwei Methoden erfordern allerdings ein Objekt vom Typ Memento, welches wir in folgender Klasse definieren.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #6666cc; font-weight: bold;">class</span> Memento
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> MemoryStream _stream <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> MemoryStream<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> SoapFormatter _formatter <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> SoapFormatter<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// Serialisieren</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> Memento Serialize<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> mem<span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        _formatter<span style="color: #008000;">.</span><span style="color: #0000FF;">Serialize</span><span style="color: #008000;">&#40;</span>_stream, mem<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// Deserialisieren</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">object</span> Deserialize<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        _stream<span style="color: #008000;">.</span><span style="color: #0000FF;">Seek</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">0</span>, SeekOrigin<span style="color: #008000;">.</span><span style="color: #0000FF;">Begin</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #6666cc; font-weight: bold;">object</span> mem <span style="color: #008000;">=</span> _formatter<span style="color: #008000;">.</span><span style="color: #0000FF;">Deserialize</span><span style="color: #008000;">&#40;</span>_stream<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        _stream<span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">return</span> mem<span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Diese Klasse erlaubt es uns nun, sämtliche serialisierbaren Objekte in ihrem aktuellen Zustand zu speichern. Erforderlich ist lediglich die korrekte Implementierung der SaveMemento() und RestoreMemento() Methoden in den jeweiligen Klassen und diese mit [Serializable] zu kennzeichnen. Zusätzlich brauchen wir noch eine sogenannte Caretaker Klasse, in die wir den Memento zwischenspeichern können. Aufgebaut ist sie wie folgt:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #6666cc; font-weight: bold;">class</span> KundenKontoMemory
<span style="color: #008000;">&#123;</span>
  <span style="color: #0600FF; font-weight: bold;">public</span> Memento Memento <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Im Ergebnis können wir nun in unserer Main() Methode das Objekt initialisieren und mit den Methoden SaveMemento() im KundenKontoMemory speichern bzw. mit RestoreMemento() aus dem KundenKontoMemory zurückholen.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> Main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
  <span style="color: #008080; font-style: italic;">// Initialisierung</span>
  var meinKonto <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> KundenKonto
  <span style="color: #008000;">&#123;</span>
    Vorname <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Max&quot;</span>,
    Nachname <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Mustermann&quot;</span>,
    Kontonummer <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;123456789&quot;</span>,
    Guthaben <span style="color: #008000;">=</span> <span style="color: #FF0000;">25000.0</span>
  <span style="color: #008000;">&#125;</span><span style="color: #008000;">;</span>
&nbsp;
  <span style="color: #008080; font-style: italic;">// Memento erstellen und sichern</span>
  var backupKonto <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> KundenKontoMemory<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
  backupKonto<span style="color: #008000;">.</span><span style="color: #0000FF;">Memento</span> <span style="color: #008000;">=</span> meinKonto<span style="color: #008000;">.</span><span style="color: #0000FF;">SaveMemento</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
  <span style="color: #008080; font-style: italic;">// Daten manipulieren</span>
  meinKonto<span style="color: #008000;">.</span><span style="color: #0000FF;">Vorname</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Testi&quot;</span><span style="color: #008000;">;</span>
  meinKonto<span style="color: #008000;">.</span><span style="color: #0000FF;">Nachname</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Testmann&quot;</span><span style="color: #008000;">;</span>
  meinKonto<span style="color: #008000;">.</span><span style="color: #0000FF;">Kontonummer</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;987654321&quot;</span><span style="color: #008000;">;</span>
  meinKonto<span style="color: #008000;">.</span><span style="color: #0000FF;">Guthaben</span> <span style="color: #008000;">=</span> <span style="color: #FF0000;">1000</span><span style="color: #008000;">;</span>
&nbsp;
  <span style="color: #008080; font-style: italic;">// Memento rücksichern</span>
  meinKonto<span style="color: #008000;">.</span><span style="color: #0000FF;">RestoreMemento</span><span style="color: #008000;">&#40;</span>backupKonto<span style="color: #008000;">.</span><span style="color: #0000FF;">Memento</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>So haben wir unser Objekt nun veräußern, also zwischenspeichern können, ohne die Kapselung des Objektes an sich zu beschädigen. Objekte können so auch ohne Weiteres zwischen Applikationen ausgetauscht werden, da die serialisierten Objekte zusätzlich noch komprimiert werden können.</p>
<p>Der oben beschriebene Code steht jedem zur freien Verwendung zur Verfügung, ich wünsche viel Spaß!</p>

<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.codedom.de/design-patterns-memento/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Design Patterns: Singleton</title>
		<link>http://www.codedom.de/design-patterns-singleton</link>
		<comments>http://www.codedom.de/design-patterns-singleton#comments</comments>
		<pubDate>Fri, 17 Jun 2011 12:42:59 +0000</pubDate>
		<dc:creator>Dustin Klein</dc:creator>
				<category><![CDATA[Aktuelles]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Design Patterns]]></category>

		<guid isPermaLink="false">http://www.codedom.de/?p=1058</guid>
		<description><![CDATA[Oftmals ist es nicht schwer, ein kleines Stück Software oder ein gutes Tool zu entwickeln. Doch was tun, wenn man ein wesentlich größeres und aufwendigeres Projekt realisieren möchte. Ich stand auch schon häufig vor diesem "Problem", da ich häufig keinen passenden Anfang finde. Wenn das Grundkonzept steht möchte man viel zu oft schnell ans Programmieren. Generell auch eine feine Sache, die von Enthuisasmus zeugt. Aber Vorsicht! Klassen einfach drauf los zu programmieren ist eine Todsünde!]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Oftmals ist es nicht schwer, ein kleines Stück <strong>Software</strong> oder ein gutes <strong>Tool</strong> zu entwickeln. Doch was tun, wenn man ein wesentlich größeres und aufwendigeres Projekt realisieren möchte. Ich stand auch schon häufig vor diesem &#8220;Problem&#8221;, da ich häufig keinen passenden Anfang finde. Wenn das Grundkonzept steht möchte man viel zu oft schnell ans Programmieren. Generell auch eine feine Sache, die von Enthuisasmus zeugt. Aber Vorsicht! Klassen einfach drauf los zu programmieren ist eine Todsünde!</p>
<p><a href="http://significantbit.net/wp-content/uploads/2011/02/singleton_db_factory1.png"><img class="aligncenter" title="DAL mit Singleton" src="http://significantbit.net/wp-content/uploads/2011/02/singleton_db_factory1.png" alt="DAL mit Singleton" width="500" height="346" /></a></p>
<p>Es ist zwangsläufig notwendig, sich vorher mit seinen Klassen auseinander zu setzen, um nicht später alles über den Haufen werfen zu müssen, wenn man merkt, dass man etwas wichtiges vergessen hat. In diesem Prozess sind sogenannte <strong>Design Patterns</strong> von absoluter Notwendigkeit! Diese <strong>Entwicklungs Muster</strong> dienen dazu, grundsätzliche Strukturen und Verfahren in Euer Programm zu bringen. Ich möchte mich im ersten Teil dieser Serie mit dem <strong>Singleton</strong>, also der Einmal-Instanzierung einer Klasse, beschäftigen.<br />
<span id="more-1058"></span><br />
Fängt man ein neues Projekt an, so hat man meistens einen Basis-Layer, der die Verbindungungen mit Datenbanken reglementiert (Database Access Layer [DAL]) oder Konfigurationen aus einer XML oder anderen Formaten ausliest. Gerade beim DAL ist es von bedeutender Relevanz, dass pro Anwendung nur eine einzige DAL-Initiierung erfolgen darf! Man möchte schließlich nicht 3 oder 4 Mal die gleiche Datenbank mit unterschiedlichen Objekten, mit vielleicht sogar unterschiedlichen Parametern ansprechen.</p>
<p>Der Design Pattern &#8220;Singleton&#8221; reglementiert die Instanzierung von Klassen. Dabei ist die theoretische Vorgehensweise sehr einfach. Wichtig ist zuersteinmal, dass wir den Konstruktor von außen nicht mehr zugänglich machen. Dieser ist nun <em>private</em> und kann nur vom Singleton aufgerufen werden. Soweit, so gut. Nun müssen wir uns überlegen, wie wir prüfen können, ob es bereits eine Instanz unserer Klasse gibt. Das machen wir indem wir in der Klasse eine Variable vom Typ der zu überwachenden Klasse anlegen und auf <em>NULL</em> setzen.</p>
<p>Der Singleton</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">static</span> volatile Klassenname _instance <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">object</span> m_lock <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #6666cc; font-weight: bold;">object</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> Klassenname GetInstance<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
  <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>_instance <span style="color: #008000;">==</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">lock</span><span style="color: #008000;">&#40;</span>m_lock<span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
      <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>_instance <span style="color: #008000;">==</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>
        _instance <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Klassenname<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
  <span style="color: #008000;">&#125;</span>
&nbsp;
  <span style="color: #0600FF; font-weight: bold;">return</span> _instance<span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Diese Methodik bezeichnet auch schon den Singleton. Wir prüfen, ob  eine Instanz der Klasse angelegt wurde. Ist dies nicht der Fall, sperren  wir den folgenden Code für weitere Threads, die eventuell auf diese  Klasse zugreifen könnten und prüfen erneut, ob eine Instanz vorliegt  (DoubleLock). Ist dies nun immernoch nicht der Fall, so erzeugen wir  eine neue Instanz, rufen also den Konstruktor auf.</p>
<p>Nun wurde die Variable _instance auf die gerade erzeugte Instanz  festgelegt und kann bei jedem weiteren Aufruf von GetInstance() an das  Objekt vom Typen Klassenname zurückgegeben werden. Doch wofür das alles?  Ganz einfach: Wir brauchen keine Objekte mehr zwischen mehreren Klassen  hin und her zu übergeben. Diese Klassen können nun mit GetInstance()  einfach der vollständig initialisierte Klasse holen und mit all ihren  Werten und Parametern arbeiten.</p>
<p>GetInstance() im Einsatz</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">// Aufruf der Klassen-Instanz</span>
Klassenname myClass <span style="color: #008000;">=</span> Klassenname<span style="color: #008000;">.</span><span style="color: #0000FF;">GetInstance</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #008080; font-style: italic;">// Aufruf mit Hilfe eines Interfaces</span>
IKlassenname myClass <span style="color: #008000;">=</span> Klassenname<span style="color: #008000;">.</span><span style="color: #0000FF;">GetInstance</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>Diese Vorgehensweise lässt sich auch ideal erweitern, falls Ihr nur  eine gewisse Anzahl an Instanzen zulassen wollte. Sowas kann gebraucht  werden, wenn man Zugriff auf mehr als eine Datenbank haben möchte. In  diesem Fall kann man dem Singleton noch Parameter übergeben, welche er  dazu nutzen kann, ebenfalls den Konstruktor parameterisiert aufzurufen.  Probiert es aus, Euch sind so gut wie keine Grenzen gesetzt!</p>

<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.codedom.de/design-patterns-singleton/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Reanimation des Blogs</title>
		<link>http://www.codedom.de/reanimation-des-blogs</link>
		<comments>http://www.codedom.de/reanimation-des-blogs#comments</comments>
		<pubDate>Thu, 16 Jun 2011 12:41:55 +0000</pubDate>
		<dc:creator>Dustin Klein</dc:creator>
				<category><![CDATA[Aktuelles]]></category>
		<category><![CDATA[Dies & Das]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.codedom.de/?p=1046</guid>
		<description><![CDATA[So, nach langer langer Pause habe ich mir nun ein Herz gefasst und werde diesen Blog wiederbeleben. Mit dem Inhalt geht es wie gewohnt weiter, das heißt Rezensionen von Hard- und Software, Tipps &#038; Tricks im Bereich der Software-Entwicklung und alles rund um das Thema Sicherheit im Netz.]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>So, nach langer langer Pause habe ich mir nun ein Herz gefasst und werde diesen Blog wiederbeleben. Mit dem Inhalt geht es wie gewohnt weiter, das heißt Rezensionen von Hard- und Software, Tipps &amp; Tricks im Bereich der Software-Entwicklung und alles rund um das Thema Sicherheit im Netz.</p>
<p>Da mittlerweile doch schon einiges an Zeit in diesen Blog geflossen ist, wäre es sehr schade, wenn er einfach in der Flut des Netzes unterginge. Ich hoffe diesmal eine gewisse Kontinuität der Beitrage zu gewährleisten, damit es dem geneigten Leser auch nicht langweilig wird. An dieser Stelle bleibt mir dann wohl nur noch viel Spaß beim Lesen zu wünschen!</p>

<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.codedom.de/reanimation-des-blogs/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Pingchat! &#8211; SMS ohne Kosten</title>
		<link>http://www.codedom.de/pingchat-sms-ohne-kosten</link>
		<comments>http://www.codedom.de/pingchat-sms-ohne-kosten#comments</comments>
		<pubDate>Tue, 01 Jun 2010 22:03:32 +0000</pubDate>
		<dc:creator>Dustin Klein</dc:creator>
				<category><![CDATA[Aktuelles]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.codedom.de/pingchat-sms-ohne-kosten</guid>
		<description><![CDATA[Es ist nicht wirklich eine Revolution und auch nichts grundlegend Neues. Dennoch benutze ich seit heute ein nettes kleines App namens Pingchat!. Dieses kann, wie bereits einige andere Apps auch, kostenlos &#8220;SMS&#8221; Nachrichten zwischen Usern versenden. Dazu muss der andere User natürlich auch das kostenlose App besitzen. Im Prinzip ist es genial einfach: Man lädt [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Es ist nicht wirklich eine Revolution und auch nichts grundlegend Neues. Dennoch benutze ich seit heute ein nettes kleines App namens Pingchat!. Dieses kann, wie bereits einige andere Apps auch, kostenlos &#8220;SMS&#8221; Nachrichten zwischen Usern versenden. Dazu muss der andere User natürlich auch das kostenlose App besitzen.</p>
<p> <span id="more-1018"></span>
<p>Im Prinzip ist es genial einfach: Man lädt sich das App aus dem Store auf sein iPhone herunter. Nach der Installation wird man beim ersten Start dazu aufgefordert sich einen Account anzulegen. Wenn das getan ist, kann es auch schon losgehen, man muss lediglich seine Freunde adden.</p>
<p><img src="http://www.codedom.de/wp-content/uploads/2010/06/pingchat1.jpg" style="TEXT-ALIGN: center; WIDTH: 320px; DISPLAY: block; HEIGHT: 480px; MARGIN-LEFT: auto; MARGIN-RIGHT: auto" height="480" width="320" alt="pingchat1.jpg" class="(Bild aus dem iTunes App Store)"/></p>
<p>Die vier primären Tab-Reiter am unteren Rand der App erlauben einem die Homepage des Herstellers zu besuchen, um die neusten Informationen über das App zu beziehen, seine Kontakt-Liste zu durchsuchen, Einstellungen zu ändern oder andere auf Pingchat! aufmerksam zu machen.</p>
<p>Weiterhin kann man die Kontakte von Pingchat! mit seinem normalen Adressbuch verknüpfen und diese an andere Nutzer versenden.</p>
<p><img src="http://www.codedom.de/wp-content/uploads/2010/06/pingchat2.jpg" style="TEXT-ALIGN: center; DISPLAY: block; MARGIN-LEFT: auto; MARGIN-RIGHT: auto" height="480" alt="pingchat2.jpg" width="320"/></p>
<p>Zudem gibt es die Möglichkeit Nachrichten an mehrere Benutzer gleichzeitig zu versenden, um so eine Art Gruppenraum zu eröffnen. Dort, sowie in den normalen Unterhaltungen, können Bilder, Videos und Tonaufnahmen versendet werden. Diese lassen sich mit einem Fingerdruck auf das gewünschte Element sofort auf Eurem iPhone speichern.</p>
<p><img src="http://www.codedom.de/wp-content/uploads/2010/06/pingchat3.jpg" style="TEXT-ALIGN: center; DISPLAY: block; MARGIN-LEFT: auto; MARGIN-RIGHT: auto" height="480" alt="pingchat3.jpg" width="320"/></p>
<p>An Hand der grünen Häkchen, kann der Versender sehen, ob der Empfänger die Nachricht bereits gelesen hat oder noch nicht. Mit eingeschalteter Push-Funktion erhält man die Nachrichten, wie bei SMS üblich, direkt auf dem Home-Screen angezeigt.</p>
<p>Mein Fazit ist also, dass das App alles in allem eine gute kostenfreie Alternative zu anderen Programmen rund um dieses Thema ist. Da es bald ebenso eine kostenfreie Version für Android-Nutzer geben soll, wäre Pingchat! also bald eine der wenigen Cross-Platform-Clients, die die SMS bald überflüssig machen sollte.</p>
<p>[Bilder von der offiziellen iTunes App Store Seite von Pingchat!]</p>

<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.codedom.de/pingchat-sms-ohne-kosten/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exponentielle Glättungsverfahren</title>
		<link>http://www.codedom.de/exponentielle-glattungsverfahren</link>
		<comments>http://www.codedom.de/exponentielle-glattungsverfahren#comments</comments>
		<pubDate>Wed, 05 May 2010 20:25:39 +0000</pubDate>
		<dc:creator>Dustin Klein</dc:creator>
				<category><![CDATA[Aktuelles]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.codedom.de/?p=998</guid>
		<description><![CDATA[Wie ich schon damals sagte, möchte ich den Blog auch gerne für eigene Themen nutzen. Darunter fallen natürlich auch Gebiete, die mir während meiner Arbeitszeit begegnen und die ich recht interessant finde. An dieser Stelle möchte ich mich mit einem exponentiellen Glättungsverfahren auseinandersetzen, welches inder Lagerverwaltung  eine größere Rolle spielt.]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Wie ich schon damals sagte, möchte ich den Blog auch gerne für eigene Themen nutzen. Darunter fallen natürlich auch Gebiete, die mir während meiner Arbeitszeit begegnen und die ich recht interessant finde. An dieser Stelle möchte ich mich mit einem <strong>exponentiellen Glättungsverfahren</strong> auseinandersetzen, welches in der <strong>Lagerverwaltung</strong> eine größere Rolle spielt.</p>
<p><span id="more-998"></span></p>
<h3>Definition</h3>
<p>Doch was sind eigentlich Glättungsverfahren? In der Mathematik beziehungsweise Statistik werden solche Verfahren genutzt, um Trendkomponenten, welche sich durch keine funktionale lineare oder nichtlineare Beziehung darstellen lassen, durch eine sogenannte <strong>glatte Komponente</strong> mit Hilfe gleitender Durchschnitte zu bestimmen.</p>
<h3>Beschreibung</h3>
<p>Klingt nun alles sehr theoretisch und unverständlich? Ist es aber letztenendes garnicht. Im Prinzip habt Ihr eine Kurve mit einem festem Beobachtungszeitraum. Zu jedem dieser Zeitpunkte liegt ein beliebiger Wert vor (y1, y2, y3 &#8230; yn). Jetzt errechnen wir einfach geglättete Schätzwerte, die sich auf Ergebnisse der vorherigen Zeitpunkte beziehen. Neben unseren Zeitreihenwerten y(t) brauchen wir noch einen <strong>Glättungsfaktor</strong> alpha, der größer null aber kleiner eins sein muss (0 &lt;= a &lt;= 1). Daraus ergibt sich die Formel, y&#8217;(t) ergibt dabei den geglätteten Wert:</p>
<p>y&#8217;(t) = a * y(t) + (1-a) * y&#8217;(t-1)</p>
<p>Der Schätzwert y&#8217;(t) liefert hier den Prognosewert für den Zeitpunkt t+1. Liegt im Zeitpunkt t+1 eine weitere Beobachtung vor, so kann dir Prognose für t+2 ermittel werden, usw.</p>
<h3>Beispiel</h3>
<p>Es seien insgesamt zehn Zeitreihenwerte (y0 bis y10) gegeben. Diese sollen nun mit einem Glättungskoeffizienten von alpha (a) = 0,3 geglättet werden. Der Anfangswert y&#8217;0 soll 19 betragen.</p>
<p>y&#8217;1 = 0,3 * 20 + 0,7 * 19 = 6 + 13,3 = 19,3<br />
y&#8217;2 = 0,3 * 18 + 0,7 * 19,3 = 5,4 + 13,51 = 18,91<br />
y&#8217;3 = 0,3 * 21 + 0,7 * 18,91 = 6,3 + 13,24 = 19,54<br />
&#8230;</p>
<p>Dadurch ergibt sich folgende Tabelle und Grafik:</p>
<p><img class="aligncenter" title="Exponentielle Glättung" src="http://www.codedom.de/images/blog/2010/05/exp_glaettung.png" alt="Exponentielle Glättung" width="612" height="356" /></p>
<p>Die Grafik zeigt die Glättung für α = 0,6 sowie α = 0,3 und α = 0,1. Man sieht, dass der kleinere Glättungsfaktor die <strong>Zeitreihe</strong> stärker glättet, denn hier geht der aktuelle Wert nur mit einem Gewicht von 0,3 ein, wogegen die „mittleren“ <strong>Vergangenheitswerte</strong> mit 0,7 berücksichtigt werden.</p>
<h3>Programmcode</h3>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm; background: none repeat scroll 0% 0% transparent;"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"><span style="background: none repeat scroll 0% 0% transparent;">//<em> yt = (19, 20 , 18 , 21 , 22 , 19 , 21 , 18 , 20 , 21 , 17 )</em></span><span style="background: none repeat scroll 0% 0% transparent;"><br />
//<em> result = (19, 19.3, 18.91, 19.54, 20.28, 19.89, 20.23, 19.56, 19.69, 20.08, 19.16)</em><br />
//<em> Exponentielle Glättung: yt = Zeitwerte, a = alpha, result = geglättete Werte</em></span></span><br />
<span style="font-size: x-small;"><span style="color: #7f0055;"><strong>private</strong></span><span style="color: #7f0055;"><strong>static</strong></span><span style="color: #7f0055;"><strong>double</strong></span><span style="color: #000000;">[] expsmoothing(</span><span style="color: #7f0055;"><strong>double</strong></span><span style="color: #000000;">[] yt, </span><span style="color: #7f0055;"><strong>double</strong></span><span style="color: #000000;"> a) {<br />
</span><span style="color: #7f0055;"><strong>double</strong></span><span style="color: #000000;">[] result = </span><span style="color: #7f0055;"><strong>new</strong></span><span style="color: #7f0055;"><strong>double</strong></span><span style="color: #000000;">[yt.</span><span style="color: #0000c0;">length</span><span style="color: #000000;">];</span></span></span></p>
<p style="margin-bottom: 0cm; background: none repeat scroll 0% 0% transparent;"><span style="color: #000000;"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"> result[0] = yt[0];</span></span></span><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"><span style="color: #7f0055;"><strong><br />
for</strong></span><span style="color: #000000;"> (</span><span style="color: #7f0055;"><strong>int</strong></span><span style="color: #000000;"> i = 0; i &lt; yt.</span><span style="color: #0000c0;">length</span><span style="color: #000000;"> &#8211; 1; i++) {</span><span style="color: #7f0055;"><strong><br />
if</strong></span><span style="color: #000000;"> (i == 0) { result[i+1] = a * yt[i+1] + (1-a) * yt[i]; }</span><span style="color: #7f0055;"><strong><br />
else</strong></span><span style="color: #000000;"> { result[i+1] = a * yt[i+1] + (1-a) * result[i]; }</span></span></span><span style="color: #000000;"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"><br />
}</span></span></span><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"><span style="color: #7f0055;"><strong><br />
return</strong></span><span style="color: #000000;"> result;</span></span></span><span style="color: #000000;"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"><br />
}</span></span></span></p>
<p style="margin-bottom: 0cm; background: none repeat scroll 0% 0% transparent;"><span style="color: #000000;"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"><br />
</span></span></span></p>
<h3 style="margin-bottom: 0cm; background: none repeat scroll 0% 0% transparent;">Fazit</h3>
<p>Diese Methode ist sehr nützlich, um Kurvenverläufe zu beeinflussen und kann ohne größere Umstände implementiert werden. Da ich mich gerade mit Java beschäftige, ist der Code in dieser Programmiersprache geschrieben. Dieser funktioniert allerdings auch ohne viel Modifikation in anderen Sprachen, also viel Spaß!</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 846px; width: 1px; height: 1px; overflow: hidden;">
<p>&nbsp;</p>
<p style="margin-bottom: 0cm; font-style: normal; font-weight: normal; text-decoration: none;"><span style="font-family: Tahoma,sans-serif;"><span style="font-size: x-small;">Die Grafik zeigt die Glättung für α = 0,6 sowie α = 0,3 und α = 0,1. Man sieht, dass der kleinere Glättungsfaktor die Zeitreihe stärker glättet, denn hier geht der aktuelle Wert nur mit einem Gewicht von 0,3 ein, wogegen die „mittleren“ Vergangenheitswerte mit 0,7 berücksichtigt werden.</span></span></p>
</div>

<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.codedom.de/exponentielle-glattungsverfahren/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Fire in the hole&#8230; Admin down!</title>
		<link>http://www.codedom.de/fire-in-the-hole-admin-down</link>
		<comments>http://www.codedom.de/fire-in-the-hole-admin-down#comments</comments>
		<pubDate>Mon, 22 Mar 2010 20:05:16 +0000</pubDate>
		<dc:creator>Dustin Klein</dc:creator>
				<category><![CDATA[Aktuelles]]></category>
		<category><![CDATA[Dies & Das]]></category>
		<category><![CDATA[codedom]]></category>

		<guid isPermaLink="false">http://www.codedom.de/?p=977</guid>
		<description><![CDATA[Vielleicht lässt es sich schon am Titel erahnen, aber ich finde leider momentan keine Zeit, um dieses schöne Blog-System zu pflegen. Leider hat sich bis dato auch noch kein Freiwilliger finden lassen, der uns tatkräftig unterstützen würde.]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Vielleicht lässt es sich schon am Titel erahnen, aber ich finde leider momentan keine Zeit, um dieses schöne Blog-System zu pflegen. Leider hat sich bis dato auch noch kein Freiwilliger finden lassen, der uns tatkräftig unterstützen würde. Ich hoffe zwar, dass ich in den nächsten Wochen wieder regelmäßig Zeit finde dieses Blog mit Leben zu füllen, aber versprechen kann ich nichts.</p>
<p><span id="more-977"></span>Dies liegt zum Einen an meiner Arbeit, die mich momentan, und auch zum Glück, voll und ganz fordert. Es gibt stetig neue Ideen und Projekte, die verwirklicht werden wollen und diese nehmen natürlich auch einiges an Freizeit in Anspruch: Schließlich ist es nicht mein Job, sondern meine Berufung!</p>
<p>Zudem laufen nebenbei auch andere private Projekte, die gefördert und aufgebaut werden möchten. Und wenn es meine Freizeit doch mal zulässt, arbeite ich an Konzepten für das Dortmund Project, welches auch dieses Jahr wieder gute Projekte im Bereich der Informations-Technologie sucht.</p>
<p>Ich hoffe auf ein bisschen Verständnis und gelobe Besserung in naher Zukunft. Doch da ich mich gerade in der Blüte meiner Kreativität und Lernbegierde befinde kann ich momentan noch nichts versprechen. Ich hoffe aber weiterhin darauf, dass mir ein paar findige Blog-Fetischisten unter die Arme greifen.</p>

<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.codedom.de/fire-in-the-hole-admin-down/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

