<?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[Get() und Set()]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe mal gelesen, dass in C++ alle Membervariablen privat deklariert werden sollten und bloss mit Set() und Get() Funktionen angesprochen werden sollten.</p>
<p>Stimmt das? Sollte man das befolgen? Ist etwas wie:</p>
<pre><code class="language-cpp">position.x;
</code></pre>
<p>nicht schöner als:</p>
<pre><code class="language-cpp">position.GetX();
</code></pre>
<p>Dankeschön!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/260133/get-und-set</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 09:34:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/260133.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 01 Feb 2010 14:24:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Get() und Set() on Mon, 01 Feb 2010 14:24:37 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe mal gelesen, dass in C++ alle Membervariablen privat deklariert werden sollten und bloss mit Set() und Get() Funktionen angesprochen werden sollten.</p>
<p>Stimmt das? Sollte man das befolgen? Ist etwas wie:</p>
<pre><code class="language-cpp">position.x;
</code></pre>
<p>nicht schöner als:</p>
<pre><code class="language-cpp">position.GetX();
</code></pre>
<p>Dankeschön!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848554</guid><dc:creator><![CDATA[Samyboy]]></dc:creator><pubDate>Mon, 01 Feb 2010 14:24:37 GMT</pubDate></item><item><title><![CDATA[Reply to Get() und Set() on Mon, 01 Feb 2010 14:25:58 GMT]]></title><description><![CDATA[<p>Kommt drauf an.</p>
<p>Wenn es sich wirklich nur um einen Container handelt, wie zB eine Point-Klasse, würde ich drauf verzichten. Ansonsten ist es nicht nur schicker, sondern ist auch wesentlich einfacher zu erweitern, sollte jede Veränderung oder Abfrage einer Membervariable später Folgen haben etc.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848556</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Mon, 01 Feb 2010 14:25:58 GMT</pubDate></item><item><title><![CDATA[Reply to Get() und Set() on Mon, 01 Feb 2010 14:30:08 GMT]]></title><description><![CDATA[<p>Samyboy schrieb:</p>
<blockquote>
<p>Stimmt das?</p>
</blockquote>
<p>Das stimmt genauso, wie das man kein goto, continue und break nutzen darf, ungarische Notation toll ist und C++ besser als Java ist. <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>Meine <strong>persönliche Meinung</strong>:<br />
Ich lasse mir das jedenfalls auf keinen Fall pauschal aufzwängen.<br />
Public-Member stehen allerdings häufig in structs bei mir, damit klar ist,<br />
dass das alles seine Richtigkeit hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848562</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Mon, 01 Feb 2010 14:30:08 GMT</pubDate></item><item><title><![CDATA[Reply to Get() und Set() on Mon, 01 Feb 2010 14:46:12 GMT]]></title><description><![CDATA[<p>Ich finde man sollte es nicht übertreiben mit Getter und Settern.</p>
<p>Wenn ich nur einen int Wert habe und für diesen Getter und Setter schreibe, ohne weitere Prüfungen in den Setter/Getter, halte ich es für unsinnig. Dann kann ich den Member auch direkt Public machen.</p>
<p>Das Prinzip der Datenkapslung macht imho erst mit einem guten Design Sinn. Ich sollte mir überlegen ob ich den int draußen überhaupt brauche oder ob er nur zur internen Berechnung benötigt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848579</guid><dc:creator><![CDATA[sirchillalot]]></dc:creator><pubDate>Mon, 01 Feb 2010 14:46:12 GMT</pubDate></item><item><title><![CDATA[Reply to Get() und Set() on Mon, 01 Feb 2010 15:04:37 GMT]]></title><description><![CDATA[<p>sirchillalot schrieb:</p>
<blockquote>
<p>Ich finde man sollte es nicht übertreiben mit Getter und Settern.<br />
[...]<br />
Das Prinzip der Datenkapslung macht imho erst mit einem guten Design Sinn.</p>
</blockquote>
<p>Das liest sich, als ob du es mit dem guten Design auch nicht übertreiben willst <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>Vorteil von Gettern und Settern:</p>
<ol>
<li>Der Zugriff ist einheitlicher, nämlich immer mit Funktionsklammern und nicht mal mit, mal ohne.</li>
<li>Du weißt NIE vorher ob du nicht doch irgendwann mal irgendeine Sicherheitsabfrage einbaust oder gar die interne Repräsentation komplett änderst.</li>
</ol>
<p>Nachteil:<br />
Du musst erstmal die Getter und Setter tippen, obwohl du erstmal nicht absehen kannst, ob du diesen gekapselten zugriff tatsächlich irgendwann brauchst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848592</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 01 Feb 2010 15:04:37 GMT</pubDate></item><item><title><![CDATA[Reply to Get() und Set() on Mon, 01 Feb 2010 15:14:42 GMT]]></title><description><![CDATA[<p>sirchillalot schrieb:</p>
<blockquote>
<p>Ich finde man sollte es nicht übertreiben mit Getter und Settern.</p>
<p>Wenn ich nur einen int Wert habe und für diesen Getter und Setter schreibe, ohne weitere Prüfungen in den Setter/Getter, halte ich es für unsinnig. Dann kann ich den Member auch direkt Public machen.</p>
</blockquote>
<p>Eine solche Entscheidung hat mich in einen Projekt Tage der Korrektur eines alten Projektes gekostet (public, static Variablen die etwa wie globale Variablen in jeder Stelle des Projektes wild gesetzt wurden). Und auch nachträglich eine Prüfung einzubauen ist sehr aufwändig.</p>
<p>Wobei ich durchaus dennoch deine erste Aussage akzeptiere, aber in anderen Zusammenhang: Getter/Setter schreibe ich grundsätzlich wenn eine Variable einzeln von außen gelesen/geschrieben werden soll. Public mache ich ausschließlich Werte in kleinen Strukturen die rein zur Übergabe dienen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848599</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 01 Feb 2010 15:14:42 GMT</pubDate></item><item><title><![CDATA[Reply to Get() und Set() on Mon, 01 Feb 2010 15:15:36 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>sirchillalot schrieb:</p>
<blockquote>
<p>Ich finde man sollte es nicht übertreiben mit Getter und Settern.<br />
[...]<br />
Das Prinzip der Datenkapslung macht imho erst mit einem guten Design Sinn.</p>
</blockquote>
<p>Das liest sich, als ob du es mit dem guten Design auch nicht übertreiben willst <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>Vorteil von Gettern und Settern:</p>
<ol>
<li>Der Zugriff ist einheitlicher, nämlich immer mit Funktionsklammern und nicht mal mit, mal ohne.</li>
<li>Du weißt NIE vorher ob du nicht doch irgendwann mal irgendeine Sicherheitsabfrage einbaust oder gar die interne Repräsentation komplett änderst.</li>
</ol>
<p>Nachteil:<br />
Du musst erstmal die Getter und Setter tippen, obwohl du erstmal nicht absehen kannst, ob du diesen gekapselten zugriff tatsächlich irgendwann brauchst.</p>
</blockquote>
<p>Ich meine ja nur das man nicht sagen soll Das man immer Getter und Setter verwenden soll. Man sollte sich Gedanken drüber machen wieso man Getter und Setter braucht. Nur einfach weil jemand mal gesagt hat benutz Getter und Setter ist doch sinnlos.<br />
Das mit dem einheitlichen Zugriff ist natürlich auch ein Argument.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848600</guid><dc:creator><![CDATA[sirchillalot]]></dc:creator><pubDate>Mon, 01 Feb 2010 15:15:36 GMT</pubDate></item><item><title><![CDATA[Reply to Get() und Set() on Mon, 01 Feb 2010 15:17:32 GMT]]></title><description><![CDATA[<p>sirchillalot schrieb:</p>
<blockquote>
<p>pumuckl schrieb:</p>
<blockquote>
<p>sirchillalot schrieb:</p>
<blockquote>
<p>Ich finde man sollte es nicht übertreiben mit Getter und Settern.<br />
[...]<br />
Das Prinzip der Datenkapslung macht imho erst mit einem guten Design Sinn.</p>
</blockquote>
<p>Das liest sich, als ob du es mit dem guten Design auch nicht übertreiben willst <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>Vorteil von Gettern und Settern:</p>
<ol>
<li>Der Zugriff ist einheitlicher, nämlich immer mit Funktionsklammern und nicht mal mit, mal ohne.</li>
<li>Du weißt NIE vorher ob du nicht doch irgendwann mal irgendeine Sicherheitsabfrage einbaust oder gar die interne Repräsentation komplett änderst.</li>
</ol>
<p>Nachteil:<br />
Du musst erstmal die Getter und Setter tippen, obwohl du erstmal nicht absehen kannst, ob du diesen gekapselten zugriff tatsächlich irgendwann brauchst.</p>
</blockquote>
<p>Ich meine ja nur das man nicht sagen soll Das man immer Getter und Setter verwenden soll. Man sollte sich Gedanken drüber machen wieso man Getter und Setter braucht. Nur einfach weil jemand mal gesagt hat benutz Getter und Setter ist doch sinnlos.<br />
Das mit dem einheitlichen Zugriff ist natürlich auch ein Argument.</p>
</blockquote>
<p>Das es Zeit kostet Abfragen einzubauen, glaube ich dir. Aber darum sollte man sich im optimalen Fall VORHER Gedanken drüber machen. Dann machen Getter Setter natürlich sehr viel Sinn</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848602</guid><dc:creator><![CDATA[sirchillalot]]></dc:creator><pubDate>Mon, 01 Feb 2010 15:17:32 GMT</pubDate></item><item><title><![CDATA[Reply to Get() und Set() on Mon, 01 Feb 2010 15:17:51 GMT]]></title><description><![CDATA[<p>Da muss man ja sagen, dass die Properties in C# echt sehr, sehr schön sind.<br />
Da stellt sich die Frage gar nicht erst und man kann nix falsch machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848604</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Mon, 01 Feb 2010 15:17:51 GMT</pubDate></item><item><title><![CDATA[Reply to Get() und Set() on Mon, 01 Feb 2010 15:27:01 GMT]]></title><description><![CDATA[<p>Jockelx schrieb:</p>
<blockquote>
<p>Da muss man ja sagen, dass die Properties in C# echt sehr, sehr schön sind.<br />
Da stellt sich die Frage gar nicht erst und man kann nix falsch machen.</p>
</blockquote>
<p>Das ging mir auch durch den Kopf, aber da hat der Programmierer der Klassen in etwa den gleichen Aufwand. (Ich bin bei C# nicht auf dem aktuellsten Stand kann sein, dass es jetzt auch automatische Versionen gibt).<br />
Das interessante ist ja, dass (ich gehe jetzt davon aus, dass man die Properties selbst noch programmieren muss) man den gleichen Scheibaufwand hat und nur die Benutzung einfacher wird, als mit den Funktionsnamen.<br />
Bei C++ ist die Frage aber meist eher so gestellt, weil man nicht immer get/set Funktionen schreiben will und eher aus Faulheit alles public machen will.</p>
<p>Ich persönlich benutze getter und setter eigentlich auch fast immer. Es gibt Ausnahmefälle, wo es wirklich der Lesbarkeit des Codes beiträgt und wirklich nicht notwendig ist, wie z.B bei einer Vektorklasse oder bei einem struct, welches wirklich nur der Datenhaltung dient. Überall sonst gibts eigentlich getter/setter, wenn nötig.<br />
Ich war auch schon froh, dass ich ein einfaches <code>get_x_position</code> nicht public hatte, sondern bei der Abfrage den Wert noch anpassen konnte. Macht also durchaus Sinn auch einfach scheinende Sachen so zu wrappen. Klar oft braucht mans nicht, aber WENN, dann ist es sehr hilfreich und man muss nicht auch allen Clientcode ändern gehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848610</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 01 Feb 2010 15:27:01 GMT</pubDate></item><item><title><![CDATA[Reply to Get() und Set() on Mon, 01 Feb 2010 15:36:37 GMT]]></title><description><![CDATA[<p>Immer Setter und Getter vorziehen. Öffentliche Attribute sind meiner Meinung nach reine Ausnahmen. Schöne Beispiele von öffentlichen Attributen sind zum Beispiel Point, Vector. Aber bereits bei einem Rectangle wird es fragwürdig, ob man da noch öffentliche Attribute verwenden sollte. Meiner Meinung nach nicht.</p>
<p>Lieber ein paar Setter und Getter zuviel, als ein paar zu wenig <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>Jockelx schrieb:</p>
<blockquote>
<p>Da muss man ja sagen, dass die Properties in C# echt sehr, sehr schön sind.<br />
Da stellt sich die Frage gar nicht erst und man kann nix falsch machen.</p>
</blockquote>
<p>Ehm, naja, Properties in C# sind auch nicht so das Gelbe vom Ei. Schliesslich verstecken sie einfach nur Setter und Getter und lassen die Variable als ein öffentliches Attribute erscheinen, was es aber nicht ist. Sehr schön finde ich zum Beispiel dieses Problem:</p>
<pre><code class="language-csharp">public class MyClass
{
  public double MyVar { get; set; }
}

public class WhatEver
{
  public static void Foo(ref double d)
  {
    d = 0.0;
  }

  public static void Main(string[] args)
  {
    MyClass mc = new MyClass();
    Foo(mc.MyVar); // FEHLER, was zur Hölle? ;)
  }
}
</code></pre>
<p>Properties sehen zwar ganz nett und schön aus, aber es ist halt ein uneinheitlich durchgezogenes Design. Sie sehen aus wie öffentliche Attribute, sind aber tatsächlich Funktionen und können sehr grosse Seiteneffekte auslösen.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848616</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 01 Feb 2010 15:36:37 GMT</pubDate></item><item><title><![CDATA[Reply to Get() und Set() on Mon, 01 Feb 2010 15:43:07 GMT]]></title><description><![CDATA[<p>Ich denke man solte sich vorher Gedanken machen was man wann und wo nutzt. Wenn Klassen Variablen enthalten die nicht geändert werden dürfen oder eine Sicherheitsabfrage beim setzen brauchen kommen nur get/set in der Klasse vor. Bei Klassen wo es jedoch erdacht ist das man die Variablen oft ändern, wie zB Vectoren, sind sie bei mir öffentlich. Je nach Bedarf aber einheitlich inenrhalbd er Klasse, willde Mixes aus öffentlichen Variablen und get/set innerhalb eienr Klasse finde ich nicht schön.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848625</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Mon, 01 Feb 2010 15:43:07 GMT</pubDate></item><item><title><![CDATA[Reply to Get() und Set() on Mon, 01 Feb 2010 15:53:09 GMT]]></title><description><![CDATA[<blockquote>
<p>in etwa den gleichen Aufwand. (Ich bin bei C# nicht auf dem aktuellsten Stand kann sein</p>
</blockquote>
<p>Seit 3.0 geht das ganz fix mit</p>
<pre><code>public int bla {get; set;}
</code></pre>
<p>Dravere schrieb:</p>
<blockquote>
<p>Ehm, naja, Properties in C# sind auch nicht so das Gelbe vom Ei. Schliesslich verstecken sie einfach nur Setter und Getter und lassen die Variable als ein öffentliches Attribute erscheinen, was es aber nicht ist.</p>
</blockquote>
<p>Das ist dann aber irgendwo dein Problem, dass du das extra falsch interpretierst.<br />
Interpretierst du die Properties als kurz geschriebene (s.o.), besser zu lesen (zalh = 5 statt zahl.setZahl(5)) Getter/Setter, dann sind die schon schön.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848637</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Mon, 01 Feb 2010 15:53:09 GMT</pubDate></item><item><title><![CDATA[Reply to Get() und Set() on Mon, 01 Feb 2010 16:01:02 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19909">@Xebov</a><br />
Das Problem an dem Vorgehen ist halt, dass man nie weiss, was noch alles geändert werden wird. Und wenn du dann nur wegen get/set jedem Client, der deinen Code benutzt sagen musst, dass sie den umschreiben müssen ist das richtig doof.<br />
Vor allem kann alles, mag es auch noch so unaugescheinlich sein irgendwann eine kompliziertere Abfrage des Wertes erfordern.</p>
<p>Als Beispiel, was bei mir mal vorkam. Ich habe eben eine solche get_x_position gehabt. Denkt man, dass man da einfach (z.B von einem Fenster) die x_position offen legt und dann kann man abfragen und setzen. Ich habe das nicht so gemacht und war richtig froh, als ich auf die Idee kam verschiedene Variationen von get_x_position zu machen. Man konnte dann die x_position relativ zu einem Parentfenster haben, oder des selben oder aber auch von der rechten, anstatt von der linken Seite aus gerechnet. Macht also auch da Sinn. Und im zuge von Erweiterungen kommt das denke ich sehr oft auch für einfache Variablen vor.</p>
<p>Wie gesagt bei einer Vektor oder Point Klasse ist es schon sinnvoll, aber das ist wirklich die Ausnahme, aber auch nur, weil die Funktionsweise sehr definiert ist und wenn es sich anderst verhalten würde sehr unintuitiv für einen Benutzer wäre. Die meisten Klassen sind aber nicht so streng definiert, wie eine Vektor Klasse und wie Dravere sagt macht es bereits bei einer Rechteck Klasse schon nicht mehr unbedingt soo viel Sinn.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/23734">@Jockelx</a><br />
Ok, war ja mal, dass man die Zuweisung noch explizit hinschreiben musste.<br />
Der Punkt ist aber, dass Schreibarbeit kein Argument für oder gegen Getter/Sett sein dürfen (wie auch sonst nirgends bei einer Designentscheidung).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848640</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 01 Feb 2010 16:01:02 GMT</pubDate></item><item><title><![CDATA[Reply to Get() und Set() on Mon, 01 Feb 2010 16:20:10 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Wie gesagt bei einer Vektor oder Point Klasse ist es schon sinnvoll, aber das ist wirklich die Ausnahme, aber auch nur, weil die Funktionsweise sehr definiert ist und wenn es sich anderst verhalten würde sehr unintuitiv für einen Benutzer wäre. Die meisten Klassen sind aber nicht so streng definiert, wie eine Vektor Klasse und wie Dravere sagt macht es bereits bei einer Rechteck Klasse schon nicht mehr unbedingt soo viel Sinn.</p>
</blockquote>
<p>Deswegen sagte ich ja auch man soll sich vorher genau Gedanken machen für was die Klasse vorgesehen ist. Das set und get in den meisten Fällen Sinn machen da stimm ich dir voll und ganz zu, allein schon weil man oft genug Variablen vor Änderungen schützen muß.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848663</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Mon, 01 Feb 2010 16:20:10 GMT</pubDate></item><item><title><![CDATA[Reply to Get() und Set() on Mon, 01 Feb 2010 16:23:39 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Der Punkt ist aber, dass Schreibarbeit kein Argument für oder gegen Getter/Sett sein dürfen (wie auch sonst nirgends bei einer Designentscheidung).</p>
</blockquote>
<p>Das wird zwar jetzt leider alles etwas OT, aber sei's drum:<br />
Hier (bzw. bei dem was ich sagte) geht es nicht um Design des Programmierers, sondern um das gute Design der Sprache C# und da ist mir Schreibarbeit schon wichtig.<br />
Den C#-Leuten übrigens auch, sonst hätten sie die Kurzschreibweise nicht eingeführt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848665</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Mon, 01 Feb 2010 16:23:39 GMT</pubDate></item><item><title><![CDATA[Reply to Get() und Set() on Mon, 01 Feb 2010 16:44:50 GMT]]></title><description><![CDATA[<p>Jockelx schrieb:</p>
<blockquote>
<p>drakon schrieb:</p>
<blockquote>
<p>Der Punkt ist aber, dass Schreibarbeit kein Argument für oder gegen Getter/Sett sein dürfen (wie auch sonst nirgends bei einer Designentscheidung).</p>
</blockquote>
<p>Das wird zwar jetzt leider alles etwas OT, aber sei's drum:<br />
Hier (bzw. bei dem was ich sagte) geht es nicht um Design des Programmierers, sondern um das gute Design der Sprache C# und da ist mir Schreibarbeit schon wichtig.<br />
Den C#-Leuten übrigens auch, sonst hätten sie die Kurzschreibweise nicht eingeführt.</p>
</blockquote>
<p>Absolut.<br />
Ich wäre auch für eine bessere Variante in C++, aber da es sie nicht gibt sollte man nicht das Design drunter leiden lassen und Code unwartbar draus werden lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848687</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 01 Feb 2010 16:44:50 GMT</pubDate></item><item><title><![CDATA[Reply to Get() und Set() on Mon, 01 Feb 2010 16:54:04 GMT]]></title><description><![CDATA[<p>Jockelx schrieb:</p>
<blockquote>
<p>Das ist dann aber irgendwo dein Problem, dass du das extra falsch interpretierst.<br />
Interpretierst du die Properties als kurz geschriebene (s.o.), besser zu lesen (zalh = 5 statt zahl.setZahl(5)) Getter/Setter, dann sind die schon schön.</p>
</blockquote>
<p>Liest du auch, was ich schreibe?</p>
<p>Dravere schrieb:</p>
<blockquote>
<p><strong>Properties sehen zwar ganz nett und schön aus</strong>, aber es ist halt ein uneinheitlich durchgezogenes Design. Sie sehen aus wie öffentliche Attribute, sind aber tatsächlich Funktionen und können sehr grosse Seiteneffekte auslösen.</p>
</blockquote>
<p>Ich sage nicht, dass sie nicht schön sind, ich sage es ist ein uneinheitliches Design und daher widerspreche ich dir in folgendem Punkt völlig:</p>
<p>Jockelx schrieb:</p>
<blockquote>
<p>... sondern um das gute Design der Sprache C# ...</p>
</blockquote>
<p>Frage an dich. Da es ja anscheinend nur an meiner falschen Interpretation liegt, kannst du die beiden folgenden Anweisungen ohne Probleme unterscheiden, ob es jeweils ein Property oder öffentliches Attribute ist:</p>
<pre><code class="language-csharp">MyClass myObject = new MyClass();
myObject.X = 30; // ist myObject.X ein Property oder nicht?
myObject.D = 30; // ist myObject.D ein Property oder nicht?
</code></pre>
<p>X kann ein Property sein, während D ein öffentliches Attribute ist. Nun findet bei myObject.X ein Funktionsaufruf statt, bei myObject.D findet kein Funktionsaufruf statt, obwohl beides genau gleich geschrieben wird. Gleiche Schreibeweise, unterschiedliches Verhalten, sowas nenn ich ein extrem schlechtes Design. Daher liegt es auch nicht an meiner Interpretation, man kann sie nicht unterscheiden, wenn man nicht die Klasse sieht. Und ein öffentliches Attribute oder eine Funktion sind zwei sehr unterschiedliche Dinge.</p>
<p>Klar, es sieht schöner aus, aber das Design an sich ist schrecklich. Da hätte man besser eine andere Syntax einführen sollen. Wäre vieles möglich gewesen, zum Beispiel:</p>
<pre><code class="language-csharp">myObject.X = 30; // Öffentliches Attribute
myObject{D} = 30; // Property
</code></pre>
<p>Oder sonst irgendwas. Diese fehlende Unterscheidung macht es meiner Meinung nach zu einem schlechten Design.</p>
<p>Also zusammengefasst:<br />
Die Idee ist gut, die Umsetzung ist schlecht.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848692</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 01 Feb 2010 16:54:04 GMT</pubDate></item><item><title><![CDATA[Reply to Get() und Set() on Mon, 01 Feb 2010 17:12:44 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>kannst du die beiden folgenden Anweisungen ohne Probleme unterscheiden, ob es jeweils ein Property oder öffentliches Attribute ist:</p>
</blockquote>
<p>Von wem ist die Klasse?<br />
Von Microsoft oder sonst jemandem der das Konzept der Properties nicht extra aushebelt?<br />
Dann ja, kann ich: Ist ein Property.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848707</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Mon, 01 Feb 2010 17:12:44 GMT</pubDate></item><item><title><![CDATA[Reply to Get() und Set() on Mon, 01 Feb 2010 17:19:05 GMT]]></title><description><![CDATA[<p>Dravere, das sehe ich nicht so (und auch der Großteil der C#-Gemeinde nicht).</p>
<p>In C# sollten generell alle Member privat sein und nur durch Properties nach außen gereicht werden (wenn überhaupt).<br />
Leider gab es vor C# 3.0 noch nicht die bequeme Abkürzung für die Properties, so daß aus Bequemlichkeit leider noch public Member in vielen Source-Code existieren (wobei das VS schon immer die Refaktoring-Möglichkeit 'Encapsulate Field' angeboten hat). Das .NET-Framework verwendet aber durchgehend Properties - einzige Ausnahme sind 'static readonly member'.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848711</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Mon, 01 Feb 2010 17:19:05 GMT</pubDate></item><item><title><![CDATA[Reply to Get() und Set() on Mon, 01 Feb 2010 17:24:18 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/23734">@Jockelx</a>, Th69,<br />
Auch wenn man es umgehen kann, durch das eigene Programmdesign, das Design der Sprache bleibt gleich und somit schlecht. Wie ich schon sagte, die Idee finde ich extrem toll, die Umsetzung aber nicht. Und weil die Umsetzung schlecht ist, muss man eben sein eigenes Design so anspassen, um dem entgegen zu wirken. Ihr bestätigt grundsätzlich nur meine Aussage, wenn ihr sagt, dass man halt keine öffentlichen Attribute verwenden darf. Wieso gibt es dann überhaupt öffentliche Attribute? Es existiert hier eben eine Inkonsistenz. Es ist nicht ganz sauber durchgezogen.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848716</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 01 Feb 2010 17:24:18 GMT</pubDate></item><item><title><![CDATA[Reply to Get() und Set() on Mon, 01 Feb 2010 17:57:28 GMT]]></title><description><![CDATA[<p>Eiffel umschifft das ganze recht elegant. <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>
<p>1. Gibt es keine unterschiedliche Notation für den Aufruf einer Funktion ohne Argumente und einer Datenmember. Datenmember können also public sein und man kann bei Bedarf noch eine Funktion drunter hängen.</p>
<p>2. Die Datenmember sind standardmässig readonly. Das heisst man muss einen setter angeben (mit assign), welcher zum zuweisen benutzt wird.</p>
<p>3. Ob ein Objekt per Value oder per Referenz rumgereicht wird entscheidet nicht der Benutzer der Klasse, sondern der Programmierer der Klasse. (üblicherweise ist es per Referenz, ausser bei so Sachen, wie INTEGER, FLOAT usw.)</p>
<pre><code>class FOO

feature
  n: INTEGER assign set_n -- datenmember + angabe des setters

  bar : INTEGER -- funktion 
  do
     Result := n
  end

  set_n ( n_ : INTEGER )
  do
    n := n_
  end 
end
</code></pre>
<p>Der Zugriff erfolg genau gleich:</p>
<pre><code>class BAR
feature
  bar
  local
     f: FOO
  do
    f.create
    f.n
    f.bar -- kein Unterschied

    f.n := 2000 -- der setter wird benutzt
  end
end
</code></pre>
<p>Das finde ich wirklich cool.</p>
<p>Sorry für OT, aber da wir eh schon bei C++/C# sind dachte ich, dass ich mal noch eine Alternative reinwerfe, welche imo C# überlegen ist. <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="🙂"
    /> (natürlich ist mir klar, dass Eiffel für solche Sachen ein Einschränkungen macht, aber das sei aussen vor gelassen. Rein der Mechanismus und Umgehung der Probleme ist richtig gut)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848729</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 01 Feb 2010 17:57:28 GMT</pubDate></item><item><title><![CDATA[Reply to Get() und Set() on Mon, 01 Feb 2010 18:58:14 GMT]]></title><description><![CDATA[<p>Und darum z.B. mag ich Java nicht so sehr, weil man dort immer getX() und setX() verwenden muß.</p>
<p>In C++ verwende ich für Properties eine template-basierte Lösung...</p>
<p>P.S. Sorry dravere, aber die Frage finde ich sehr eigenartig - genauso argumentieren ja viele Leute mit C++: warum kann man dies und das machen, obwohl das nur Probleme mit sich bringt? Und C# ist viel regelbasierter designt. Und gerade die einfache Umstellung einer öffentlichen Membervariablen auf ein Property ändert eben nicht die Syntax beim Aufruf (einzig bei Reflection hat dies entsprechende Nachteile). Du siehst, was du als schlechtes Design ansiehst, finde ich (und wohl auch die C#-Designer) dagegen super.<br />
(nicht noch eine Syntax mehr - alleine LINQ und Lambda-Expression sind für viele Anfänger eine große Hürde -)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1848776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1848776</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Mon, 01 Feb 2010 18:58:14 GMT</pubDate></item><item><title><![CDATA[Reply to Get() und Set() on Tue, 02 Feb 2010 15:39:43 GMT]]></title><description><![CDATA[<p>Jockelx schrieb:</p>
<blockquote>
<p>Das wird zwar jetzt leider alles etwas OT, aber sei's drum:<br />
Hier (bzw. bei dem was ich sagte) geht es nicht um Design des Programmierers, sondern um das gute Design der Sprache C# und da ist mir Schreibarbeit schon wichtig.<br />
Den C#-Leuten übrigens auch, sonst hätten sie die Kurzschreibweise nicht eingeführt.</p>
</blockquote>
<p>Den C++-Leuten offenbar nicht, sonst würden sie Makros für Getter- und Setterfunktionen, deren Implementierung in 95% der Fälle gleich aussieht, verwenden.</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Gleiche Schreibeweise, unterschiedliches Verhalten, sowas nenn ich ein extrem schlechtes Design.</p>
</blockquote>
<p>Andere hingegen sprechen von Polymorphie. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
<p>Th69 schrieb:</p>
<blockquote>
<p>Und darum z.B. mag ich Java nicht so sehr, weil man dort immer getX() und setX() verwenden muß.</p>
</blockquote>
<p>Muss man ja gar nicht, dort gibts schliesslich auch <code>public</code> . Allerdings kommt mir die Java-Mentalität grundsätzlich etwas so vor, dass OOP teilweise überbewertet und für Dinge eingesetzt wird, für die man in Sprachen wie C++ andere Konzepte hat (jetzt nicht speziell auf Get/Set bezogen). Von daher wäre ein Java-Programmierer möglicherweise noch stärker abgeneigt gegenüber ungekapselten Klassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1849217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1849217</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 02 Feb 2010 15:39:43 GMT</pubDate></item></channel></rss>