AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

"Namespace" innerhalb einer Klasse

Ein Thema von s.h.a.r.k · begonnen am 3. Dez 2010 · letzter Beitrag vom 4. Dez 2010
Antwort Antwort
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#1

AW: "Namespace" innerhalb einer Klasse

  Alt 3. Dez 2010, 17:35
...und bin gerade dabei das class helper Konstrukt zu nutzen, da es sich hier echt wunderbar anbietet
Ich denke, es wäre besser dies über eine eigene Klasse zu lösen.
Hier mal eine Klasse, die im Konstruktor ein Control übergeben bekommt
und dann dieses Control animiert.
Delphi-Quellcode:
TAnimateControl = class(TObject)
private
  Fcontrol : TControl;
public
  constructor Create(AControl:TControl);
  procedure Animate;
  
  property Muster:TAnimateMuster; // linksrum, rechtrum, oben-nach-unten, wasauchimmer
  property MaxCycles:integer; // max. Anzahl von Schritten
  property ScaleFactor:double; // "Stärke" der Bewegung
  property TimeStep:integer; // Zeitdauer zwischen den Animationsschritten
  ...
end;
Der Einsatz eines Class-Helpers würde ich nicht in Betracht ziehen.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: "Namespace" innerhalb einer Klasse

  Alt 3. Dez 2010, 17:38
@shmia: Genau das wollte ich ja hier vermeiden Finde es etwas direkter, wenn ich Object.MachWas() aufrufe, als Controller.MachWasMit(Object) . Mir ist schon klar, dass das Geschmackssache ist, aber alles muss gehen

@himitsu: Es wird nur ein Animator verwendet, der sich um alles kümmert. Das habe ich schon. Nur ist diese Lösung mit einer weiteren Klasse nicht optimal, da der Benutzer immer noch blöde Sachen machen kann...

Aber ich sehe schon, nachdem ihr beide auch keine direkte Lösung kennt, gibt es wohl keine. Dann muss ich es wohl doch etwas anders lösen.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)

Geändert von s.h.a.r.k ( 3. Dez 2010 um 17:41 Uhr)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

AW: "Namespace" innerhalb einer Klasse

  Alt 3. Dez 2010, 18:05
@shmia: Genau das wollte ich ja hier vermeiden Finde es etwas direkter, wenn ich Object.MachWas() aufrufe, als Controller.MachWasMit(Object) . Mir ist schon klar, dass das Geschmackssache ist, aber alles muss gehen
Deine gesuchte Lösung geht in Richtung "Vererbung"; wobei du nicht wirklich ableiten möchtest, sondern mit einem Class-Helper Funktionalität hinzufügen möchtest.
Eigentlich braucht du sogar eine Mehrfachvererbung, da du nicht nur die Methode Animate haben willst,
sondern auch noch ein (privates) Feld in dem der Animator steckt.
Ein Class-Helper ist dazu aber grundsätzlich nicht in der Lage, weil sich dadurch das Objekt um 4 Bytes verlängern müsste.
Delphi müsste schon das Konzept von partiellen Klassen beherschen um das umzusetzen, was Dir vorschwebt.

Ich kann dir nur sagen, dass du mit Vererbung hier nicht weiterkommst.
Richtig wäre "Komposition"; also so wie ich das oben gezeigt habe.
Es ist auch weniger eine Geschmacksfrage, ob man lieber Vererbung oder eher Komposition verwendet, sondern die Komposition hat handfeste Vorteile:
http://www.cleancodedeveloper.de/Rot...ritance_FCoI_3
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

AW: "Namespace" innerhalb einer Klasse

  Alt 3. Dez 2010, 18:09
Hm, magst zwar irgendwie recht haben, aber ich sträube mich noch etwas gegen den Gedanken So wie ich das haben will, ists halt irgendwie schöner imho (wobei Schönheit halt immer relativ ist, ich weiß)

Wenn ich meine Komponente allerdings für frühere Delphi-Versionen veröffentlichen will, dann muss ich wohl oder übel auf diese class helper verzichten... Daher wird es wohl darauf hinauslaufen eben die Komposition zu verwenden, schade drum!
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.877 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: "Namespace" innerhalb einer Klasse

  Alt 3. Dez 2010, 18:17
Du könntest auch den Originaltyp überdecken
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

AW: "Namespace" innerhalb einer Klasse

  Alt 3. Dez 2010, 18:29
Hier ging es auch um die class helper.

Du kannst dort alles machen, wie in einer Funktion, der Du das Objekt übergibst. Diese Funktion wird allerdings an das Objekt "angepappt" und hat Zugriff auf dieses als "Self".
Überschreiben von Methoden ist nicht möglich.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#7

AW: "Namespace" innerhalb einer Klasse

  Alt 3. Dez 2010, 18:32
Du kannst dort alles machen, wie in einer Funktion, der Du das Objekt übergibst. Diese Funktion wird allerdings an das Objekt "angepappt" und hat Zugriff auf dieses als "Self".
Überschreiben von Methoden ist nicht möglich.
Tja, aber genau das überschreiben kann ja evtl. zu einem Problem werden! Daher ja auch die Frage nach dem Namespace. Werde es aber wohl so machen, wie shmia gemeint hat.

@mkinzler: Du meinst Vererbung? Das will ich nicht, da mein Animator allgemeingültig sein soll und alle Integer/Extended-Properties animieren können soll -- auch wenn ein User z.B. die "Tag"-Property angibt, der Animator machts
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:25 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