<?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[Große Verständnisprobleme beim ersten größeren C++-Projekt]]></title><description><![CDATA[<p>Erstmal ein &quot;Hallo&quot; an alle!!</p>
<p>Als mehr oder weniger erfahrene Java-Programmierer habe ich es vor kurzem gewagt ein größeres C++-Projekt in Angriff zu nehmen, bei dem das Ziel ist einen Roboter autonom agieren zu lassen.<br />
Leider habe ich einige grundsätzliche Verständnisprobleme was die Struktur des Gesamtprogramms angeht und wäre daher sehr dankbar, wenn ihr mir ein wenig helfen könntet den Überblick zu gewinnen.</p>
<p>Ich möchte eine größere cpp-Datei haben, die als eine Art Verwaltung agiert und auch die einzige main-Methode des gesamten Projekts hat. In den anderen cpp-Dateien werden zusammengehörende Methoden (z.B. für Dateizugriff oder Steuerung von einzelnen Roboterkomponenten) implementiert und per #include &quot;Headerdatei.h&quot; in den anderen cpp-Dateien verfügbar gemacht.</p>
<p>Die ersten Fragen, die mir so gekommen sind (bei weitem nicht die letzten ;-()</p>
<ol>
<li>
<p>Wenn ich ein Objekt der Hauptklasse (Verwaltungs cpp) erstelle und mit diesem Objekt dann in den anderen cpp-Dateien auf die Methoden der Verwaltungs cpp zugreifen möchte, muss ich dann in jeder weiteren cpp ein neues Objekt der Hauptklasse erstellen oder reicht es wenn ich in den weiteren cpp-Dateien jeweils einen Zeiger auf das Objekt der Verwaltungsklasse habe?</p>
</li>
<li>
<p>Wie würde ich einen solchen Zeiger denn realisieren und in den weiteren Klassen dann deklarieren und benutzen? Z.B. möchte ich aus der Verwaltungsklasse dann eine Methode a() aufrufen.</p>
</li>
<li>
<p>Wie ist es wenn ich zwischen den einzelnen anderen Dateien Funktionen aufrufen will? Also ohne den Weg über das Verwaltungsobjekt zu gehen. Z.B. Zum Ansteuern eines Roboterarms benötige ich das Lesen aus einer Datei. Wie sollte das am besten realisiert werden? Vielleicht doch besser über die Verwaltungs-cpp oder einfach Objekte beider Klassen erzeugen und dann per Klasse.Methode() darauf zugreifen?</p>
</li>
</ol>
<p>Vielen Dank für die Hilfe und entschuldigt die vielleicht ein wenig dummen Fragen, aber C++ ist halt doch ne andere Angelegenheit als Java...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/178380/große-verständnisprobleme-beim-ersten-größeren-c-projekt</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 16:50:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/178380.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 10 Apr 2007 19:47:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Tue, 10 Apr 2007 19:47:54 GMT]]></title><description><![CDATA[<p>Erstmal ein &quot;Hallo&quot; an alle!!</p>
<p>Als mehr oder weniger erfahrene Java-Programmierer habe ich es vor kurzem gewagt ein größeres C++-Projekt in Angriff zu nehmen, bei dem das Ziel ist einen Roboter autonom agieren zu lassen.<br />
Leider habe ich einige grundsätzliche Verständnisprobleme was die Struktur des Gesamtprogramms angeht und wäre daher sehr dankbar, wenn ihr mir ein wenig helfen könntet den Überblick zu gewinnen.</p>
<p>Ich möchte eine größere cpp-Datei haben, die als eine Art Verwaltung agiert und auch die einzige main-Methode des gesamten Projekts hat. In den anderen cpp-Dateien werden zusammengehörende Methoden (z.B. für Dateizugriff oder Steuerung von einzelnen Roboterkomponenten) implementiert und per #include &quot;Headerdatei.h&quot; in den anderen cpp-Dateien verfügbar gemacht.</p>
<p>Die ersten Fragen, die mir so gekommen sind (bei weitem nicht die letzten ;-()</p>
<ol>
<li>
<p>Wenn ich ein Objekt der Hauptklasse (Verwaltungs cpp) erstelle und mit diesem Objekt dann in den anderen cpp-Dateien auf die Methoden der Verwaltungs cpp zugreifen möchte, muss ich dann in jeder weiteren cpp ein neues Objekt der Hauptklasse erstellen oder reicht es wenn ich in den weiteren cpp-Dateien jeweils einen Zeiger auf das Objekt der Verwaltungsklasse habe?</p>
</li>
<li>
<p>Wie würde ich einen solchen Zeiger denn realisieren und in den weiteren Klassen dann deklarieren und benutzen? Z.B. möchte ich aus der Verwaltungsklasse dann eine Methode a() aufrufen.</p>
</li>
<li>
<p>Wie ist es wenn ich zwischen den einzelnen anderen Dateien Funktionen aufrufen will? Also ohne den Weg über das Verwaltungsobjekt zu gehen. Z.B. Zum Ansteuern eines Roboterarms benötige ich das Lesen aus einer Datei. Wie sollte das am besten realisiert werden? Vielleicht doch besser über die Verwaltungs-cpp oder einfach Objekte beider Klassen erzeugen und dann per Klasse.Methode() darauf zugreifen?</p>
</li>
</ol>
<p>Vielen Dank für die Hilfe und entschuldigt die vielleicht ein wenig dummen Fragen, aber C++ ist halt doch ne andere Angelegenheit als Java...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1263300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1263300</guid><dc:creator><![CDATA[Dr.Ottel]]></dc:creator><pubDate>Tue, 10 Apr 2007 19:47:54 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Tue, 10 Apr 2007 20:15:46 GMT]]></title><description><![CDATA[<p>also, ich bin eigentlich relativ gesehen ein blutiger anfänger, aber für mich hat sich folgende vorgehensweise durchaus bewehrt:</p>
<ol>
<li>ein DIN A0 blatt und viele kleine selbstklebende notizzettel holen <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="😉"
    /></li>
<li>sich richtig gut zu überlegen, was für aufgaben welche klassen übernehmen.<br />
in etwa das interface von den einzelnen objekten entwerfen.<br />
-welche funktion ist nur für eigenen gebrauch bestimmt? (private?)<br />
-welche müssen überall aufrufbar sein? (public?)<br />
-evtl nur bestimmten klassen zugriffsrechte erteilen? (friends?)</li>
<li>welche komponenten müssen miteinander kommunizieren können?<br />
eifachste lösung: alles zentral machen [Verwaltungsklasse] und einen zeiger auf diese klasse in jedem anderen objekt speichern. Die einzelnen komponente als member-variablen der verwaltungsklasse deklarieren. So können alle komponenten sich gegenseitig indirekt über die verwaltungsklasse ansprechen (solange die friend-zugriffsrechte sinnvoll verteilt sind, gibt es eigentl kein riesenchaos)</li>
<li>evtl braucht man klassen, die jederzeit überall verfügbar sein müssen<br />
(Singletons) [benutze ich einzig und allein für die logfile, aber ohne logfile geht wirklich gar-nichts]</li>
</ol>
<p>also, es gibt bestimmt bessere möglichkeiten, das ganze programm irgendwie zu strukturieren, aber das ist halt schon mal eine einfache möglichkeit, das größte chaos zu vermeiden.</p>
<p>in meinen programmen sieht es dann mehr oder weniger so aus:</p>
<pre><code class="language-cpp">//fwd declaration
class KuenstlicheIntelligenz; 
//...

class Verwaltung{
public:
  //alles andere als members
  KuenstlicheIntelligenz ki;
  Motorik motorik;
  Stromversorgung strom;
  //was weiß ich was...
};

class KuenstlicheIntelligenz{
 Verwaltung* verwaltung:  //zeiger auf die verwaltung

 //indirekter zugriff auf andere komponente:
 void f(){
  verwaltung-&gt;strom.ausschalten();
 }
};

//analog alle anderen components
</code></pre>
<p>selbstverständlich alles auf 12031030139170491 header und cpp's verteilt wenn's sein muss... <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>hoffentlich hilfts was <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1263323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1263323</guid><dc:creator><![CDATA[Andrey]]></dc:creator><pubDate>Tue, 10 Apr 2007 20:15:46 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Tue, 10 Apr 2007 20:31:39 GMT]]></title><description><![CDATA[<p>Danke für deine schnelle Antwort!!</p>
<p>Jaja, das ist auch immer so ein Problem von mir: Ich leg immer mit der Programmierung los und mache mir dann nebenbei Gedanken über die Struktur und wer mit wem kommunizieren muss, obwohl ich weiß, dass das 100%-ig der falsche Weg ist!</p>
<p>Werde mir das mal endgültig zu Herzen nehmen!!</p>
<p>Ein weiteres Problem, dass ich beim ersten Post schon angesprochen habe:<br />
Was mache ich, wenn 2 Klassen ohne die Verwaltungsklasse kommunizieren sollen?</p>
<p>Noch ein Problem:<br />
Wenn ich in der Verwaltungsklasse eine Methode einer anderen Klasse aufrufen will erstelle ich am besten einen Zeiger auf ein Objekt der anderen Klasse innerhalb der Verwaltungsklasse und greife dann darüber auf die Methode der anderen Klasse zu, also ungefähr so:</p>
<p>innerhalb Verwaltungsklasse.cpp</p>
<pre><code class="language-cpp">AndereKlasse* ptrAndereKlasse;
ptrAndereKlasse-&gt;methodeDerAnderenKlasse();
</code></pre>
<p>aber was mache ich, wenn ich in einer weiteren Klasse wieder auf die methodeDerAnderenKlasse(); zugreifen will, aber dabei sicher sein will, dass ich auf das selbe Objekt (also mit den gleichen Werten bei den Parametern) zugreife??</p>
<p>Wenn ich dann wieder einen Zeiger anlege, zeigt der dann doch auf ein neues Objekt der Klasse, oder??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1263340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1263340</guid><dc:creator><![CDATA[Dr.Ottel]]></dc:creator><pubDate>Tue, 10 Apr 2007 20:31:39 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Tue, 10 Apr 2007 20:37:18 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13810">@Andrey</a><br />
Warum hast du da in der Klasse KünstlicheIntelligenz folgendes stehen --&gt; &quot;Verwaltung* verwaltung:&quot; (ist das n &quot;:&quot; am Schluss oder solls n &quot;;&quot; sein? weil wenns n Doppelpunkt ist dann verstehe ich gar nicht mehr)<br />
Könnte man das den nicht einfach so machen in dem KünstlicheIntelligenz mit Verwaltung verwandt ist? (KuenstlicheIntelligenz : public\private Verwaltung)<br />
Oder verstehe ich da was net? Sry ich bin eher noch n Anfänger in Sachen C++.<br />
Dankeschön schon mal im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1263348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1263348</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Tue, 10 Apr 2007 20:37:18 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Tue, 10 Apr 2007 20:52:47 GMT]]></title><description><![CDATA[<p>Ich denke, dass er sich da vertippt hat und dass es ein ; sein soll.</p>
<p>Dein Vorschlag verstehe ich allerdings nicht genau bzw. er ist als Lösung für dieses Problem nicht geeignet.<br />
Wenn ich das richtig verstehe willst du hier eine Vererbung anwenden, aber bei meinem Problem haben die verschiedenen Klassen eigentlich nichts miteinander zu tun in dem Sinn, dass die eine eine Spezialisierung (und damit Unterklasse) einer anderen Klasse ist, sondern es soll lediglich ermöglicht werden, dass alle Klassen untereinander kommunizieren können...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1263359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1263359</guid><dc:creator><![CDATA[Dr.Ottel]]></dc:creator><pubDate>Tue, 10 Apr 2007 20:52:47 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Tue, 10 Apr 2007 22:16:52 GMT]]></title><description><![CDATA[<p>ja, sry, das soll ein semikolon sein =&gt; da ist gar nichts mit vererbung drin, die ganzen klassen haben in dem sinne nichts miteinander gemeinsam (sind in keiner weise voneinander abgeleitet oder so)<br />
[hab mir wegen der scheisallergie beinahe die augen rausgekratzt <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="😃"
    /> =&gt; sehe im moment nicht so gut^^ <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> ]</p>
<p>Der zeiger auf die &quot;verwaltung&quot; in allen anderen klassen ist einfach da, damit man alle verknüpfungen irgendwo zentral bündelt: alle components haben zeiger auf die &quot;verwaltung&quot;, &quot;verwaltung&quot; beinhaltet alle components. So muss man nicht in jedem component zehn zeiger zu anderen components speichern, damit sie miteinander &quot;kommunizieren&quot; können (funktionen aufrufen oder sonstiges)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1263405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1263405</guid><dc:creator><![CDATA[Andrey]]></dc:creator><pubDate>Tue, 10 Apr 2007 22:16:52 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Wed, 11 Apr 2007 07:24:09 GMT]]></title><description><![CDATA[<p>Das klingt schon einmal so, wie ich das haben will. Danke!</p>
<p>Was ich in C++ noch nicht ganz verstanden habe, ist die Geschichte mit den Zeigern (das hat echt der Teufel höchstpersönlich erfunden).<br />
Wenn ich jetzt in jeder der anderen Klassen jeweils einen Zeiger auf die Verwaltung erstelle (Verwaltung* verwaltung;), auf was zeigen die dann?<br />
Es wurde kein Objekt von Verwaltung erzeugt, oder doch? Zeigen dann alle Zeiger aus den anderen Klassen auf dasselbe Verwaltungsobjekt????<br />
Was bewirkt der Befehl Verwaltung* verwaltung; ??<br />
Wird ein Objekt von Verwaltung angelegt, oder ermöglicht es nur einen Zugriff auf die Methoden und Variablen von Verwaltung, was ich mir ohne dazugehöriges Objekt aber nicht vorstellen kann.</p>
<p>Und wie sieht es mit Variablen aus, auf die alle anderen Klassen zugreifen können sollen? Dass man die nicht public definieren soll, habe ich auch schon begriffen. Also bleibt mir wohl nichts anderes übrig, als sie in der Verwaltungsklasse als private zu definieren und dann get- und set-Methoden dafür zu schreiben, oder gibt es dafür einen eleganteren Weg?</p>
<p>Und noch eine Frage: Wie sieht es aus mit privaten Variablen bei den anderen Klassen? Sagen wir, die Klasse Motorik hat eine Variable mit dem Namen</p>
<pre><code class="language-cpp">private double speed;
</code></pre>
<p>Wenn ich auf diese Variable in einer anderen Klasse außer der Verwaltungsklasse, also z.B. innerhalb von Stromversorgung darauf zugreifen will, wie mache ich das am besten?<br />
Private Variable in Verwaltung anlegen?<br />
Oder get- und set-Methode für die private Variable speed innerhalb der Klasse Motorik anlegen und dann per</p>
<pre><code class="language-cpp">verwaltung-&gt;strom.getSpeed()
</code></pre>
<p>darauf zugreifen?!</p>
<p>Langsam ergibt das Ganze Sinn! Danke!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1263522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1263522</guid><dc:creator><![CDATA[Dr.Ottel]]></dc:creator><pubDate>Wed, 11 Apr 2007 07:24:09 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Wed, 11 Apr 2007 11:42:05 GMT]]></title><description><![CDATA[<p>Du musst ein ein Objekt erst erzeugen. Ein Zeiger auf ein Objekt sorgt nicht dafür, dass dieses Objekt existiert. Da du pro Roboter sicherlich nur eine Verwaltung haben willst, solltest du das als Singleton implementieren.<br />
<a href="http://home.earthlink.net/~huston2/dp/singleton.html" rel="nofollow">http://home.earthlink.net/~huston2/dp/singleton.html</a></p>
<p>Zugriffe solltest du über Methoden machen. Das ist auch Kritikpunkt an dem Beispiel dort oben: über die Verwaltungsklasse wird KuenstlicheIntelligenz an ein 3. Objekt gebunden. Das führt zu Abhängigkeiten, die bei Änderungen sehr viel nach sich ziehen können.<br />
Außerdem würde ich eine Protokollklasse für alle Module erzeugen. Dann kannst du diese nämlich sehr einfach austauschen.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">//Protokolklassen
class KuenstlicheIntelligenz
{
    Verwaltung* verwaltung;
    int some_member;

public:
    KuenstlicheIntelligenz(Verwaltung* __verwaltung)
    : verwaltung(__verwaltung)
    { }

    virtual void denken() = 0;
};

class Motorik
{
    Verwaltung* verwaltung;

public:
    Motorik(Verwaltung* __verwaltung)
    : verwaltung(__verwaltung)
    { }

    virtual void laufen() = 0;
};

class Stromversorgung
{
    Verwaltung* verwaltung;

public:
    Stromversorgung(Verwaltung* __verwaltung)
    : verwaltung(__verwaltung)
    { } 

    virtual void ausschalten() = 0;
};

//Gesamtverwaltung
class Verwaltung
{
    KuenstlicheIntelligenz* ki;
    Motorik* motorik;
    Stromversorgung* strom;

public:
    void attach(KuenstlicheIntelligenz* __ki, Motorik* __motorik, Stromversorgung* __strom)
    {
        ki = __ki;
        motorik = __motorik;
        strom = __strom;
    }

    void strom_ausschalten()
    {
        strom-&gt;ausschalten();
    }

    void denken()
    {
        ki-&gt;denken();
    }

    void laufen()
    {
        motorik-&gt;laufen();
    }
};

//Fabrikmethode zum Erzeugen des Roboters
template&lt;class KI, class MOTORIK, class STROM&gt;
std::auto_ptr&lt;Verwaltung&gt; erzeuge_roboter()
{
    Verwaltung* temp = new Verwaltung;
    temp-&gt;attach(new KI(temp), new MOTORIK(temp), new STROM(temp));
    return temp;
}

//Konkrete Implementierungen für Module
class DummerRoboter : public KuenstlicheIntelligenz
{
public:
    DummerRoboter(Verwaltung* __verwaltung)
    : KuenstlicheIntelligenz(__verwaltung)
    {}

    void denken()
    {
        verwaltung-&gt;strom_ausschalten();
    }
};

class KeineBeine : public Motorik
{
public:
    KeineBeine(Verwaltung* __verwaltung)
    : Motorik(__verwaltung)
    {}

    void laufen()
    { }
};

class LiIonenAkku : public Stromversorgung
{
public:
    LiIonenAkku(Verwaltung* __verwaltung)
    : Stromversorgung(__verwaltung)
    { }

    void ausschalten()
    {
        //sehr kompliziert!
    }
};

//Test&quot;lauf&quot;
int main()
{
    std::auto_ptr&lt;Verwaltung&gt; meinRoboter = erzeuge_roboter&lt;DummerRoboter, KeineBeine, LiIonenAkku&gt;();

    meinRoboter-&gt;denken();
    meinRoboter-&gt;laufen();
}
</code></pre>
<p>Wenn man will kann dem Roboter hier auch während des Betriebs ein neues Gehirn verpassen <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 />
Hier ist die Verwaltung nun aber noch nciht als Singleton implementiert. Das würde die Fabrikmethode und die Konstruktoren nochmal vereinfachen.</p>
<p>Edit: Konstruktoren vergessen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1263748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1263748</guid><dc:creator><![CDATA[viande]]></dc:creator><pubDate>Wed, 11 Apr 2007 11:42:05 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Wed, 11 Apr 2007 12:12:49 GMT]]></title><description><![CDATA[<p>das ist natürlich vorbildlich, was viande da geschrieben hat: die ganzen verknüpfungen sind von der implementierung komplett getrennt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
das macht die ganze sache natürlich um einiges universeller, komponente lassen sich da dank der polymorphie beliebig austauschen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
so sollte mans bei wirklich großen normalerweise tun, für meine projekte fand ich so eine vorgehensweise jedoch bisher ziemlich overkill, weil ich mich meistens immer mit einer einzigen implementierung beschäftigte, da fand ich es nicht sinnvoll, die vom interface an sich zu trennen.<br />
Aber die vorgehensweise ist natürlich klasse <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/1263758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1263758</guid><dc:creator><![CDATA[Andrey]]></dc:creator><pubDate>Wed, 11 Apr 2007 12:12:49 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Wed, 11 Apr 2007 12:20:22 GMT]]></title><description><![CDATA[<p>Wow viande, da scheint wohl jemand Ahnung zu haben <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 />
Das ist natürlich jetzt evtl. mit Kanonen auf Spatzen geschossen, aber dafür sehr professionell!!</p>
<p>Eine Frage, die spontan bei mir aufkommt:<br />
Wie es der Verwaltung gelingt auf die verschiedenen Komponenten zuzugreifen ist mir dank der vorigen Erläuterugen nun klar <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>Aber: Wie sieht aus mit dem Zugriff von anderen Komponenten auf die Methoden der Verwaltungsklasse aus?<br />
Es wird gesagt, dass ein Objekt erzeugt werden muss, damit ich auf dieses mit Zeiger zugreifen kann. Aber was ist, wenn ich jetzt in jeder Komponente einen eigenen Zeiger auf ein Verwaltungsobjekt anlege!? Dann zeigen sie doch auf verschiedene Verwaltungsobjekte, aber ich will doch, dass sie auf das IDENTISCHE Objekt zeigen, damit der Zustand der gleiche ist.</p>
<p>Wie mache ich das denn am besten?<br />
Ein Objekt der Klasse Verwaltung lege ich doch erst in der main-Methode an?! Wie ist es mir dann noch möglich Zeiger darauf zeigen zu lassen?<br />
Oder soll ich eine Methode innerhalb der Verwaltungsklasse schreiben, die die Adresse des Verwaltungsobjekt an die anderen Komponenten weitergibt?<br />
In etwa so:<br />
[cpp]<br />
Verwaltung* getVerwaltung(Verwaltung verwObjekt)<br />
{<br />
return &amp;verwObjekt;<br />
}</p>
<p>und das dann in den anderen Methoden aufrufen? Oder sehe ich was komplett falsch?</p>
<p>Aber diese Methode getVerwaltung kann ich außerhalb der Verwaltungsklasse doch nur benutzen nachdem ich ein Objekt der Verwaltungsklasse angelegt habe benuten, aber genau das will ich ja nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Ich bin wieder ein wenig verwirrt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1263787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1263787</guid><dc:creator><![CDATA[Dr.Ottel]]></dc:creator><pubDate>Wed, 11 Apr 2007 12:20:22 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Wed, 11 Apr 2007 13:10:03 GMT]]></title><description><![CDATA[<p>Naja, da kommt das Singleton ins Spiel. Das sieht in etwa so aus:</p>
<pre><code class="language-cpp">class Verwaltung
{
    Verwaltung(){} //Konstruktor privat, damit kein anderer eine Instanz erzeugen kann
public:
    static Verwaltung* get_instance()
    {
        static Verwaltung instance;
        return &amp;instance;
    }
};
</code></pre>
<p>Aufrufe erfolgen dann so:</p>
<pre><code class="language-cpp">Verwaltung* verwaltung = Verwaltung::get_instance();
verwaltung-&gt;some_op();

//oder direkt:
Verwaltung::get_instance()-&gt;some_op();
</code></pre>
<p>Das ist die einfachste Variante von Singletons. Nicht threadsicher und nicht geeignet für Objekte, die eventuell beim Beenden des Programms nochmal benötigt werden (Log-Objekte).</p>
<p>Edit: Bei meiner Variante hat die Factory-Methode dafür gesorgt, dass die Module die richtige Instanz von der Verwaltung bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1263821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1263821</guid><dc:creator><![CDATA[viande]]></dc:creator><pubDate>Wed, 11 Apr 2007 13:10:03 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Wed, 11 Apr 2007 13:39:26 GMT]]></title><description><![CDATA[<p>mmh, das sieht doch schon mal nicht schlecht aus. Vielen Dank.<br />
Das werde ich heute abend direkt mal ausprobieren und falls ich nicht weiter weiß, weiß ich ja an wen ich mich wenden kann <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/1263852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1263852</guid><dc:creator><![CDATA[Dr.Ottel]]></dc:creator><pubDate>Wed, 11 Apr 2007 13:39:26 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Wed, 11 Apr 2007 14:16:58 GMT]]></title><description><![CDATA[<p>Darf ich mal fragen, wie lange du java programmiert hast? Weil das sind alles Konzepte und Patterns, die es auch in Java zu Hauf gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1263873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1263873</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 11 Apr 2007 14:16:58 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Wed, 11 Apr 2007 14:33:44 GMT]]></title><description><![CDATA[<p>ich würde sogar sagen, in java ist das alles sogar viel deutlicher hervorgehoben, als in c++ (zB gibts es spezielle &quot;interface&quot; klassen). Das haben die ziemlich gut hinbekommen bei der sprache... übersichtlich... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1263885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1263885</guid><dc:creator><![CDATA[Andrey]]></dc:creator><pubDate>Wed, 11 Apr 2007 14:33:44 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Wed, 11 Apr 2007 14:48:49 GMT]]></title><description><![CDATA[<p>Um so mehr wundert es mich, das Dr. Ottel das alles nicht kennt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1263892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1263892</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 11 Apr 2007 14:48:49 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Wed, 11 Apr 2007 15:02:47 GMT]]></title><description><![CDATA[<p>Recht habt ihr!!</p>
<p>Das Problem ist aber auch, dass ich in Java noch kein größeres Projekt geschrieben habe. Das waren meistens kleine Furzprogramme, wo man maximal mal ne Vererbung oder so gemacht hat, daher sind mir viele der gängigen Konzepte leider nicht bekannt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Aber wie ihr selber schon gesagt habt: Wenn man es mal für eine Programmiersprache verstanden hat, dann kann man es auch auf andere anwenden und genau deshalb habe ich mich dazu entschieden. Ich hätte das Projekt zwar lieber in Java gemacht, aber für Java gibt es nur eine zusammengebastelte API, die wohl mehr Probleme verursacht als löst und daher musste ich jetzt C++ verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1263902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1263902</guid><dc:creator><![CDATA[Dr.Ottel]]></dc:creator><pubDate>Wed, 11 Apr 2007 15:02:47 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Wed, 11 Apr 2007 16:00:49 GMT]]></title><description><![CDATA[<p>naja, übertrieben kompliziert sind die techniken ja nicht (höchstens muss man da an paar stellen ein &quot;virtual&quot; schlüsselwörtchen reinbauen, und ein paar konkrete klassen von rein virtuellen interface-klassen ableiten, da hat man schon im großen und ganzen fast dasselbe, was viande vorgeschlagen hat)</p>
<p>aber man braucht hat für das ganze ein bisschen disziplin und vor allem guten überblick über das, was man da tut. Hier können auch die tollsten dokumentationen für die sprachsyntax und die dicksten bücher nicht viel helfen. Man muss halt einfach ganz genau wissen, was man will. Wenn man das für sich ausformuliert hat, ist es kein großes problem mehr, das ganze in beliebiger sprache umzusetzen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1263952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1263952</guid><dc:creator><![CDATA[Andrey]]></dc:creator><pubDate>Wed, 11 Apr 2007 16:00:49 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Wed, 11 Apr 2007 19:26:39 GMT]]></title><description><![CDATA[<p>Ich fasse mal zusammen:<br />
Von der Aufgabenstellung ist folgendes wenige (!) bekannt:</p>
<p>Dr.Ottel schrieb:</p>
<blockquote>
<p>einen Roboter autonom agieren zu lassen.</p>
</blockquote>
<p>und ..</p>
<p>Dr.Ottel schrieb:</p>
<blockquote>
<p>Zum Ansteuern eines Roboterarms benötige ich das Lesen aus einer Datei.</p>
</blockquote>
<p>Ich meine, das ist zu wenig, um irgend eine Aussage darüber machen zu können, wie man so etwas aufbaut. Aus Erfahrung weiß ich, dass eine übergeordnete Verwalter-Klasse die alle kennt und alle kennen im besten Fall die zweit schlechteste Lösung ist.<br />
Komischerweise kommt am Anfang jeder genau auf diesen Ansatz - egal für welches Problem <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>Daher meine Fragen an Dr.Ottel:<br />
- wie ist der Roboter aufgebaut?<br />
- was soll er genau tun; was bedeutet 'autonom agieren'?<br />
- wie ist sein Input (Konfiguration, Sensoren, Aufgaben)?<br />
- wie kommt dieser Input in das System (per Event oder wird der Input abgeholt)?<br />
- wie ist sein Output (Arm-Motoren, fährt/geht er)?<br />
- wie sieht ein typischer Anwendungsfall aus?</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1264148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1264148</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 11 Apr 2007 19:26:39 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Wed, 11 Apr 2007 20:51:00 GMT]]></title><description><![CDATA[<p>Hallo Werner und alle anderen.</p>
<p>Na dann probiere ich dir mal auf deine Frage zu antworten, damit du mir meine Frage beantworten kannst <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>- wie ist der Roboter aufgebaut?<br />
Also: Der Roboter hat gewisse Komponenten, die sowohl Hardware (z.B. Greifarm) als auch Software (Selbstlokalisation und Pfadplanung) sein können.</p>
<p>Innerhalb der Verwaltungsklasse sollen alle Komponenten zusammenlaufen (auch wenn das nicht von allen als gute Idee angesehen wird).<br />
Dadurch möchte ich in der Lage sein von der Verwaltungsklasse auf ALLE Methoden des gesamten Programms zugreifen zu können.</p>
<p>- was soll er genau tun; was bedeutet 'autonom agieren'?<br />
Autonom agieren bedeutet, dass der Roboter in der Lage ist ein Problem nicht immer auf die gleiche Art und Weise zu erledigen, sondern auch Abweichungen vom &quot;Plan&quot; verkraften zu können. So sollen z.B. dynamische Hindernisse auf dem Pfad nicht zum Absturz des Programms, sondern zur Neuplanung des Pfades führen.</p>
<p>- wie ist sein Input (Konfiguration, Sensoren, Aufgaben)?<br />
Sowohl Konfigurationsdateien als auch Sonarsensordaten, aber auch eine Sprachsteuerung, die Befehle in einer txt-Datei ablegt, die anschließend ausgeführt werden sollen.</p>
<p>- wie ist sein Output (Arm-Motoren, fährt/geht er)?<br />
Das Abfahren (er fährt) der berechneten Pfade, sowie das Aufnehmen und Transportieren von Gegenständen (alles in einzelnen Klassen realisiert).</p>
<p>- wie sieht ein typischer Anwendungsfall aus?<br />
Der Roboter bekommt den Befehl einen Gegenstand von A nach B zu transportieren.<br />
Bedeutet im Ablauf des Programms:<br />
- Verstehen des Befehls per Spracherkennung<br />
- Abspeichern des verstandenen Befehls in einer txt-Datei<br />
- Auslesen der Befehle aus der txt-Datei (der Umweg über die txt-Datei ist bewusst gewählt)<br />
- Pfadplanung zu Ort A<br />
- Abfahren des Pfades zu Ort A<br />
- Erkennen des Gegenstandes an Ort A<br />
- Aufnehmen des Gegenstandes<br />
- Pfadplanung zu Ort B<br />
- Abfahren des Pfades zu Ort B<br />
- Abladen des Gegenstandes</p>
<p>Wie ihr sehen könnt, da ist einiges zu tun, wobei das nur ein Teil meiner Zielapplikation ist, aber schon ein wichtiger!!</p>
<p>Danke für jede Hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1264202</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1264202</guid><dc:creator><![CDATA[Dr.Ottel]]></dc:creator><pubDate>Wed, 11 Apr 2007 20:51:00 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Wed, 11 Apr 2007 21:02:03 GMT]]></title><description><![CDATA[<p>oha <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
bastelst du an dem ding alleine just for fun im hobbykeller rum? oder gibt es evtl irgendein &quot;team&quot; oder eine arbeitsgruppe oder sowas? falls ja: wie siehts denn mit den anderen aus, wärs evtl besser, sich mit den abzusprechen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1264207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1264207</guid><dc:creator><![CDATA[Andrey]]></dc:creator><pubDate>Wed, 11 Apr 2007 21:02:03 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Wed, 11 Apr 2007 21:55:07 GMT]]></title><description><![CDATA[<p>Nee, ich arbeite da alleine dran. Lediglich die Spracherkennung wird von jemand anderem übernommen. Aber ich muss auch nicht alles von Grund auf implementieren. Es gibt eine API, die z.B. die Pfadplanung übernimmt und ich muss diese nur noch anstoßen.<br />
Also fange ich nicht ganz bei Null an, aber es bleibt noch genug Arbeit übrig <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1264232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1264232</guid><dc:creator><![CDATA[Dr.Ottel]]></dc:creator><pubDate>Wed, 11 Apr 2007 21:55:07 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Thu, 12 Apr 2007 06:14:21 GMT]]></title><description><![CDATA[<p>Das mit der Verwaltungklasse ist also vorgegeben, ja?<br />
Auf jeden Fall solltest du dir die anderen Entfwurfsmuster auf der Seite, die ich genannt habe, auch nochmal angucken. Das wird dir sicherlich helfen. Alternativ könnte ich dir die Investition in &quot;Head First Design Patters/Entwurfsmuster von Kopf bis Fuß&quot; empfehlen. Ist aber nicht ganz billig das Ding, ich habs mir von einem Gutschein gekauft :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1264324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1264324</guid><dc:creator><![CDATA[viande]]></dc:creator><pubDate>Thu, 12 Apr 2007 06:14:21 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Fri, 13 Apr 2007 17:17:39 GMT]]></title><description><![CDATA[<p>Dr.Ottel schrieb:</p>
<blockquote>
<p>Na dann probiere ich dir mal auf deine Frage zu antworten, damit du mir meine Frage beantworten kannst <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>Na - dann will ich's mal probieren.</p>
<p>Im Prinzip ist doch das eine Art Transporter. In der realen Welt gibt es da u.a. Schubkarren, LKws und Schiffe. Da beim Software Design die Kunst im Teilen und Herrschen besteht, nehme ich ein Vorbild, wo schon viel Aufgaben verteilt sind; wie auf einem Schiff.</p>
<p>Mal angenommen es gibt einen <strong>Kapitän</strong>. Der hat einen <strong>Greifer</strong> (Lademeister), einen <strong>Navigator</strong> und eine externen <strong>Kommandeur</strong>. Vom <strong>Kommandeur</strong> werden die groben <strong>Anweisungen</strong> gemeldet &quot;Fahre nach A hole Paket P1 bringe nach B&quot;. Der <strong>Kapitän</strong> zerlegt die <strong>Anweisungen</strong> in kleinere <strong>Happen</strong> an <strong>Navigator</strong> und <strong>Greifer</strong>. An den <strong>Navigator</strong> &quot;fahre nach A&quot;. Der <strong>Navigator</strong> seinerseits besitzt eine <strong>Karte</strong> und einen <strong>Steuermann</strong>. Der <strong>Navigator</strong> führt an Hand der <strong>Karte</strong> eine Pfadplanung durch und gibt dem <strong>Steuermann</strong> einzelne <strong>Fahrbefehle</strong>: Steuermann drehe um 120Grad volle Kraft voraus fahre 13,5m. Der <strong>Steuermann</strong> hat einen oder hat Zugriff auf <strong>Antrieb</strong> und <strong>Lenkung</strong> und tut was ihm geheißen. Wenn er die Strecke zurückgelegt hat meldet er das 'nach oben'. Der <strong>Navigator</strong> gibt ihm dann den nächsten <strong>Fahrbefehl</strong> und wenn der <strong>Steuermann</strong> fertig beim letzten meldet, so meldet der <strong>Navigator</strong> &quot;Ziel erreicht&quot; an den <strong>Kapitän</strong>. Der beauftragt seinen <strong>Greifer</strong> das Paket P1 zu fassen. Der <strong>Greifer</strong> wiederum hat einen oder hat Zugriff auf den <strong>Roboterarm</strong> und tut wie ihm geheißen {hier braucht man noch mehr Input}. Der <strong>Greifer</strong> meldet ok 'nach oben' und der <strong>Kapitän</strong> beauftragt wieder den <strong>Navigator</strong> usw.</p>
<p>Der <strong>Navigator</strong> hat eine Möglichkeit seine <strong>Position_und_Richtung</strong> im Raum zu bestimmen {wie kann der Roboter das? wie funktioniert die Selbstlokalisation - bzw. was ist ihr Output?} so kontrolliert er den Weg des Steuermanns. Der <strong>Steuermann</strong> hat noch ein <strong>Sonar</strong> mit dem er Hindernisse nach vorne erkennt. Trifft der Roboter während der Fahrt auf ein Hindernis, so hält er an und meldet das 'nach oben'. Der <strong>Navigator</strong> trägt das Hindernis in seine <strong>Karte</strong> ein und beauftragt mit den neuen Informationen die Pfadplanung. Mit dem neuen <strong>Pfad</strong> gibt er wieder Anweisungen an den <strong>Steuermann</strong>.</p>
<p>So - alle fett gedruckten Hauptwörter sind Klassen. Jedesmal wenn ein 'hat' erscheint ist das eine Aggregation. Also bei A hat B ist B ein Member von A; entweder direkt oder über Pointer und Interface-Klasse wie von viande schon beschrieben. Ein 'hat Zugriff auf' kann ein Zugriff auf eine Ressource sein, die von einem externen (?) System instantiiert wird. Also Sonar, Antrieb, Lenkung und Roboterarm sind sicher nur einmal vorhanden, könnten also auch ein Singleton sein.<br />
Jedes meldet bzw. meldet 'nach oben' ist ein <a href="http://www.boost.org/doc/html/function.html" rel="nofollow">Callback-Aufruf</a>. Die Callback-Funktoren werden dem jeweiligen Server beim Anlegen gleich mitgegeben.<br />
Der Vorteil ist hier, dass die Serverklassen ihren jeweiligen Client gar nicht kennen müssen. Jede Klasse kennt nur wieder die Klassen an deren Objekte es Kommandos abgibt.</p>
<p>Jetzt habe ich noch vergessen zu erwähnen, dass der externe <strong>Kommandeur</strong> eine <strong>Spracherkennung</strong> hat. Und die Pfadplanung ist eine Funktion; mit den Parametern Standort, Ziel und Karte und dem Returntyp <strong>Pfad</strong> (Polygon).</p>
<p>Zur Strukturierung: Wahrscheinlich muss das ganze &quot;Event getrieben&quot; sein, um quasi ein asynchrones Verhalten hinzubekommen. Also z.B. muss ja eine Spracherkennung auch unter dem Fahren möglich sein und nicht erst wenn die komplette Aufgabe erledigt ist (ist das so?). D.h. jeder Methodenaufruf eines Clients an einen Server startet nur die Aktion, kommt aber unmittelbar zurück. Da die Fertigmeldungen immer über Callbacks laufen ist das auch kein Problem. Wenn man das ganze als Singlethread-Applikation auslegt (würde ich erstmal versuchen) so benötigt man eine Hauptschleife, in der auf alle externen Events (Sonar, Endschalter, Sprachsignal) gewartet wird. Und jedes Objekt welches ein Event benötigt muss sich dort mit einem Interface 'anmelden' (siehe Adapter Pattern)</p>
<p>So weit so gut, jetzt ist Dr.Ottel wieder dran seine Meinung zu äußern. Die Bemerkungen in {} sind noch zu klären (s.o.). Insbesondere ist mir nicht klar, wie das Zugreifen passieren soll. Der Roboter muss doch dazu eine bestimmte Position zum Objekt haben und ggf. das Objekt auch &quot;sehen&quot; könne - oder wie funktioniert das?</p>
<p>Ach so und warum</p>
<p>Dr.Ottel schrieb:</p>
<blockquote>
<p>Dadurch möchte ich in der Lage sein von der Verwaltungsklasse auf ALLE Methoden des gesamten Programms zugreifen zu können.</p>
</blockquote>
<p>ist das so und welche Methoden sind hier genau gemeint?</p>
<p>Und</p>
<p>viande schrieb:</p>
<blockquote>
<p>Das mit der Verwaltungklasse ist also vorgegeben, ja?</p>
</blockquote>
<p>das hoffe ich doch nicht - wenn ja wieso?</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1265519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1265519</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 13 Apr 2007 17:17:39 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Sat, 14 Apr 2007 08:10:23 GMT]]></title><description><![CDATA[<p>Erstmal großen Respekt für deine Schilderung, denn ich gehe mal davon aus, dass du nicht so viel Ahnung von Robotik hast und dafür ist das Ganze SEHR gut und genau erklärt.</p>
<p>Dein Kommunikationskonzept klingt besser als das mit der zentralen Verwaltungsklasse, denn so kann ich auch Zugriffe über 2 Zeiger und sonstige abstrusen Konstrukte vermeiden.</p>
<p>Zu deinen Fragen:<br />
Roboterarm:<br />
Der ist relativ simple konstruiert und kann sich nur öffnen/schließen und nachdem er z.B. ein Objekt gegriffen hat, sich nach oben bzw. unten bewegen.</p>
<p>Selbstlokalisation:<br />
Der Roboter berechnet anhand der mitgegebenen Karte und den aktuellen Sonarreadings Wahrscheinlichkeiten dafür aus, wo er sich am wahrscheinlichsten befindet und gibt dafür auch die Wahrscheinlichkeit von 0 bis 1 aus.</p>
<p>Sprachsteuerung:<br />
Darum kümmere ich mich gar nicht. Ich bekomme nur die Liste mit den Befehlen, die ich abarbeiten soll.</p>
<p>Nochmals vielen Dank für die Antworten. Sie bringen mich echt weiter!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1265793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1265793</guid><dc:creator><![CDATA[Dr.Ottel]]></dc:creator><pubDate>Sat, 14 Apr 2007 08:10:23 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Sat, 14 Apr 2007 08:32:14 GMT]]></title><description><![CDATA[<p>Dr.Ottel schrieb:</p>
<blockquote>
<p>.. denn ich gehe mal davon aus, dass du nicht so viel Ahnung von Robotik hast</p>
</blockquote>
<p>Nun ich habe schon etwas mit Robotik zu tun; aber meine fahren nicht, können nicht hören und Sonar ist auch nicht.</p>
<p>Dr.Ottel schrieb:</p>
<blockquote>
<p>Roboterarm:<br />
Der ist relativ simple konstruiert und kann sich nur öffnen/schließen und nachdem er z.B. ein Objekt gegriffen hat, sich nach oben bzw. unten bewegen.</p>
</blockquote>
<p>Ok - für den Greifer sieht das einfach aus. Natürlich muss die Position des Roboters stimmen, sonst greift's nicht.</p>
<p>Dr.Ottel schrieb:</p>
<blockquote>
<p>Selbstlokalisation:<br />
Der Roboter berechnet anhand der mitgegebenen Karte und den aktuellen Sonarreadings Wahrscheinlichkeiten dafür aus, wo er sich am wahrscheinlichsten befindet und gibt dafür auch die Wahrscheinlichkeit von 0 bis 1 aus.</p>
</blockquote>
<p>Oh oh - das sieht schwierig aus. Naja Du weißt ja wo Du Fragen los werden kannst.</p>
<p>Viel Erfolg<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1265796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1265796</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sat, 14 Apr 2007 08:32:14 GMT</pubDate></item><item><title><![CDATA[Reply to Große Verständnisprobleme beim ersten größeren C++-Projekt on Tue, 17 Apr 2007 14:17:38 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich finde es ziemlich interessant zu hören wie ihr euch hier Gedanken macht.</p>
<p>Ich selbst beschäftige mich momentan auch mit Objektübergreifender Kommunication und bin deswegen sehr neugierig auf richtig gute Lösungsvorschläge. Ich arbeite momentan auch an einer kommunikationsplatform wenn man so will und bin mit der dort verwendeten Lösung überhaupt nicht einverstanden da die Erweiterung sowas von umständlich ist.</p>
<p>Bei mir gibt es sowas wie eine Zentrale Verwaltungsklasse in der alle Kommunikationsvorgänge registriert werden müssen.</p>
<p>Wenn ich jetzt im Übertragenen Sinn einen 6ten Finger an meine Hand implementieren möchte müsste ich praktisch im Gehirn bescheidgeben das der neue Finger bitte in der Lage sein soll mit ihm zu kommunizieren anstatt einfach der Hand mitzuteilen das sie jetzt einen neuen Finger hat und doch bitte dafür sorgen soll das er auch wunderbar funktioniere. Und da jeder Körperteil, Organ sowas wie einen Vorgesetzten hat soll die Information über den Neuen Finger sollange die Hirarchie hochwandern bis der OberSuperLeutnantGeneral mitbekommt das er jetzt nen neuen Sklaven hat. (Den interessiert es recht wenig da er ja schon weiss wie so ein Finger funktioniert, er freut sich nur über ein neues Feature.)</p>
<p>Wenn wir uns das menschliche Gehirn mal (vereinfacht als Ganzes) denken dann fällt auf das es ansich nichts selbst kann, aber es kann was die Summe der andern Körperteile kann. Ich glaube das ist so deine Idee. Einen Punkt von wo aus man die &quot;Kontrolle&quot; hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1267774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1267774</guid><dc:creator><![CDATA[GreyHound]]></dc:creator><pubDate>Tue, 17 Apr 2007 14:17:38 GMT</pubDate></item></channel></rss>