AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Ist das eine Methode oder Prozedur?
Thema durchsuchen
Ansicht
Themen-Optionen

Ist das eine Methode oder Prozedur?

Ein Thema von Alallart · begonnen am 20. Jul 2025 · letzter Beitrag vom 21. Jul 2025
Antwort Antwort
Alallart

Registriert seit: 8. Dez 2015
172 Beiträge
 
#1

Ist das eine Methode oder Prozedur?

  Alt 20. Jul 2025, 11:20
Nur eine Verständnissfrage. Add ist eine Methode der Klasse. Spricht man bei Find auch von einer Methode? Schließlich ist sie Private. Theoretisch greift später niemand drauf zu, also eine Prozedur und keine Methode.
Delphi-Quellcode:
type
  TKlasse = class(TObject)
  private
    procedure Find;
  public
    procedure Add;
  end;
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

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

AW: Ist das eine Methode oder Prozedur?

  Alt 20. Jul 2025, 11:24
Jede Prozedur oder Funktion, die in der Deklaration einer Klasse deklariert ist, ist eine Methode, egal mit welcher Sichtbarkeit sie deklariert wurde.

Der technische Unterschied ist, dass beim Aufruf einer Methode der Self-Pointer mitgegeben werden muss, sprich die Instanz der Klasse, in dessen Kontext die Methode aufgerufen wird.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Alallart

Registriert seit: 8. Dez 2015
172 Beiträge
 
#3

AW: Ist das eine Methode oder Prozedur?

  Alt 20. Jul 2025, 11:34
Ok, danke dir. Ich habe auch immer von Methode gesprochen, wurde dann aber etwas unsicher.
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
724 Beiträge
 
Delphi 12 Athens
 
#4

AW: Ist das eine Methode oder Prozedur?

  Alt 20. Jul 2025, 11:54
Jede procedure oder function, die als Teil einer Klasse deklariert ist wird per Konvention als Methode bezeichnet, die Sichtbarkeit spielt keine Rolle. Es gibt einen wesentlichen wenn auch versteckten Unterschied zwischen Methoden und eigenständigen procedure oder functions (gemeinhin als Routinen bezeichnet): Methoden haben einen versteckten zusätzlichen Parameter in dem bei einem Aufruf der Methode die Referenz (Zeiger) des Objektes übergeben wird für das die Methode arbeiten soll. Innerhalb des Kodes der Methode kann man explizit über den Bezeichner "self" auf diesen Parameter zugreifen und er wird auch intern verwendet, um auf Felder, properties oder andere Methoden des Objektes zuzugreifen. Wegen dieses Parameters kann man eine Methode nur für ein Objekt (Instanz einer Klasse) aufrufen, d. h. über die objectvariable.methode Syntax. Nur innerhalb des Kodes einer Methode kann man eine andere Methode der gleichen Klasse direkt aufrufen, weil der Compiler da automatisch self für die objectvariable verwendet.

Bei als "class procedure" oder "class function" deklarierten Methoden ist der self-Parameter übrigens eine Referenz auf die Klasse selbst; die Addresse der ziemlich komplexen in-memory Struktur, die der Compiler für jede Klasse erzeugt. Ein constructor ist im Prinzip auch nur eine class function, ein destructor dagegen eine (fast) normale Methode.

Um die Verwirrung komplett zu machen: wenn eine class procedure/function mit dem "static" Keyword deklariert wird bekommt sie keinen self-Parameter, ist also was die Parameter angeht, äquivalent zu einer eigenständigen Routine. Sie im Rahmen einer Klasse zu deklarieren gibt einem aber die Möglichkeit, quasi einen eigenen Namespace innerhalb einer Unit zu schaffen, in dem man konzeptionell zusammengehörige Routinen bündeln kann.

Du solltest dich mal von Vorne bis Hinten durch den Delphi Language Guide arbeiten. Da findet man solche Infos. War noch einfacher, als es den noch als gedrucktes Buch gab, aber es geht auch online oder mit der offline-Hilfe. Und es lohnt sich, glaub mir...
Peter Below
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.126 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Ist das eine Methode oder Prozedur?

  Alt 21. Jul 2025, 14:20
Welchen praktischen Unterschiedlich macht "static" oder nicht? Record-Klassenfunktionen müssen ja "static" sein, aber das hat mich bisher nicht gestört.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.524 Beiträge
 
Delphi 12 Athens
 
#6

AW: Ist das eine Methode oder Prozedur?

  Alt 21. Jul 2025, 15:59
Da Records leider keine Vererbung besitzen, macht dort der Self-Parameter bei einer Class-Function keinen Sinn.
Delphi hat das auch garnicht implementiert, und somit gibt es nur STATIC.
Leider wird das dann nicht einfach als DEFAULT genommen und muß explizit angegeben werden.


function -> mit Self = Objekt-Zeiger
class function -> mit Self = ClassType
class function static = kein Self
(PS: das Self ist ein "unsichtbarer" impliziter Parameter an allen Klassen-Methoden)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.731 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Ist das eine Methode oder Prozedur?

  Alt 21. Jul 2025, 16:01
Welchen praktischen Unterschiedlich macht "static" oder nicht? Record-Klassenfunktionen müssen ja "static" sein, aber das hat mich bisher nicht gestört.
Static -> Es wird kein zusätzlicher Pointer auf die Klassendeklaration übergeben. D.h. unter anderem, dass eine solche Klassen-Methode nicht virtuell sein kann.
Thomas Mueller
  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 15:51 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