<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Meinungen zur idealen Schnittstelle]]></title><description><![CDATA[<p>Da sich hier im Büro gerade eine solche Diskussion ergeben hat, würde ich gern mal eure Praktiken, Ansätze und Meinungen zum Design von Schnittstellen hören.<br />
Ich persönlich versuche im wesentlichen, die Anzahl öffentlicher Methoden klein zu halten und dem Kind einen sinnvollen Namen zu geben. Dazu verlagere ich wiederkehrende Arbeiten gern in die Private-Methoden bzw. baue lokale Klassen, um wiederkehrender Arbeiten zu vermeiden.</p>
<p>Konkret im Code heißt das:<br />
Statt</p>
<pre><code class="language-cpp">class foo
{
public:
  foo();
  ~foo();
  void bereiteVor( int startwert );
  void bereiteNach();
  void machDasWofürIchDabin();
};
</code></pre>
<p>eher</p>
<pre><code class="language-cpp">class foo
{
public:
  foo(  int startwert );
  ~foo();
  void machDasWofürIchDabin();

private:
  void bereiteVor();
  void bereiteNach();
};
</code></pre>
<p>Dazu benutze ich gern auch kurze Methoden, um den Code lesbarer zu gestalten. Also statt:</p>
<pre><code class="language-cpp">void foo::bar( int i, int y, bar *pPtr )
{
  if ( i&lt; 1 &amp;&amp; y &gt; 2 &amp;&amp; pPtr )
    // sortiere
...
}
[cpp]

eher so was:

[cpp]
// private
bool foo:BedFürSortIstErfüllt( int i, int y, bar *pPtr )
{
  if ( i&lt; 1 &amp;&amp; y &gt; 2 &amp;&amp; pPtr )
    return true;
  return false; 
}

void foo::bar( int i, int y, bar *pPtr )
{
  if ( BedFürSortIstErfüllt() )
    // sotiere
...
}
</code></pre>
<p>Nachteil des Ganzen: Viele private Methoden, dementsprechend Header mit einer Unmenge an privaten Methoden. Dafür treten aber kaum Code-Wiederholungen auf.</p>
<p>Wie geht ihr vor, was sind eure Erfahrungen?</p>
<p>Gruß Kimmi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/235789/meinungen-zur-idealen-schnittstelle</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 03:40:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/235789.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 06 Mar 2009 12:47:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Meinungen zur idealen Schnittstelle on Fri, 06 Mar 2009 13:00:55 GMT]]></title><description><![CDATA[<p>Da sich hier im Büro gerade eine solche Diskussion ergeben hat, würde ich gern mal eure Praktiken, Ansätze und Meinungen zum Design von Schnittstellen hören.<br />
Ich persönlich versuche im wesentlichen, die Anzahl öffentlicher Methoden klein zu halten und dem Kind einen sinnvollen Namen zu geben. Dazu verlagere ich wiederkehrende Arbeiten gern in die Private-Methoden bzw. baue lokale Klassen, um wiederkehrender Arbeiten zu vermeiden.</p>
<p>Konkret im Code heißt das:<br />
Statt</p>
<pre><code class="language-cpp">class foo
{
public:
  foo();
  ~foo();
  void bereiteVor( int startwert );
  void bereiteNach();
  void machDasWofürIchDabin();
};
</code></pre>
<p>eher</p>
<pre><code class="language-cpp">class foo
{
public:
  foo(  int startwert );
  ~foo();
  void machDasWofürIchDabin();

private:
  void bereiteVor();
  void bereiteNach();
};
</code></pre>
<p>Dazu benutze ich gern auch kurze Methoden, um den Code lesbarer zu gestalten. Also statt:</p>
<pre><code class="language-cpp">void foo::bar( int i, int y, bar *pPtr )
{
  if ( i&lt; 1 &amp;&amp; y &gt; 2 &amp;&amp; pPtr )
    // sortiere
...
}
[cpp]

eher so was:

[cpp]
// private
bool foo:BedFürSortIstErfüllt( int i, int y, bar *pPtr )
{
  if ( i&lt; 1 &amp;&amp; y &gt; 2 &amp;&amp; pPtr )
    return true;
  return false; 
}

void foo::bar( int i, int y, bar *pPtr )
{
  if ( BedFürSortIstErfüllt() )
    // sotiere
...
}
</code></pre>
<p>Nachteil des Ganzen: Viele private Methoden, dementsprechend Header mit einer Unmenge an privaten Methoden. Dafür treten aber kaum Code-Wiederholungen auf.</p>
<p>Wie geht ihr vor, was sind eure Erfahrungen?</p>
<p>Gruß Kimmi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675217</guid><dc:creator><![CDATA[kimmi]]></dc:creator><pubDate>Fri, 06 Mar 2009 13:00:55 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur idealen Schnittstelle on Fri, 06 Mar 2009 12:53:02 GMT]]></title><description><![CDATA[<p>kimmi schrieb:</p>
<blockquote>
<p>Nachteil des Ganzen: Viele private Methoden, dementsprechend Header mit einer Unmenge an privaten Methoden.</p>
</blockquote>
<p>Wenn dich das stoert, dann verwende das pimpl-Idiom.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675219</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 06 Mar 2009 12:53:02 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur idealen Schnittstelle on Fri, 06 Mar 2009 12:55:10 GMT]]></title><description><![CDATA[<p>Jo, das ist eine gute Idee. Werde ich ins Auge fassen.</p>
<p>Gruß Kimmi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675221</guid><dc:creator><![CDATA[kimmi]]></dc:creator><pubDate>Fri, 06 Mar 2009 12:55:10 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur idealen Schnittstelle on Fri, 06 Mar 2009 12:55:32 GMT]]></title><description><![CDATA[<p>Das geht wieder in Richtung Code-Stil, somit kann nicht von einem einzig wahren Weg die Rede sein. Hoffe, dass dieser Thread nicht in einen Flamewar ausartet. :p</p>
<p>Grundsätzlich würde ich aber sagen, das Aufsplitten in kleine Funktionen lohnt sich vor allem, wenn diese an mehreren Stellen aufgerufen werden (und somit Codeduplizierung verhindern) oder wenn dadurch die Übersichtlichkeit gesteigert wird. Man kann es aber auch übertreiben, ich persönlich beliesse es zum Beispiel bei einer Funktion fürs Sortieren, ausser es ist ein sehr komplizierter Algorithmus im Spiel, der noch etliche Nebeneffekte oder ähnliches bewirkt.</p>
<p>Falls dir die privaten Memberfunktionen zu viel werden, kannst du dich mal nach dem Handle-Body-Idiom (Pimpl) umschauen. Da kann man die Implementierung in eine andere Klasse verlagern, wodurch Abhängigkeiten verringert werden.</p>
<p>P.S. Du meinst doch sicher &quot;ideale Schnittstelle&quot;, oder? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675222</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 06 Mar 2009 12:55:32 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur idealen Schnittstelle on Fri, 06 Mar 2009 13:00:40 GMT]]></title><description><![CDATA[<p>Ops, jo, das meine ich. *malebenkorrigier* Danke :).</p>
<p>Gruß Kimmi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675224</guid><dc:creator><![CDATA[kimmi]]></dc:creator><pubDate>Fri, 06 Mar 2009 13:00:40 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur idealen Schnittstelle on Fri, 06 Mar 2009 13:50:18 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Das geht wieder in Richtung Code-Stil, somit kann nicht von einem einzig wahren Weg die Rede sein. Hoffe, dass dieser Thread nicht in einen Flamewar ausartet. :p</p>
</blockquote>
<p>*kopfnick kopfnick*</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Grundsätzlich würde ich aber sagen, das Aufsplitten in kleine Funktionen lohnt sich vor allem, wenn diese an mehreren Stellen aufgerufen werden (und somit Codeduplizierung verhindern) oder wenn dadurch die Übersichtlichkeit gesteigert wird. Man kann es aber auch übertreiben, ich persönlich beliesse es zum Beispiel bei einer Funktion fürs Sortieren, ausser es ist ein sehr komplizierter Algorithmus im Spiel, der noch etliche Nebeneffekte oder ähnliches bewirkt.</p>
</blockquote>
<p>*kopfnick kopfnick*<br />
Und ich denke die Schwierigkeit am Ende ist es, dass man das Mittelmass findet. Dieses ist nicht nur jedes mal sehr anders, sondern auch äusserst subjektiv.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Falls dir die privaten Memberfunktionen zu viel werden, kannst du dich mal nach dem Handle-Body-Idiom (Pimpl) umschauen. Da kann man die Implementierung in eine andere Klasse verlagern, wodurch Abhängigkeiten verringert werden.</p>
</blockquote>
<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Wenn dich das stoert, dann verwende das pimpl-Idiom.</p>
</blockquote>
<p>Die Frage geht an euch zwei:<br />
Ist das schlussendlich nicht einfach nur eine Verlagerung des Problems? Also jetzt in diesem speziellen Falle mit den zu vielen privaten Methoden.</p>
<p>Wenn schon würde ich eher empfehlen, dass man die Funktion der Klasse weiter aufsplittet, wenn dies möglich ist.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675282</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 06 Mar 2009 13:50:18 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur idealen Schnittstelle on Fri, 06 Mar 2009 14:00:19 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Die Frage geht an euch zwei:<br />
Ist das schlussendlich nicht einfach nur eine Verlagerung des Problems? Also jetzt in diesem speziellen Falle mit den zu vielen privaten Methoden.</p>
</blockquote>
<p>Es kommt halt drauf an. Viele private Memberfunktionen sind ja an sich nicht schlimm, mühsam wird es, wenn man oft Änderungen durchführt und dadurch immer alle abhängigen Module neu kompilieren muss. Bei vielen kleinen Funktionen ist die Tendenz für Änderungen der Deklarationen auch höher.</p>
<p>Und ich weiss auch nicht, inwiefern sich der Threadersteller nur an dem reinen Gedanken gestört hat, viele private Methoden in der Klasse zu haben, und nicht an den effektiven Auswirkungen...</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Wenn schon würde ich eher empfehlen, dass man die Funktion der Klasse weiter aufsplittet, wenn dies möglich ist.</p>
</blockquote>
<p>Ja, wobei man hier auch aufpassen muss. Möglich ist eine weitere Kapselung sehr oft - fraglich ist eher, ob es einem einen Vorteil bringt. Eine Klasse, die eine bestimmte Funktionalität hat, sollte man nicht künstlich aufzutrennen versuchen.</p>
<p>Was auch dazukommt und mir erst jetzt aufgefallen ist: Funktionen, die nicht direkt auf Member der Klasse zugreifen und keine strenge Bindung zur Klasse haben, sollten wenn möglich als freie Funktion implementiert werden. Das gilt zum Beispiel für das Sortierkriterium im Codebeispiel des Threaderstellers. Auf diese Weise kann die Anzahl Memberfunktionen ebenfalls reduziert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675291</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 06 Mar 2009 14:00:19 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur idealen Schnittstelle on Fri, 06 Mar 2009 15:14:17 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Viele private Memberfunktionen sind ja an sich nicht schlimm, ...</p>
</blockquote>
<p>Kommt drauf an, wieviele es sind. Wenn er 200 Stück hat, dann empfinde ich dies als VIEL ZU VIEL <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Und wenn es eben viel zu viele sind, dann kann ich auch das folgende verstehen:</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Und ich weiss auch nicht, inwiefern sich der Threadersteller nur an dem reinen Gedanken gestört hat, viele private Methoden in der Klasse zu haben, und nicht an den effektiven Auswirkungen...</p>
</blockquote>
<p>Es geht nicht um die Auswirkungen, sondern die Übersicht und Wartbarkeit.<br />
Deshalb meinte ich eben auch, dass ihr mit dem Pimpl-Idiom grundsätzlich das Problem nur verschiebt.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675356</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 06 Mar 2009 15:14:17 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur idealen Schnittstelle on Fri, 06 Mar 2009 17:56:09 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Es geht nicht um die Auswirkungen, sondern die Übersicht und Wartbarkeit.<br />
Deshalb meinte ich eben auch, dass ihr mit dem Pimpl-Idiom grundsätzlich das Problem nur verschiebt.</p>
</blockquote>
<p>Du hast insofern Recht, als die Klasse grundsätzlich fragwürdig ist, sobald einem die Anzahl Memberfunktionen zu viel wird. Da ist abhängig vom Fall eine der anderen Vorgehensweisen besser geeignet (sofern sinnvoll), hier nochmals zusammengefasst:</p>
<ul>
<li>Zusammenfassung von Funktionen</li>
<li>Aufteilung der Klasse</li>
<li>Erstellung freier Funktionen (geht auch lokal in der CPP-Datei, ohne Deklaration im Header - so sieht man von aussen gar nichts)</li>
</ul>
<p>Aber je nach Anwendung <strong>kann</strong> Pimpl schon die Übersicht oder Wartbarkeit erhöhen. Vor allem, wenn die Schnittstellenfunktionen mehr oder weniger gleich bleiben, während deren aufgerufene private Methoden häufig geändert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675442</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 06 Mar 2009 17:56:09 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur idealen Schnittstelle on Fri, 06 Mar 2009 18:01:54 GMT]]></title><description><![CDATA[<p>Ausserdem geht es darum, wie man in einem größeren Team gut mit so etwas arbeiten kann bzw. welche Variante Sinn macht. Wenn Entwickler 1 versucht, durch viele private Methoden das Ganze lesbarer zu machen, Entwickler 2 jedoch versucht, durch längere Methoden die Lösung des Problems an einem Ort zu verdichten, muß man sich ja irgendwo in der Mitte treffen. Beide Ansätze führen zum Ziel, nur wieviel von beiden Ansätzen sollte man benutzen?<br />
Schließlich will man ja nicht, daß Entwickler 2 jedes mal alles refaktorisiert, um seinen &quot;Stil&quot; beizubehalten. Da wollte ich einfach mal andere Meinungen dazu hören, um einen guten Mittelweg zu finden.</p>
<p>Gruß Kimmi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675448</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675448</guid><dc:creator><![CDATA[kimmi]]></dc:creator><pubDate>Fri, 06 Mar 2009 18:01:54 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur idealen Schnittstelle on Fri, 06 Mar 2009 18:06:09 GMT]]></title><description><![CDATA[<p>Ich denke mal, dass man das nicht allgemeingültig sagen kann, sondern das in dem Team, in dem man arbeitet besprechen muss. Auch wenn man sich schlussendlich dafür entscheidet etwas auf eine Art zu machen, wie es sonst niemand macht, solange die Teammitglieder sich dafür einsetzen können läufts (solange es natürlich auch Sinn macht).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675453</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 06 Mar 2009 18:06:09 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur idealen Schnittstelle on Fri, 06 Mar 2009 18:14:55 GMT]]></title><description><![CDATA[<p>Dem stimme ich zu. Eine endgültig perfekte Lösung gibt es nicht. Ich habe sowohl den Ansatz gesehen, daß der eine Entwickler komplett den Code umstrukturiert, um seinen Stil zu pflegen. Dummerweise kann man dann im Diff nicht mehr erkennen, wo nun die entscheidende Änderung war bzw. was sich für ein neues Feature wirklich geändert hat.<br />
Ich kenne aber auch die andere Variante, daß man versucht, den Code weitesgehend nicht anzufassen und nur die Stellen zu modifizieren, die für die Änderung wirklich nötig sind. Nun kann gerade bei Code-Wiederholungen da gern mal eine Stelle übersehen werden.</p>
<p>Gruß Kimmi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675459</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675459</guid><dc:creator><![CDATA[kimmi]]></dc:creator><pubDate>Fri, 06 Mar 2009 18:14:55 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur idealen Schnittstelle on Fri, 06 Mar 2009 18:33:18 GMT]]></title><description><![CDATA[<p>Sofern die Team-Mitglieder nicht alle total eigenwillig und stur sind, sollte man sich eigentlich auf einen mehr oder weniger einheitlichen Codestil einigen können. Zumindest, was Einrückungen, Bezeichner, Klammersetzung und solche Dinge betrifft... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Sofern das möglich ist, fände ich das sicher sinnvoller, als wenn jeder in seinem Teil seinen eigenen Stil pflegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675468</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 06 Mar 2009 18:33:18 GMT</pubDate></item></channel></rss>