Delphi-PRAXiS
Seite 6 von 6   « Erste     456   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Setter mehrfach überschreiben. (https://www.delphipraxis.net/185422-setter-mehrfach-ueberschreiben.html)

Bjoerk 12. Jun 2015 15:06

AW: Setter mehrfach überschreiben.
 
Probiers halt aus. Variante wäre direkt mit TGraphicObjectClass zu arbeiten, das geht. Dann kann aber nicht mehr Is Typ1,2,3 abfragen.

So getestet:
Delphi-Quellcode:
  TObject0 = class
  private
    FA: integer;
    FB: integer;
    FC: integer;
  public
    property A: integer read FA write FA;
    property B: integer read FB write FB;
    property C: integer read FC write FC;
    procedure Assign(Value: TObject0); virtual;
  end;

  TObject1 = class(TObject0)
  private
    FSL: TStringList;
  public
    property SL: TStringList read FSL;
    procedure Assign(Value: TObject0); override;
    constructor Create;
    destructor Destroy; override;
  end;


{ TObject0 }

procedure TObject0.Assign(Value: TObject0);
begin
  FA := Value.A;
  FB := Value.B;
  FC := Value.C;
end;

{ TObject1 }

procedure TObject1.Assign(Value: TObject0);
var
  O: TObject1;
begin
  inherited;
  O := TObject1(Value);
  FSL.Assign(O.SL);
end;

constructor TObject1.Create;
begin
  inherited;
  FSL := TStringList.Create;
end;

destructor TObject1.Destroy;
begin
  FSL.Free;
  inherited;
end;

procedure TTestForm.Button1Click(Sender: TObject);
type
  TObjectClass = class of TObject0;
var
  A: TObject1;
  B: TObject0;
begin
  A := TObject1.Create;
  try
    B := TObjectClass(A.ClassType).Create;
    try
      B.Assign(A);
    finally
      B.Free;
    end;
  finally
    A.Free;
  end;
end;

Dejan Vu 12. Jun 2015 15:21

AW: Setter mehrfach überschreiben.
 
Hab kein Delphi, aber dafür brauchst Du dann doch wieder eine Basisklasse:
Delphi-Quellcode:
TBasisKlasse = Class
   public constructor Create; Virtual;
End;

  TA = Class (TBasisKlasse) end;
  TBasis = class of TBasisKlasse;

Constructor TBasisKlasse.Create; begin end;


Var
  a,b : TBasisKlasse;

begin
  a := TA.Create;
  b := TBasis(a.ClassType).Create;
end;
getippt und nicht getestet.

Bjoerk 12. Jun 2015 15:38

AW: Setter mehrfach überschreiben.
 
Liest du die Posts eigentlich? :gruebel:

TObject0 ist die Basisklasse. Und ja, ich hab auch eine. Siehe Posts 1- 10, die Kommentare in #9. Die TWerkzeug gibst nur nicht mehr.

stahli 12. Jun 2015 16:42

AW: Setter mehrfach überschreiben.
 
Das Problem ist, dass sich Deine Beispiele immer auf Deine aktuelle Projektstruktur beziehen und losgelöst nicht so ganz klar sind.

Mein Vorschlag:

Baue Dir mal ein völlig eigenständiges Testprojekt mit Fahrzeugen (Auto, Fahrrad, Boot), Tieren (Ente, Fisch) und Früchten (Apfel, Banane).
So siehst Du eindeutig, welche Klassen Gemeinsamkeiten haben und welche nicht.

Die Klassen brauchen ja nichts wirklich zu machen. Wenn alles kompilierbar ist, reicht das ja schon aus.

Ich hatte das mal bei einer Interface-Demo so gemacht:
http://www.delphipraxis.net/183702-i...-factorys.html

Dejan Vu 12. Jun 2015 20:16

AW: Setter mehrfach überschreiben.
 
Zitat:

Zitat von Bjoerk (Beitrag 1304974)
Liest du die Posts eigentlich?

Ich versuche es. Einmal hast du keine Basisklasse,
Zitat:

Zitat von Bjoerk (Beitrag 1304934)
Die Basisklasse gibt es nicht mehr

Dann wieder doch.
Zitat:

Zitat von Bjoerk (Beitrag 1304974)
TObject0 ist die Basisklasse.

Da muss man doch durcheinanderkommen.
Verpasse TObject0 einen virtuellen Konstruktor und dann kann man auch Objekte anhand des 'ClassType' erzeugen.
Damit kannst Du klonen und alles ist gut. Die Operationen auf deine Figuren bildest du über einzelne Arbeiter ab, die Du dann über die Figurklasse per Faktory erzeugst. Wenn Du das auf die Spitze treiben willst, baue Dir eine Factory-Factory und dann ist das richtig geil (also OCP-technisch)

Tipparbeit: Ja.
Übersichtlich: Ja.
Oop: Ja.
SRP+OCP konform: Ja.

Aber natürlich führen auch andere Wege zum Ziel.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:30 Uhr.
Seite 6 von 6   « Erste     456   

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