Einzelnen Beitrag anzeigen

EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
415 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Übung Polymorphie

  Alt 19. Nov 2017, 16:14
Hallo, ich wage mich mal wieder ins Forum mit der Bitte, über meine kleine Übung zur Polymorphie zu sehen und mir ggf. einen Tip zu geben ob und wo ich was nicht richtig gemacht habe.
Auf einige Kleinigkeiten, wie der Prüfung ob die Werte größer 0 bzw. nur Zahlen sein dürfen habe ich hier verzichtet.
Meine Frage ist: habe ich das Prinzip der Polymorphie in Form der Klassen (TFigur, TRechteck, TDreieck) so richtig verstanden?
Vielen Dank im voraus.
Programm anbei

Delphi-Quellcode:
unit uBerechnung;

interface

uses Vcl.Dialogs;

type TFigur = class(TObject)
  private
    FSeiteA:Double;
    FSeiteB:Double;
    procedure SetSeiteA(A:Double);virtual;abstract;
    procedure SetSeiteB(B:Double);virtual;abstract;

    function getSeiteA:Double;virtual;abstract;
    function getSeiteB:Double;virtual;abstract;
    function getBerechneFl:Double;virtual;abstract;
end;

type TRechteck = class(TFigur)
  private
    procedure SetSeiteA(A:Double);override;
    procedure SetSeiteB(B:Double);override;
    function getSeiteA:Double;override;
    function getSeiteB:Double;override;
    function getBerechneFl:Double; override;
   public
    property SeiteA:Double read FSeiteA write FSeiteA;
    property SeiteB:Double read FSeiteB write FSeiteB;
    property BerechneFl:Double read getBerechneFl;
end;

type TDreieck = class(TRechteck)
  private
    procedure SetSeiteA(A:Double);override;
    procedure SetSeiteB(B:Double);override;
    function getSeiteA:Double;override;
    function getSeiteB:Double;override;
    function getBerechneFl:Double;override;
   public
    property SeiteA:Double read FSeiteA write FSeiteA;
    property SeiteB:Double read FSeiteB write FSeiteB;
    property BerechneFl:Double read getBerechneFl;
end;

implementation

{ TRechteck }


function TRechteck.getBerechneFl: Double;
begin
  result:=FSeiteA*FSeiteB;
end;

function TRechteck.getSeiteA: Double;
begin
  result:=FSeiteA;
end;

function TRechteck.getSeiteB: Double;
begin
  result:=FSeiteB;
end;

procedure TRechteck.SetSeiteA(A: Double);
begin
  FSeiteA:=A;
end;

procedure TRechteck.SetSeiteB(B: Double);
begin
  FSeiteB:=B;
end;


{ TDreieck }

function TDreieck.getBerechneFl: Double;
begin
  result:=FSeiteA*FSeiteB/2;
end;

function TDreieck.getSeiteA: Double;
begin
  result:=FSeiteA;
end;

function TDreieck.getSeiteB: Double;
begin
  result:=FSeiteB;
end;

procedure TDreieck.SetSeiteA(A: Double);
begin
  FSeiteA:=A;
end;

procedure TDreieck.SetSeiteB(B: Double);
begin
  FSeiteB:=B;
end;

end.
und die Form:
Delphi-Quellcode:
unit uMain;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, uBerechnung, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    btnEnde: TButton;
    edtSeiteA: TEdit;
    edtSeiteB: TEdit;
    lblSeiteA: TLabel;
    lblSeiteB: TLabel;
    lblErg: TLabel;
    btnFl: TButton;
    btnDreieck: TButton;
    procedure btnEndeClick(Sender: TObject);
    procedure btnFlClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnDreieckClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnDreieckClick(Sender: TObject);
var MyFigure: TDreieck;
begin
  MyFigure := TDreieck.Create;
  try
    MyFigure.SeiteA:=strtofloat(edtSeiteA.text);
    MyFigure.SeiteB:=strtofloat(edtSeiteB.text);
    lblErg.caption:=floattostr(MyFigure.BerechneFl)
  finally
    MyFigure.Free;
  end;
end;

procedure TForm1.btnEndeClick(Sender: TObject);
begin
  close;
end;

procedure TForm1.btnFlClick(Sender: TObject);
var MyFigure : TRechteck;
begin
  MyFigure := TRechteck.Create;
  try
    MyFigure.SeiteA:=strtofloat(edtSeiteA.text);
    MyFigure.SeiteB:=strtofloat(edtSeiteB.text);
    lblErg.caption:=floattostr(MyFigure.BerechneFl);
  finally
    MyFigure.Free;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  edtSeiteA.text:='';
  edtSeiteB.text:='';
end;

end.
Angehängte Dateien
Dateityp: zip figur.zip (53,3 KB, 1x aufgerufen)
Norbert
  Mit Zitat antworten Zitat