AGB  ·  Datenschutz  ·  Impressum  







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

class helper

Ein Thema von Helmi · begonnen am 2. Jan 2013 · letzter Beitrag vom 10. Aug 2013
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#11

AW: class helper

  Alt 2. Jan 2013, 14:21
Allister Christie hatte mal ein nettes Video dazu veröffentlicht: http://www.codegearguru.com/video/029/ClassHelpers.html
Das Video ist echt gut...
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von romankassebaum
romankassebaum

Registriert seit: 11. Jun 2011
21 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#12

AW: class helper

  Alt 2. Jan 2013, 14:42
Hallo,

um noch einmal auf meine erste Antwort zurückzukommen: Es wird eine Variable pro Instanz benötigt. Klassenvariablen können das nicht leisten. Also muss man sich etwas anderes überlegen.
Ich persönlich würde wahrscheinlich mit einem Feld arbeiten. Da Klassenhelper das nicht können, würde ich ableiten oder mir das Feld in dem Formular merken. Das kommt auf den konkreten Fall an.

--
Roman Kassebaum
Roman Kassebaum
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#13

AW: class helper

  Alt 2. Jan 2013, 14:51
...
um noch einmal auf meine erste Antwort zurückzukommen: Es wird eine Variable pro Instanz benötigt. Klassenvariablen können das nicht leisten. Also muss man sich etwas anderes überlegen.
Ich persönlich würde wahrscheinlich mit einem Feld arbeiten. Da Klassenhelper das nicht können, würde ich ableiten oder mir das Feld in dem Formular merken. Das kommt auf den konkreten Fall an.
...
Ja da hast du recht - Klassenvariablen sind fehl am Platz (hab grad rausgefunden, dass man da ganz schön perverse Sachen machen kann)
Ich nutz jetzt DeddyH´s Cracker-Klasse.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<

Geändert von Helmi ( 2. Jan 2013 um 14:53 Uhr)
  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
 
#14

AW: class helper

  Alt 2. Jan 2013, 15:48
Ein class helper oder eine CrackerKlasse haben beide allerdings Nachteile: Die Wirkung ist nicht mehr gesteuert sondern gilt für alle betroffenen Klassen (in diesem Bereich).

Nehmen wir mal als Beispiel, dass du in einer TListBox eine Datei anzeigen möchtest und eben den Dateinamen dir merken möchtest, dann würde ich folgenden Ansatz bevorzugen:
Delphi-Quellcode:
unit TextFilePresenter;

interface

uses
  StdCtrls;

type
  TTextFilePresenter = class
  private
    FFileName : string;
    procedure SetFileName(const Value : string);
  protected
    procedure Present; virtual; abstract;
  public
    property FileName : string read FFileName write SetFileName;
  end;

  TTextFilePresenterListBox = class( TTextFilePresenter )
  private
    FListBox : TListBox;
    procedure SetListBox( const Value : TListBox );
  protected
    procedure Present; override;
  public
    property ListBox : TListBox read FListBox write SetListBox;
  end;

implementation

uses
  SysUtils;

procedure TTextFilePresenter.SetFileName( const Value : string );
begin
  FFileName := Value;
  Present;
end;

procedure TTextFilePresenterListBox.Present;
begin
  if Assigned( FListBox ) then
    if FileExists( FileName ) then
      FListBox.Items.LoadFromFile( FileName )
    else
      FListBox.Clear;
end;

procedure TTextFilePresenterListBox.SetListBox( const Value : TListBox );
begin
  FListBox := Value;
  Present;
end;

end.
Nun kann man sehr genau steuern, welche ListBox man damit ansprechen möchte.
Egal in welchem Formular und ohne Nebenwirkungen.
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 JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#15

AW: class helper

  Alt 2. Jan 2013, 16:30
Die Funktion GetResult kann aber nur auf öffentliche Eigenschaften der Klasse zugreifen.
Das ist nicht ganz korrekt. Class helper können auf published , public , protected und strict protected Member der erweiterten Klasse zugreifen. Hatte ich nicht erwartet, kam aber raus, als ich Tests zur Implementierung der class helper in Free Pascal schrieb...

