Einzelnen Beitrag anzeigen

choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#3

Re: Beispiel für Polymorphie gesucht

  Alt 28. Jan 2004, 09:33
Hallo Luckie,

schön, dass Du Dir die Mühe machen willst. Vielleicht kannst Du bei der Gelegenheit auch gleich den Begriff der abstrakten Klasse einführen? Oft wird die Eleganz von Lösungen dieser Art verkannt, obgleich mit ihnen etwas verwirrende Zuweisungen der Art
Delphi-Quellcode:
var
  myParent: TParent;
begin
  myParent:= TChild.Create;
vermieden werden können...

Ich dachte an eine Klassifizierungslösung (ala Aristoteles), also eine Form der Spezialisierung, wobei ich aus Vereinfachungsgründen die Spezialisierung selbst (zB in Form neuer Operationen) nur geringfügig (Im Fall der Zitrusfrucht) beachte:
Delphi-Quellcode:
type
  TFruit = class //pure abstract class
  public
    function GetTaste: string; virtual; abstract;
  end;

  TCitrusFruit = class(TFruit) //pure abstract class introduces new ops
  public
    procedure Squeeze; virtual; abstract;
  end;

  TLemon = class(TCitrusFruit) // same taste as citrus fruit
  public
    function GetTaste: string; override; // acerbic
    procedure Squeeze; override;
  end;
    
  TGrapefruit(TCitrusFruit) = class
  public
    function GetTaste: string; override; // disgustful ;)
    procedure Squeeze; override;
  end;
  
  TBanana(TFruit) = class
  public
    function GetTaste: string; override; // sugary
  end;
Mit einer Hierarchie dieser Art ist die Verwendung etwas "natürlicher"
Delphi-Quellcode:
type
  myFruit: TFruit;
begin
  myFruit:= TBanana.Create;
  myFruit.GetTaste;
und lässt ebenfalls "natürliche" Casts etc zu
Delphi-Quellcode:
if myFruit is TCitrusFruit then
  with myFruit as TCitrusFruit do
    Squeeze;
Edit: Vorfahren der Klassen angegeben
gruß, choose
  Mit Zitat antworten Zitat