<?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[Designfrage]]></title><description><![CDATA[<p>Ich habe eine Klasse Graphics, welche alles nötige hat um auf dem Bildschirm rumzuzeichnen. Und eine weitere Klasse Bitmap, welche eine grafische Resource verwaltet.</p>
<p>Ist es jetzt sinnvoller der Graphics die Daten der Bitmap zu geben, damit die Graphics die Bitmap zeichnen kann oder der Bitmap die nötigen Informationen zu geben, damit sie sich selbst zeichnen kann?</p>
<p>Quasi was ist besser:</p>
<pre><code class="language-cpp">instBitmap.Draw(instGraphics.getInfos());
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">instGraphics.DrawBitmap(instBitmap.getInfos());
</code></pre>
<p>Eine Erklärung warum eins dem anderen vorzuziehen ist wäre auch gut <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="🙂"
    /> oder eine noch bessere alternative.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/280582/designfrage</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 02:04:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/280582.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 17 Jan 2011 23:29:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Designfrage on Mon, 17 Jan 2011 23:29:33 GMT]]></title><description><![CDATA[<p>Ich habe eine Klasse Graphics, welche alles nötige hat um auf dem Bildschirm rumzuzeichnen. Und eine weitere Klasse Bitmap, welche eine grafische Resource verwaltet.</p>
<p>Ist es jetzt sinnvoller der Graphics die Daten der Bitmap zu geben, damit die Graphics die Bitmap zeichnen kann oder der Bitmap die nötigen Informationen zu geben, damit sie sich selbst zeichnen kann?</p>
<p>Quasi was ist besser:</p>
<pre><code class="language-cpp">instBitmap.Draw(instGraphics.getInfos());
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">instGraphics.DrawBitmap(instBitmap.getInfos());
</code></pre>
<p>Eine Erklärung warum eins dem anderen vorzuziehen ist wäre auch gut <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="🙂"
    /> oder eine noch bessere alternative.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2008083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008083</guid><dc:creator><![CDATA[JackOffline]]></dc:creator><pubDate>Mon, 17 Jan 2011 23:29:33 GMT</pubDate></item><item><title><![CDATA[Reply to Designfrage on Tue, 18 Jan 2011 01:12:25 GMT]]></title><description><![CDATA[<p>Generell finde ich die 2. Variante schöner, weil es die Aufgabe deiner<br />
Graphics-Klasse ist das Objekt darzustellen.<br />
Du sagst ja auch nicht einer Linie: Zeichne dich...</p>
<p>Wenn man jetzt allerdings z.B. verschiedene Bildtypen hat und die<br />
Grafik-Klasse performantere (native) Funktionen verwenden kann, würde ich<br />
persönlich eventuell vom Graphics-Objekt an das Bitmap delegieren und<br />
von dort wieder zurück (mit dem genauen Typ als Parameter) um die performante<br />
Implementierung zu verwenden.</p>
<p>So bleibt meine favorisierte Variante als Funktion der Graphics-Klasse<br />
unabhängig von genauen Bildtyp mit der Möglichkeit die für den Bildtyp<br />
optimierte zu nutzen.</p>
<p>EDIT: Etwa so:</p>
<pre><code class="language-cpp">class Graphic{
public:
	void draw(const Image&amp; image){
		image.drawTo(*this);
	}

	void draw(const PNG&amp; png){
		// fast native code
	}

	void draw(const JPG&amp; jpg){
		// fast native code
	}

	// function for images without native code support
	void drawPixelBased(const Image&amp; image){
		// slow code, reading every pixel separately
	}
};

class Image{
public:
	virtual void drawTo(Graphic&amp; graphic) const = 0;
};

class PNG : public Image{
public:
	virtual void drawTo(Graphic&amp; graphic) const{
		graphic.draw(*this);
	}
};
</code></pre>
<p>Der Code soll nur das Prinzip darstellen -&gt; Nicht kompilierfähig (z.B. wegen fehlenden forward declarations)</p>
<p>Gruß,<br />
XSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2008096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008096</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Tue, 18 Jan 2011 01:12:25 GMT</pubDate></item><item><title><![CDATA[Reply to Designfrage on Tue, 18 Jan 2011 07:06:23 GMT]]></title><description><![CDATA[<p>Dependency Inversion. Beide hängen von einer Abstraktion ab.<br />
Wenn ich das Problem richtig verstanden habe:</p>
<pre><code class="language-cpp">class DrawContext
{
  // Schnittstelle zum malen
  virtual void Line(von, nach, Color) = 0;
};

class Graphics
{
public:
  virtual void Draw(DrawContext&amp;) = 0;
};

class Line : public Graphics {};

class Screen : public DrawContext 
{
  // Implementiert Schnittstelle zum malen auf dem Bildschirm
};

class Bitmap : public DrawContext 
{
  // Implementiert Schnittstelle zum malen in ein Bitmap
};

int main()
{
  Line l;
  Bitmap bmp;
  l.Draw(bmp);
  l.Draw(Screen-&gt;Instance());
  return 0;
}
</code></pre>
<p>edit: Glaub ich habs doch falsch verstanden. Bitmap soll sich in Graphics malen. Ändert aber nichts am Prinzip.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2008117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008117</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Tue, 18 Jan 2011 07:06:23 GMT</pubDate></item></channel></rss>