Hi Leuts, ich habe mal eine generelle Frage: Ich muss von einem PC verschiende Messgeräte über RS232 ansprechen. Nun habe ich von Codeproject.com eine Klasse zur seriellen Kommunikation, die auch einwandfrei funktioniert. Ich möchte für jeden Messgerättyp eine eigen Klasse anlegen. Nun kann ich ja generell gesehen zwei verschiedene Wege gehen: 1. Ich leite meine neu zu erstellenden Klassen von der seriellen ab, womit ich diese quasi erweitere 2. Ich bette in meine neue Klasse eine Variable vom Typ der seriellen Klasse ein, wodurch ich die notwendigen Funktionen habe. Welchen Weg würdet ihr empfehlen und warum ? Greets Karlheinz
Ob du ableiten oder es als Membervariable einbauen willst, sollte darüber entschieden werden, welche Art von Beziehung die Klassen zueinander haben. Ist es eine "ist-ein"-Beziehung, dann ableiten. Aggregation dagegen drückt eine "hat-ein"-Beziehung aus. Also, würdest du sagen, dein Meßgerät "ist eine" serielle Verbindung oder "hat eine" serielle Verbindung?
Hallo, @Rolf Magnus: war schneller und nimmt mir die Worte aus dem Mund Ich glaube, dass "hat-ein" von Coding her zwar aufwendiger ist, aber die meisten Anwendungsfälle, bei denen beliebige Geräte via RS232 angesprochen werden sollen besser abdeckt, es wäre also meine favorisierte Lösung, ausser, es handelt sich um ein Gerät zur seriellen Kommunikation. Ein weitere Frage, die man sich auch stellen sollte, ist: Will ich, dass der Benutzer meiner Geräteklasse (das muss ja nicht unbedingt ich selbst sein) beabsichtigt oder unbeabsichtigt an meiner Klasse vorbei auf die Basis-Klasse zugreift und Dinge tut, die die Konsistenz des Systems (den Zustand des Basisklassen-Objektes) in Frage stellt (z.B. Parameter der seriellen Schnittstelle verändert)? Zugegeben, mit entsprechendem Aufwand, alle Methoden überschreiben, protected/private inheritance etc. kann man das unterbinden, aber wenn es einfacher geht... Ich würde selbst noch etwas weitergehen, und den künftigen Anwendungsfall bzw. das Ziel der Entwicklung noch etwas näher beleuchten: 1. mehr als ein Gerät pro serieller Schnittstelle? 2. mehrere serielle Schnittstellen mit mindestens einem Gerät? Im Fall 1) sollte die serielle Schnittstelle auch nur einmal initialisiert werden, natürlich (?) für alle Geräte mit denselben Parameter. Für den Fall 2) bräuchte jede Geräte-Klasse einen Konstruktor, der ein bereits initialisiertes CSerial-Object übergibt (nahm an es handelt sich um die hier vorgestellte Klasse: http://www.codeproject.com/system/serial.asp). Beides spricht, also für eine "hat-ein"-Beziehung. Sicher macht es auch Sinn, gemeinsame Eigenschaften der Geräteklassen in eine eigene Geräte-Basisklasse zu destillieren, und die sollte mit serieller-Kommunikation erst mal nichts zu tun haben. Für die "fortgeschritteneren" Klassen (z.B. CSerialEx) aus o.g. Repositorium (mit Event-Handling) wird das Weiterreichen der Events aufwendig, jede Geräteklasse braucht einen Event-Handler der bei der Basis-Klasse irgendwie registiert werden muss. Vermutlich muss man dann noch eine Art Registratur als Zwischenschicht einführen (mit "ist-ein"-Beziehung zur Basisklasse). Aber das führt hier zu weit... Ohne Näheres gelesen zu haben, denke ich doch, dass diese Klassen von alleine dazu nicht in der Lage sind, spricht also gegen die "ist-ein"-Beziehung. HJ
weder/noch. eine klasse für die RS232 würde ich als 'singleton' anlegen.
Toll. Und was machst du, wenn du ne Kiste mit zwei seriellen hast und beide aufs mal benutzen willst?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.