![]() |
property oder variable
hallo zusammen,
welchen Vorteil bewirkt die Deklaration einer property mit eigenen Zugriffsmethoden ala:
Delphi-Quellcode:
im Gegensatz dazu das Array public zu deklarieren
interface
TSimpleStringList = class private FList: array of string; protected function Get(Index: Integer): string; procedure Put(Index: Integer; const S: string); public property Strings[Index: Integer]: string read Get write Put; default; end;
Delphi-Quellcode:
die Zugriffsmethoden auf das "normale" Array sind ja eh schon implementiert.
public
List: array of string; Danke für eure Meinungen Gruss KH |
Re: property oder variable
Naja,
in einer Setter oder Getter Methode kannst Du ja zum Beispiel noch plausibilitätsprüfungen durchführen. |
Re: property oder variable
Zitat:
das ist ein Argument. |
Re: property oder variable
Und du kannst vorallem später mal leicht etwas ändern.
Also am Besten niemals Felder direkt freigeben, sondern immer über ein Property (selbst wenn da noch nichtmal Getter und Setter vorhanden sind). Später kann man immernoch leicht eine Getter/Setter nachrüsten und so etwas verändern ... wie z.B. ein OnChange-Ereignis einrichten oder eben die schon genannten Plausibilitätsprüfungen. Dieses ist ja gerade ein Vorteil von OOP, gegenüber "einfachen" Records. (die neuen Recordmethoden überseh ich jetzt einfach mal) |
Re: property oder variable
Darüber hinaus ist dies schlicht näher am OOP Paradigma, dass u.a. das so genannte Geheimhaltungsprinzip postuliert, nach dem sämtliche inneren Zustände und Abläufe einer Klasse von aussen nicht greifbar sind, und lediglich über ein Interface indirekt zugänglich sein sollen. (Dies muss nicht zwangsweise wirklich über die Technik "Interface" passieren, die Terminologie überkreuzt sich da etwas. Properties bzw. Getter/Setter sind ein Interface im semantischen Sinne - also genau genommen vom Interface als eigene weitere Methodik in der OOP abzugrenzen.)
Diese Begründung läuft jedoch pur über eine theoretische Definition. Technisch kann ggf. ein Propertyzugriff nachher genau so vom Compiler realisiert sein wie ein direkter (wenn das Property direkt auf das Feld durchgreift ohne einen Getter/Setter zu deklarieren in diesem Falle). Es ist prinzipiell eine ganz gute Idee an diesem Paradigma festzuhalten, da es wie schon erwähnt insbesondere die Wartbarkeit deutlich verbessern kann. Lediglich in sehr sehr wenigen Fällen gibt es wirklich einen guten Grund für die Verwendung von Public-Feldern. Sehr selten. |
Re: property oder variable
Vor allem kannst du auch mithilfe des Setters dem Benutzer deiner Komponente einiges an Arbeit abnehmen, indem du z.B. nach der schon genannten Plausibilitätsprüfung - es sei: Zugriffs-Index > High(FList) -, das Array automatisch vergrößerst.
Und beim Direktzugriff auf das Array muss der Benutzer auch Prozeduren wie z.B. Add, Insert, Delete selbst schreiben; das könntest du ja in deine Komponente einbauen. Sonst könntest du ja auch einfach nur die Liste ala Array of String in dein Programm übernehmen, da die Komponente ohne Benutzung der OOP-Methodik sinnlos ist :) |
Re: property oder variable
Ein weiterer Grund kann es sein, wenn du dem Benutzer der Klasse gar nicht alle Zugriffsmöglichkeiten auf ein Feld erlauben möchtest, die der Typ des Feldes schon hergibt, z.B. stellt TStringList die Methode delete bereit, was du dem Benutzer aber nicht erlauben willst.
|
Re: property oder variable
wunderbar, ich danke euch, ihr hab mich überzeugt .
Gruss KH |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:07 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