Funktion nur einmal deklarieren



  • Hallo,

    ich habe eine generelle Frage:
    Ich habe eine Klasse, die eine Verbindung zum Arduino herstellt. Jetzt würde ich diese Klasse allerdings gerne in anderen Klassen neu instanzieren, was allerdings nicht funktioniert (ist ja logisch), da man die Connection nur einmal aufrufen kann.

    Kann ich diese Funktion also irgendwie so deklarieren, dass diese nur einmal (beim ersten Instanzieren) aufgerufen wird und bei mehrmaligen einfach aufbestehende Variablen etc. zugegriffen wird? Ist dies übehaupt sinnvoll?

    Ich könnte die Klasse natürlich auch einmalig instanzieren und die Instanz an die Klasse über geben. Muss man nur wissen, was schöner ist 🙂

    Danke


  • Mod

    Wenn es nur eine Verbindung gibt, dann sollte dein Programm das auch widerspiegeln. Wenn es global nur eine Verbindung geben kann (eher unwahrscheinlich, da vermutlich mehrere Geräte angeschlossen werden könnten?), dann wäre das sogenannte Singleton-Pattern eine Möglichkeit, dieses umzusetzen. Wenn es für ein bestimmtest Gerät nur eine Verbindung geben kann, dann würde ich das so machen, wie es beispielsweise die fstreams für Dateien machen. Also Kopieren einer Verbindung verbieten; stattdessen Verbindungen per Referenz hin und her reichen. Wenn jemand versucht eine zweite Verbindung zu einem Gerät herzustellen, scheitert dies eben und diese Instanz kann nicht genutzt werden. Ein Analog dazu wären die fstreams: Es kann viele fstreams geben, aber versucht man eine bereits anderswo geöffnete Datei zu öffnen, wird das Öffnen (zumindest auf manchen Systemen) fehlschlagen.

    Kann ich diese Funktion also irgendwie so deklarieren, dass diese nur einmal (beim ersten Instanzieren) aufgerufen wird und bei mehrmaligen einfach aufbestehende Variablen etc. zugegriffen wird? Ist dies übehaupt sinnvoll?

    Das wäre das Singleton.

    Ich könnte die Klasse natürlich auch einmalig instanzieren und die Instanz an die Klasse über geben. Muss man nur wissen, was schöner ist 🙂

    Das wäre, was ich beschrieben habe.

    Was davon passender ist, kommt drauf an, welche Eigenschaften solch eine Verbindung genau hat und welches Modell dies besser beschreibt. Möglich sind aber beide.



  • Möglich sind beide, korrekt.
    "All things being equal" würde ich aber empfehlen die "rumreichen" Variante zu verwenden.
    Singletons sind etwas was man sich gar nicht erst angewöhnen sollte.

    Der Einsatz von Singletons, wo es nicht angebracht ist, führt so oft zu so vielen Problemen im nachhinein... böse böse böse.

    Etwas nicht als Singleton zu implementieren kann zwar manchmal ein wenig mehr Arbeit sein, aber dafür kann es später nicht zu solchen Problemen führen. Wenn man nie mehr als ein Objekt braucht hat man halt einfach ein Programm das mehr als ein Objekt erlauben würde, aber nie mehr als eins braucht. Keine Tragik. Umgekehrt: grosse Tragik.


Anmelden zum Antworten