title image


Smiley Re: Konzeptfrage - Kommunikation über verschiedene Schnittstellen
Könntest du mir bitte zeigen wie du die Klassen anwenden würdest. (z.B. dem Gerät1 im Modus A die Nachricht x senden)?

bitte sehr:



typedef std::auto_ptr<ComDevice> device_ptr;

device_ptr d (new Device1 (ModeA ()));

d->send_cmdx (interface);



Aber wie meinst du: alle send_xxx/recieve_xxx Funktionen in den Deviceklassen definieren?

So?

[snip]

So eine Konstellation wird durch den Visitor eben vermieden. Du hast dadurch eine stabile Device-Klassenhierarchie und verschiebst die Implementierung in die Mode-Klassenhierarchie.



Wäre da nicht mein Erstentwurf "schöner"?

Die Schönheit liegt im Auge des Betrachters ;)

Jedenfalls kannst du die CComDevX_Y Hierarchie nicht polymorph verwenden, und das willst du doch hoffentlich?



CComDev1_General *dev = CComDev1_ModeB (interface);

dev->Send_ModeACmdX (...); // geht nicht !



Du hast also dasselbe Problem wie vorher mit den Schnittstellenklassen. Wenn der User eine Schnittstellen/Moduskombination wählt, mußt du ohne Polymorphie jede Kombination , die der User auswählt, per if/then/else oder switch/case abfragen:



if (mode == MODE_X)

{

if (device == DEVICE_X)

{

CComDevX_ModeX d;

...

}

else if (device == DEVICE_Y)

{

CComDevY_ModeX d;

...

}

...

}

else if (mode == MODE_Y)

{

if (device == DEVICE_X)

{

CComDevX_ModeY d;

...

}

else if (device == DEVICE_Y)

{

CComDevY_ModeY d;

...

}

...

}



Bei mehr als 2 Modi/Geräten wird das ein Krampf.

Eine fertige polymorphe Lösung wäre z.B.:



CInterface *i = interface_factory::instance ().create (interface);

Mode *m = mode_factory::instance ().create (mode);

ComDevice *dev = device_factory::instance ().create (device, *mode);

dev->send_cmdx (*i);

dev->send_cmdy (*i);



Wobei die Variablen "interface", "mode" und "device" z.B. die gewählten Positionen (integer-Werte) der grafischen Listenauswahl sein könnten.

Du kannst nach dem gleichen Schema zusätzlich noch eine Command-Klassenhierarchie anlegen, um auch die Kommandos zu virtualisieren.

HTH,

BF



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: