AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Methoden in mehreren Klassen benutzen...
Thema durchsuchen
Ansicht
Themen-Optionen

Methoden in mehreren Klassen benutzen...

Ein Thema von Pseudemys Nelsoni · begonnen am 25. Feb 2006 · letzter Beitrag vom 25. Feb 2006
Antwort Antwort
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Methoden in mehreren Klassen benutzen...

  Alt 25. Feb 2006, 14:26
Moin,

mein "Problem" ist schwer zu beschreiben, deswegen versuche ich mal per Code zu erklären wo meine Frage liegt.

Nehmen wir einmal an ich habe folgende Hauptklasse:

Delphi-Quellcode:
TIRCClient = class
private
  FClient: TClientSocket;
public
  procedure Message(const Channel, Message: string);
end;

...

procedure TMainClass.Message(const Channel, Message: string);
begin
  FClientSocket.SendText(Format('PRIVMSG %s :%s%s', [Channel, Message, #13#10]));
end;
Diese Beispiel-Methode schreibt eine Message in einen Channel eines IRC Servers...

So, jetzt gibt es noch eine Subklasse die folgendermaßen aussieht:

Delphi-Quellcode:
TUser = class
private
  FOwner: TIRCClient;
  FChannel: string;
public
  procedure Message(const Message: string);
end;

...

procedure TUser.Message(const Message: string);
begin
  FOwner.Message(FChannel, Message);
end;


Da ist das "Problem".... ist es wirklich nötig, Funktionen in einer Subklasse zu haben die eigentlich nichts tun, bis auf eine Methode des Vorgängers aufzurufen? Bei 100 Methoden (z.B) ist es ziemlich nervig wenn man dann solchen Code hier hat:

Delphi-Quellcode:
procedure TUser.Proc1(const Message: string);
begin
  FOwner.Proc(FChannel, Message);
end;

procedure TUser.Proc2(const Message: string);
begin
  FOwner.Proc2(FChannel, Message);
end;

procedure TUser.Proc3(const Message: string);
begin
  FOwner.Proc3(FChannel, Message);
end;
Und das nur, weil die Menge der Parameter vielleicht unterschiedlich ist...

Ich hoffe es ist zu verstehen was ich meine..sonst erklär ich gern nochmal *g*
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Methoden in mehreren Klassen benutzen...

  Alt 25. Feb 2006, 14:35
Naja, was willst du denn machen? Wenn du in den unterschiedlichen Methoden nunmal unterschiedliche Parameter hast, bleibt dir eben nichts anderes übrig, als deiner Klasse zu sagen, was sie damit machen soll
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: Methoden in mehreren Klassen benutzen...

  Alt 25. Feb 2006, 15:54
Hi,
du solltest wirklich noch mal genauer sagen was du wie machen möchtest.
Aber es gibt eigentlich mehrere Ansätze, was alles möglich ist. Natürlich stellt sich als Erstes mal die Frage, wie unterschiedlich die Parameter sind.
Wenn du zwei (oder mehr) Klassen hast, die eine gemeinsame Methode besitzen (macht das gleiche und hat die gleiche Anzahl der Parameter), dann kannst du sehr einfach mit einer Basisklasse arbeiten. Diese beinhaltet dann natürlich die implementierung aller gemeinsamer Methoden.

Anders sieht es natürlich aus, wenn du zwei (oder mehr) Klassen hast, die im Prinzip die gleiche Methode besitzen, aber unterschiedlich viele Parameter haben. Hier kannst du mit dem Adapterpattern arbeiten. Du wandelst eigentlich inkompatible Eingaben einfach so um, dass sie verwendet werden können. Ok, soweit ist's klar, einfach umwandeln *hüstel*
Wenn es möglich ist (hängt stark von deinem Problem ab), kannst du einfach optionale Parameter einführen, die einen Standardwert haben

Delphi-Quellcode:
procedure sendMessage(Message : String; optionalerParameter : TIrgendwas = nil);
....
....

sendMessage('Mit nur einem Parameter benutzt (optionalerParameter ist also nil)');
sendMessage('Mit zwei Parameter benutzt', InstanzVonTIrgendwas);
Wie gesagt, hängt doch eher von deinem konkreten Fall ab.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Methoden in mehreren Klassen benutzen...

  Alt 25. Feb 2006, 16:00
So lange die Klassen in einer Unit sind, sind es Friends, das heißt, du kannst auch Methoden aus anderen Klassen in der Unit aufrufen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Methoden in mehreren Klassen benutzen...

  Alt 25. Feb 2006, 16:18
Zitat von Pseudemys Nelsoni:
Da ist das "Problem".... ist es wirklich nötig, Funktionen in einer Subklasse zu haben die eigentlich nichts tun, bis auf eine Methode des Vorgängers aufzurufen?
Du rufst nicht die Methoden des Vorgängers auf. Das was fOwner bei dir ist, nennt sich ein Aggregat.
Ich hatte die in deinem anderen Thread [1] gezeigt, wie du Interface delegation benutzen kannst, um solche "Durchschleif calls" vom Compiler erledigen zu lassen.
Das klappt aber nur wenn die Methoden die gleiche Signatur haben. Also klappt es bei dir hier nicht.
Zitat:
Bei 100 Methoden (z.B) ist es ziemlich nervig wenn man dann solchen Code hier hat:
Bei 100 Methoden sieht mir das schon fast nach einer Designschwäche aus.

Du hast angeboten das Ganze etwas ausführlicher zu erklären. Ich glaube, das wäre eine gute Idee, sonst wird man dir nicht wirklich weiterhelfen können.


btw: Methoden nach Substantiven zu benennen ist ganz böse.
Vor allem wenn es in der vorherrschenden Klassenbibliothek ein "SendText" gibt halte ich ein plötzliches "Message" nicht nur unangebracht, weil es nicht nach einer Aktion benannt ist...

[1] Dort muss, in meinem Schnipsel, im BeforeDestruction das inherited an den Schluss der Methode...
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz