Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Code Bausteine!?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
29.05.2007, 22:29 Uhr
FunnyDingo



Hallo Jungs,

also, jetzt wird es mal richtig schwer. Ich möchte hier kein "bitte gib mir doch jemand mal den Code dafür"-Topic draus machen, aber ich habe keine Ahnung ob das was ich mir vorstelle so überhaupt geht, bzw. ob die Idee der Umsetzung fragwürdig ist. Ich fange mal an meine Idee zu erläutern:

Meine Anwendung soll eine Art Workflow-System werden, dh der Benutzer kann durch entsprechende Konfiguration "Bausteine" mit bestimmten Funktionen zusammen setzten. Im Programmcode würde für jeder dieser Bausteine durch eine Klasse repräsentiert werden, die von der Klasse "baustein" abgeleitet sind. Diese Klassen-Kette wird von einer "übergeordneten Klasse" beherbergt und gesteuert. So kann der Benutzer in der Konfig zum Beispiel sagen:

Code:
<workflow name="erstes wort klein schreiben">
    <baustein type="substr" start="0" laenge="5"/>
    <baustein type="strtolower"/>
</workflow>

Wenn es nun darum geht eine Zeichenkette zu behandeln, würde der erste Baustein die Klasse "baustein_substr" sein, die aus der Zeichenkette "Hallo du" das "Hallo" raus schneidet dies an an "baustein_strtolower" weiter gibt welcher wiederum das "Hallo" in "hallo" umwandelt.

Das zusammenbauen all dieser Ketten erfolgt beim Programmstart. So sollte es doch möglich sein, das Programm auf recht effektivem Wege eine sehr gute Anpassungsfähigkeit anzubieten, oder?

Mir kommt das (rein von der Logik) etwas zu einfach vor, als dass es Funktionieren könnte. Habe ich vielleicht etwas übersehen?

Gruß, bin auf Antworten sehr gespannt
Funny
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de

Dieser Post wurde am 29.05.2007 um 22:29 Uhr von FunnyDingo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.05.2007, 22:32 Uhr
Pablo
Supertux
(Operator)


Ich würde an deiner Stelle mit XML arbeiten, da musst du nichts neues erfinden und es gibt gute XML-Bibliotheken.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.05.2007, 22:51 Uhr
FunnyDingo



XML für die Konfiguration ja, aber die Bausteine müssen mehr können, als nur Texte umschreiben. Zum Beispiel gibt es in der Anwendung eine Benutzerdatenbank. Jetzt sollte es dem Benutzer möglich sein, folgende Konfiuration anzulegen:
Code:
<workflow name="changeUsername">
  <baustein type="substr" from="userinput" start="0" length="7" var="tmp"/>
  <baustein type="if" condition_1="var_tmp" type="equal" condition_2="newname">
     <baustein type="substr" from="userinput" start="8" var="tmp"/>
     <baustein type="changeuserdb" field="username" newvalue="var_tmp"/>
  </baustein>
</workflow>

Kurze Erläuterung:
Zeile 1
Dieses Workflow Konstrukt erhält den Namen "changeUsername"

Zeile 2
Aus der Eingabe des Benutzers werden die ersten 7 Zeichen in eine Variable Namens tmp geschrieben

Zeile 3
Dies ist eine If-Abfrage die Prüfen soll ob die Variable tmp "newname" entspricht

Zeile 4
Aus der Eingabe des Benutzers sollen alle Zeichen ab dem 8 in die Variable tmp geschrieben werden

Zeile 5
In der UserDB soll das Feld username den neuen Wert aus der Variable tmp bekommen

Zeile 6 + 7
If-Baustein bzw. Workflow-Element schliesen

Ich glaube kaum, das man so etwas mit XML machen kann.
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de

Dieser Post wurde am 29.05.2007 um 22:51 Uhr von FunnyDingo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.05.2007, 10:30 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,
die Datendateien als XML ist schon mal ganz gut - der Rest ist halt ein komplexer Interpreter.

Ist halt nicht ganz so trivial - aber machbar.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
30.05.2007, 11:23 Uhr
virtual
Sexiest Bit alive
(Operator)


Ein Ansatz wäre ein IoC Container (Inversion of Control). Leider hast Du in C++ nicht sowas schönes wie Reflection aus java, aber man könnte sich durchaus eine generisches framework auch in C++ vorstellen.

Die Prinzipielle Idee könnte man wie folgt skizzieren (ist nicht komplett durchdacht):

C++:
class daten_behaelter {
};

class basis_baustein {

private:
   std::map<std::string,daten_behaelter> properties;

   virtual void set_property(const std::string& key, const daten_behaelter& value);

   virtual const daten_behaelter& get_property(const std::string& key) const;

   virtual daten_behaelter perform() = 0;
};


Unter einem "daten_behaelter" verstehe ich eine Klasse, die beliebige Daten aufnehmen kann, im Einfachsten Fall wohl ein String, aber eben auch strukturierte Daten wie zB eine XML node oder was auch immer. Verschiedene Frameworks liefern hier eine variant klasse, die man geeignet erweitern kann.

Ein "basis_baustein" ist ein "Ding", welches über eine Liste von Properties verfügt und mittels "perform" zu einer aktion angestossen werden kann.

Dazu braucht man nun noch eine Baustein Fabrik (FactoryPattern). Eine bausteinfabrik kennt die verschiedenen baustein Implementierungen (hier gibt es verschiedene Möglichkeiten von einem statischen Mapping bis hin zu einem ausgefeilten Pluginkonzept). Die Factory hat die Aufgabe, einen Baustein zu erzeugen und zu konfigurieren.

z.B. Bei

Code:
<baustein type="substr" from="userinput" start="0" length="7" var="tmp"/>


Schaut die factory nach, wie die bausteinKlasse vom type "substr" lautet. Von dieser ruft sie einen Defaultconstructor auf und setzt nach einander die Properties "from", "start", und "var".

Da du das ganze als Workkflow gestalten willst, wirst Du vermutlich der Klasse daten_behaelter beibringen müssen, daß sie neben Strings auch referenzen auf baustein Instanzen aufnehmen kann, so daß bausteine selbst auch wieder properties anderer Bausteine sein können (dies ist zB notwendig im If-Baustein um den Conditional-Block zu modellieren oder eben für den gesamten Workflow, welcher ja letztlich einfach eine baustein_sequence ist.

So in etwa wäre jedenfalls vermutlich meine Herangehensweise, wenngleich es auch weniger flexible, dafür aber leichter implementierbare Alternativen geben mag.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
30.05.2007, 12:20 Uhr
FunnyDingo



Ob ich das wirklich Umsetzten werde, steht noch in den sternen. Aber dein Ansatz spiegelt ziemlich genau das wieder, was ich mir vorgestellt habe. Es wird natürlich einiges an Arbeit und die Frage bleibt, ob das Nutzen-/Aufwand verhältnis das ganze recht fertig. Die andere Idee wäre halt, Plugins die Möglichkeit zu geben einen CallBack an verschiedenen stellen zu registrieren. Da wäre der Aufwand viel geringer, wobei die extreme flexibilität darunter leidet.

Aber zumindest war ich mit meinen Ansätzen schon mal auf dem richtigen Weg.
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: