<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Kommentare für www.christian-rehn.de</title>
	<atom:link href="http://www.christian-rehn.de/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.christian-rehn.de</link>
	<description>Ein Blog über Informatik und Anderes...</description>
	<lastBuildDate>Sat, 04 Feb 2012 22:20:13 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>Kommentar zu Tutorials schreiben von www.christian-rehn.de &#187; Unicode &#38; Co</title>
		<link>http://www.christian-rehn.de/2009/09/08/tutorials-schreiben/comment-page-1/#comment-4115</link>
		<dc:creator>www.christian-rehn.de &#187; Unicode &#38; Co</dc:creator>
		<pubDate>Sat, 04 Feb 2012 22:20:13 +0000</pubDate>
		<guid isPermaLink="false">http://www.christian-rehn.de/?p=402#comment-4115</guid>
		<description>[...] Ich will das Ganze noch nicht als &#8220;Tutorial&#8221; bezeichnen, weil es nicht so ganz meinen Qualitätskriterien entspricht (gut, zugegebenermaßen meine älteren Tutorials auch nicht). Vielelicht bau ich das [...]</description>
		<content:encoded><![CDATA[<p>[...] Ich will das Ganze noch nicht als &#8220;Tutorial&#8221; bezeichnen, weil es nicht so ganz meinen Qualitätskriterien entspricht (gut, zugegebenermaßen meine älteren Tutorials auch nicht). Vielelicht bau ich das [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Kommentar zu Enbugging &#8212; Wie wir Fehler machen und wie wir sie vermeiden von Anonymous</title>
		<link>http://www.christian-rehn.de/2011/09/11/enbugging-wie-wir-fehler-machen-und-wie-wir-sie-vermeiden/comment-page-1/#comment-4108</link>
		<dc:creator>Anonymous</dc:creator>
		<pubDate>Thu, 02 Feb 2012 11:11:23 +0000</pubDate>
		<guid isPermaLink="false">http://www.christian-rehn.de/?p=928#comment-4108</guid>
		<description>[...]  [...]</description>
		<content:encoded><![CDATA[<p>[...]  [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Kommentar zu Pipe And Filter von www.christian-rehn.de &#187; Forums-Diskussionen zur OO</title>
		<link>http://www.christian-rehn.de/2010/10/16/pipe-and-filter/comment-page-1/#comment-4044</link>
		<dc:creator>www.christian-rehn.de &#187; Forums-Diskussionen zur OO</dc:creator>
		<pubDate>Thu, 05 Jan 2012 12:27:57 +0000</pubDate>
		<guid isPermaLink="false">http://www.christian-rehn.de/?p=594#comment-4044</guid>
		<description>[...] eines Instrumenten-Servers: ein Beispiel, wo man Pipe&amp;Filter verwenden [...]</description>
		<content:encoded><![CDATA[<p>[...] eines Instrumenten-Servers: ein Beispiel, wo man Pipe&amp;Filter verwenden [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Kommentar zu Enbugging &#8212; Wie wir Fehler machen und wie wir sie vermeiden von www.christian-rehn.de &#187; Warum manchmal unerklärliche Dinge geschehen</title>
		<link>http://www.christian-rehn.de/2011/09/11/enbugging-wie-wir-fehler-machen-und-wie-wir-sie-vermeiden/comment-page-1/#comment-3707</link>
		<dc:creator>www.christian-rehn.de &#187; Warum manchmal unerklärliche Dinge geschehen</dc:creator>
		<pubDate>Wed, 09 Nov 2011 15:34:16 +0000</pubDate>
		<guid isPermaLink="false">http://www.christian-rehn.de/?p=928#comment-3707</guid>
		<description>[...] meinem diesjährigen Vortrag auf den Delphi-Tagen (Enbugging) hab ich Design by Contract als Denkweise vorgestellt: Man betrachtet Methoden als Verträge. Wenn [...]</description>
		<content:encoded><![CDATA[<p>[...] meinem diesjährigen Vortrag auf den Delphi-Tagen (Enbugging) hab ich Design by Contract als Denkweise vorgestellt: Man betrachtet Methoden als Verträge. Wenn [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Kommentar zu Sortieralgorithmen von tincian</title>
		<link>http://www.christian-rehn.de/2006/05/02/sortieralgorithmen/comment-page-1/#comment-3689</link>
		<dc:creator>tincian</dc:creator>
		<pubDate>Sun, 06 Nov 2011 13:50:03 +0000</pubDate>
		<guid isPermaLink="false">http://server/~christian/wordpress/?p=60#comment-3689</guid>
		<description>Vielen Dank für das Skript, das macht mir das Verständnis wesentlich leichter!</description>
		<content:encoded><![CDATA[<p>Vielen Dank für das Skript, das macht mir das Verständnis wesentlich leichter!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Kommentar zu If Statement Considered Harmful von TObjectList unterschiedliche Objekte erkennen? - Seite 2 - Delphi-PRAXiS</title>
		<link>http://www.christian-rehn.de/2009/10/24/if-statement-considered-harmful/comment-page-1/#comment-3624</link>
		<dc:creator>TObjectList unterschiedliche Objekte erkennen? - Seite 2 - Delphi-PRAXiS</dc:creator>
		<pubDate>Mon, 24 Oct 2011 13:28:36 +0000</pubDate>
		<guid isPermaLink="false">http://www.christian-rehn.de/?p=474#comment-3624</guid>
		<description>[...]  [...]</description>
		<content:encoded><![CDATA[<p>[...]  [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Kommentar zu Summerschool &#8220;Agile Software Development&#8221; von www.christian-rehn.de &#187; Agile: Definition of Done und Failure Mode Programming</title>
		<link>http://www.christian-rehn.de/2011/10/09/summerschool-agile-software-development/comment-page-1/#comment-3577</link>
		<dc:creator>www.christian-rehn.de &#187; Agile: Definition of Done und Failure Mode Programming</dc:creator>
		<pubDate>Sun, 16 Oct 2011 13:53:43 +0000</pubDate>
		<guid isPermaLink="false">http://www.christian-rehn.de/?p=956#comment-3577</guid>
		<description>[...] der Summerschool &#8220;Agile Software Development&#8221; hab ich das genau so erlebt. Wir hatten Sprints von etwa zwei Stunden Länge. Und uns fehle eine [...]</description>
		<content:encoded><![CDATA[<p>[...] der Summerschool &#8220;Agile Software Development&#8221; hab ich das genau so erlebt. Wir hatten Sprints von etwa zwei Stunden Länge. Und uns fehle eine [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Kommentar zu Summerschool &#8220;Agile Software Development&#8221; von www.christian-rehn.de &#187; Agile: Was ist das eigentlich?</title>
		<link>http://www.christian-rehn.de/2011/10/09/summerschool-agile-software-development/comment-page-1/#comment-3559</link>
		<dc:creator>www.christian-rehn.de &#187; Agile: Was ist das eigentlich?</dc:creator>
		<pubDate>Sun, 09 Oct 2011 21:16:53 +0000</pubDate>
		<guid isPermaLink="false">http://www.christian-rehn.de/?p=956#comment-3559</guid>
		<description>[...] paar Kommilitonen mir Scrum anzusehen und darüber zu referieren. Außerdem habe ich gerade an der Summerschool &#8220;Agile Software-Entwicklung&#8221; teilgenommen. Das hab ich dann mal zum Anlass genommen, mich etwas intensiver mit der Thematik zu [...]</description>
		<content:encoded><![CDATA[<p>[...] paar Kommilitonen mir Scrum anzusehen und darüber zu referieren. Außerdem habe ich gerade an der Summerschool &#8220;Agile Software-Entwicklung&#8221; teilgenommen. Das hab ich dann mal zum Anlass genommen, mich etwas intensiver mit der Thematik zu [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Kommentar zu Wollt ich nur mal gesagt haben&#8230; von Christian</title>
		<link>http://www.christian-rehn.de/2011/10/05/wollt-ich-nur-mal-gesagt-haben/comment-page-1/#comment-3557</link>
		<dc:creator>Christian</dc:creator>
		<pubDate>Sat, 08 Oct 2011 18:01:59 +0000</pubDate>
		<guid isPermaLink="false">http://www.christian-rehn.de/?p=950#comment-3557</guid>
		<description>Hallo Jan,

danke für deinen Kommentar.

&lt;blockquote&gt;
Ich finde nicht, dass diese Aussage allgemeingültig ist.
&lt;/blockquote&gt;
Welche Aussage ist schon wirklich allgemeingültig? Gerade in der Softwareentwicklung. Deshalb mache ich es mir einfach: Statt an jede Aussage ein &quot;selbstverständlich gibt es Ausnahmen&quot; dran zu hängen, lasse ich &lt;a href=&quot;http://www.christian-rehn.de/2011/05/14/softwareentwicklungs-prinzipien-eine-ubersicht/&quot; rel=&quot;nofollow&quot;&gt;meine drei obersten Daumenregeln&lt;/a&gt; die Ausnahmen behandeln. 

&lt;blockquote&gt;
Gesetzter Fall, ich hätte eine (statische) Utility-Klasse mit Methoden, die mir explizite Tasks erfüllen und für die Erfüllung ebenjener eine große Anzahl an Parametern benötigen.
&lt;/blockquote&gt;
Hier wäre meine Vermutung, dass die Utility-Klasse keine sein sollte. Utility-Klassen haben ihre Berechtigung, aber, wenn man sie zu viel anwendet, ist man wieder bei prozeduraler Programmierung (und eben nicht mehr objektorientiert). Der gedankliche Unterschied ist der, dass Utility-Klassen nichts &quot;sind&quot;, sondern nur etwas tun (siehe Daumenregeln Nr. 15 in obigem Artikel).

Aber wie gesagt: Natürlich gibt es Ausnahmen. Aber um ehrlich zu sein, denke ich, dass diese hier selten sind. Mehr als 3, maximal 4 Parameter braucht man wirklich nur sehr sehr selten.

&lt;blockquote&gt;
Vielleicht könntest du deine Aussage noch mit einem Beispiel veranschaulichen, um sicherzugehen, dass ich dich nicht falsch verstanden habe.
&lt;/blockquote&gt;
OK, ein Beispiel:

[cci]
DoSomething(42, SOME_CONSTANT, &quot;&quot;, &quot;&quot;, 
  &quot;HelloWorld&quot;, false, true, false, null, 
  null, null, null);
[/cci]
Das ist jetzt zwar ein konstruiertes Beispiel, aber man sollte dennoch sehen, dass man hier kaum eine Chance hat, den Methodenaufruf zu verstehen, wenn man sich nicht Code oder Doku der Methode anguckt. Zudem kann man sehr leicht Parameter aus Versehen vertauschen oder falsch belegen, was zu sehr schwer zu findenden Fehlern führt.

Ein reales Beispiel für zu lange Parameterlisten ist &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms682425(VS.85).aspx&quot; rel=&quot;nofollow&quot;&gt;CreateProcess()&lt;/a&gt;. Die Funktion ist richtig eklig. Besser wäre es hier, wenn es eine Prozess-Klasse gäbe, die im Konstruktor nur wenige Parameter hat und für die restlichen Infos sinnvolle Default-Werte annimmt, die man über Setter-Methoden (bzw. Properties) ändern kann. Eine start()-Methdode würde dann den Prozess starten. Das wäre viel leichter zu benutzen, viel leichter zu verstehen und weniger fehlerträchtig. Zusätzlich kann es noch ne statische Utility-Methode geben, die mir das Leben einfacher macht, wenn mir die Default-Werte ausreichen. Dann hat diese aber auch nur wenige Parameter.

Und, oh Wunder, AFAIK macht es MS jetzt genau so: &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.diagnostics.process(v=vs.71).aspx&quot; rel=&quot;nofollow&quot;&gt;Process&lt;/a&gt; und &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.diagnostics.process.start(v=vs.71).aspx&quot; rel=&quot;nofollow&quot;&gt;Process.Start()&lt;/a&gt;.

Aber du magst wohl recht haben, es gibt bestimmt Ausnahmen. Aber keine konkreten, die mir jetzt einfallen würden. Wenn du eine weißt, würde sie mich interessieren.

Gruß

Christian</description>
		<content:encoded><![CDATA[<p>Hallo Jan,</p>
<p>danke für deinen Kommentar.</p>
<blockquote><p>
Ich finde nicht, dass diese Aussage allgemeingültig ist.
</p></blockquote>
<p>Welche Aussage ist schon wirklich allgemeingültig? Gerade in der Softwareentwicklung. Deshalb mache ich es mir einfach: Statt an jede Aussage ein &#8220;selbstverständlich gibt es Ausnahmen&#8221; dran zu hängen, lasse ich <a href="http://www.christian-rehn.de/2011/05/14/softwareentwicklungs-prinzipien-eine-ubersicht/" rel="nofollow" class="liinternal">meine drei obersten Daumenregeln</a> die Ausnahmen behandeln. </p>
<blockquote><p>
Gesetzter Fall, ich hätte eine (statische) Utility-Klasse mit Methoden, die mir explizite Tasks erfüllen und für die Erfüllung ebenjener eine große Anzahl an Parametern benötigen.
</p></blockquote>
<p>Hier wäre meine Vermutung, dass die Utility-Klasse keine sein sollte. Utility-Klassen haben ihre Berechtigung, aber, wenn man sie zu viel anwendet, ist man wieder bei prozeduraler Programmierung (und eben nicht mehr objektorientiert). Der gedankliche Unterschied ist der, dass Utility-Klassen nichts &#8220;sind&#8221;, sondern nur etwas tun (siehe Daumenregeln Nr. 15 in obigem Artikel).</p>
<p>Aber wie gesagt: Natürlich gibt es Ausnahmen. Aber um ehrlich zu sein, denke ich, dass diese hier selten sind. Mehr als 3, maximal 4 Parameter braucht man wirklich nur sehr sehr selten.</p>
<blockquote><p>
Vielleicht könntest du deine Aussage noch mit einem Beispiel veranschaulichen, um sicherzugehen, dass ich dich nicht falsch verstanden habe.
</p></blockquote>
<p>OK, ein Beispiel:</p>
<p><code class="codecolorer text mac-classic"><span class="text">DoSomething(42, SOME_CONSTANT, &quot;&quot;, &quot;&quot;, <br />
&nbsp; &quot;HelloWorld&quot;, false, true, false, null, <br />
&nbsp; null, null, null);</span></code><br />
Das ist jetzt zwar ein konstruiertes Beispiel, aber man sollte dennoch sehen, dass man hier kaum eine Chance hat, den Methodenaufruf zu verstehen, wenn man sich nicht Code oder Doku der Methode anguckt. Zudem kann man sehr leicht Parameter aus Versehen vertauschen oder falsch belegen, was zu sehr schwer zu findenden Fehlern führt.</p>
<p>Ein reales Beispiel für zu lange Parameterlisten ist <a href="http://msdn.microsoft.com/en-us/library/ms682425(VS.85).aspx" rel="nofollow" class="liexternal">CreateProcess()</a>. Die Funktion ist richtig eklig. Besser wäre es hier, wenn es eine Prozess-Klasse gäbe, die im Konstruktor nur wenige Parameter hat und für die restlichen Infos sinnvolle Default-Werte annimmt, die man über Setter-Methoden (bzw. Properties) ändern kann. Eine start()-Methdode würde dann den Prozess starten. Das wäre viel leichter zu benutzen, viel leichter zu verstehen und weniger fehlerträchtig. Zusätzlich kann es noch ne statische Utility-Methode geben, die mir das Leben einfacher macht, wenn mir die Default-Werte ausreichen. Dann hat diese aber auch nur wenige Parameter.</p>
<p>Und, oh Wunder, AFAIK macht es MS jetzt genau so: <a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.process(v=vs.71).aspx" rel="nofollow" class="liexternal">Process</a> und <a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.process.start(v=vs.71).aspx" rel="nofollow" class="liexternal">Process.Start()</a>.</p>
<p>Aber du magst wohl recht haben, es gibt bestimmt Ausnahmen. Aber keine konkreten, die mir jetzt einfallen würden. Wenn du eine weißt, würde sie mich interessieren.</p>
<p>Gruß</p>
<p>Christian</p>
]]></content:encoded>
	</item>
	<item>
		<title>Kommentar zu Wollt ich nur mal gesagt haben&#8230; von Jan</title>
		<link>http://www.christian-rehn.de/2011/10/05/wollt-ich-nur-mal-gesagt-haben/comment-page-1/#comment-3553</link>
		<dc:creator>Jan</dc:creator>
		<pubDate>Fri, 07 Oct 2011 13:36:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.christian-rehn.de/?p=950#comment-3553</guid>
		<description>Hi Christian,

zu &quot;Lange Parameterlisten sind schwer lesbar und zeugen von schlechtem Design.&quot;

Ich finde nicht, dass diese Aussage allgemeingültig ist. Gesetzter Fall, ich hätte eine (statische) Utility-Klasse mit Methoden, die mir explizite Tasks erfüllen und für die Erfüllung ebenjener eine große Anzahl an Parametern benötigen. Wie sollte man das design-technisch besser lösen als mittels einer langen Parameterliste? Man könnte das Ergebnis natürlich ebenso bekommen, indem man mehrere Methoden hintereinanderschaltet und die Rückgabewerte immer weiterreicht. Ich finde, dass dieses Design eher die Bindung vermindert und die Kopplung erhöht.

Vielleicht könntest du deine Aussage noch mit einem Beispiel veranschaulichen, um sicherzugehen, dass ich dich nicht falsch verstanden habe.

Grüße
Jan</description>
		<content:encoded><![CDATA[<p>Hi Christian,</p>
<p>zu &#8220;Lange Parameterlisten sind schwer lesbar und zeugen von schlechtem Design.&#8221;</p>
<p>Ich finde nicht, dass diese Aussage allgemeingültig ist. Gesetzter Fall, ich hätte eine (statische) Utility-Klasse mit Methoden, die mir explizite Tasks erfüllen und für die Erfüllung ebenjener eine große Anzahl an Parametern benötigen. Wie sollte man das design-technisch besser lösen als mittels einer langen Parameterliste? Man könnte das Ergebnis natürlich ebenso bekommen, indem man mehrere Methoden hintereinanderschaltet und die Rückgabewerte immer weiterreicht. Ich finde, dass dieses Design eher die Bindung vermindert und die Kopplung erhöht.</p>
<p>Vielleicht könntest du deine Aussage noch mit einem Beispiel veranschaulichen, um sicherzugehen, dass ich dich nicht falsch verstanden habe.</p>
<p>Grüße<br />
Jan</p>
]]></content:encoded>
	</item>
</channel>
</rss>

