![]() |
AW: liege ich richtig mit dem OOP-Versuch
Zitat:
|
AW: liege ich richtig mit dem OOP-Versuch
Zitat:
Und müsste die Property Flaeche nicht als read-procedure das BerechneFlaeche bekommen? Zitat:
Ist es eine gute Idee, den Parameter der Set-Procdure genau so zu nennen, wie die Property - irgendwann fängt man dann doch an zu überlegen, was von beiden eigentlich grad angesprochen wird. |
AW: liege ich richtig mit dem OOP-Versuch
Zitat:
ja war quatsch von mir :) gruss |
AW: liege ich richtig mit dem OOP-Versuch
Ja natürlich andersherum. Sie heißen doch unterschiedlich.
Zitat:
Zitat:
|
AW: liege ich richtig mit dem OOP-Versuch
Zitat:
Zitat:
Zitat:
|
AW: liege ich richtig mit dem OOP-Versuch
Unterschiedliche Namen:
Delphi-Quellcode:
Der Parameter heißt laenge das Attribut FLaenge.
procedure TRechteck.SetLaenge(laenge: double);
begin // ToDo: // wenn kleiner 0 -> Exception auslösen "Länge darf nicht kleiner 0 sein" // oder besser allgemeine Exception InvalideArgument FLaenge := laenge; end;
Delphi-Quellcode:
Flaeche ist die private variable und Rechteck.Flaeche ist das Attribut Flaeche des Objektes Rechteck. Nix gleich.
procedure TRechteck.BerechneFlaeche;
begin FFlaeche := FLaenge * FBreite; end; // Aufruf im Formular Flaeche := Rechteck.Flaeche; Wie gesagt, man kann drüber streiten. Aber wenn du eine gescheite Datenhaltung machst, sollte es kein Problem sein an die Werte zu kommen. Wie gesagt, du musst sie ja selber wissen, wenn du die Klasse nutzen willst. PS: War alles nur ins Notepad++ gehackt. Ich übernehme keine Gewähr für nichts. ;) |
AW: liege ich richtig mit dem OOP-Versuch
Zitat:
Zitat:
Delphi-Quellcode:
aufgerufen? In den Settern nicht, als Read-Methode der Property nicht und von außerhalb kommt man da nicht dran (okay, das ist gelogen - in der selben Unit schon - aber das wäre ja echt doof, wenn ich die Klasse nur innerhalb dieser Unit sinnvoll verwenden kann)
procedure BerechneFlaeche: Double;
Zitat:
Ich hätte das ganze dann doch eher folgend aufgebaut:
Delphi-Quellcode:
TRechteck = class
strict private FLaenge: Double; FBreite: Double; function GetFlaeche: Double; function GetUmfang: Double; procedure SetLaenge(const Value: Double); procedure SetBreite(const Value: Double); public property Laenge: Double read FLaenge write SetLaenge; property Breite: Double read FBreite write SetBreite; property Flaeche: Double read GetFlaeche; property Umfang: Double read GetUmfang; end |
AW: liege ich richtig mit dem OOP-Versuch
Zitat:
|
AW: liege ich richtig mit dem OOP-Versuch
Hallo, ich habe versucht, die Lösung von Sebastian (SProske) umzusetzen. Eine Unit Formuar und eine unit TFlaecheninhalt.
Ich komme einfach nicht mit den Werteeingaben weiter. Die Variablen L und B erhalten zwar die eingegebenen Werte, jedoch Flaecheninh.Laenge und Flaecheninh.Breite bleiben auf 0 entspr. der Initialierung. Was mache ich da falsch und ist die Umsetzung (natürlich ohne die variablen l und b im Formular) sonst richtig? --------------------------------------------unit TForm1----------------------------------------------------------- .....implementation {$R *.dfm} procedure TForm1.BerechneFlClick(Sender: TObject); var L, B : double; begin try l:= strtofloat(laenge.Text); B:= strtofloat(Breite.Text); Flaecheninh.Laenge:=L; Flaecheninh.Breite:=B; //Flaecheninh.Laenge:=strtofloat(Laenge.Text); //Flaecheninh.Breite:=(strtofloat(Breite.text)); LbFlaecheninhalt.Caption:=floattostr(Flaecheninh.F laeche); except l:=(5); b:=(4); end; end; {------------------------------------------------------------------------------} procedure TForm1.BitBtn1Click(Sender: TObject); begin close; end; procedure TForm1.Button1Click(Sender: TObject); begin lbUmfang.Caption:=floattostr(Flaecheninh.Umfang); end; {------------------------------------------------------------------------------} procedure TForm1.FormCreate(Sender: TObject); begin Flaecheninh := TFlaecheninh.create; Flaecheninh.init; end; {------------------------------------------------------------------------------} procedure TForm1.init; begin Laenge.Text:='0'; Breite.Text:='0'; lbFlaecheninhalt.Caption:='0'; end; end. ------------------------------------------------------------------------------------------------------------------ --------------------------------------------unit TFlaecheninh----------------------------------------------------- interface type TFlaecheninh = class strict private FLaenge: Double; FBreite: Double; function GetFlaeche: Double; function GetUmfang: Double; procedure SetLaenge(const Value: Double); procedure SetBreite(const Value: Double); public constructor create; destructor Destroy; override; procedure init; property Laenge: Double read FLaenge write SetLaenge; property Breite: Double read FBreite write SetBreite; property Flaeche: Double read GetFlaeche; property Umfang: Double read GetUmfang; end; implementation constructor TFlaecheninh.create; begin inherited create; init; end; {------------------------------------------------------------------------------} destructor TFlaecheninh.Destroy; begin inherited Destroy; end; {------------------------------------------------------------------------------} procedure TFlaecheninh.init; begin FLaenge:=0.0; Breite:=0.0; end; {------------------------------------------------------------------------------} function TFlaecheninh.getFlaeche: double; begin result:=FLaenge * FBreite; end; {------------------------------------------------------------------------------} procedure TFlaecheninh.setLaenge(const value:double); begin FLaenge:= Laenge; end; {------------------------------------------------------------------------------} procedure TFlaecheninh.setBreite(const value:double); begin FBreite:= Breite; end; {------------------------------------------------------------------------------} function TFlaecheninh.GetUmfang:double; begin result:=2*FLaenge+2*FBreite; end; end. |
AW: liege ich richtig mit dem OOP-Versuch
Liste der Anhänge anzeigen (Anzahl: 1)
Tipp: Schau dir deine beiden Methoden
Delphi-Quellcode:
und
setLaenge
Delphi-Quellcode:
noch einmal ganz genau an.
setBreite
PS: Kannst du, wenn du Quelltext hier hochlädst, die bitte in einen "Delphi"-Block packen? Dann sind die viel einfacher zu lesen. Du hast, wenn du einen Beitrag schreibst, so ein Helm-Symbol über dem Text (siehe Bild). Dann ist das für uns deutlich einfacher zu lesen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:27 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