AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Methoden-Deklaration vorgeben?

Ein Thema von Der schöne Günther · begonnen am 13. Aug 2013 · letzter Beitrag vom 14. Aug 2013
Antwort Antwort
Seite 1 von 2  1 2      
Furtbichler
(Gast)

n/a Beiträge
 
#1

AW: Methoden-Deklaration vorgeben?

  Alt 13. Aug 2013, 19:23
Das habe ich aber noch in keiner Sprache gesehen.
Natürlich nicht, weil man sich damit zum Horstl macht. Man verwendet eine Factory. Deshalb wurden die ja erfunden. Wenn ich in einer Klasse alle Handler/Methoden unterbringe, dann verstoße ich z.B. gegen das Open/Closed-Prinzip und meine Klasse degeneriert immer weiter, d.h. wird immer größer und größer => Ganz ganz schlecht und peinlich.

Also: Mach es wie Sir Rufo vorgeschlagen hat: Nimm eine Factory.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#2

AW: Methoden-Deklaration vorgeben?

  Alt 13. Aug 2013, 19:36
Natürlich nicht, weil man sich damit zum Horstl macht. Man verwendet eine Factory. Deshalb wurden die ja erfunden.
Das Problem war imho nicht:
"Wie teile ich Methoden auf Klassen auf." => Factories, usw.
sondern:
"Wie vermeide ich es, tausendmal (auch in verschiedenen Klassen) die gleiche Signatur zu tippen.".

Gerade bei SirRufus' Lösung muss man bei jeder Implementierung von IMyMethod bei jeder Deklaration und jeder Definition der Methode die gleiche Signatur tippen.
Oder übersehe ich da etwas?


BTW: Meine "Lieblingslösung" wurde ja schon im Ausgangspost genannt
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#3

AW: Methoden-Deklaration vorgeben?

  Alt 13. Aug 2013, 19:43
Das Problem war imho nicht...
Dummdidumm: Wie man vom Thema abweichen kann.. Hast Recht.
Aber falsch ist die Vorgehensweise trotzdem. So.

Bei VS bzw. Resharper geht das ganz einfach:
Code:
class MyNewClass : IMyMethod{}
ALT-Enter, Enter, fertig (Refactoring "Implement Methods" wird ausgeführt). Gibts da was für Delphi?

Nur meiner Meinung nach für so klitzekleine Dinge wie in meinem Beispiel trotzdem etwas ... oversized.
Falsche Meinung.

Gewöhne Dir das einfach an. Factories sind soooo praktisch und dir wird alle Nase lang etwas über den Weg laufen, wo Du anhand eines Tokens (String, Enum, sonstewas) eine Methode aufrufen musst.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.209 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Methoden-Deklaration vorgeben?

  Alt 13. Aug 2013, 20:11
Gibts da was für Delphi?
Interfaces in Delphi habe ich mir immer noch nicht angeschaut, aber ich meine Vorgaben vom zu implementierenden Interface auf Methoden von aggregierten Objekten delegieren.

Falsche Meinung. Gewöhne Dir das einfach an.
Ich versuchs. Später rächt sich das immer
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.047 Beiträge
 
Delphi 12 Athens
 
#5

AW: Methoden-Deklaration vorgeben?

  Alt 13. Aug 2013, 21:37
Bei VS bzw. Resharper geht das ganz einfach:
Code:
class MyNewClass : IMyMethod{}
ALT-Enter, Enter, fertig (Refactoring "Implement Methods" wird ausgeführt). Gibts da was für Delphi?
Nicht für Delphi, sondern direkt schon in Delphi drin:
Klassendeklaration hinschreiben inkl. end, vor dem end bleiben, Strg + Leertaste, zu implementierende Methoden des Interfaces aus der Liste auswählen, Enter (jetzt stehen sie da inkl. public), Strg + Shift + C, fertig.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Methoden-Deklaration vorgeben?

  Alt 13. Aug 2013, 23:45
@jaenicke

