Strukturierung des Programms

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
TerraG
Beiträge: 81
Registriert: 13. Oktober 2011 15:23

Strukturierung des Programms

Beitrag von TerraG » 18. Januar 2012 21:09

Hi,

ich habe einen pushButton mit etwa 20 (werden noch mehr) Methoden connected, die bestimmte Dateien erstellen. Nun frage ich mich, ob es vielleicht besser wäre den pushButton nur mit einer Methode zu verbinden und in dieser alle Dateien zu erstellen.

Bisher hatte ich die erste Herangehensweise gewählt, weil diese im Programm übersichtlicher ist. Hätte aber die zweite Herangehensweise vielleicht in Bezug auf Geschwindigkeit und/oder Speicherbedarf Vorteile? Der Konstruktor hätte ja mal auf jeden Fall weniger connect methoden zu Konstruieren und bei der Dateierstellung würde der Compiler direkt durch eine Methode "wandern". Wäre das nicht besser?

Gruß
TerraG
Gruß
TerraG

almboa
Beiträge: 21
Registriert: 27. September 2009 11:52

Re: Strukturierung des Programms

Beitrag von almboa » 19. Januar 2012 11:12

In solchen Fällen tendiere ich dazu, einen Slot zu implementieren und dort die 20 Funktionen aufzurufen. Dann kannst du später ganz einfach einen neuen Slot einbauen, der auf ButtonB reagiert und nur 10 der Funktionen benötigt.

Als Beispiel:
Statt

Code: Alles auswählen

connect(button1, SIGNAL(clicked()), this, SLOT(doThis()));
connect(button1, SIGNAL(clicked()), this, SLOT(doThat()));
connect(button1, SIGNAL(clicked()), this, SLOT(doItAgain()));
connect(button1, SIGNAL(clicked()), this, SLOT(doItFaster()));
würd ich sowas benutzen:

Code: Alles auswählen

   connect(button1, SIGNAL(clicked()), this, SLOT(button1Handler()));
}
...
void button1Handler()
{
   doThis();
   doThat();
   doItAgain();
   doItFaster();
}
Später kannst Du dann einfach Variationen erstellen:

Code: Alles auswählen

   connect(button2, SIGNAL(clicked()), this, SLOT(button2Handler()));
}
...
void button2Handler()
{
   doThis();
   doItFaster();
}
So ist dein Code auf jeden Fall deutlicher besser nachzuvollziehen und zusätzlich kannst du Rückgabewerte der Hilfsfunktionen viel bequemer verarbeiten...

Gruß

franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Strukturierung des Programms

Beitrag von franzf » 19. Januar 2012 11:14

Wenn du willst, dass die Funktionen tatsächlich hintereinander aufgerufen werden, wäre es geschickt, das in einen einzigen SLOT zu packen. Du hast für jedes geworfene SIGNAL einen gewissen Overhead. Der sollte hier aber nicht weiter tragisch sein.
Das eigentliche Problem ist, dass die SIGNAL-SLOT-Verbindung dynamisch ist. Man kann jederzeit SLOTS an ein SIgnal hängen, SLOTs entfernen. Dein Problem ist aber eher statischer Natur: Click auf Button -> Rufe alle diese Funktionen nacheinander auf (als Anmerkung: Vor nicht all zu langer Zeit war es NICHT gesichert, dass Slots auch in der Reihenfolge aufgerufen werden, wie sie connected wurden!).
Wenn du trotzdem eine gewisse Dynamik wahren willst (einfaches Hinzufügen von Methoden), kannst du ja mit std::function o.Ä arbeiten. Solche Objekte kannst du in eine QList werfen und dann im SLOT jede einzelne aufrufen.

TerraG
Beiträge: 81
Registriert: 13. Oktober 2011 15:23

Re: Strukturierung des Programms

Beitrag von TerraG » 23. Januar 2012 20:48

Hi,

also mir ist eigentlich nur wichtig zu wissen ob es was bringt wenn ich alle Methoden in einen Slot packe?

Soweit ich das verstehe hab ich für jeden Slot also eine gewisse Menge (unnötiger) Daten (->Overhead), was mir aber egal ist, solange es keine großen Ausmaße annimmt und mein Programm bemerkbar verlangsamt.

Methoden hinzufügen geht doch sowieso immer, ob ich jetzt für jede einen neuen Slot anlege oder ob ich eine neue Methode in nur einen bestehenden Slot dazupacke.
Gruß
TerraG

franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Strukturierung des Programms

Beitrag von franzf » 23. Januar 2012 23:18

Es ist halt einfach doof, das über SIGNAL/SLOT zu machen. Punkt.
Wenn du einen fixen, kontrollierten Ablauf von Funktionen hast, sollte der Code das auch wiederspiegeln. connections tun das nicht.
Wenn irgend wer auf die tolle Idee kommt, die connections umzustellen (z.B. nach Namen der SLOTS ordnen - gibt ja solche Kontrollfreaks), dann viel Spaß beim Debuggen...
Ich seh das schon auf uns zukommen.

TerraG
Beiträge: 81
Registriert: 13. Oktober 2011 15:23

Re: Strukturierung des Programms

Beitrag von TerraG » 24. Januar 2012 00:25

Habs schon geändert in die Variante eine Slotmethode mit allen Funktionsaufrufen drin. Die aufgerufenen Funktionen sind dann hintendran definiert und natürlich in der Klasse deklariert.

Vertrau Euch da :).
Gruß
TerraG

Antworten