Autor Beitrag
martin300
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 186
Erhaltene Danke: 2



BeitragVerfasst: Mo 14.04.08 20:05 
Hallo,

folgender Code ist Teil eines Beispiels. Leider bin ich
nicht in der Lage den Code in Delphi darzustellen.

Java:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
public class Bellen {
  private String geräusch;

  public Bellen (String bellen){
     this.geräusch = bellen;
  }

  public String getGeräusch(){
     return geräusch;
  }

  public boolean equals (Object bellen){
    if (bellen instanceof Bellen){
       Bellen anderesBellen = (Bellen)bellen;
       if (this.geräusch.equalsIgnoreCase(anderesBellen.getGeräusch())){
         return true;
         }
       }
       return false;
    }
}



Besonders interessiert mich die equals Methode. Danke.

Moderiert von user profile iconChristian S.: Code-Tags hinzugefügt
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mo 14.04.08 22:05 
Bellen() ist der Konstruktor
Equals ein class operator der die Eigenschaft Geraeusch zweier Instanzen vergleicht

_________________
Markus Kinzler.
martin300 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 186
Erhaltene Danke: 2



BeitragVerfasst: Di 15.04.08 08:48 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
Bellen = class(TObject)
var
geraeusch : String;
  constructor Create (geraeusch: String);
  function getGeraeusch :String;
  class function equals( bellen: ????) : boolean;
end;


bzw.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
constructor Bellen.Create( geraeusch: String);
begin
  self.geraeusch := geraeusch;
end;

function Bellen.getGeraeusch;
begin
  return geraeusch;
end;

class function Bellen.equals(bellen: ???);
begin
  ???

end;
end.


Besonders interessiert mit der fehlende Code in der equals Methode.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Di 15.04.08 09:39 
Delphi unterstütz Klassen-Operatoren unter Win32 nur für Records, deshalb hier als normale Methode.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
TBellen = class
var
  private
    Fgeraeusch : String;
  public
    constructor Create (Value: String);
    function getGeraeusch :String;
    function equals( bellen: Tbellen) : boolean;
end;

constructor Bellen.Create( Value: String);
begin
  inherited Create;
  Fgeraeusch := Value;
end;

function TBellen.getGeraeusch;
begin
  result := Fgeraeusch;
end;

function TBellen.equals(bellen: TBellen);
begin
       if Bellen.getGeraeusch = FGeraeusch 
           result := True
       else
           result := False;  
end;

end.

_________________
Markus Kinzler.
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Di 15.04.08 11:11 
Nicht ganz richtig.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
TBellen = class
  private
    FGeraeusch : String;
  public
    constructor Create (Value: String);
    function getGeraeusch :String;
    function equals( bellen: TBellen) : boolean;
end;

constructor TBellen.Create( Value: String);
begin
  inherited Create;
  Fgeraeusch := Value;
end;

function TBellen.getGeraeusch;
begin
  result := FGeraeusch;
end;

function TBellen.equals(Bellen: TBellen);
begin
  // if (bellen instanceof Bellen) kann man sich sparen, wa wir schon gesagt haben dass wir nur TBellen nehmen
  Result:= AnsiCompareText(Bellen.getGeraeusch, FGeraeusch) = 0;
  // CompareText ignoriert Case, gibt 0 zurück wenn gleich
end;

end.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
martin300 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 186
Erhaltene Danke: 2



BeitragVerfasst: Mi 16.04.08 10:21 
Danke für die sehr guten Antworten.
Eine Frage hätte ich zu diesem Thema noch.

Gibt es in Delphi die Möglichkeit eine Klasse vom Typ "Object" zu definieren,
so wie es in Java möglich ist?
ausblenden Quelltext
1:
2:
3:
 
public boolean equals (Object bellen){
    if (bellen instanceof Bellen){
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 16.04.08 10:27 
Ja, die Basisklasse in Delphi ist TObject. Das Äquivalent zu instanceof dürfte is sein.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mi 16.04.08 10:46 
So könnte es mit dem Class Operator aussehen:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  TBellen = record
  strict private
    FGeraeusch : String;
    FName: string;
  public
    class operator equal( bellen1, bellen2: TBellen) : boolean;
    property Geraeusch: string read FGeraeusch write FGeraeusch;
    property Name: string read FName write FName;
end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

class operator TBellen.equal(Bellen1, Bellen2: TBellen): Boolean;
begin
  Result:= AnsiCompareText(Bellen1.Geraeusch, Bellen2.Geraeusch) = 0;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
    Hund1, Hund2, Hund3: TBellen;
begin
    Hund1.Name := 'Bello';
    Hund1.Geraeusch := 'Wuff Wuff';
    Hund2.Name := 'Rufus';
    Hund2.Geraeusch := 'Wau Wau';
    Hund3.Name := 'Strolchi';
    Hund3.Geraeusch := 'Wuff Wuff';

    Label1.Caption := Hund1.Name + ' bellt ';
    if not (Hund1 = Hund2) then Label1.Caption := Label1.Caption + 'nicht ';
    Label1.Caption := Label1.Caption + 'wie '+Hund2.Name;

    Label2.Caption := Hund1.Name + ' bellt ';
    if not (Hund1 = Hund3) then Label2.Caption := Label2.Caption + 'nicht ';
    Label2.Caption := Label2.Caption + 'wie '+Hund3.Name;

end;

end.

_________________
Markus Kinzler.
martin300 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 186
Erhaltene Danke: 2



BeitragVerfasst: Do 17.04.08 10:22 
Hier das vollständige Beispiel.
Es gibt die Klassen TFernsteuerung, TBellErkennung, THundeTuer und TBellen.

Die THundeTuer lässt sich öffnen, schließen, hat einen Status, ein zulässiges Bellen läßt sich hinzufügen und gibt die zulässigen Bellen wieder zurück.

Die TBellen Objekte speichern ein Bellen und führen einen Vergleich durch.

In der TBellERkennung wird ein zulässiges Bellen erkannt. Die Tür öffnet sich....

Zusätzlich lässt sich die Tür noch mit der TFernsteuerung öffnen.



Start erfolgt über: THundeTuerSimulator.InitialisiereWerte;

Zur Namensgebung habe ich noch ein Frage:

zb. bei TTuer := THundeTuer.create;

Wir hier das Objekt nur mit Tuer bezeichnet od. mit TTuer?

Freue mich auch über andere Anmerkungen.


Zuletzt bearbeitet von martin300 am Mo 21.04.08 08:30, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 17.04.08 11:00 
Das T gehört vor Typnamen davor, in deinem Fall THundeTuer. Vor eine Variable gehört das T nicht, also sollte diese nur Tuer heißen, denn es ist ja eine Variable und kein Typ.

In dem Zusammenhang dürfte für dich der Styleguide interessant sein, der genau diese Regeln beinhaltet:
www.delphi-treff.de/delphi-styleguide/
oder das Orignal auf englisch:
dn.codegear.com/article/10280