<?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[Strukturierung einer Anwendung]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Ich versuche mich gerade daran, eine kleine DirectX Anwendung objektorientiert umzusetzen. Nun schreibe ich hier im C++ Forum, weil es mir nicht um DirectX Funktionen geht, sondern um die (objektorientierte) Struktur des Programmes. Die Anwendung läuft, ohne in Klassen unterteilt worden zu sein, soweit ganz gut.<br />
Deswegen bitte ich jetzt um Hilfe, einen Rat, wie ich mein Programm am besten strukturiere (Ihr merkt, Objektorientierung gehört bislang nicht zu den Dingen, die ich oft &quot;gemacht&quot; habe).</p>
<p>In diesem (<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-178380.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-178380.html</a>) &quot;parallelen&quot; Thread ist so eine Frage auch schon gestellt worden, allerdings verstehe ich die Lösungsansätze nicht...<br />
Ich schreibe mal auf, was ich mir vorstelle und hoffe auf einige Tipps von euch... <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>
<pre><code class="language-cpp">//Konstruktor und Destruktor lasse ich mal weg, der besseren Anschauung wegen

//verwaltung.h
class Verwaltung
{
  private:
    int verwaltungsvar_1;
    float verwaltungsvar_2;

  public:
    void init();    
    void run();
    void end();
};

//verwaltung.cpp
verwaltung Cverw;    //hier erstelle ich doch ein globales Objekt der Verwaltungsklasse, oder?

void verwaltung::init()
{
  Cinput.init_keys();    //geht das?
}
void verwaltung::run()
{
  Cinput.check_keys();    //geht das?
  Clogik.berechneNaechstenSchritt();    //geht das?
}

//input.h
class input
{
  private:

  public:
    init_keys();
    check_keys();
};

//input.cpp
input Cinput;    //hier erstelle ich doch ein globales Objekt der inputklasse, oder?

void input::init_keys()
{
  //mache irgendwas
}

void input::run()
{
  Cverw.verwaltungsvar_1=5;        //geht das?
}

//logik.h
class logik
{
  private:

  public:
    void berechneNaechstenSchritt();
}

//logik.cpp
logik Clogik;
void logik::berechneNaechstenSchritt()
{
  if(Cverw.verwaltungsvar_1==7)
  {
    //mache irgendwas
  }
  Cverw.verwaltungsvar_2=3;
}
</code></pre>
<p>Es geht mir also darum, aus verschiedenen Klassen (zB input und logik) auf gemeinsam verwendete Variablen zuzugreifen, die ich meiner Meinung nach in einer &quot;Verwaltungsklasse&quot; am besten speichere.<br />
Probiert, herumgespielt und viel gelesen zu diesem Thema habe ich jetzt schon eine Weile, aber es funktioniert alles nicht so wie erhofft.<br />
Ist das überhaupt ein guter Ansatz?</p>
<p>Vielen Dank schon mal im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/180241/strukturierung-einer-anwendung</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 19:26:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180241.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 30 Apr 2007 13:48:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Strukturierung einer Anwendung on Mon, 30 Apr 2007 13:48:55 GMT]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Ich versuche mich gerade daran, eine kleine DirectX Anwendung objektorientiert umzusetzen. Nun schreibe ich hier im C++ Forum, weil es mir nicht um DirectX Funktionen geht, sondern um die (objektorientierte) Struktur des Programmes. Die Anwendung läuft, ohne in Klassen unterteilt worden zu sein, soweit ganz gut.<br />
Deswegen bitte ich jetzt um Hilfe, einen Rat, wie ich mein Programm am besten strukturiere (Ihr merkt, Objektorientierung gehört bislang nicht zu den Dingen, die ich oft &quot;gemacht&quot; habe).</p>
<p>In diesem (<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-178380.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-178380.html</a>) &quot;parallelen&quot; Thread ist so eine Frage auch schon gestellt worden, allerdings verstehe ich die Lösungsansätze nicht...<br />
Ich schreibe mal auf, was ich mir vorstelle und hoffe auf einige Tipps von euch... <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>
<pre><code class="language-cpp">//Konstruktor und Destruktor lasse ich mal weg, der besseren Anschauung wegen

//verwaltung.h
class Verwaltung
{
  private:
    int verwaltungsvar_1;
    float verwaltungsvar_2;

  public:
    void init();    
    void run();
    void end();
};

//verwaltung.cpp
verwaltung Cverw;    //hier erstelle ich doch ein globales Objekt der Verwaltungsklasse, oder?

void verwaltung::init()
{
  Cinput.init_keys();    //geht das?
}
void verwaltung::run()
{
  Cinput.check_keys();    //geht das?
  Clogik.berechneNaechstenSchritt();    //geht das?
}

//input.h
class input
{
  private:

  public:
    init_keys();
    check_keys();
};

//input.cpp
input Cinput;    //hier erstelle ich doch ein globales Objekt der inputklasse, oder?

void input::init_keys()
{
  //mache irgendwas
}

void input::run()
{
  Cverw.verwaltungsvar_1=5;        //geht das?
}

