Stärken und Schwächen von Object Pascal
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Das habe ich ausprobiert !
Defniere ich Oben im Interfcae Teil eine Forwad Defination geht das nicht bzw. es geht nur wenn die klasse in der gleiche unit ist. aber nicht wenn die klasse in unit2 drin ist.
ich kann ja gleich mal ein kleine Testanwendung schreiben.... dann siehst du was ich meine !
Defniere ich Oben im Interfcae Teil eine Forwad Defination geht das nicht bzw. es geht nur wenn die klasse in der gleiche unit ist. aber nicht wenn die klasse in unit2 drin ist.
ich kann ja gleich mal ein kleine Testanwendung schreiben.... dann siehst du was ich meine !
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
hier der beweis:
unit2
unit3
in der unit2 kommt folgende Fehler Meldung:
unit2.pas(11,14) Error: Forward type not resolved "tclasse2"
Wenn sich jetzt die klassen gegenseitig brauche und wenn ich jetzt unit3 einfach oben beim uses hinschreibe und in unit3 auf unit2 zugreifen möchte, kommt es zu Fehlern.
unit2
Code: Alles auswählen
unit Unit2;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
tclasse2 = class;
{ Class1 }
TClass1 = class
public
classs2:tclasse2;
procedure Msg(str:String);
end;
implementation
uses unit3;
{ Class1 }
procedure tClass1.Msg(str: String);
begin
Writeln(str);
end;
end.
Code: Alles auswählen
unit Unit3;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
{ classe2 }
tclasse2 = class
public
procedure msg(str:String);
end;
implementation
{ classe2 }
procedure classe2.msg(str: String);
begin
writeln(str;
end;
end.
unit2.pas(11,14) Error: Forward type not resolved "tclasse2"
Wenn sich jetzt die klassen gegenseitig brauche und wenn ich jetzt unit3 einfach oben beim uses hinschreibe und in unit3 auf unit2 zugreifen möchte, kommt es zu Fehlern.
MFG
Michael Springwald
Michael Springwald
- 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:
Schon bei Delphi wurde gepredigt, wennst du zirkulare Refernzen hast, so erzeuge eine unit, die die Referenzen auflöst bzw. in den implementationsteil verschiebt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Also pluto du hast nicht genug informationen geliefert hinterher nachreichen und meine beiträge kritisieren die ich zu deinem urproblem geschrieben habe was soll das nun wieder. Wenn du was willst dann liefere auch genug Information dazu und mecker nicht hinterher das ich dir was nicht beantwortet habe was gar nich gefragt war
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Wenn das mit "zirkuläre Unit" gemeint ist: m.E. macht es schon Sinn in einer Unit eine Klasse TX zu definieren und in einer anderen die Klasse TY, so dass TX eine Variable vom Typ TY und TY eine Variable vom Typ TX enthält. Innerhalb einer Unit geht das mit einer foreward Klassen-Definition, Unit-übergreifend anscheinen nicht.Christian hat geschrieben:Ach nochwas der Zirkuläre Unit aufruf ist keine Schwäche von Objekt Pascal das geht nirgends. Macht auch keinen Sinn.
-Michael
Viel Lärm um nichts Neues! 
Dass das nicht geht ist bekannt.
Ich muss zugeben, dass mir das auch schon die Suppe versalzen hat.
Insofern gebe ich Pluto recht, dass das Phänomen nicht gerade zu den angenehmen Seiten von Delphi zählt.
Andererseits lässt sich das mit einem "sauberen Design" immer lösen.
Auch so'n Ding ist das mit den "Friend" - Klassen.
Wenn man mehrere voneinander Abgeleitete Klassen in einer Unit hat, so können die ja immer auch auf private Felder der Parent Klasse zugreifen.
z.B. :
Wenn man dann den Code in mehrere Units aufteilen will ist Schluss damit.

Dass das nicht geht ist bekannt.
Ich muss zugeben, dass mir das auch schon die Suppe versalzen hat.
Insofern gebe ich Pluto recht, dass das Phänomen nicht gerade zu den angenehmen Seiten von Delphi zählt.
Andererseits lässt sich das mit einem "sauberen Design" immer lösen.
Auch so'n Ding ist das mit den "Friend" - Klassen.
Wenn man mehrere voneinander Abgeleitete Klassen in einer Unit hat, so können die ja immer auch auf private Felder der Parent Klasse zugreifen.
z.B. :
Code: Alles auswählen
TA=Class
private
fTest:Boolean;
end;
TB=Class(TA)
end;
...
var Tst:TB;
begin
Tst:=TB.create;
Tst.fTest:=false; //Geht nur im der gleichen Unit
Tst.free;
end;
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
Code: Alles auswählen
type
TClass2 = class;
TClass1 = class(TObject)
private
FClass2: TClass2;
end;
{$I class2.inc}
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.
(Ringelnatz)
(Ringelnatz)
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
ich wusste gar nicht das eine andre Klasse auf ein Privates Feld zugreifen kann, wenn die klasse abgeleitet ist wie in dein beispiel Theo.
Ich dachte dafür ist die Protectet Feld zuständig !
Ich denke hier könnte "die" noch etwas dran rum Pfeilen oder nicht ?
@Christian
Nur weil ich diese Funktion mir Wünsche kann ich sie nicht gleich einbauen, aber für den der ein Complier schreiben kann, ist das mit Sicherheit ein leichtes sowas einzubauen also für mich !
Sonst hätte ich es schon längst getan und eine neuen Ableger von Object Pascal geschaffen, wo es diesen und andere "Bug" nicht mehr gibt.
Darum fält es mir auch schwer in anderen Soruce Code mich zu recht zu finden insbesondere in sehr umganreichen dich sehr verwurschtelt sind.
Wie z.b. der von der VST... dort würde ich ja einige BUGS entfernen, aber das würde länger dauern als die Komplete VST neu zu schreiben.
Wobei ich kann ja schon Erfolreich für einige Zeit den Lazarus Code Editor verändern das mit den Sprungmarken habe ich geändert gehabt
Ich dachte dafür ist die Protectet Feld zuständig !
Ich denke hier könnte "die" noch etwas dran rum Pfeilen oder nicht ?
@Christian
Nur weil ich diese Funktion mir Wünsche kann ich sie nicht gleich einbauen, aber für den der ein Complier schreiben kann, ist das mit Sicherheit ein leichtes sowas einzubauen also für mich !
Sonst hätte ich es schon längst getan und eine neuen Ableger von Object Pascal geschaffen, wo es diesen und andere "Bug" nicht mehr gibt.
Darum fält es mir auch schwer in anderen Soruce Code mich zu recht zu finden insbesondere in sehr umganreichen dich sehr verwurschtelt sind.
Wie z.b. der von der VST... dort würde ich ja einige BUGS entfernen, aber das würde länger dauern als die Komplete VST neu zu schreiben.
Wobei ich kann ja schon Erfolreich für einige Zeit den Lazarus Code Editor verändern das mit den Sprungmarken habe ich geändert gehabt
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Ich weiß nicht wo das Problem liegt. Wenn jemand ein Kompiler schreiben kann, kann er sowas auch "einbauen".
Ich kann mir vorstellen wie viel Aufwand ist es einen Kompiler zu bauen !
Ich weiß ja das du mir nicht all zu viel zumutetes das ist mir inzwischen auch
voll kommen egal Denke was du möchtes. Aber komme bitte nicht mit sowas das kann ich nicht einschätzen und so !
Ich Programmiere jetzt lange genug um genau sowas einschätzen zu können. Ich mag zwar selten Projekte Fertig erstellt habe bzw. soweit das ich sie veröffentliche konnte, aber drum ist es mir auch nie wirklich gegangen.
Ich möchte gar nicht behaupten das ich alles kann, ich weiß genau was ich kann und was ich nicht kann !
Punkt ! Aus ! Fertig ! Denn Rest sollten wir entweder per PM oder in einem neuen Thread besprechen wenn du der Meinung bis !
Ich bin auch nicht hier Angemledet um zu zeigen das ich der Beste bin. Ich bin hier weil ich einfach meine Fragen stellen möchte und zu Beiträge Antworten möchte - mögliches Sinnvolles und Hilfreiches - ich bin jetzt nicht
hier um irgendjemand zu irgendwas zu beweisen. Genau das denke ich über dich , wenn ich mir deine Beiträge anschaue und deine Antworten:
die mögliches Kurtzt sind und ohne mühe geschrieben worden sind, Da habe ich oft den eindruck das du keine lust hast richtig zu antworten nicht nur bei mir auch bei anderen. Wo du dann nur Wort geschrieben hast Ja z.b. aber kein Grund oder genaue Informationen geschrieben hast warum nun Ja oder nein.
Also bitte komme nicht damit an. Langsam reicht es mir, immer wieder solche Beiträge wie diesen schreiben zu müssen.
Keine zwingt dich zu Antworten Also tue es auch nicht wenn du keine Lust hast und wenn du wirklich Lust hast, dann überlege dir bitte deine Antwort genau besonders ob sie Hilfreich ist oder nicht.
bei diesem Beitrag weiß ich von vorne rein das er sinnlos ist aber ich schreibe ihn trotzdem in der Hoffung das du daraus "etwas" Lerntest"
Ich hoffe wir verstehen uns jetzt !
Wenn du das nicht einsehen kannst bitte ! ist mir egal.
zum Problem: Warum ist dass dann in C++ bzw c möglich ?
(das habe ich eine ganze Zeitlang unter dos gemacht)
Ich wollte hier eigentlich nur eine Allgemeine Unterhaltung über die Schwächen und Stärken machen, aber nicht über sowas.
Alle Anderen habe dies beriefen nur du nicht ! warum bloss nicht ?
So jetzt warte ich mal dein Reaktion ab und ob dieser Beitrag nun endlich was genützt hat oder nicht !
Ich kann mir vorstellen wie viel Aufwand ist es einen Kompiler zu bauen !
Ich weiß ja das du mir nicht all zu viel zumutetes das ist mir inzwischen auch
voll kommen egal Denke was du möchtes. Aber komme bitte nicht mit sowas das kann ich nicht einschätzen und so !
Ich Programmiere jetzt lange genug um genau sowas einschätzen zu können. Ich mag zwar selten Projekte Fertig erstellt habe bzw. soweit das ich sie veröffentliche konnte, aber drum ist es mir auch nie wirklich gegangen.
Ich möchte gar nicht behaupten das ich alles kann, ich weiß genau was ich kann und was ich nicht kann !
Punkt ! Aus ! Fertig ! Denn Rest sollten wir entweder per PM oder in einem neuen Thread besprechen wenn du der Meinung bis !
Ich bin auch nicht hier Angemledet um zu zeigen das ich der Beste bin. Ich bin hier weil ich einfach meine Fragen stellen möchte und zu Beiträge Antworten möchte - mögliches Sinnvolles und Hilfreiches - ich bin jetzt nicht
hier um irgendjemand zu irgendwas zu beweisen. Genau das denke ich über dich , wenn ich mir deine Beiträge anschaue und deine Antworten:
die mögliches Kurtzt sind und ohne mühe geschrieben worden sind, Da habe ich oft den eindruck das du keine lust hast richtig zu antworten nicht nur bei mir auch bei anderen. Wo du dann nur Wort geschrieben hast Ja z.b. aber kein Grund oder genaue Informationen geschrieben hast warum nun Ja oder nein.
Also bitte komme nicht damit an. Langsam reicht es mir, immer wieder solche Beiträge wie diesen schreiben zu müssen.
Keine zwingt dich zu Antworten Also tue es auch nicht wenn du keine Lust hast und wenn du wirklich Lust hast, dann überlege dir bitte deine Antwort genau besonders ob sie Hilfreich ist oder nicht.
bei diesem Beitrag weiß ich von vorne rein das er sinnlos ist aber ich schreibe ihn trotzdem in der Hoffung das du daraus "etwas" Lerntest"
Ich hoffe wir verstehen uns jetzt !
Wenn du das nicht einsehen kannst bitte ! ist mir egal.
zum Problem: Warum ist dass dann in C++ bzw c möglich ?
(das habe ich eine ganze Zeitlang unter dos gemacht)
Ich wollte hier eigentlich nur eine Allgemeine Unterhaltung über die Schwächen und Stärken machen, aber nicht über sowas.
Alle Anderen habe dies beriefen nur du nicht ! warum bloss nicht ?
So jetzt warte ich mal dein Reaktion ab und ob dieser Beitrag nun endlich was genützt hat oder nicht !
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
richtig.Punkt ! Aus ! Fertig ! Denn Rest sollten wir entweder per PM oder in einem neuen Thread besprechen wenn du der Meinung bis !
@Pluto, keiner zwingt dich, die Antworten zu lesen, wenn sie dir nicht passen, kannst sie ja auch zur Abwechslung mal ignorieren, Christian schreibt ja letztlich auch nur seine Meinung.
Und du musst Christian nicht missionieren.
Johannes