Dass class helper jedoch auch class var unterstützen war mir entfallen

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Mschmidt

Registriert seit: 4. Jul 2010
Ort: Berlin
62 Beiträge
 
Delphi XE2 Professional
 
#16

AW: class helper

  Alt 3. Jan 2013, 16:08
noch ein Nachtrag; class var geht, weil es keine Instanz-Variable ist. Es wäre genau so, als wenn du eine globale Variable deklarierst.
Class Var ist sogar verfügbar, wenn es keine Instanz gibt. Lediglich der Zugriff erfolgt via <Classname>.Variable statt nur Variable.
cheers Ms.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: class helper

  Alt 3. Jan 2013, 16:31
In dem Fall muss man sich mit einer Cracker-Klasse behelfen, da geht das dann wieder.
Daran hab ich auch schon gedacht! - Dann ergibt sich für mich nicht wirklich der sinn von class helper
aber das ist eine andere Diskussion...
Mit einem Helper bleibt die Objekt-Klasse unangetastet.

Mit einer CrackerKlasse muss man das Objekt ggf. casten je nachdem von welcher Klasse das Objekt instanziiert wurde und wie es weiter verarbeitet werden soll. Streng genommen sind es nicht mehr die gleichen Klassen (auch wenn deren Namen noch gleich sind).
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Mschmidt

Registriert seit: 4. Jul 2010
Ort: Berlin
62 Beiträge
 
Delphi XE2 Professional
 
#18

AW: class helper

  Alt 3. Jan 2013, 16:56
Obwohl es vielleicht eher akademischer Natur ist, gefallen mir die Ansaetze hier eher nicht. Wozu gibt es die Vererbung?
Also

TmyListbox = class(tlistbox)
// erweiterungen einbauen

Ggf. Als neue Komponente installieren und verwenden.
Cheers mschmidt
  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
 
#19

AW: class helper

  Alt 3. Jan 2013, 17:39
Obwohl es vielleicht eher akademischer Natur ist, gefallen mir die Ansaetze hier eher nicht. Wozu gibt es die Vererbung?
Also

TmyListbox = class(tlistbox)
// erweiterungen einbauen

Ggf. Als neue Komponente installieren und verwenden.
Cheers mschmidt
Das ist in diesem Zusammenhang eher kontraproduktiv.
Meine "Presenter" oder "Adapter" Klasse kann leicht auch auf andere visuelle Komponenten/Frameworks angepasst werden und über eine Factory kann ich diese verbinden. Dadurch kann ich der Factory z.B. ein TMemo, TListBox oder TComboBox (VCL sowie FMX) übergeben und bekomme eine Instanz vom Typ der Basisklasse zurück.

Bei dieser Instanz ändere ich die Eigenschaft FileName und fertig ist.

Mit deinem Ansatz müsste ich immer die konkrete Ableitung der Komponente ansprechen (ja, auch möglich per RTTI, aber schick ist das nicht).
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
Mschmidt

Registriert seit: 4. Jul 2010
Ort: Berlin
62 Beiträge
 
Delphi XE2 Professional
 
#20

AW: class helper

  Alt 3. Jan 2013, 18:46
Es wird doch akademisch , ok. In diesem Falle gebe ich dir recht. Jedoch faellt doch das argument, wenn man mehrere funktionalitaeten erweitern moechte. Mehrfachvererbung geht bei D nicht. Imho fange ich dann an, viele adapter zu bauen. Meine persoenliche Meinung ist, strikte Kapselung, sprich; nur die Klasse (visuell oder nicht) selbst kennt seine Funktionalitaeten, fremde Zugriffe erfolgen auf Properties/fkt/proc. Die implementation ist verborgen und physisch auf eine unit beschraenkt. Wird eine neue Funktionalitaet benoetigt, wird die klasse erweitert oder eine neue abgeleitet, nichts anderes. Leider ja, das ist ein
Hoher Aufwand, der sich aber in der Wartung bezahlt macht.
Cheers Mschmidt
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 04:15 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