Hallo,
ich möchte einen kleinen Chat mithilfe von QTcpServer basteln... Eingehende Verbindungen, welche mit mit QTcpServer::getPendingConnection() erhalte ich ja den nächsten eingehende Verbindung über einen QTcpSocket zurück...
Nun zum eigentlichen Problem:
jeder User muss einen Usernamen angeben, hierzu habe ich mir gedacht, leite ich einfach die QTcpSocket Klasse ab "ChatTcpSocket" und erstelle 2 Methoden setUsername und getUsername, um Benutzer setzen zu können.
Wie bewege ich nun die Methode QTcpServer::getPendingConnection() dazu, dass mir diese keine QTcpSocket sondern mir ein ChatTcpSocket zurück gibt?
Hierzu werde ich wohl die QTcpServer::getPendingConnection() ableiten müssen, nur wie bewerkstellige ich dieses am besten??
Danke!
QTcpServer und QTcpSocket
-
DBGTMaster
- Beiträge: 190
- Registriert: 19. August 2010 10:00
wenn das so ist, dann macht ja qt auch aus der oop sicht keinen sinn...solarix hat geschrieben:Macht aus OOP-Sicht keinen Sinn... Ein Chatclient IST keine Verbindung sondern HAT eine Verbindung...
hth..
Ich glaub, du hast mich einfach falsch verstanden. Na schau mal:
QtcpServer erstellt einen neuen socket und lauscht auf Port x. In meinem Fall läuft über diesen socket die chat-funktionalitäten ab... Verbindet sich nun ein client zu diesem socket, erhalte ich mit QtcpServer::getPendingConnection den neu verbundenen client als QTcpSocket zurück, aber genau hier möchte ich ein von mir QTcpSocket abgeleiteter object zurück erhalten, um zb infos zu speichern, seit wann ist client verbunden, wie heißt sein benutzer,...
Meine frage ist nun, wie muss ich den QTcpServer ableiten, um ein eigenes abgeleitetes object zurück geben zu können?
hehe, genau, erst mal widersprechen, dann Gehirn einschalten !
Vererbung:
eine Ableitung ChatTcpSocket von QTcpSocket ist also genau dann "gerechtfertigt", wenn du Module hasst die ChatTcpSocket als QTcpSocket behandeln, ohne das sie wissen das es ein ChatTcpSocket ist !
Also Du irgendwo ein ChatTcpSocket als QTcpSocket verkaufst ! und auch noch andere QTcpSockets hasst bzw andere von QTcpSocket abgeleitete klassen.
Nun zeig uns die Stelle wo Du das vorhasst !
Wenn nein, versuchst du genau das, was man eigentlich nicht machen soll, Polymorphie zum wiederverwenden von code zu nutzen !
BTW, Polymorphie zu verwenden wo man sie ned braucht, iss schon schlimm, aber :
Mit einer Ableitung sagst du, garantierst du quasi, das sich ein Object wie ein anderes verhaelt ... mit einer aenderung des verhaltens machst du genau dies wieder zu nichte.
Um den QTcpSocket zu verwenden und mit eigener Funktionalitaet zu erweitern, ist Aggregation das Mittel der Wahl ! (hat ein - Beziehung).
Dann kannst auch funktionalitaet umbauen, bzw anderes verhalten definieren.
Du kannst da solarix scho glauben wenn er das so sagt ...
Ciao ...
Vererbung:
glaub aus exeptional C++benutze Vererbung nicht um wiederzuverwenden, sondern um wiederverwendet zu werden !
eine Ableitung ChatTcpSocket von QTcpSocket ist also genau dann "gerechtfertigt", wenn du Module hasst die ChatTcpSocket als QTcpSocket behandeln, ohne das sie wissen das es ein ChatTcpSocket ist !
Also Du irgendwo ein ChatTcpSocket als QTcpSocket verkaufst ! und auch noch andere QTcpSockets hasst bzw andere von QTcpSocket abgeleitete klassen.
Nun zeig uns die Stelle wo Du das vorhasst !
Wenn nein, versuchst du genau das, was man eigentlich nicht machen soll, Polymorphie zum wiederverwenden von code zu nutzen !
BTW, Polymorphie zu verwenden wo man sie ned braucht, iss schon schlimm, aber :
Vorhandene Funktionalitaet umdefinieren zu wollen, im Context einer vererbung, ist regelrecht boesartig !QtcpServer::getPendingConnection den neu verbundenen client als QTcpSocket zurück, aber genau hier möchte ich ein von mir QTcpSocket abgeleiteter object zurück erhalten
Mit einer Ableitung sagst du, garantierst du quasi, das sich ein Object wie ein anderes verhaelt ... mit einer aenderung des verhaltens machst du genau dies wieder zu nichte.
Um den QTcpSocket zu verwenden und mit eigener Funktionalitaet zu erweitern, ist Aggregation das Mittel der Wahl ! (hat ein - Beziehung).
Dann kannst auch funktionalitaet umbauen, bzw anderes verhalten definieren.
Du kannst da solarix scho glauben wenn er das so sagt ...
Ciao ...
Mit der Formulierung sollte doch schon alles klar sein. Du hast einen Socket, über den der Chat läuft. Das impliziert sofort zwei verschiedene Klassen, oder? Chat und Socket. Um deine Modellierung korrekt in Worte zu fassen, müsste man etwa sagen "Ich habe einen Socket, der gleichzeitig auch mein Chat ist." Ergibt das Sinn?DBGTMaster hat geschrieben:QtcpServer erstellt einen neuen socket und lauscht auf Port x. In meinem Fall läuft über diesen socket die chat-funktionalitäten ab...
-
DBGTMaster
- Beiträge: 190
- Registriert: 19. August 2010 10:00