Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Virtuelle Settermethode... Fachbegriff? (https://www.delphipraxis.net/169665-virtuelle-settermethode-fachbegriff.html)

Iwo Asnet 3. Aug 2012 10:50

Virtuelle Settermethode... Fachbegriff?
 
Hi,

Kurze Frage.
Ich habe eine Property mit Setter in einer Basisklasse. Nun möchte ich, das abgeleitete Klassen beim setzen/verändern der Property Aktionen ausführen können, also z.B.
Delphi-Quellcode:
TEssen = Class
Private
  FIstFertig : Boolean;
Protected
  Procedure SetIstFertig (Value : Boolean);
  Procedure IstFertigModified(); Virtual;
public
  Property IstFertig : Boolean Read FIstFertig Write SetIstFertig;
End;

TEssenMitAnderen = Class (TEssen)
protected
  Procedure IstFertigModified(); Override;
End;

Procedure TEssen.IstFertigModified;
Begin
End;

Procedure TEssen.SetIstFertig(Value : Boolean);
Begin
  If Value = FIstFertig Then Exit;
  FIstFertig := Value;
  IstFertigModified();
End;

Procedure TEssenMitAnderen.IstFertigModified;
Begin
  If EssenIstFertig Then
    DenAnderen.Bescheidsagen('Essen ist fertig!');
End;
Gibt es einen Fachbegriff/Bezeichnung für die Methode 'IstFertigModified'? Oder ist das irgendwie ein Pattern?

Phoenix 3. Aug 2012 10:57

AW: Virtuelle Settermethode... Fachbegriff?
 
In .NET läuft das über das INotifyPropertyChanged Interface mit dem PropertyChanged - Event ab:
http://msdn.microsoft.com/en-us/libr...tychanged.aspx

Für das ganze Changetracking-Zeig gibts aber keine expliziten Patterns oder Bezeichnungen. Vermutlich kann man hier recht gut mit dem Observer-Pattern arbeiten, aber das ganze ist eigentlich eher dafür gedacht, dass eine fremde Klassen von aussen die entsprechende Klasse beobachtet.

Den Setter selber virtual zu machen würde nur gehen, wenn das backing field protected wäre, was aber wieder die Kapselung aufweichen würde.

Ich würde tatsächlich eher ein PropertyChanging / PropertyChanged event anbieten, oder dies mittels virtueller methoden nur für abgeleitete Klassen bereitstellen.
Wichtig ist nur, dass man das Konzept, wenn man es denn mal einführt, überall gleich implementiert, damit man bei der Wartung nicht zig unterschiedlichen Implementierungen begegnet.

Iwo Asnet 3. Aug 2012 11:32

AW: Virtuelle Settermethode... Fachbegriff?
 
Hi Phoenix, woher weißt Du, das ich eigentlich C# meine? ;-)

Leider gibt es das INotifyPropertyChanged erst ab .NET 4.0, das wir hier leider noch nicht einsetzen sollen. An Observer hab ich auch gedacht, aber das passt hier nicht, denn die Instanz soll ja selbst reagieren.

Ich lasse das also so und denk mir einen Begriff aus (bin grad an der Dokumentation)

Danke für die Info.

uligerhardt 3. Aug 2012 12:11

AW: Virtuelle Settermethode... Fachbegriff?
 
Sieht ein bisschen nach Schablonenmethode aus, wobei die natürlich viel allgemeiner gehalten ist.

Morphie 3. Aug 2012 13:03

AW: Virtuelle Settermethode... Fachbegriff?
 
INotifyPropertyChanges erst ab 4.0? Da sagt MSDN aber etwas anderes
http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx

Zitat:

INotifyPropertyChanged Interface
.NET Framework 2.0

Iwo Asnet 3. Aug 2012 13:06

AW: Virtuelle Settermethode... Fachbegriff?
 
Und der Link von Phoenix (und die Implementierung in .NET-Listen):
Zitat:

INotifyPropertyChanged Interface
.NET Framework 4
Egal. Du hast trotzdem Recht. Ich könnte das verwenden.

Phoenix 3. Aug 2012 13:07

AW: Virtuelle Settermethode... Fachbegriff?
 
Zitat:

Zitat von Iwo Asnet (Beitrag 1176807)
Leider gibt es das INotifyPropertyChanged erst ab .NET 4.0, das wir hier leider noch nicht einsetzen sollen. An Observer hab ich auch gedacht, aber das passt hier nicht, denn die Instanz soll ja selbst reagieren.

INotifyPropteryChanged gehört zum Databinding und ist spätestens seit .NET 2.0 drin (wenn nicht vielleicht sogar schon in 1, aber das ist so alt, da kann ich mich nicht mehr dran erinnern). Hier der Link zum 2.0er MSDN Eintrag: http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx

Aber davon abgesehen - warum 'noch' kein 4.0er? Das wurde schon im April 2010 released, ist also mit seinen über 2 Jahren auf dem Buckel gefühlt schon Uralt-Technologie. 4.5 steht ja schon vor der Tür (Release im September).

Iwo Asnet 3. Aug 2012 13:10

AW: Virtuelle Settermethode... Fachbegriff?
 
Zitat:

Zitat von Phoenix (Beitrag 1176813)
Aber davon abgesehen - warum 'noch' kein 4.0er?...

Vorgaben. Die Anwendungen müssen auch auf IPC laufen und deren Flash ist ziemlich mickrig.
Die Distributionen für XP > 2.0 sind zu groß.

Ach, und XP läuft auch drauf.

sx2008 3. Aug 2012 22:35

AW: Virtuelle Settermethode... Fachbegriff?
 
Also ich weiss nicht warum das so kompliziert sein muss; hier der geradelinige und einfache Ansatz:
Delphi-Quellcode:
TEssen = Class
Private
  FIstFertig : Boolean;
Protected
  Procedure SetIstFertig(Value : Boolean);virtual;
public
  Property IstFertig : Boolean Read FIstFertig Write SetIstFertig;
End;

TEssenMitAnderen = Class (TEssen)
protected
  Procedure SetIstFertig(Value : Boolean);override;
End;


Procedure TEssen.SetIstFertig(Value : Boolean);
Begin
  FIstFertig := Value;
End;

Procedure TEssenMitAnderen.SetIstFertig(Value : Boolean);
Begin
  inherited SetIstFertig(Value);
  If Value Then
    DenAnderen.Bescheidsagen('Essen ist fertig!');
End;


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:59 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