designfrage
-
hallo zusammen,
ich habe eine oberklasse für dienste, welche von allen diensten in meinen system implementiert wird. diese stellt zwei methoden bereit:
send(MessageTypA & msg, Addr & addr); send(BaseMessageTyp & msg, Addr & addr);nun wird von einer unterklasse U die methode send(MessageTypA, Addr addr); als dienst implementiert. in dieser methode soll die nachricht letztlich über send(BaseMessageTyp, Addr addr); versendet werden. nun muß ich doch in der send methode der klasse U beim aufruf von sent die MessageTypA zu BaseMessagTyp casten, damit dies richtig erfolgt. ist das so ok, oder gibt es da was eleganteres?
sven.
-
sven_ schrieb:
nun muß ich doch in der send methode der klasse U beim aufruf von sent die MessageTypA zu BaseMessagTyp casten, damit dies richtig erfolgt.
Nein, Upcasts funktionieren implizit.
<
>
-
Wie soll dies gehen? Die Oberklasse hat beide Methoden, wenn ich den Cast wegnehme (habs probiert), bekomme ich eine Endlosrekursion, da die abgeleitete Klasse ja nicht weiß, das die Oberklasse in dieser Methode auf die abgeleitete Klasse zeigt. Dachte halt, da gibt es nen schöneres Pattern oder so.
-
Zeig mal etwas mehr Code.
Vorallem die Deklarationen der beiden Methoden in Deinen Klassen.
-
sven_ schrieb:
Wie soll dies gehen? Die Oberklasse hat beide Methoden, wenn ich den Cast wegnehme (habs probiert), bekomme ich eine Endlosrekursion, da die abgeleitete Klasse ja nicht weiß, das die Oberklasse in dieser Methode auf die abgeleitete Klasse zeigt. Dachte halt, da gibt es nen schöneres Pattern oder so.
Und, ist die Oberklasse wenigstens abstrakt?
Casts auf Zeiger/Referenzen/Funktionen/Methoden/Klassen sind Scheiße und garantiert kein brauchbares Pattern.
Implementiere send an den Messagetypen direkt oder an Vertreterklassen der Messagetypen, die du evtl. wegen des Interface/Kapselungsgedankens implementiert hast.
Das kommt einer OOP eher näher, da du Objekte in den Vordergrund beim Design stellst und eben nicht die Funktionalität.
-
hallo zusammen,
ich muß gerade feststellen, dass mein Design generell etwas blöd ist, da es leicht falsch verwendet werden kann. Daher will ich an dieser Stelle mal genereller Fragen, wie ihr folgendes Problem lösen würdet. Es gibt eine Oberklasse Service, von der alle anderen Dienste ableiten. Jeder Dienst soll einfach eine Nachricht definieren können, welche vom NachrichtenTypA ableitet, und diesen dann über die send(NachrichtenTypA msg, Address addr) versenden.
Nun gibt es halt noch einen Dienst, der genau den Transportservice für diesen NachrichtenTypA anbietet. Dieser soll also durch send() automatisch aufgerufen werden.
Neben diesen Diensten, soll allerdings jeder Dienst noch ein eigenes Transportprotokoll implementieren können. Dazu stellt die Oberklasse Service auch noch eine send Methode bereit, welche den BasisNachrichtenTyp akzeptiert. NachrichtenTypA ist genau vom BasisNachrichtenTyp abgeleitet.
Wie würdet ihr dies modellieren??? Verständlich überhaupt was ich meine?
Gruß
sven_
-
Es gibt eine Oberklasse Service, von der alle anderen Dienste ableiten ...
Das ist keine Problembeschreibung, du legst nur deinen Ansatz dar.