[gelöst]Object? Class? Class(TObject)? Was jetzt?

Für Fragen von Einsteigern und Programmieranfängern...
wp_xyz
Beiträge: 5142
Registriert: Fr 8. Apr 2011, 09:01

Re: [gelöst]Object? Class? Class(TObject)? Was jetzt?

Beitrag von wp_xyz »

Generell ist das alles aber ganz schön verwirrend geworden. Nachdem Records auch Methoden bekommen haben, verschwimmt der Unterschied zu Objects und Classes. Und sogar ein profaner Integer hat über die Type-Helpers Pseudo-Methoden untergejubelt bekommen, so dass man "2.ToString" schreiben kann, statt "IntToStr(2)". Am besten man macht sich darüber nicht zuviele Gedanken...

Benutzeravatar
six1
Beiträge: 837
Registriert: Do 1. Jul 2010, 19:01

Re: [gelöst]Object? Class? Class(TObject)? Was jetzt?

Beitrag von six1 »

wp_xyz hat geschrieben: Mi 19. Jan 2022, 11:22Am besten man macht sich darüber nicht zuviele Gedanken...
...ich bin schon ne geraume Zeit raus... :lol: bin eher der "natural Programmer"

Allein, wenn ich die detailierte Ausführung von PascalDragon lese, frage ich mich: Hat er das alles so "freihand" aus dem Kopf geschrieben?

Nur gut, dass man in "Lazarus" auch Programme hin bekommt, ohne dieses geballte Wissen!
Gruß, Michael

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6770
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: [gelöst]Object? Class? Class(TObject)? Was jetzt?

Beitrag von af0815 »

six1 hat geschrieben: Mi 19. Jan 2022, 11:52 Allein, wenn ich die detailierte Ausführung von PascalDragon lese, frage ich mich: Hat er das alles so "freihand" aus dem Kopf geschrieben?
Bei 'PascalDragon' und 'FPK' glaube ich das sofort und ungeprüft.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

PascalDragon
Beiträge: 954
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: [gelöst]Object? Class? Class(TObject)? Was jetzt?

Beitrag von PascalDragon »

Warf hat geschrieben: Mi 19. Jan 2022, 11:01 Das erlaubt sachen die mit Classes nicht möglich sind, z.B. die verwendung von Operatoren:

Code: Alles auswählen

type
  TTestObject = object
    ...
  end;
  
operator +(const A, B: TTestObject): TTestObject;

...
var
  A, B, C: TTestObject;
begin
  A := ...
  B := ...
  C := A + B;
end.
Das gleiche Beispiel funktioniert auch mit Klassen... ;) Das Problem bei Klassen sind letztlich temporäre Variablen, die letztlich zu Speicherlecks führen:

Code: Alles auswählen

program tclsop;

{$mode objfpc}

type
  TTestObject = class
    f: LongInt;
    constructor Create(aArg: LongInt);
    destructor Destroy; override;
  end;

constructor TTestObject.Create(aArg: LongInt);
begin
  Writeln('Creating object');
  f := aArg;
end;

destructor TTestObject.Destroy;
begin
  Writeln('Freeing object');
  inherited;
end;

operator+(aLeft, aRight: TTestObject): TTestObject;
begin
  Result := TTestObject.Create(aLeft.f + aRight.f);
end;

var
  a, b, c, d: TTestObject;
begin
  a := TTestObject.Create(1);
  b := TTestObject.Create(2);
  c := a + b;
  c.Free;
  c := TTestObject.Create(3);
  d := a + b + c;
  d.Free;
  c.Free;
  a.Free;
  b.Free;
end.
Ausgabe ist dann wie folgt:

Code: Alles auswählen

Creating object
Creating object
Creating object
Freeing object
Creating object
Creating object
Creating object
Freeing object
Freeing object
Freeing object
Freeing object
Wenn man mit -gh kompiliert sieht man dann auch, dass was nicht freigegeben wurde.
six1 hat geschrieben: Mi 19. Jan 2022, 11:52 Allein, wenn ich die detailierte Ausführung von PascalDragon lese, frage ich mich: Hat er das alles so "freihand" aus dem Kopf geschrieben?
'türlich. Denkst du etwa ich hab Zeit das nachzulesen? :lol:
Und als Compilerentwickler muss man letztlich ein paar Details der Sprache im Kopf behalten. Ich hab jetzt nicht alles aus dem FF parat (Wann ein konstanter String mit welchem Encoding angelegt wird muss ich meist nachschauen), aber im Großen und Ganzen... ;)
af0815 hat geschrieben: Mi 19. Jan 2022, 12:47
six1 hat geschrieben: Mi 19. Jan 2022, 11:52 Allein, wenn ich die detailierte Ausführung von PascalDragon lese, frage ich mich: Hat er das alles so "freihand" aus dem Kopf geschrieben?
Bei 'PascalDragon' und 'FPK' glaube ich das sofort und ungeprüft.
Schön, dass man eine gewisse Reputation hat :mrgreen:
FPC Compiler Entwickler

Benutzeravatar
six1
Beiträge: 837
Registriert: Do 1. Jul 2010, 19:01

Re: [gelöst]Object? Class? Class(TObject)? Was jetzt?

Beitrag von six1 »

PascalDragon hat geschrieben: Mi 19. Jan 2022, 13:39 Schön, dass man eine gewisse Reputation hat :mrgreen:
Dir ist schon klar, dass du so etwas wie ein Pascal Gott bist, oder? :)
Also an dieser Stelle ein dickes Lob, dass es dir nie zuviel ist, derart ausführliche, detailierte Anworten zu schreiben!
Gruß, Michael

Nimral
Beiträge: 390
Registriert: Mi 10. Jun 2015, 11:33

Re: [gelöst]Object? Class? Class(TObject)? Was jetzt?

Beitrag von Nimral »

Ditto! Ich schließe Dich in mein Nachtgebet ein :-)

Warf
Beiträge: 2118
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: [gelöst]Object? Class? Class(TObject)? Was jetzt?

Beitrag von Warf »

PascalDragon hat geschrieben: Mi 19. Jan 2022, 13:39 Das gleiche Beispiel funktioniert auch mit Klassen... ;) Das Problem bei Klassen sind letztlich temporäre Variablen, die letztlich zu Speicherlecks führen:
Ich bin mal davon ausgegangen man will nicht unbedingt kaputte Programme schreiben ;)

Aber tatsächlich interessant ist das ja mit COM Interfaces wie in der GMP Unit. Aber gelenerell arbeite ich selbst viel zu wenig mit Interfaces weil der aufwand für Klassen(hirachien) zuerst die Interfaces zu machen und dann dazu die Klassen zu implementieren ist mir irgendwie immer zu viel. Auch wenn es sich hinten rum wahrscheinlich lohnen würde für das was man später dafür einspart

Was ich nur schade finde ist das Objects keine Class Operatoren können. Aber dafür gibts ja Advanced Records.

PascalDragon
Beiträge: 954
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: [gelöst]Object? Class? Class(TObject)? Was jetzt?

Beitrag von PascalDragon »

six1 hat geschrieben: Mi 19. Jan 2022, 16:31
PascalDragon hat geschrieben: Mi 19. Jan 2022, 13:39 Schön, dass man eine gewisse Reputation hat :mrgreen:
Dir ist schon klar, dass du so etwas wie ein Pascal Gott bist, oder? :)
Also an dieser Stelle ein dickes Lob, dass es dir nie zuviel ist, derart ausführliche, detailierte Anworten zu schreiben!
Danke :oops:
FPC Compiler Entwickler

Antworten