<?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>ingokallenbach.de &#187; soft-dev</title>
	<atom:link href="http://www.ingokallenbach.de/tag/soft-dev/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ingokallenbach.de</link>
	<description>About Mac OS X Leopard, Java, software development and other stuff...</description>
	<lastBuildDate>Sun, 03 Jan 2010 15:21:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Veränderung kapseln</title>
		<link>http://www.ingokallenbach.de/2009/08/10/veranderung-kapseln/</link>
		<comments>http://www.ingokallenbach.de/2009/08/10/veranderung-kapseln/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 16:31:41 +0000</pubDate>
		<dc:creator>ingo</dc:creator>
				<category><![CDATA[best-practices]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[coding-best-practices]]></category>
		<category><![CDATA[soft-dev]]></category>

		<guid isPermaLink="false">http://www.ingokallenbach.de/?p=86</guid>
		<description><![CDATA[Eine Konstante in der Softwareentwicklung, egal wo, was oder in welcher Programmiersprache man entwickelt: Veränderung. Es ist eigentlich egal, wie gut man eine Anwendung entworfen hat. Im Lauf der Zeit wird sie wachsen und sich wandeln müssen. Für die Wartung &#8230; <a href="http://www.ingokallenbach.de/2009/08/10/veranderung-kapseln/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Eine Konstante in der Softwareentwicklung, egal wo, was oder in welcher Programmiersprache man entwickelt: <em>Veränderung</em>. Es ist eigentlich egal, wie gut man eine Anwendung entworfen hat. Im Lauf der Zeit wird sie wachsen und sich wandeln müssen.</p>
<p>Für die Wartung und Wiederverwendung von Elementen/Klassen einer Anwendung ist es besser, wenn nicht versucht wird, alles über Vererbung zu lösen. Wird stur vererbt, kann es schnell bei einer lokalen Änderung zu weitreichenden Seiteneffekten kommen. Dazu bietet sich das einfach Beispiel aus dem Buch &#8220;<em>Entwurfsmuster von Kopf bis Fuß</em>&#8221; an <img src='http://www.ingokallenbach.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<blockquote><p>
In einer Entensimulation gibt es die Superklasse Ente, die die Methoden <code>quacken</code> und <code>schwimmen</code> für alle Sub-Enten implementiert. Eine abtrakte Methode <code>anzeigen</code> wird von den Sub-Enten implementiert, um sich selbt darzustellen.</p>
<p>Nun sollen die Enten fliegen können.</p>
<p>Eine Möglichkeit per Vererbung packt die Methode <code>fliegen</code> direkt in die Superklasse Ente. Nur jetzt können z.B. auch Enten fliegen, die es gar nicht sollten, wie eine Gummiente. Wenn nun alle Enten die Methode <code>fliegen</code> überschreiben und praktisch leer implementieren, dann wäre das Problem gelöst, aber bei jeder neuen Ente muss man beachten, ob sie fliegen kann oder nicht.</p>
<p>Eine weitere Möglichkeit wäre die Verwendung eines <em>FlugFähig</em>-Interfaces, das nur von den Enten implementiert wird, die auch tatsächlich fliegen können. Allerdings wird dann Code verdoppelt, da alle fugfähigen Enten das Interface implementieren müssen. Ein Wartungsalptraum <img src='http://www.ingokallenbach.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .
</p></blockquote>
<p>Da also die Vererbung nicht der Weisheit letzer Schluss ist, kommt man zu folgendem Entwurfsprinzip:</p>
<blockquote><p><strong>Identifizieren der Aspekte, die sich ändern können und sie von denen trennen, die konstant bleiben.</strong></p></blockquote>
<p>In obigem Entenbeispiel wird die <code>fliegen</code> Methode in ein Interface herausgezogen und verschiedene Flugverhalten implementiert (z.B. &#8220;normales&#8221; fliegen und &#8220;nicht&#8221; fliegen). Jeder Ente wird nun eins der Flugverhalten-Implementierungen übergeben, das zu ihr passt.</p>
<p>Die unterschiedlichen Flugverhalten sind nun nur noch 1x implementiert und werden den Enten &#8220;aufgesteckt&#8221;. Das fördert Code-Wiederverwendung und die Änderung an einem Flugverhalten stört keine Enten, die ein anderes Flugverhalten haben.</p>
<p>Wie das konkret im Quellcode aussieht, gibts im nächsten Teil über <em>Programmieren auf eine Schnittstelle</em>.</p>
<h4>Literatur</h4>
<ul>
<li>FREEMAN, E und FREEMAN, E: <em>Entwurfsmuster von Kopf bis Fuß.</em> O&#8217;Reilly, 2006.</li>
</ul>
<div class="shr-publisher-86"></div>]]></content:encoded>
			<wfw:commentRss>http://www.ingokallenbach.de/2009/08/10/veranderung-kapseln/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

