<?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>UGamela Blog &#187; Entwurfsmuster</title>
	<atom:link href="http://ugamela-blog.pheelgood.net/tag/entwurfsmuster/feed/" rel="self" type="application/rss+xml" />
	<link>http://ugamela-blog.pheelgood.net</link>
	<description>Entwicklung eines Browsergames</description>
	<lastBuildDate>Tue, 13 Jul 2010 19:44:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Entwurfsmuster &#8211; Buch</title>
		<link>http://ugamela-blog.pheelgood.net/2009/09/11/entwurfsmuster-buch-gof/</link>
		<comments>http://ugamela-blog.pheelgood.net/2009/09/11/entwurfsmuster-buch-gof/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 17:34:30 +0000</pubDate>
		<dc:creator>Phoscur</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[Entwurfsmuster]]></category>
		<category><![CDATA[OOP]]></category>

		<guid isPermaLink="false">http://ugamela-blog.pheelgood.net/?p=268</guid>
		<description><![CDATA[Design Patterns &#8211; das Buch, das weit auch als &#8220;das GoF Buch&#8221; bekannt ist, gehört nicht zu den neuesten Büchern zum Thema, ist aber das Bekannteste und Altbewährte. Ich habe es die letzten Wochen das erste Mal gelesen bzw. bin es durchgegangen. Mein Fazit: Ein gutes Buch! Ich bereue keineswegs 50€ dafür ausgegeben zu haben. [...]]]></description>
			<content:encoded><![CDATA[<p>Design Patterns &#8211; das Buch, das weit auch als &#8220;das GoF Buch&#8221; bekannt ist, gehört nicht zu den neuesten Büchern zum Thema, ist aber das Bekannteste und Altbewährte. Ich habe es die letzten Wochen das erste Mal gelesen bzw. bin es durchgegangen. Mein Fazit:</p>
<p>Ein gutes Buch! Ich bereue keineswegs 50€ dafür ausgegeben zu haben. Werde es aber auch nochmal irgendwann auf englisch in die Hände bekommen müssen, wegen des Vokabulars.</p>
<p>Wie der Name schon sagt, handelt es von Entwurfsmustern. Diese Muster beschreiben wie man Objekte in Beziehung setzen kann, Arten von Beziehungen die gut funktionieren. Es hilft bei Problemlösungen und zeigt auf, wie eine Analyse auszusehen hat. Die Beschreibungen laufen über Vor- und Nachteil und detaillierte Beispiele.</p>
<p>Ich bin immer noch sehr dabei diese Art des Programmierens zu lernen, komme einem guten Niveau aber immer näher. Derweil versuche ich noch die Rolle von Prototypen in JavaScript zu verstehen um dann, selbst in JavaScript, Entwurfsmuster anzuwenden.</p>
]]></content:encoded>
			<wfw:commentRss>http://ugamela-blog.pheelgood.net/2009/09/11/entwurfsmuster-buch-gof/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Design Patterns: Dekorierer (Decorator) [vs. Vererbung]</title>
		<link>http://ugamela-blog.pheelgood.net/2009/02/24/design-patterns-dekorierer-decorator-vs-vererbung-php/</link>
		<comments>http://ugamela-blog.pheelgood.net/2009/02/24/design-patterns-dekorierer-decorator-vs-vererbung-php/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 16:10:45 +0000</pubDate>
		<dc:creator>Phoscur</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[Entwurfsmuster]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://ugamela-blog.pheelgood.net/?p=201</guid>
		<description><![CDATA[Hab ja schon lange nichts mehr geschrieben, greife nun den Gedanken etwas über Design Patterns zu schreiben wieder auf. Vorerst muss ich darauf hinweisen, dass ich kein Profi bin und hier meine subjektive Meinung vertrete. Dies wird also kein Eintrag wie aus dem Lehrbuch, ich versuche nur etwas auf meine Weise klar zu machen. Einleitung [...]]]></description>
			<content:encoded><![CDATA[<p>Hab ja schon lange nichts mehr geschrieben, greife nun den Gedanken etwas über Design Patterns zu schreiben wieder auf.</p>
<p>Vorerst muss ich darauf hinweisen, dass ich kein Profi bin und hier meine subjektive Meinung vertrete. Dies wird also kein Eintrag wie aus dem Lehrbuch, ich versuche nur etwas auf meine Weise klar zu machen.</p>
<blockquote><p>Einleitung der <a title="Viererbande" href="http://de.wikipedia.org/wiki/Viererbande_(Softwareentwicklung)" target="_blank">GoF</a>: <em>Favorisiere Zusammensetzung vor Vererbung (&#8220;Favor object composition over class inheritance&#8221;) </em></p></blockquote>
<p><em>Vererbung</em> sollte für jeden, der schon mal ein paar Klassen geschrieben hat, klar sein; Stichwort dazu ist (in PHP) &#8220;extends&#8221;. <em>Zusammensetzung</em> ist schon ein wenig schwieriger. Ich bin mir nicht mal sicher, ob das auch wirklich die perfekte Übersetzung für <em>Composition</em> ist. Die wichtigste Rolle spielt hier der <em>Dekorierer</em>.  <span id="more-201"></span></p>
<p>Hier nun ein bischen PHP-Code, hoffentlich schon selbsterklärend:</p>
<pre class="brush: php;">
interface Etwas
{
    public function tuWas();
}
class EtwasImplementation implements Etwas
{
    public function tuWas()
    {
        return 'Etwas tut was.';
    }
}
class AnderesEtwas implements Etwas
{
    public function tuWas()
    {
        return 'Dieses Etwas tut was Anderes, evtl. Ähnliches auf andere Weise.';
    }
}
class EtwasDekorierer implements Etwas
{
    protected $_Etwas;
    public function __construct(Etwas $Etwas)
    {
        $this-&gt;_Etwas = $Etwas;
    }
    public function tuWas()
    {
        return $this-&gt;_Etwas-&gt;tuWas().' Und der Dekorierer verarbeitet das noch weiter, kann jedes Etwas erweitern.';
    }
}</pre>
<p>Wie man sieht ist der EtwasDekorierer selbst ein Etwas, kann auch jeder Zeit die Stelle eines Etwas einnehmen, wie als würde er davon abstammen (Vererbung). Der klare Vorteil gegenüber der Vererbung ist nun, dass der EtwasDekorierer sowohl die EtwasImplementation als auch AnderesEtwas erweitern kann. Das, was erweitert wird, wird dadurch austauschbar. Mehrere Dekorierer lassen sich übrigens hervorragend verschachteln.</p>
<p>Hier noch ein kleines, etwas konkreteres Beispiel:</p>
<pre class="brush: php;">
class Logger # soll Methodenaufrufe des dekorierten Objekts loggen.
{
    protected $_Object;
    public function __construct($Object) #ggf prüfen ob es ein Objekt eines bestimmten Typs ist (per Typehint)
    {
        $this-&gt;_Object = $Object;
    }
    public function __call($method, $args);
    {
         printf('Methode %s eines Objekts der Klasse %s wurde aufgerufen \n', $method, get_class($this-&gt;_Object));
         # Hier kann man natürlich je nach Bedarf etwas Anderes einbauen... (e.g. In Datei schreiben etc.etc..)
         return call_user_func_array(array($this-&gt;_Object, $method), $args);
    }
}</pre>
<p>Der Nachteil am Dekorierer ist, dass man alles delegieren, also weiterleiten, muss. Besonders wenn der Dekorierer nur einen Teil der Methoden verändern soll ist das nervig alle Methoden an das dekorierte Objekt weiterzuleiten. PHP5s __call() kann da praktisch sein, obwohl dann zu überdenken ist, ob der Dekorierer nicht unnötig ist, gerade in PHP, wo OOP weniger performant ist.</p>
<p>Insgesamt wird mit dem Dekorierer eine weniger feste Bindung zwischen den Objekten gelegt, dadurch wird das Design flexibler.</p>
]]></content:encoded>
			<wfw:commentRss>http://ugamela-blog.pheelgood.net/2009/02/24/design-patterns-dekorierer-decorator-vs-vererbung-php/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>PHP Programmierung &#8211; Entwurfsmuster (design patterns)</title>
		<link>http://ugamela-blog.pheelgood.net/2008/11/18/php-programmierung-entwurfsmuster-design-patterns/</link>
		<comments>http://ugamela-blog.pheelgood.net/2008/11/18/php-programmierung-entwurfsmuster-design-patterns/#comments</comments>
		<pubDate>Tue, 18 Nov 2008 09:54:06 +0000</pubDate>
		<dc:creator>Phoscur</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[Entwurfsmuster]]></category>
		<category><![CDATA[OOP]]></category>

		<guid isPermaLink="false">http://ugamela-blog.pheelgood.net/?p=139</guid>
		<description><![CDATA[Vor ein-zwei Monaten habe ich Entwurfsmuster &#8211; in PHP &#8211; kennengelernt, obwohl ich davor schon viel früher über sie gestolpert war, hatte ich sie irgendwie nie richtig wahrgenommen oder einfach nicht verstanden. Wenn Programmieren abstrakt ist, dann sind es Entwurfsmuster erst recht. Die Beschreibungen der Muster sind gar so abstrakt, dass man umbedingt Beispiele für [...]]]></description>
			<content:encoded><![CDATA[<p>Vor ein-zwei Monaten habe ich Entwurfsmuster &#8211; in PHP &#8211; kennengelernt, obwohl ich davor schon viel früher über sie gestolpert war, hatte ich sie irgendwie nie richtig wahrgenommen oder einfach nicht verstanden.</p>
<p>Wenn Programmieren abstrakt ist, dann sind es Entwurfsmuster erst recht. Die Beschreibungen der Muster sind gar so abstrakt, dass man umbedingt Beispiele für die Anwendung braucht.</p>
<p>Auch wenn man sie leicht übersieht, stehen bereits im PHP Handbuch zwei Entwurfsmuster. <em>Singleton</em> und <em>Fabrik</em>. Ich möchte auf <em>Singleton</em> eingehen, hole aber noch etwas weiter aus.</p>
<p>Ich habe mich, als ich OOP anfing, gewundert wofür die <em>public</em>, <em>protected</em> und <em>private </em>Deklarationen sind und denn Sinn einfach nicht verstanden. In PHP dienen sie größtenteils gar nicht dem Programmierer selbst, sondern anderen Programmierern, die am selben Projekt schreiben. Sie schließen einfach die falsche Verwendung aus und kapseln Funktionen und Eigenschaften durch die Zugriffkontrolle. Für die Codefunktionalität sind sie somit unwichtig. Man könnte auch einfach alles <em>public</em> deklarieren, wenn man es trotzdem richtig verwendet (PHP4 ist noch alles public).</p>
<p><em>Singleton</em> geht auf diesem Weg weiter, er erlaubt nur eine Instanz eines bestimmten Objektes, auf welche gleichzeitig global zugegriffen werden kann.</p>
<p>Das benötigt man zum Beispiel bei der Datenbank, die meist nur eine einzige Verbindung umfasst.</p>
<p><a title="PHP Handbuch: Entwurfsmuster" href="http://docs.php.net/manual/de/language.oop5.patterns.php">http://docs.php.net/manual/de/language.oop5.patterns.php</a></p>
<p>Es gibt aber noch viele andere komplexere Entwurfsmuster. Ich werde demnächst nochmal das neue Schema für mein Projekt erklären.</p>
<p>Entwurfsmuster zählen definitiv zur Professionellen Programmierung, das Niveau ist deutlich anders, als das simple Programmieren von einfachen Websites.</p>
]]></content:encoded>
			<wfw:commentRss>http://ugamela-blog.pheelgood.net/2008/11/18/php-programmierung-entwurfsmuster-design-patterns/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
