<?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[Das &amp;quot;I&amp;quot;-Prefix bei Interfaces]]></title><description><![CDATA[<p>Hallo leute,</p>
<p>ich stelle immer häufiger fest, dass in vielen komponenten das &quot;I&quot;-Prefix bei Interfaces verwendet wird. In .NET scheint es standard zu sein und bei Java habe ich das häufiger in eclipse-komponenten gesehen.</p>
<p>Was hat das überhaupt für einen zweck? Für mich als anwender einer bibliothek ist es doch völlig egal, ob es ein interface, eine klasse oder eine abstrakte klasse ist, auf der ich operationen ausführe; es ist ein typ! Deshalb ist mir der sinn und zweck dieses prefixes schleierhaft. Schon allein das lesen ist ja ekel erregend: &quot;Iiihhh-Collection&quot;, &quot;Iiihhh-Comparable&quot; oder so <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>Was hat das also für einen Zweck? Oder können sich diese leute nicht einfach endgültig von der ungarischen notation verabschieden?</p>
<p>Gruß<br />
mathik</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/178092/das-quot-i-quot-prefix-bei-interfaces</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Jul 2026 14:23:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/178092.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 07 Apr 2007 11:03:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Sat, 07 Apr 2007 11:03:09 GMT]]></title><description><![CDATA[<p>Hallo leute,</p>
<p>ich stelle immer häufiger fest, dass in vielen komponenten das &quot;I&quot;-Prefix bei Interfaces verwendet wird. In .NET scheint es standard zu sein und bei Java habe ich das häufiger in eclipse-komponenten gesehen.</p>
<p>Was hat das überhaupt für einen zweck? Für mich als anwender einer bibliothek ist es doch völlig egal, ob es ein interface, eine klasse oder eine abstrakte klasse ist, auf der ich operationen ausführe; es ist ein typ! Deshalb ist mir der sinn und zweck dieses prefixes schleierhaft. Schon allein das lesen ist ja ekel erregend: &quot;Iiihhh-Collection&quot;, &quot;Iiihhh-Comparable&quot; oder so <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>Was hat das also für einen Zweck? Oder können sich diese leute nicht einfach endgültig von der ungarischen notation verabschieden?</p>
<p>Gruß<br />
mathik</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261112</guid><dc:creator><![CDATA[mathik]]></dc:creator><pubDate>Sat, 07 Apr 2007 11:03:09 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Sat, 07 Apr 2007 11:19:37 GMT]]></title><description><![CDATA[<p>Ich finds auch sinnlos. Gluecklicherweise gibts eine ganz einfache Loesung: einfach ignorieren <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/1261122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261122</guid><dc:creator><![CDATA[Blue-Tiger]]></dc:creator><pubDate>Sat, 07 Apr 2007 11:19:37 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Sat, 07 Apr 2007 11:25:22 GMT]]></title><description><![CDATA[<p>In Java ist ein Interface doch etwas vollkommen anderes als eine Klasse. Von daher find ich es da auch überflüssig. In C# ist es afaik genauso, aber das .NET Framework gibts ja nicht nur für C#, von daher find ich es da sinnvoller, da C++ (wobei hat das CLI C++ richtige interfaces?) dafür keine direkte Sprachunterstützung hat.<br />
Hier kann man mit nem I vor dem Klassennamen direkt sagen, dass es keine eigenständige Klasse ist, sondern eine Schnittstelle darstellen soll.<br />
Bei der ungarischen Notation, wie sie in der Praxis angewandt wird, schreibt man etwas in den Namen das auch schon so da steht, aber ob eine Klasse ein Interface ist steht nicht klar da, das muss man schon aus der Klassendefinition heraus interpretieren. Und von daher finde ich es hier durchaus sinnvoll das durch ein I deutlich zu machen (das weicht von der &quot;echten&quot; Nutzung der ungarischen Notation gar nicht arg ab).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261126</guid><dc:creator><![CDATA[lolz]]></dc:creator><pubDate>Sat, 07 Apr 2007 11:25:22 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Sat, 07 Apr 2007 12:07:16 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/2162">@Blue-Tiger</a><br />
ich versuche es ja, aber wegen diesem doofen &quot;Iiihhh&quot; davor ist das nicht so einfach... <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>lolz schrieb:</p>
<blockquote>
<p>In Java ist ein Interface doch etwas vollkommen anderes als eine Klasse. Von daher find ich es da auch überflüssig. In C# ist es afaik genauso, aber das .NET Framework gibts ja nicht nur für C#, von daher find ich es da sinnvoller, da C++ (wobei hat das CLI C++ richtige interfaces?) dafür keine direkte Sprachunterstützung hat.<br />
Hier kann man mit nem I vor dem Klassennamen direkt sagen, dass es keine eigenständige Klasse ist, sondern eine Schnittstelle darstellen soll.<br />
Bei der ungarischen Notation, wie sie in der Praxis angewandt wird, schreibt man etwas in den Namen das auch schon so da steht, aber ob eine Klasse ein Interface ist steht nicht klar da, das muss man schon aus der Klassendefinition heraus interpretieren. Und von daher finde ich es hier durchaus sinnvoll das durch ein I deutlich zu machen (das weicht von der &quot;echten&quot; Nutzung der ungarischen Notation gar nicht arg ab).</p>
</blockquote>
<p>ist doch völlig egal, dass es in C++ <strong>technisch</strong> keine explizite unterscheidung zwischen interfaces und (abstrakten) klassen gibt. in c++ ist ein interface nichts anderes als eine klasse aus &quot;pure-virtual-functions&quot;.</p>
<p>nochmal die frage: wo hat es für dich für einen vorteil, wenn du ganz genau weißt, dass das ein interface ist und keine (abstrakte) klasse??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261148</guid><dc:creator><![CDATA[mathik]]></dc:creator><pubDate>Sat, 07 Apr 2007 12:07:16 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Sat, 07 Apr 2007 12:29:30 GMT]]></title><description><![CDATA[<p>in eclipse wurde das so gemacht, weil zu jedem interface eine implementierende klasse mit dem selben namen existiert: IPath &lt;- Path<br />
IMO is diese namensgebung besser als Path &lt;- PathImpl oder DefaultPath<br />
wenn man allerdings keinen namenskonflikt hat (z.B. IActionListener würde nich viel sinn machen wenn man keine IActionListener&lt;-ActionListener klasse hat) kann man sich das I schenken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261157</guid><dc:creator><![CDATA[schlauher als ihr]]></dc:creator><pubDate>Sat, 07 Apr 2007 12:29:30 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Sat, 07 Apr 2007 12:40:25 GMT]]></title><description><![CDATA[<p>schlauher als ihr schrieb:</p>
<blockquote>
<p>in eclipse wurde das so gemacht, weil zu jedem interface eine implementierende klasse mit dem selben namen existiert: IPath &lt;- Path<br />
IMO is diese namensgebung besser als Path &lt;- PathImpl oder DefaultPath<br />
wenn man allerdings keinen namenskonflikt hat (z.B. IActionListener würde nich viel sinn machen wenn man keine IActionListener&lt;-ActionListener klasse hat) kann man sich das I schenken.</p>
</blockquote>
<p>Hört sich für mich so an, als ob man da bestimmte Design-Richtlinien aus Prinzip und ohne Verstand befolgt hat, so dass der eigentliche Sinn von Interfaces ad absurdum geführt wurde. <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>BTW: Nach den Coding Conventions von Sun sollten die Namen von Interfaces in Java möglichst Adjektive sein, während die Namen von Klassen Substantive sein sollten. Das sollte wohl zur Unterscheidung reichen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261160</guid><dc:creator><![CDATA[Gregor]]></dc:creator><pubDate>Sat, 07 Apr 2007 12:40:25 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Sat, 07 Apr 2007 12:50:47 GMT]]></title><description><![CDATA[<p>Offensichtlich gibt es ja einen Unterschied zwischen einem Interface und einer abstrakten Basisklasse. Diesen semantischen Unterschied kann man durch das &quot;I&quot; deutlich machen, um dies schneller zu sehen. Während eine abstrakte Klasse z.B. als Analyseklasse der OOA entstehen kann, sind Interfaces ja eher technische Verbinder zwischen Objekten. Durch die Kennzeichnung kann man den Leser schneller mit der Nase auf diesen Unterschied stossen. Ich finde das daher nicht so schlimm... wobei man es genauso auch durch die Namensgebung der Klasse kennzeichnen kann, es ist dann nur weniger offensichtlich normiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261163</guid><dc:creator><![CDATA[Marc++us]]></dc:creator><pubDate>Sat, 07 Apr 2007 12:50:47 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Sat, 07 Apr 2007 19:17:02 GMT]]></title><description><![CDATA[<p>Marc++us schrieb:</p>
<blockquote>
<p>Offensichtlich gibt es ja einen Unterschied zwischen einem Interface und einer abstrakten Basisklasse. Diesen semantischen Unterschied kann man durch das &quot;I&quot; deutlich machen, um dies schneller zu sehen. Während eine abstrakte Klasse z.B. als Analyseklasse der OOA entstehen kann, sind Interfaces ja eher technische Verbinder zwischen Objekten. Durch die Kennzeichnung kann man den Leser schneller mit der Nase auf diesen Unterschied stossen. Ich finde das daher nicht so schlimm... wobei man es genauso auch durch die Namensgebung der Klasse kennzeichnen kann, es ist dann nur weniger offensichtlich normiert.</p>
</blockquote>
<p>naja, ich würde eher sagen, dass man in der OOA von typen bzw. fachklassen spricht. wie diese typen letzendlich im entwurf bzw. im programm abgebildet werden (womöglich unter einsatz bestimmter entwurfsmuster) ist dann technologieabhängig, z.b. mit (abstrakten) klassen, interfaces, C-structs, usw.</p>
<p>ich als client einer komponente will doch eigentlich garnicht wissen, ob ich operationen auf einem interface oder auf einer klasse ausführe. ich finde durch das &quot;I&quot;-prefix werden zu viel implementierungsdetails nach außen gegeben und die lesbarkeit gehindert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261333</guid><dc:creator><![CDATA[mathik]]></dc:creator><pubDate>Sat, 07 Apr 2007 19:17:02 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Sat, 07 Apr 2007 19:25:46 GMT]]></title><description><![CDATA[<p>ich habe fuer jedes interfaces zu meinen implementationen ebenfalls eine normale klasse. ich kann nicht beides gleich benennen, ich mag auch nicht extra verschiedene namespaces dafuer generieren wenn sie eigentlich den gleichen bereich ansprchen, deswegen mach ich den einzigen sinn-unterschied im namen deutlich, naemlich dass das eine eine Classe ist und das andere nur ein Interface.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261339</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Sat, 07 Apr 2007 19:25:46 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Sat, 07 Apr 2007 19:30:47 GMT]]></title><description><![CDATA[<p>Das tun die Leute mit dem &quot;I&quot;-Prefix doch auch. <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/1261342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261342</guid><dc:creator><![CDATA[Marc++us]]></dc:creator><pubDate>Sat, 07 Apr 2007 19:30:47 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Sat, 07 Apr 2007 19:33:54 GMT]]></title><description><![CDATA[<p>Gregor schrieb:</p>
<blockquote>
<p>schlauher als ihr schrieb:</p>
<blockquote>
<p>in eclipse wurde das so gemacht, weil zu jedem interface eine implementierende klasse mit dem selben namen existiert: IPath &lt;- Path<br />
IMO is diese namensgebung besser als Path &lt;- PathImpl oder DefaultPath<br />
wenn man allerdings keinen namenskonflikt hat (z.B. IActionListener würde nich viel sinn machen wenn man keine IActionListener&lt;-ActionListener klasse hat) kann man sich das I schenken.</p>
</blockquote>
<p>Hört sich für mich so an, als ob man da bestimmte Design-Richtlinien aus Prinzip und ohne Verstand befolgt hat, so dass der eigentliche Sinn von Interfaces ad absurdum geführt wurde. <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>BTW: Nach den Coding Conventions von Sun sollten die Namen von Interfaces in Java möglichst Adjektive sein, während die Namen von Klassen Substantive sein sollten. Das sollte wohl zur Unterscheidung reichen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>mir ist ehrlich gesagt nicht klar, warum namen von interfaces eher adjektive und vor klassen eher substantive sein sollten. Collection ist ja auch kein adjektiv <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="😉"
    /><br />
interfaces, (abstrakte) klassen, structs usw. sind doch einfach technische konzepte zur abbildung von typen aus der analyse im programm.</p>
<p>ich verwende interfaces und (abstrakte) klassen nach dem folgenden prinzip:<br />
1. wenn ich sehe, dass es für eine schnittstelle mehrere unterschiedliche implementierungen gibt bzw. benötigt werden, dann nehme ich ein interface.<br />
2. wenn ich sehe, dass ein paar klassen das gleiche verhalten haben und sich nur in ein paar details unterscheiden, dann mache ich eine abstrakte basisklasse und wende das template-pattern an.<br />
3. ansonsten verwende ich klassen und refaktorisiere diese nach bedarf , falls 1. oder 2. zustrifft.</p>
<p>dadurch ist es für die klienten völlig egal und transparent, ob diese nun auf interfaces oder klassen operieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261347</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261347</guid><dc:creator><![CDATA[mathik]]></dc:creator><pubDate>Sat, 07 Apr 2007 19:33:54 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Sat, 07 Apr 2007 19:37:34 GMT]]></title><description><![CDATA[<p>rapso schrieb:</p>
<blockquote>
<p>ich habe fuer jedes interfaces zu meinen implementationen ebenfalls eine normale klasse.</p>
</blockquote>
<p>was erhoffst du dir dadurch, indem du das für jede klasse machst? eine klasse hat doch auch eine schnittstelle, nämlich die öffentlichen operationen. der rest ist für die klienten tabu und wird von denen verborgen (&quot;jede klasse sollte wie ein eisberg sein: man sieht nur die spitze&quot;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261348</guid><dc:creator><![CDATA[mathik]]></dc:creator><pubDate>Sat, 07 Apr 2007 19:37:34 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Sun, 08 Apr 2007 11:59:54 GMT]]></title><description><![CDATA[<p>rapso schrieb:</p>
<blockquote>
<p>ich habe fuer jedes interfaces zu meinen implementationen ebenfalls eine normale klasse.</p>
</blockquote>
<p>Wozu dann ueberhaupt das Interface? Wenn du fuer jedes Interface nur 1 Implementation hast, wozu dann ueberhaupt das Interface? In so einem Fall wuerde ich persoenlich einfach die Implementierung verwenden. Sollte ich spaeter sehen, dass es verschiedene Implementierungen braucht, kann ich das immer noch rausfaktorisieren (das Interface behaelt dann den Namen und die 2 Implementierungen erhalten Namen, die ihre Unterschiede voneinander ausdruecken).<br />
Wenn ich z. B. eine verkettete Liste brauch (und keine Sdt.-Lib haette <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="😉"
    /> ), schreib ich erst mal eine Klasse &quot;LinkedList&quot;, die genau das implementiert. Und die verwend ich ueberall. Entdeck ich spaeter, dass es an manchen Stellen Sinn machen wuerden, eine LinkedList mit konstanter Zugriffszeit auf beliebige Elemente zu haben, Wird aus &quot;LinkedList&quot; eben ein &quot;List&quot;-Interface, und &quot;LinkedList&quot; und &quot;ArrayList&quot; implementieren das dann.</p>
<p>schlauher als ihr schrieb:</p>
<blockquote>
<p>in eclipse wurde das so gemacht, weil zu jedem interface eine implementierende klasse mit dem selben namen existiert: IPath &lt;- Path<br />
IMO is diese namensgebung besser als Path &lt;- PathImpl oder DefaultPath</p>
</blockquote>
<p>Gleiche Frage: wozu brauchen die ein Interface, wenn sie doch nur 1 Implementierung haben? Und wenn sie dem Benutzer die Moeglichkeit bieten wollen, eigene Implementierungen zur Verfuegung zu stellen und deswegen Interfaces anbieten, dann ja, dann find ich &quot;DefaultXyz&quot; ist ein sehr guter Name fuer die Standardimplementierung von Xyz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261603</guid><dc:creator><![CDATA[Blue-Tiger]]></dc:creator><pubDate>Sun, 08 Apr 2007 11:59:54 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Sun, 08 Apr 2007 12:49:06 GMT]]></title><description><![CDATA[<p>mathik schrieb:</p>
<blockquote>
<p>rapso schrieb:</p>
<blockquote>
<p>ich habe fuer jedes interfaces zu meinen implementationen ebenfalls eine normale klasse.</p>
</blockquote>
<p>was erhoffst du dir dadurch, indem du das für jede klasse machst?</p>
</blockquote>
<p>Eine Trennung von Typ und Klasse?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261629</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Sun, 08 Apr 2007 12:49:06 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Sun, 08 Apr 2007 13:10:24 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<p>mathik schrieb:</p>
<blockquote>
<p>rapso schrieb:</p>
<blockquote>
<p>ich habe fuer jedes interfaces zu meinen implementationen ebenfalls eine normale klasse.</p>
</blockquote>
<p>was erhoffst du dir dadurch, indem du das für jede klasse machst?</p>
</blockquote>
<p>Eine Trennung von Typ und Klasse?</p>
</blockquote>
<p>d.h. deiner meinung nach ist typ=interface und implementierung=klasse??<br />
das ist ja auch korrekt, nur nicht vollständig. eine klasse hat genauso wie ein interface eine schnittstelle: die öffentlichen operationen.</p>
<p>wie schon bereits gesagt: ein typ aus der analyse kann technisch durch ein oder mehrere interfaces und (abstrakten) klassen realisiert werden. genauso können ein interface und eine (abstrake) klasse mehrere typen realisieren. für mich sind das somit technische konzepte um typen programmtechnisch abzubilden; evtl. sogar vergleichbar mit for- vs. while-schleifen <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>deshalb finde ich es übertrieben konsequent für jede klasse ein interface zu erstellen, auch wenn es nur eine implementierung gibt. das verkompliziert den code nur unnötig. außerdem gibt es eine refactoring-operation: &quot;extract-interface&quot;, mit der man zu einer klasse durch knopfdruck ein interface generieren kann und alle klienten darauf automatisch angepasst werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261640</guid><dc:creator><![CDATA[mathik]]></dc:creator><pubDate>Sun, 08 Apr 2007 13:10:24 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Sun, 08 Apr 2007 16:32:38 GMT]]></title><description><![CDATA[<p>Blue-Tiger schrieb:</p>
<blockquote>
<p>schlauher als ihr schrieb:</p>
<blockquote>
<p>in eclipse wurde das so gemacht, weil zu jedem interface eine implementierende klasse mit dem selben namen existiert: IPath &lt;- Path<br />
IMO is diese namensgebung besser als Path &lt;- PathImpl oder DefaultPath</p>
</blockquote>
<p>Gleiche Frage: wozu brauchen die ein Interface, wenn sie doch nur 1 Implementierung haben? Und wenn sie dem Benutzer die Moeglichkeit bieten wollen, eigene Implementierungen zur Verfuegung zu stellen und deswegen Interfaces anbieten, dann ja, dann find ich &quot;DefaultXyz&quot; ist ein sehr guter Name fuer die Standardimplementierung von Xyz.</p>
</blockquote>
<p>Also ich kann mir das durchaus vorstellen, vor allem, wenn ich bedenke, dass ich gerade System-Resourcen (z.B: eben Path) bzw. Objekte die System-Resourcen verwenden (z.B: Zugriffsobjekte für die Datenbankschicht) in Komponententests mocken möchte. Bei mir geht das teilweise schon so weit, dass ich nur noch die Schnittstelle habe und mir aus dieser (und einigen zusätzlichen Metadaten) die Implementierung generieren lasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261758</guid><dc:creator><![CDATA[dsf232sdg]]></dc:creator><pubDate>Sun, 08 Apr 2007 16:32:38 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Sun, 08 Apr 2007 16:46:41 GMT]]></title><description><![CDATA[<p>dsf232sdg schrieb:</p>
<blockquote>
<p>Blue-Tiger schrieb:</p>
<blockquote>
<p>schlauher als ihr schrieb:</p>
<blockquote>
<p>in eclipse wurde das so gemacht, weil zu jedem interface eine implementierende klasse mit dem selben namen existiert: IPath &lt;- Path<br />
IMO is diese namensgebung besser als Path &lt;- PathImpl oder DefaultPath</p>
</blockquote>
<p>Gleiche Frage: wozu brauchen die ein Interface, wenn sie doch nur 1 Implementierung haben? Und wenn sie dem Benutzer die Moeglichkeit bieten wollen, eigene Implementierungen zur Verfuegung zu stellen und deswegen Interfaces anbieten, dann ja, dann find ich &quot;DefaultXyz&quot; ist ein sehr guter Name fuer die Standardimplementierung von Xyz.</p>
</blockquote>
<p>Also ich kann mir das durchaus vorstellen, vor allem, wenn ich bedenke, dass ich gerade System-Resourcen (z.B: eben Path) bzw. Objekte die System-Resourcen verwenden (z.B: Zugriffsobjekte für die Datenbankschicht) in Komponententests mocken möchte. Bei mir geht das teilweise schon so weit, dass ich nur noch die Schnittstelle habe und mir aus dieser (und einigen zusätzlichen Metadaten) die Implementierung generieren lasse.</p>
</blockquote>
<p>Hmm.... ok, die Autogenerierung klingt sinnvoll <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Aber warum ists fuer Komponententests sinnvoll, bei nur 1 Implementierung eine Interface/Implementierungstrennung einzufuehren? Ist das nicht unnoetige Komplexitaet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261766</guid><dc:creator><![CDATA[Blue-Tiger]]></dc:creator><pubDate>Sun, 08 Apr 2007 16:46:41 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Sun, 08 Apr 2007 21:30:53 GMT]]></title><description><![CDATA[<p>Blue-Tiger schrieb:</p>
<blockquote>
<p>Hmm.... ok, die Autogenerierung klingt sinnvoll <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Aber warum ists fuer Komponententests sinnvoll, bei nur 1 Implementierung eine Interface/Implementierungstrennung einzufuehren? Ist das nicht unnoetige Komplexitaet?</p>
</blockquote>
<p>Natürlich lassen sich dadurch die Implementierungen ansich nicht einfacher testen, aber gerade wenn Abhängigkeiten zu anderen Komponenten bestehen, lassen sich diese dann, wenn auch nur beim Testen, ersetzen um eine isolierte Ausführung zu gewährleisten. Mock-Objekte implementieren Schnittstellen, enthalten aber statt Geschäftslogik die notwendige Testlogik (also beispielsweise einige Assertions). Am besten siehst du dir dazu aber die Theorie zu <a href="http://de.wikipedia.org/wiki/Mock-Objekt" rel="nofollow">Mock-Objekten</a> an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261979</guid><dc:creator><![CDATA[sdgf35tfv]]></dc:creator><pubDate>Sun, 08 Apr 2007 21:30:53 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Mon, 09 Apr 2007 12:38:50 GMT]]></title><description><![CDATA[<p>testbarkeit ist aber immer noch kein argument dafür, für <strong>jede</strong> klasse ein interface zu machen. mock-objekte können nämlich - zumindest bei java (z.b. mit easymock) - auch für klassen erstellt werden.</p>
<p>mich stört ja auch nicht, dass interfaces für schnittstellen von komponenten verwendet werden, oder dass sie in maßen verwendet werden. mich stört eigentlich nur das &quot;I&quot;-prefix. denn ich will auf typen operieren - diese werden meistens durch interfaces repräsentiert - und deren name ist dann durch dieses &quot;Iiihhh&quot; vermurkst. &quot;PathImpl&quot; oder &quot;DefaultPath&quot; oder &quot;IPath&quot; (steht jedoch für PathImplementation) finde ich besser, da diese durch das interface &quot;Path&quot; an der schnittstelle der komponente sowieso verdeckt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1262220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1262220</guid><dc:creator><![CDATA[mathik]]></dc:creator><pubDate>Mon, 09 Apr 2007 12:38:50 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Mon, 09 Apr 2007 13:15:18 GMT]]></title><description><![CDATA[<p>mathik schrieb:</p>
<blockquote>
<p>testbarkeit ist aber immer noch kein argument dafür, für <strong>jede</strong> klasse ein interface zu machen. mock-objekte können nämlich - zumindest bei java (z.b. mit easymock) - auch für klassen erstellt werden.</p>
<p>mich stört ja auch nicht, dass interfaces für schnittstellen von komponenten verwendet werden, oder dass sie in maßen verwendet werden. mich stört eigentlich nur das &quot;I&quot;-prefix. denn ich will auf typen operieren - diese werden meistens durch interfaces repräsentiert - und deren name ist dann durch dieses &quot;Iiihhh&quot; vermurkst. &quot;PathImpl&quot; oder &quot;DefaultPath&quot; oder &quot;IPath&quot; (steht jedoch für PathImplementation) finde ich besser, da diese durch das interface &quot;Path&quot; an der schnittstelle der komponente sowieso verdeckt werden.</p>
</blockquote>
<p>Ich habe auch nie jemandem empfohlen ein Interface für jede Klasse zu erstellen. Für typische Beans (normale POJOs sind gemeint, nicht diese GUI Beans) - wenn wir schon den Bezug zu Java herstellen - wäre dies sinnlos.</p>
<p>Auch wenn einige meiner Hierachien anfangs nur aus einem Interface und der Implementierung bestehen, verändern sich diese eben mit der Zeit, wobei nicht notwendigerweise eine weitere konkrete Implementierung dazukommen muss. Decorator-Objekte, die den Aufruf modifizieren, und dergleichen (irgendwie also Aspektorientierung für &quot;arme&quot;) ergeben sich gerne erst im Lauf der Entwicklung.</p>
<p>Weiters denke ich schon, dass Testbarkeit sehr wohl ein Argument für die Verwendung von Interfaces ist, weil sich auch mit Projekten wie easymock nicht alles mocken lässt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1262257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1262257</guid><dc:creator><![CDATA[sdf82742sf]]></dc:creator><pubDate>Mon, 09 Apr 2007 13:15:18 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Mon, 09 Apr 2007 13:20:45 GMT]]></title><description><![CDATA[<p>Blue-Tiger  schrieb:</p>
<blockquote>
<p>Und wenn sie dem Benutzer die Moeglichkeit bieten wollen, eigene Implementierungen zur Verfuegung zu stellen und deswegen Interfaces anbieten, dann ja, dann find ich &quot;DefaultXyz&quot; ist ein sehr guter Name fuer die Standardimplementierung von Xyz.</p>
</blockquote>
<p>Kleine Anmerkung noch zu dieser Aussage:<br />
So generell würde ich das auch nicht sagen, denn gerade beim Beispiel Path kann das meiner Meinung nach zu unnötiger Verwirrung führen. Bei DefaultPath und Path als Typen würde ich intuitiv nicht darauf schließen, dass das eine das andere implementiert. Wenn man es übersetzt, wird es vielleicht deutlicher, dass man ihnen unterschiedliche Bedeutungen zuschreibt: Standardpfad und Pfad.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1262263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1262263</guid><dc:creator><![CDATA[dfsf4354sd]]></dc:creator><pubDate>Mon, 09 Apr 2007 13:20:45 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Mon, 09 Apr 2007 15:58:18 GMT]]></title><description><![CDATA[<p>sdf82742sf schrieb:</p>
<blockquote>
<p>Auch wenn einige meiner Hierachien anfangs nur aus einem Interface und der Implementierung bestehen, verändern sich diese eben mit der Zeit, wobei nicht notwendigerweise eine weitere konkrete Implementierung dazukommen muss. Decorator-Objekte, die den Aufruf modifizieren, und dergleichen (irgendwie also Aspektorientierung für &quot;arme&quot;) ergeben sich gerne erst im Lauf der Entwicklung.</p>
</blockquote>
<p>das ist ja auch ein vernünftiges vorgehen. ich mach es ja auch nicht anders. <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>sdf82742sf schrieb:</p>
<blockquote>
<p>Weiters denke ich schon, dass Testbarkeit sehr wohl ein Argument für die Verwendung von Interfaces ist, weil sich auch mit Projekten wie easymock nicht alles mocken lässt.</p>
</blockquote>
<p>auf jeden fall. nur wie gesagt, ich finde es übertrieben für <strong>jede</strong> klasse ein interface zu erstellen. aber du machst das ja auch anscheinend nicht.</p>
<p>BTW: mich stört ja immer noch dieses &quot;Iihh&quot;-prefix... wer hat das erfunden? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1262368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1262368</guid><dc:creator><![CDATA[mathik]]></dc:creator><pubDate>Mon, 09 Apr 2007 15:58:18 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Mon, 09 Apr 2007 16:40:23 GMT]]></title><description><![CDATA[<p>mathik schrieb:</p>
<blockquote>
<p>BTW: mich stört ja immer noch dieses &quot;Iihh&quot;-prefix... wer hat das erfunden? <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>
</blockquote>
<p>Ich nehme an, dass das ein Überbleibsel aus der ungarischen Notation sein wird. Der Hintergedanke dabei ist meiner Meinung nach einfach nachzuvollziehen, da es gerade in größeren Projekten wie Eclipse nicht egal ist ob der Typ eine Klasse, eine abstrakte Klasse oder ein Interface ist. Grundprinzip ist ja, dass man immer gegen Interfaces programmieren soll und um das einfach überprüfen zu können dient das &quot;I&quot;-Präfix um Interfaces von den restlichen Typen schnell unterscheiden zu können. Ich würde zwar leitenden Entwicklern nicht widersprechen, wenn sie mir diese Namenskonvention vorschreiben, da ich sie eben, wie bereits erwähnt, nachvollziehen kann, von selbst aus halte ich sie aber auch nicht ein (sofern ich nicht gerade C# programmiere, denn dann natürlich schon).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1262389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1262389</guid><dc:creator><![CDATA[dsf23r4dsf]]></dc:creator><pubDate>Mon, 09 Apr 2007 16:40:23 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Mon, 09 Apr 2007 17:23:21 GMT]]></title><description><![CDATA[<p>Da I-Präfix wird auch von MS für die COM-Specs benutzt. COM-Interfaces fangen auch mit I an. Hat halt IBM für Eclipse mit übernommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1262427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1262427</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Mon, 09 Apr 2007 17:23:21 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Mon, 09 Apr 2007 21:08:15 GMT]]></title><description><![CDATA[<p>Blue-Tiger schrieb:</p>
<blockquote>
<p>rapso schrieb:</p>
<blockquote>
<p>ich habe fuer jedes interfaces zu meinen implementationen ebenfalls eine normale klasse.</p>
</blockquote>
<p>Wozu dann ueberhaupt das Interface? Wenn du fuer jedes Interface nur 1 Implementation hast, wozu dann ueberhaupt das Interface?</p>
</blockquote>
<p>ein interface ist eine reine schnittstellenbeschreibung bzw schnittstelle, sie enthaellt keine interna z.b. inlinefunktionen, member, friends etc. die fuer die anwender der klasse nicht noetig sind.</p>
<p>mathik schrieb:</p>
<blockquote>
<p>rapso schrieb:</p>
<blockquote>
<p>ich habe fuer jedes interfaces zu meinen implementationen ebenfalls eine normale klasse.</p>
</blockquote>
<p>was erhoffst du dir dadurch, indem du das für jede klasse machst? eine klasse hat doch auch eine schnittstelle, nämlich die öffentlichen operationen. der rest ist für die klienten tabu und wird von denen verborgen (&quot;jede klasse sollte wie ein eisberg sein: man sieht nur die spitze&quot;)</p>
</blockquote>
<p>diese abstrahierung von schnittstelle und implementierung macht man um zu ermoeglichen die implementierung zu aendern ohne das interface aendern zu muessen. das waere rein theoretisch auch machbar wenn man die klassenbeschreibung der implementierung weitergibt, jedoch ist es einfach sauberer eine schnittstellendefinition auf beiden seiten zu haben, sodass sich auf der einen seite jemand um die interner kuemmern kann, waehrend die andere seite die schnittstelle verwendet ohne das ungewollte abhaengigkeiten entstehen die mittels der implementierungs-header moeglich sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1262557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1262557</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Mon, 09 Apr 2007 21:08:15 GMT</pubDate></item><item><title><![CDATA[Reply to Das &amp;quot;I&amp;quot;-Prefix bei Interfaces on Mon, 09 Apr 2007 21:27:39 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>Da I-Präfix wird auch von MS für die COM-Specs benutzt. COM-Interfaces fangen auch mit I an. Hat halt IBM für Eclipse mit übernommen.</p>
</blockquote>
<p>also ist microsoft wieder schuld!? die können sich wohl nicht endgültig von deren ungarischen notation verabschieden, obwohl bei den .NET coding style guides folgendes zu finden ist:</p>
<blockquote>
<p>- Do not use Hungarian notation<br />
- Do not prefix enums, classes, or delegates with any letter</p>
</blockquote>
<p>und dann steht:</p>
<blockquote>
<p>- Do prefix interfaces names with “I”</p>
</blockquote>
<p><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="😃"
    /> <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="😃"
    /> <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><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1029">@rapso</a><br />
interfaces sind ja auch schön und gut und man verwendet besser mehr von denen als zu wenig. für <strong>jede</strong> klasse ein interface zu erzeugen, auch wenn diese nur innerhalb der komponente verwendet wird und sonst keiner kennt, finde ich einfach übertrieben und verkompliziert einfach unnötig den code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1262565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1262565</guid><dc:creator><![CDATA[mathik]]></dc:creator><pubDate>Mon, 09 Apr 2007 21:27:39 GMT</pubDate></item></channel></rss>