//logik.h
class logik
{
  private:

  public:
    void berechneNaechstenSchritt();
}

//logik.cpp
logik Clogik;
void logik::berechneNaechstenSchritt()
{
  if(Cverw.verwaltungsvar_1==7)
  {
    //mache irgendwas
  }
  Cverw.verwaltungsvar_2=3;
}
</code></pre>
<p>Es geht mir also darum, aus verschiedenen Klassen (zB input und logik) auf gemeinsam verwendete Variablen zuzugreifen, die ich meiner Meinung nach in einer &quot;Verwaltungsklasse&quot; am besten speichere.<br />
Probiert, herumgespielt und viel gelesen zu diesem Thema habe ich jetzt schon eine Weile, aber es funktioniert alles nicht so wie erhofft.<br />
Ist das überhaupt ein guter Ansatz?</p>
<p>Vielen Dank schon mal im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276340</guid><dc:creator><![CDATA[iop]]></dc:creator><pubDate>Mon, 30 Apr 2007 13:48:55 GMT</pubDate></item><item><title><![CDATA[Reply to Strukturierung einer Anwendung on Mon, 30 Apr 2007 16:51:53 GMT]]></title><description><![CDATA[<p>denkst du es liest jemand die 6 seiten?</p>
<p>so als ein Vorschlag wäre Singleton. Aber da können auf dich üble Probleme zukommen, wenn du nicht aufpasst. Beim erstellen eher seltener, je nach dem wie die erstellt werden. Beim Zerstören, wenn ein Objekt benötig wird, der schon freigegeben wurde. Oder wenn die Objekte sich beim Erstellen gegenseitig benötigen.</p>
<p>richtig gute lösung habe ich für das ganze noch keine gefunden. Aber verwende selbst Singletons. Die Erstellungsreihenfolge lege ich dann einfach selbst fest. Z.b. in der main() A::Singleton(), B::Singleton() verwende.</p>
<p>Schau dir Loki lib an. Könnte aber auch schwerer zu benutzen sein. Wenn du das entsprechende Buch nicht gelesen hast (Modernes C++ Design). Wenn du es noch nicht kennst. Solltest das nachholen, wenn du etwas erfahrung mit größeren Programmen (und vor allem mit schlechten Libs) gesammelt hast. Dann weißt du wozu das ganze gut ist.</p>
<p>Ansonsten bin ich der Überzeugung, dass man nicht für jeden Kram eine eigene Klasse braucht. Manche würden mir da wohl widersprechen....<br />
z.b. du in einer Klasse nur Funktionen hast, also ohne Datenelemte. Würde ich da lieber Funktionen nehmen.</p>
<p>Achja noch was zum Gesamtaufbau:<br />
Statt Singletons verwenden einige soetwas wie eine Root Klasse. Die dann die anderen Objekte (Logik, Input, usw.) verwaltet und zurückgibt.<br />
Ich persönlich mag sowas nicht, weil ich dann die Klassen nicht unabhängig von einander benutzen kann.<br />
Andererseits wäre soetwas vielleicht sinnvoll, wenn der Endnutzer keine Ahnung von den konkreten Klassen haben sollte, du aber abstrakte Klassen mit Schnittstellen zur verfügung stellst. Ist Richtung COM. Also auch DirectX.</p>
<p>Wenn dir das nicht hilft, ignoriers einfach. Da ich zu faul bin die 6 seiten des anderen Threads zu lesen, und deswegen nicht so genau weiß was du eigentlich willst. <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/1276476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276476</guid><dc:creator><![CDATA[matimatiker]]></dc:creator><pubDate>Mon, 30 Apr 2007 16:51:53 GMT</pubDate></item><item><title><![CDATA[Reply to Strukturierung einer Anwendung on Tue, 01 May 2007 00:08:31 GMT]]></title><description><![CDATA[<p>iop schrieb:</p>
<blockquote>
<p>Es geht mir also darum, aus verschiedenen Klassen (zB input und logik) auf gemeinsam verwendete Variablen zuzugreifen, die ich meiner Meinung nach in einer &quot;Verwaltungsklasse&quot; am besten speichere.</p>
</blockquote>
<p>Verwende am besten das Singleton Muster, das zusammen mit anderen Mustern z.B.<br />
hier</p>
<p><a href="http://www.vico.org/pages/PatronsDisseny.html" rel="nofollow">http://www.vico.org/pages/PatronsDisseny.html</a></p>
<p>skizziert wird.</p>
<p>Zu Singleton et al. findest Du Unmengen weiterer Info bei Google.</p>
<p><strong>Aber</strong></p>
<p>iop schrieb:</p>
<blockquote>
<pre><code class="language-cpp">//sowas
verwaltung Cverw;
// [...]
// oder 
input Cinput;
</code></pre>
</blockquote>
<p><strong>geht gar nicht!</strong></p>
<p>Wenn da irgendetwas mit grossem &quot;C&quot; anfängt dann ist es die Klasse.</p>
<pre><code class="language-cpp">//sowas
class CVerwaltung 
{
//...
};

CVerwaltung verw;
</code></pre>
<p>und nicht umgekehrt!</p>
<p>Auuserdem ist es i.A. nicht günstig, Konstruktoren im Modul-(cpp-Datei)Kontext aufzurufen (und das passiert hier implizit).</p>
<p>Wenn Du's nicht glaubst, beantworte mal die Frage in welcher Reihenfolge die Instanzen beim Programmstart erzeugt werden wenn mehrere Module vorhanden sind. <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>Wenn Du Dir z.B. ein Singleton baust und andere Konstruktoren dies nutzen könnte es sein dass der Instanzzeiger noch nicht auf NULL gesetzt ist!<br />
Davor könnte Dich zwar Dein Compiler bewahren, aber es ist kein guter Stil sich darauf zu verlassen.</p>
<p>Grüsse</p>
<p>*this</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276699</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Tue, 01 May 2007 00:08:31 GMT</pubDate></item><item><title><![CDATA[Reply to Strukturierung einer Anwendung on Tue, 01 May 2007 21:24:51 GMT]]></title><description><![CDATA[<p>Hallo und ein großes Dankeschön erstmal für die Antworten!</p>
<p>Den Thread habe ich gestartet, weil mein Programm in der aufgeführten Struktur nicht lief - was an der Struktur lag, so dachte ich jedenfalls. Im Endeffekt lag der Fehler jedoch in einer Banalität, die mir (nach Murphys Gesetz natürlich) erst nach dem Threadschreiben aufgefallen ist. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Ja, Singletons, das habe ich jetzt schon einige Male gelesen. Werde mich informieren.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/15951">@matimatiker</a></p>
<blockquote>
<p>Ich persönlich mag sowas nicht, weil ich dann die Klassen nicht unabhängig von einander benutzen kann.</p>
</blockquote>
<p>Meinst Du damit, eine Klasse so auszulagern, dass ich sie auch in anderen Programmen nutzen kann? Oder was meinst Du mit &quot;unabhängig?</p>
<p>Wegen der Schreibweise mit dem &quot;C&quot; - sehe ich ein und werde ich ändern <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>Zu den Konstruktoren habe ich noch eine Frage: wo soll ich denn den Konstruktor von zB der Input Klasse in dieser Programmstruktur aufrufen? Ich hätte jetzt auf &quot;im 'Verwaltung'-Konstruktor&quot; getippt, was aber leider nicht geht (-&gt; Linker Fehler).</p>
<p>Danke nochmal für die Antworten!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277208</guid><dc:creator><![CDATA[iop]]></dc:creator><pubDate>Tue, 01 May 2007 21:24:51 GMT</pubDate></item><item><title><![CDATA[Reply to Strukturierung einer Anwendung on Wed, 02 May 2007 06:50:01 GMT]]></title><description><![CDATA[<p>iop schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/15951">@matimatiker</a></p>
<blockquote>
<p>Ich persönlich mag sowas nicht, weil ich dann die Klassen nicht unabhängig von einander benutzen kann.</p>
</blockquote>
<p>Meinst Du damit, eine Klasse so auszulagern, dass ich sie auch in anderen Programmen nutzen kann? Oder was meinst Du mit &quot;unabhängig?</p>
</blockquote>
<p>jein, du kannst die Klasse auch in anderen Programmen nutzen, obwohl sie von anderen abhängig ist die, du nicht brauchst. Aber im Prinzip läuft es darauf hinaus. Z.b. habe bei meiner Lib ein Logging-Framework, Klassen Serialisierung, und paar Klassen um Einstellungen zu speichern und zu laden.<br />
Wenn ich dann z.b. nur die Logging-Klasse brauche, müssen die anderen garnicht eingebunden werden. Natürlich kann ich die anderen zwei genauso unabhängig von einander nutzen. Sie bilden soetwas wie eine abgschlosse Bibliothek in sich.<br />
Das meinte ich mit unabhängig.</p>
<blockquote>
<p>Zu den Konstruktoren habe ich noch eine Frage: wo soll ich denn den Konstruktor von zB der Input Klasse in dieser Programmstruktur aufrufen? Ich hätte jetzt auf &quot;im 'Verwaltung'-Konstruktor&quot; getippt, was aber leider nicht geht (-&gt; Linker Fehler).</p>
</blockquote>
<p>Schau dir Singletons an! oder als kurzfassung:</p>
<pre><code>class Singleton
{
public:
   static Singleton&amp; GetSingleton(){
      if (pInstance_ != 0)
         pInstance_ = new Singleton;
      return *pInstance_;
   }
private:
   static Singleton* pInstance_;
};
</code></pre>
<p>Was das statische erstellen von Objekten in der Cpp-Klasse angeht. Das kann zu Problemen führen. Zumindest ich kämpfe damit gerade. Aber mache ich demnächst einen Thread auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277290</guid><dc:creator><![CDATA[matimatiker]]></dc:creator><pubDate>Wed, 02 May 2007 06:50:01 GMT</pubDate></item></channel></rss>