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