<?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[Is a beziehung]]></title><description><![CDATA[<pre><code class="language-cpp">class Ellipse {

};

class Kreis:public Ellipse{};
</code></pre>
<p>Warum soll man den Kreis nicht von der Klasse Ellipse ableiten obwohl<br />
Kreis ein spezialfall von Ellipse ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/270421/is-a-beziehung</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 06:54:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270421.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 12 Jul 2010 10:57:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Is a beziehung on Mon, 12 Jul 2010 10:58:23 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Ellipse {

};

class Kreis:public Ellipse{};
</code></pre>
<p>Warum soll man den Kreis nicht von der Klasse Ellipse ableiten obwohl<br />
Kreis ein spezialfall von Ellipse ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924960</guid><dc:creator><![CDATA[blurry333]]></dc:creator><pubDate>Mon, 12 Jul 2010 10:58:23 GMT</pubDate></item><item><title><![CDATA[Reply to Is a beziehung on Mon, 12 Jul 2010 11:18:37 GMT]]></title><description><![CDATA[<p>Da bist du doch nicht alleine drauf gekommen. Da wo du das her hast, war garantiert eine Erklärung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924968</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 12 Jul 2010 11:18:37 GMT</pubDate></item><item><title><![CDATA[Reply to Is a beziehung on Mon, 12 Jul 2010 11:19:00 GMT]]></title><description><![CDATA[<p>Eine Ellipse kann man zB in X oder Y-Richtung skalieren, was beim Kreis keinen Sinn macht (da er dann kein Kreis mehr wäre).<br />
Aber das wird doch sicherlich in deinem Buch oder what ever dabei stehen!?<br />
Da steht doch nicht einfach &quot;Leite Kreis nicht von Ellipse ab&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924969</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Mon, 12 Jul 2010 11:19:00 GMT</pubDate></item><item><title><![CDATA[Reply to Is a beziehung on Mon, 12 Jul 2010 11:46:10 GMT]]></title><description><![CDATA[<p>blurry333 schrieb:</p>
<blockquote>
<p>Warum soll man den Kreis nicht von der Klasse Ellipse ableiten obwohl Kreis ein spezialfall von Ellipse ist.</p>
</blockquote>
<p>Grundsätzlich sollte eine &quot;ist ein&quot; Beziehung verwendet werden, wenn die abgeleitete Klasse auch vom Sinn komplett mit der Oberklasse übereinstimmt. Eine Ellipse ist aber mehr als ein Kreis.</p>
<p>Umgekehrt könnte man nicht überlegen ob man Ellipsen auch für Kreise verwenden, und ihnen ein paar Zusatzfunktionen (IstKreis...) spendiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924985</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 12 Jul 2010 11:46:10 GMT</pubDate></item><item><title><![CDATA[Reply to Is a beziehung on Mon, 12 Jul 2010 11:56:07 GMT]]></title><description><![CDATA[<p>blurry333 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class Ellipse {

};

class Kreis:public Ellipse{};
</code></pre>
<p>Warum soll man den Kreis nicht von der Klasse Ellipse ableiten obwohl<br />
Kreis ein spezialfall von Ellipse ist.</p>
</blockquote>
<p>Die Generalisierung von Ellipse -&gt; Kreis verstößt gegen das <a href="http://en.wikipedia.org/wiki/Liskov_substitution_principle" rel="nofollow">LSP</a>.</p>
<p>Edit:<br />
Im deutschen <a href="http://en.wikipedia.org/wiki/Liskov_substitution_principle" rel="nofollow">Artikel</a> wird das Problem sogar explizit erwähnt und nochmals zum <a href="http://de.wikipedia.org/wiki/Kreis-Ellipse-Problem" rel="nofollow">Kreis-Ellipse-Problem</a> weiterverwiesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924989</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924989</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Mon, 12 Jul 2010 11:56:07 GMT</pubDate></item><item><title><![CDATA[Reply to Is a beziehung on Mon, 12 Jul 2010 11:56:42 GMT]]></title><description><![CDATA[<p>David_pb schrieb:</p>
<blockquote>
<p>Die Generalisierung von Ellipse -&gt; Kreis verstößt gegen das <a href="http://en.wikipedia.org/wiki/Liskov_substitution_principle" rel="nofollow">LSP</a>.</p>
</blockquote>
<p>Schreib doch bitte Wörter statt grafischer Nichtstandardabkürzungen, wenn die gesamte Aussage darauf liegt.<br />
Heißt A -&gt; B bei Dir A erbt von B oder B erbt von A?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924990</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 12 Jul 2010 11:56:42 GMT</pubDate></item><item><title><![CDATA[Reply to Is a beziehung on Mon, 12 Jul 2010 12:05:15 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>David_pb schrieb:</p>
<blockquote>
<p>Die Generalisierung von Ellipse -&gt; Kreis verstößt gegen das <a href="http://en.wikipedia.org/wiki/Liskov_substitution_principle" rel="nofollow">LSP</a>.</p>
</blockquote>
<p>Schreib doch bitte Wörter statt grafischer Nichtstandardabkürzungen, wenn die gesamte Aussage darauf liegt.<br />
Heißt A -&gt; B bei Dir A erbt von B oder B erbt von A?</p>
</blockquote>
<p>Sorry, ich dachte, dass <em>Generalisierung</em> klar macht was gemeint ist (Der Pfeil war eigentlich nur als Andeutung gedacht, dass ein Zusammenhang zwischen A und B besteht. Allerdings ist der Pfeil bzgl UML Notation falsch rum, stimmt ;)). Es soll natürlich heissen Kreis erbt von Ellipse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924994</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Mon, 12 Jul 2010 12:05:15 GMT</pubDate></item><item><title><![CDATA[Reply to Is a beziehung on Mon, 12 Jul 2010 12:13:29 GMT]]></title><description><![CDATA[<p>(A erbt von <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /> == (A -&gt; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /> == (B &lt;- A) == B ist die Generalisierung von A.<br />
(A erbt von <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /> == (A &lt;- <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /> == (B -&gt; A) == A ist eine Spezilisierung von B.</p>
<p>Siehst du etwas?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925000</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Mon, 12 Jul 2010 12:13:29 GMT</pubDate></item><item><title><![CDATA[Reply to Is a beziehung on Mon, 12 Jul 2010 12:13:30 GMT]]></title><description><![CDATA[<p>Ob nun Kreis von Ellipse oder Ellipse von Kreis abgeleitet wird, man kann in beiden Fällen mit dem LSP argumentieren, dass keine korrekte Subtypenbeziehung besteht.</p>
<ol>
<li>
<p>Kreis erbt von Ellipse<br />
Ellipse stellt Methoden zur Verfügung, um die beiden &quot;Radien&quot; unabhängig voneinander zu manipulieren, das Gebilde ist damit kein Kreis mehr. Kreis kann diese Methoden überschreiben, dann geht aber das zugesicherte Verhalten von Ellipse kaputt. So oder so: Kein Subtyp.</p>
</li>
<li>
<p>Ellipse erbt von Kreis<br />
Genau dasselbe, nur umgekehrt. Bei einem Kreis kann ich davon ausgehen, dass er kreisrund ist. Ellipsen können aber ihre &quot;Radien&quot; unabhängig voneinander setzen, damit ist diese Zusicherung verletzt.</p>
</li>
</ol>
<p>Dass ein Kreis eine Ellipse ist, stimmt nur für unveränderliche Objekte. Überhaupt kann man schnell drauf kommen, dass die &quot;ist-ein&quot;-Beziehung hier überstrapaziert wird, denn das Subtyping bezieht sich auf das Verhalten, aber was ist denn das Verhalten eines Kreises, und was hat es mit dem Verhalten einer Ellipse zu tun? Der vorschnelle Schluss, dass ein Kreis eine Ellipse sei, kommt aus der Mathematik und somit von verhaltenslosen Objekten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925001</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 12 Jul 2010 12:13:30 GMT</pubDate></item><item><title><![CDATA[Reply to Is a beziehung on Mon, 12 Jul 2010 12:30:15 GMT]]></title><description><![CDATA[<p>Zeus schrieb:</p>
<blockquote>
<p>(A erbt von <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /> == (A -&gt; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /> == (B &lt;- A) == B ist die Generalisierung von A.<br />
(A erbt von <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /> == (A &lt;- <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /> == (B -&gt; A) == A ist eine Spezilisierung von B.</p>
<p>Siehst du etwas?</p>
</blockquote>
<p>Ja, wenn man sich strikt nach UML Notation orientiert. Wie <em>oben bereits erläutert</em> war der Pfeil <em>nicht</em> in diesem Sinne gedacht und deshalb hab ich ja, um allen Missverständnissen vorzubeugen, explizit noch mal erkäutert was gemeint war. Weiterhin dürfte aus dem Kontext des Threads und den geposteten Links klar sein was gemeint war und im Endeffekt ist die Richtung in diesem Beispiel ohnehin irrelevant...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925016</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Mon, 12 Jul 2010 12:30:15 GMT</pubDate></item><item><title><![CDATA[Reply to Is a beziehung on Mon, 12 Jul 2010 13:13:44 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Dass ein Kreis eine Ellipse ist, stimmt nur für unveränderliche Objekte.</p>
</blockquote>
<p>Genau dazu wollte ich gerade was schreiben: wenn man die Objekte &quot;immutable&quot; macht, also unveränderlich, dann kann man Kreis von Ellipse ableiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925030</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 12 Jul 2010 13:13:44 GMT</pubDate></item><item><title><![CDATA[Reply to Is a beziehung on Mon, 12 Jul 2010 14:33:50 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Ellipse{

public:

setRadius(int x)
setRadius(int y)

};

class Kreis:public Ellipse {

setRadius(int x)
setRadius(int y)

};
</code></pre>
<p>Ich habs immer noch net ganz verstanden. Ist das Problem folgendes:</p>
<p>Ellipse braucht 2 funktionen zum Setzen der Halbachsen.<br />
Der Kreis braucht allerdings nur 1 Funktion , nämlich setzen des Radius.<br />
Trotzdem muss er beide überschreiben obwohl er ja nur eine braucht.</p>
<p>Und das ist wohl dann das Problem ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925080</guid><dc:creator><![CDATA[blurry333]]></dc:creator><pubDate>Mon, 12 Jul 2010 14:33:50 GMT</pubDate></item><item><title><![CDATA[Reply to Is a beziehung on Mon, 12 Jul 2010 14:39:35 GMT]]></title><description><![CDATA[<p>Autsch. Du musst den Methoden unterschiedliche Namen geben, wie du die Parameter nennst, ist egal.</p>
<p>Das Problem ist dann Folgendes:</p>
<pre><code class="language-cpp">Ellipse e;
Kreis k;
e.width = e.height = 10;
k.width = k.height = 10;

e.width = 20;
k.width = 20;
</code></pre>
<p>Dann ist e.height = 10, aber k.height = 20. Also verhält sich ein Kreis nicht wie eine Ellipse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925084</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925084</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 12 Jul 2010 14:39:35 GMT</pubDate></item><item><title><![CDATA[Reply to Is a beziehung on Mon, 12 Jul 2010 14:58:43 GMT]]></title><description><![CDATA[<p>Ein &quot;gutes&quot; Beispiel:</p>
<p>Ein Kraftfahrzeug kann man starten und man kann damit fahren. Daher gemeinsame Basis:</p>
<pre><code class="language-cpp">class Kraftfahrzeug
{
    void start();
    void fahren();
};

class LKW : public Kraftfahrzeug
{
    //...LKW Zeugs
};

class Motorrad : public Kraftfahrzeug
{
    //...Motorrad Zeugs
};

class Auto : public Kraftfahrzeug
{
    //...Auto Zeugs
};

void benutzeKFZ(Kraftfahrzeug &amp; kfz) //soll beliebige KFZ-Typen benutzen
{
    kfz.start();
    kfz.fahren();
}

LKW lkw;
Motorrad motorrad;
Auto auto; //jaja...

benutzeKFZ(lkw);        //okay, lkw *ist* ein KFZ
benutzeKFZ(mottorrad);  //okay, mottorrad *ist* ein KFZ
benutzeKFZ(auto);       //okay, auto ist *ist* KFZ
</code></pre>
<p>Schlechtes Beispiel:</p>
<p>Im mathematischen Sinne ist Kreis zwar eine Spezialisierung von Ellipse, im onjektorientierten Sinne nicht:</p>
<pre><code class="language-cpp">class Ellipse
{
    void setX();
    void setY();
};

class Kreis : public Ellipse
{
    //irgendwie wird hier setY entfernt
};

void benutzeEllipse(Ellipse &amp; e) //soll beliebige Ellipsentypen benutzen
{
    e.setX(x)
    e.setY(y)
}

Ellipse e;
Kreis k;

benutzeEllipse(e); //okay
benutzeEllipse(k); //boing... Kreis ist *keine* Ellipse, weil kein setY
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1925091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925091</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 12 Jul 2010 14:58:43 GMT</pubDate></item><item><title><![CDATA[Reply to Is a beziehung on Mon, 12 Jul 2010 15:04:47 GMT]]></title><description><![CDATA[<p>Die Ellipse hat eine Methode die der Kreis nicht braucht, deswegen<br />
ist der Kreis objektorientiert gesehen keine Ellipse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925094</guid><dc:creator><![CDATA[blurry333]]></dc:creator><pubDate>Mon, 12 Jul 2010 15:04:47 GMT</pubDate></item><item><title><![CDATA[Reply to Is a beziehung on Mon, 12 Jul 2010 15:17:44 GMT]]></title><description><![CDATA[<p>blurry333 schrieb:</p>
<blockquote>
<p>Die Ellipse hat eine Methode die der Kreis nicht braucht, deswegen<br />
ist der Kreis objektorientiert gesehen keine Ellipse.</p>
</blockquote>
<p>Nicht nur, dass er sie nicht braucht, sie ist einfach FALSCH. Man kann mit einem Kreis nicht das gleich machen, was man mit einer Ellipse machen kann. Man kann die beiden also nicht beliebig austauschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925099</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Mon, 12 Jul 2010 15:17:44 GMT</pubDate></item><item><title><![CDATA[Reply to Is a beziehung on Mon, 12 Jul 2010 15:25:07 GMT]]></title><description><![CDATA[<p>blurry333 schrieb:</p>
<blockquote>
<p>Die Ellipse hat eine Methode die der Kreis nicht braucht, deswegen<br />
ist der Kreis objektorientiert gesehen keine Ellipse.</p>
</blockquote>
<p>Nein, die Ellipse hat Eigenschaften die ein Kreis nicht <em>hat</em> (und daher auch nicht bekommen darf). Wie das umgangen wird sei dahin gestellt. Allerdings kann der Kreis nicht in allen Fällen als Ellipse eingesetzt werden.<br />
Es könnte ja sein das der Entwickler von Ellipse setX und setY überschreibt:</p>
<pre><code class="language-cpp">class Ellipse
{
   float x, y;

public:
   virtual void setX(float value) { x = value; }
   virtual void setY(float value) { y = value; }
   float getArea() const { return ... }
};

class Kreis : public Ellipse 
{
public: 
   void setX(float value) { Ellipse::setX(value); Ellipse::setY(value); }
   void setY(float value) { Ellipse::setX(value); Ellipse::setY(value); }
};
</code></pre>
<p>Ein anderer Autor will jetzt die Methode <em>foo(Ellipse&amp;)</em> verwenden und übergibt hier eine Instanz von <em>Kreis</em> (weil Kreis ist ja eine Ellipse):</p>
<pre><code class="language-cpp">Kreis bar;
foo(bar);
</code></pre>
<pre><code class="language-cpp">void foo(Ellipse&amp; e) 
{
   e.setX(20);
   e.setY(10);
   assert(e.getArea() == 157.079f);
}
</code></pre>
<p>Der Autor von <em>foo</em> trifft allerdings eine Annahme, nämlich das die zurückgelieferte Fläche der einer Ellipse mit den achsen 10 und 20 entspricht. Für den Kreis wird allerdings 10^2*Pi geliefert, also nicht <em>ganz</em> den Erwartungen entsprechend...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925102</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Mon, 12 Jul 2010 15:25:07 GMT</pubDate></item><item><title><![CDATA[Reply to Is a beziehung on Mon, 12 Jul 2010 16:04:44 GMT]]></title><description><![CDATA[<p>Wenn man die Ellipse als gestreckten Kreis betrachtet, könnte man sie vom Kreis erben lassen:</p>
<pre><code class="language-cpp">struct Kreis
{
	double radius;

	Kreis(double radius);
	virtual ~Kreis();
	virtual double getArea() const
	{
		return radius * radius * PI;
	}
};

struct Ellipse : public Kreis
{
	double xstreckung;

	Ellipse(double radius, double xstreckung)
		: Kreis(radius)
		, xstreckung(xstreckung)
	{
	}

	virtual double getArea() const
	{
		return Kreis::getArea() * xstreckung;
	}
};
</code></pre>
<p>Natürlich ist eine Ellipse nicht im den Sinne ein Kreis, dass sie sich genauso verhält. Die Ellipse erweitert den Kreis um eine weitere Eigenschaft. Dabei kann sie sich aber auch genau wie ein Kreis verhalten, nämlich wenn (im Beispiel oben) <code>Ellipse::xstreckung</code>  <code>1.0</code> ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925132</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Mon, 12 Jul 2010 16:04:44 GMT</pubDate></item><item><title><![CDATA[Reply to Is a beziehung on Mon, 12 Jul 2010 16:53:00 GMT]]></title><description><![CDATA[<p>blurry333 schrieb:</p>
<blockquote>
<p>Die Ellipse hat eine Methode die der Kreis nicht braucht, deswegen ist der Kreis objektorientiert gesehen keine Ellipse.</p>
</blockquote>
<p>Ja, das ist des Rätsels Lösung.</p>
<p>Würde man diese Funktion bei Ellipse übrigens auch nicht brauchen, dürfte man wieder vererben. Man müßte sich aber klar sein, daß man sie auch in Zukunft nicht brauchen wird. Das bewußte Weglassen von Sachen, die die Außenweltbegriffe können, aber unsere Modellbegriffe nicht, ist ein wichtiger Teil der Softwareentwicklung und sollte nicht einfach aus Versehen passieren oder ignoriert werden. Die Modellbegriffe werden dann nach C++ übersetzt und Klassen genannt. Ignoriert man diese Modellierung, sondern versucht unvernünftigerweise die Außenwelt in Klassen einzufangen, darf man praktisch niemals eine Klasse von einer anderen erben lassen, weil es in der Außenwelt so viele gemeine Ausnahmen gibt, Säugetiere mit doch nicht sieben Halswirbeln, Säugetiere, die doch Eier legen, Automobile mit drei Rädern, Lehrer, die keinen Unterricht halten...<br />
Und das wollen wir doch alle nicht, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925154</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 12 Jul 2010 16:53:00 GMT</pubDate></item><item><title><![CDATA[Reply to Is a beziehung on Mon, 12 Jul 2010 17:09:13 GMT]]></title><description><![CDATA[<p>TyRoXx schrieb:</p>
<blockquote>
<p>Wenn man die Ellipse als gestreckten Kreis betrachtet, könnte man sie vom Kreis erben lassen:</p>
<pre><code class="language-cpp">struct Kreis
{
	double radius;

	Kreis(double radius);
	virtual ~Kreis();
	virtual double getArea() const
	{
		return radius * radius * PI;
	}
};

struct Ellipse : public Kreis
{
	double xstreckung;
	
	Ellipse(double radius, double xstreckung)
		: Kreis(radius)
		, xstreckung(xstreckung)
	{
	}
	
	virtual double getArea() const
	{
		return Kreis::getArea() * xstreckung;
	}
};
</code></pre>
<p>Natürlich ist eine Ellipse nicht im den Sinne ein Kreis, dass sie sich genauso verhält. Die Ellipse erweitert den Kreis um eine weitere Eigenschaft. Dabei kann sie sich aber auch genau wie ein Kreis verhalten, nämlich wenn (im Beispiel oben) <code>Ellipse::xstreckung</code>  <code>1.0</code> ist.</p>
</blockquote>
<p>Ja, geht andersrum auch.</p>
<pre><code class="language-cpp">class Ellipse
{
   float x, y;

public:
   Ellipse(fload _x, float _y){ x=_x; y=_y; }
   float getArea() const { return PI*x*y; }
};

class Kreis : public Ellipse 
{
public: 
   Kreis(floar r):Ellipse(r,r)
   //getArea() darf geerbt werden 
};
</code></pre>
<p>Aber mit dem setX und setY macht man alles kaputt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925164</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 12 Jul 2010 17:09:13 GMT</pubDate></item></channel></rss>