Obwohl mich das public eher stört, das verleitet einige statt dem Interface, die Klassen-Instanz zu benutzen.

Also definiere ich die Klassen entweder im implementation -Abschnitt (Zugriff dann über eine Factory) oder deklariere diese Methoden als protected .
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.047 Beiträge
 
Delphi 12 Athens
 
#7

AW: Methoden-Deklaration vorgeben?

  Alt 14. Aug 2013, 04:27
Obwohl mich das public eher stört, das verleitet einige statt dem Interface, die Klassen-Instanz zu benutzen.
Wenn sie denn verfügbar wäre. Bei den Interfaces, die ich im Moment implementiere, ist in der Schnittstelle nach außen nur das Interface verfügbar.
Das Interface deklarierst du ja hoffentlich nicht in der selben Unit wie das Objekt, oder?
Wer dann die Unit mit dem Objekt extra nimmt, ist selbst schuld...

Nebenbei kann man bei XE4 anders als früher auch problemlos den Interface-Zeiger wieder auf die Objektinstanz casten (mit as).

Auch noch nebenbei: Das Überschreiben von Elternmethoden funktioniert analog inkl. override dahinter.

Das public wieder zu entfernen ist jedenfalls deutlich weniger Arbeit als alles manuell zu kopieren usw.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#8

AW: Methoden-Deklaration vorgeben?

  Alt 14. Aug 2013, 06:51
Nicht für Delphi, sondern direkt schon in Delphi drin:...
Na dann hätten wir ja das Problem
...Ändert allerdings auch nichts daran, dass man die Parameterdeklaration bei jeder Methode wieder hinschreiben muss.
gelöst hätten.

Interface-Methoden sollten public sein, schließlich verwendet man sie ja 'öffentlich', auch wenn die Klasse an sich nicht verfügbar sein sollte.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.047 Beiträge
 
Delphi 12 Athens
 
#9

AW: Methoden-Deklaration vorgeben?

  Alt 14. Aug 2013, 07:43
Interface-Methoden sollten public sein, schließlich verwendet man sie ja 'öffentlich', auch wenn die Klasse an sich nicht verfügbar sein sollte.
Ich schreibe die immer unter protected um zu verhindern, dass man aus Versehen die Klasse als Klasse nutzt, wenn man diese noch nicht kennt.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Methoden-Deklaration vorgeben?

  Alt 13. Aug 2013, 19:37
@Sir Rufo, Furtbichler: Ändert allerdings auch nichts daran, dass man die Parameterdeklaration bei jeder Methode wieder hinschreiben muss.

Wenn dann würde sich vielleicht eher dieses Pattern anbieten, wo man statt die Parameter einzeln zu übergeben, ein einziges Objekt übergibt, das alle Parameter beinhaltet... mit Namen hab ichs nicht so . So spielt die dann Reihenfolge keine Rolle und man kann auch neue Parameter hinzufügen, ohne alle Methoden anpassen zu müssen.

Also statt:
Delphi-Quellcode:
TMyDummyMethod = class
protected
  procedure Execute( input1: Integer; input2: TSomeClass; out output: Double );
end;

procedure TPacketHandler.Execute( const ACommandStr : string; input1: Integer; input2: TSomeClass; out output: Double );
begin
  fMethodDict[ACommandStr].Execute( input1, input2, output );
end;
Delphi-Quellcode:
TMyMethodParameters = class
  input1: Integer;
  input2: TSomeClass;
  output: Double;
end;

TMyDummyMethod = class
protected
  procedure Execute(parameters: TMyMethodParameters);
end;

procedure TPacketHandler.Execute( const ACommandStr : string; input1: Integer; input2: TSomeClass; out output: Double );
var
  Parameters: TMyMethodParameters;
begin
  Parameters:= TMyMethodParameters.Create(input2, input2, output);
  fMethodDict[ACommandStr].Execute(Arguments);
  Parameters.Free;
end;
(jaja public Felder sind pöhse usw., ist nur qualitativ).

Aber KISS.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz