- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 16

Thema: Marsyas

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    19.05.2015
    Beiträge
    69
    Dann wird's an der Zeit, dass Du Dir ein C++ Buch auf den Schreibtisch legst. Denn das Ganze benutzt die üblichen C++ Mechanismen - hier Polymorphie.

    Der Manager hält intern eine Registry vor, in der stehen alle erlaubten Klassen, zu denen Objekte erzeugt werden dürfen. beim "create()" Aufruf prüft er ob er zu dem vereinfachten Klassennamen des ersten Parameters in der Registry ein Objekt zu diesem Typen hat und wenn ja, dann ruft es desen "clone()" Methode und reicht den Zeiger zum Aufrufer durch.
    Das Wichtige an der Geschichte ist, das Serial, SoundFileSource, Gain, AudioSink alles Ableitungen der abstrakten Basisklasse MarSystem sind und die clone() Methode überschreiben und so im Manager Objekte der jeweiligen konkreten Klasse erzeugt werden, das "new" steht also in den clone()-Methoden.
    Es ensteht so durch die vier create() Aufrufe ein Graph, wo das Objekt, auf das der Zeiger playbacknet drauf zeigt, vom Typ Serial aber der Zeiger nur vom Typ der Basisklasse MarSystem ist und drei Kinder mit ihren konkreten Typen hat.
    Das entscheidende ist jetzt, dass die rein virtuelle Methode "myProcess()" in den abgeleiteten Klassen überschrieben werden muß und ist, denn da findet die spezielle Verarbeitung der Audiosamples statt.

    Wenn du das Beispiel zu Ende anschaust wird dann das allgemeine MarSystem::tick() aufgerufen und dank Polymorphie wird innerhalb dieses Aufrufs das konkrete myProcess() der jeweiligen Objekte aufgerufen. Der Benutzer von playbacknet hat es so nur mit dem allgemeinen Fall zu tun und die konkreten Abläufe sind verborgen. Was Sinn und Sache des Ganzen Troubles ist.

    Dieses updctrl dient dann dem Zugriff auf die Parameter der Objekte im Baum, sprich playbacknet weiß, wie es diese Pfade auflöst und dann auf die Attribute der Kindknoten zugreifen kann.

    Gruß botty

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    Das ist dann wohl einer der grösseren Unterschiede zu Ansi C ^^. Dann werde ich mir das mit dem Polymorphie mal anschauen. Vielen Dank schon einmal!

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    Na wenn man sich das mit der Objektorientierung mal genauer anguckt (wie gut das es YT gibt ^^) dann macht das auf Einmal sogar Sinn . Da werde ich jetzt erst einmal meine bisherige diasound.hpp objektorientiert umbauen! Ich denke danach sollte ich es verstanden haben .

    Ich sehe das in dem Beispiel also richtig, create kommt nicht von C++ sondern ist eine Methode von MarSystemManager. Ich baue also, grob ausgedrückt, mittels Create mehr oder minder eine eigene Klasse, bzw. Baue mit den Bausteinen aus MarSystemManager eine für meine Zwecke spezialisierte Klasse zusammen?

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    Ich muss sagen, diese Objektorientierung ist in der Tat ziemlich cool. Hatte ich zuvor bei meinen Routinen für die Soundkarte immer das Problem, dass ich eine globale Variable als Zeiger für die initialisierte Soundkarte gebraucht habe, funktioniert das mit einer eigenen Klasse aber sowas von viel eleganter! Habe jetzt mein ganzes Programm für die Spracherkennung auf Objektorientierung umgestellt! Gefällt mir super gut.

    Das mit Marsyas muss ich jetzt noch in den Griff bekommen.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    19.05.2015
    Beiträge
    69
    Cool,
    wenn du dann noch alles in das Juces Framework integrierst, bist du der nächste OOP Guru, "Have Fun".

  6. #6
    HaWe
    Gast
    also ich bin da raus - OOP ist für mich die Hölle. Selbst in Java oder C#, wo alles noch sehr logisch und strukturiert ist.
    Aber C++ ? nie und nimmer, eher geb ich mir die Kugel

    Ich weiß, warum ich beim ANSI C bleibe: Klar und logisch und systematisch "straight".

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    Bis vor einem Jahr hätte ich dir da noch mehr wie Recht gegeben, so ziemlich Alles was ich in Büchern und dem Netz zu OOP gelesen hatte hat mich mehr verwirrt wie informiert und wie zu Beginn dieses Threads ja zu sehen ist war das für mich ein Buch mit 70 Siegel.

    Aber trotz Allem konnte ich mich dann vor rund einem Jahr C++ nicht mehr wirklich verwehren. Ich meine, nehmen wir mal Arrays. Bei C hat man da entweder ein statisches Array, oder muss erst für jeden neuen Eintrag Speicher reservieren. malloc, calloc, realloc, free. Peng irgendwo ein falscher Wert und das Programm ist futsch. Bei C++ baust du einfach das Array mit vector und hängst für jeden neuen Eintrag einfach ein push_back() dran. Keine Speicherreservierung usw. Es geht schneller und ist sicherer.

    Und was OOP angeht. Hatte ich vor Kurzem noch das Problem mit globalen Variablen wegen der Soundkarte, so ist das jetzt Alles schön in eine Klasse verpackt. Da ist es jetzt wurst ob ich 1 oder 10 Soundkarten initialisiere. Das macht den Code um ein Vielfaches sauberer finde ich. Auch das Prinzip mit Public und Private finde ich sehr gut!

    Letzten Endes muss aber jeder für sich die entsprechende Sprache finden. Vor einem Jahr habe ich mir da auch nicht rein reden lassen. Bin eben jetzt in die Richtung abgebogen und ziemlich zufrieden und da anscheinend der Unterschied zwischen C++ und Java nicht so gross ist wie zwischen C und Java nehme ich mal an, wenn ich mir irgendwann an Eclipse gewöhne geht auch die Entwicklung von Apps für Android los. Das habe ich schon einmal versucht, war aber letzten Endes eigentlich nur ein Abschreiben und rum kopieren von Code aus dem Netz ohne wirklich zu verstehen was ich da eigentlich mache ^^.

    @botty:

    Auf jeden Fall mal vielen Danke für den Schubser. Ein Guru werde ich aber mit Sicherheit nicht ^^. Aber auf jeden Fall verstehe ich jetzt langsam was bei dem Hello World von Marsyas da eigentlich passiert. Ich denke auch das ich das jetzt langsam mal anwenden kann . Sehe ich heute Abend ^^.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests