2. Fenster öffnen[gelöst]

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
pluto
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)

Re: 2. Fenster öffnen

Beitrag von pluto »

Es ist quasi alles ein Objekt.
Die Mutter von allen Klassen ist TObject, ein Objekt.
Und eine Klasse ist eine Tochter von TObject.
Damit ist eine Klasse ein Objekt.
Ein Feld ist keine Liste, ein Feld vom Typ Liste gibts nicht, weil Feld (=Typ) schon einen Typ hat, und somit nicht noch den Typ Liste haben kann.
du meinst wohl eher ein Feld dessen Komponenten listen sind.
Nein das meine ich nicht. Ich meine das ein Feld praktisch ebenfalls eine Variable ist. Das ist das gleiche. Nur etwas genauer. z.b. eine Eigenschaft ist keine Variable im Eigentlichen Sinn.
Aber eine Eigenschaft(Property) ist ein Feld.
Damit umfasst der Begriff Feld schon ein größeren Raum. Ein Feld kann eine Liste(z.b. Array) sein, muss es aber nicht.
Ein Feld ist eine Menge von Variablen des gleichen Typs, wobei das Feld eine einzige Variable ist.
Nicht immer. In der OOP Spricht man gerne von Feld, wenn man damit eine Variable oder eine Eigenschaft meint. Darauf wollte ich hinaus.
Aber lassen wir das. Es führt zu nichts. Es sei denn, jemand anders schreibt noch was Sinnvolles dazu. Sonst ist das Thema für mich Erledigt.

edit01: http://forum.delphi-treff.de/showthread ... der-in-OOP" onclick="window.open(this.href);return false;
MFG
Michael Springwald

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2805
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: 2. Fenster öffnen

Beitrag von m.fuchs »

camper3000 hat geschrieben:Es ist quasi alles ein Objekt.
Die Mutter von allen Klassen ist TObject, ein Objekt.
Und eine Klasse ist eine Tochter von TObject.
Damit ist eine Klasse ein Objekt.
Das möchte ich aber so nicht stehen lassen. Klasse <> Objekt/Instanz. Es gibt durchaus Objekte vom Typ TObject, TObject selbst ist aber eine Klasse.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

pluto
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)

Re: 2. Fenster öffnen

Beitrag von pluto »

Das möchte ich aber so nicht stehen lassen. Klasse <> Objekt/Instanz. Es gibt durchaus Objekte vom Typ TObject, TObject selbst ist aber eine Klasse.
Hinzu kommt: Object gab es in der Turbo Pascal 7 Version. Als Vorläufer zum OOP. Wie wir es heute kennen.
MFG
Michael Springwald

camper3000
Beiträge: 31
Registriert: Fr 8. Jan 2010, 16:29

Re: 2. Fenster öffnen

Beitrag von camper3000 »

pluto hat geschrieben:Ein Feld kann eine Liste(z.b. Array) sein
Stimmt nicht.
Eine Liste ist eine Liste und ein Feld ist ein Feld.
und ein Feld ist keine Liste
m.fuchs hat geschrieben:Klasse <> Objekt
In lazarus ist fast alles ein Objekt. Folgendes sind Objekte:
Variablen
Klassen
Komponenten

hast recht, das führt zu nix

mfg camper3000
Auch wenn man einen Hammer hat, ist nicht jedes Problem ein Nagel.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2805
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: 2. Fenster öffnen

Beitrag von m.fuchs »

camper3000 hat geschrieben:
m.fuchs hat geschrieben:Klasse <> Objekt
In lazarus ist fast alles ein Objekt. Folgendes sind Objekte:
Variablen[...]
Unsinn. Eine Variable kann ein Objekt enthalten, muss sie aber nicht.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

camper3000
Beiträge: 31
Registriert: Fr 8. Jan 2010, 16:29

Re: 2. Fenster öffnen

Beitrag von camper3000 »

es ist ein objekt
Auch wenn man einen Hammer hat, ist nicht jedes Problem ein Nagel.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2805
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: 2. Fenster öffnen

Beitrag von m.fuchs »

Könntest du das bitte noch belegen?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

pluto
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)

Re: 2. Fenster öffnen

Beitrag von pluto »

es ist ein objekt
Ich glaube er meint, dass eine Klasse die Speicher belegt, also Installisiert wurde ein Objekt da stellt. Aber eine Variable kann ja alles sein. In Java ist das doch so, dass dort alles ein Object ist. Sogar ein String oder Integer...
MFG
Michael Springwald

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2805
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: 2. Fenster öffnen

Beitrag von m.fuchs »

pluto hat geschrieben:Ich glaube er meint, dass eine Klasse die Speicher belegt, also Installisiert wurde ein Objekt da stellt.
Du meinst wenn eine Instanz einer Klasse erzeugt wurde. Sorry dass ich da so Krümelkackerisch bin, aber wenn solche elementaren Dinge nicht genau verstanden sind, redet man leicht an einander vorbei. Deswegen trete ich dieses Thema auch breit.
pluto hat geschrieben:Aber eine Variable kann ja alles sein. In Java ist das doch so, dass dort alles ein Object ist. Sogar ein String oder Integer...
Jepp, ebenso in .NET und weitere rein objektorientierten Sprachen. Wobei dort mit Hilfe von Magie durchaus auch die Objektorientierung versteckt wird.

Code: Alles auswählen

dim myString as String = "Hallo"
Hier muss nicht explizit ein Constructor aufgerufen werden. Aber soviel nur am Rande.

Pascal hingegen (also in der für uns relevanten Form) KANN Objektorientierung, man MUSS sie aber NICHT nutzen. Und deswegen ist nicht jede Variable ein Objekt.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

pluto
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)

Re: 2. Fenster öffnen

Beitrag von pluto »

Du meinst wenn eine Instanz einer Klasse erzeugt wurde. Sorry dass ich da so Krümelkackerisch bin, aber wenn solche elementaren Dinge nicht genau verstanden sind, redet man leicht an einander vorbei. Deswegen trete ich dieses Thema auch breit.
Genau so habe ich es gemeint. Ja, keine schlechte Idee. Krümelkackerisch kann ab und an Angebracht sein.

Wenn ich von Objekten rede, meine ich eigentlich Objekte, die man auch sehen kann. Z.b. Komponenten stellen für mich Objekte da. Weil man sie in der Regen sehen kann.
Jepp, ebenso in .NET und weitere rein objektorientierten Sprachen. Wobei dort mit Hilfe von Magie durchaus auch die Objektorientierung versteckt wird.
Vielleicht meint camper3000 sowas... nur das Pascal keine reine objektorientierten Sprachen ist, sondern eine Mischung.
Hier muss nicht explizit ein Constructor aufgerufen werden. Aber soviel nur am Rande.
In Pascal ja auch nicht. Wobei String eine Sonderbehandlung einnehmen. Strings wiederum sind ja auch Objekte bzw. Klassen, so gesehen. Nur nehmen wir es kaum war.


Pascal hingegen (also in der für uns relevanten Form) KANN Objektorientierung, man MUSS sie aber NICHT nutzen. Und deswegen ist nicht jede Variable ein Objekt.
Das ist der Punkt. Wobei es mir um Felder ging. Nun sind wir bei Objekten.

Ist schon eine Interessante frage so gesehen. Ich verwende die Begriffe, so wie ich sie für richtig halte. Aber sind sie denn auch?...
MFG
Michael Springwald

camper3000
Beiträge: 31
Registriert: Fr 8. Jan 2010, 16:29

Re: 2. Fenster öffnen

Beitrag von camper3000 »

So siehts aus was ich meinte.

Ich hab ewig die Lazarus-Source durchforstet und gefunden:

Code: Alles auswählen

type
  { TComponentTreeView }
 
  TComponentTreeView = class(TCustomTreeView)
  private
    FComponentList: TBackupComponentList;
    FOnModified: TNotifyEvent;
    FPropertyEditorHook: TPropertyEditorHook;
    FImageList: TImageList;
    function GetSelection: TPersistentSelectionList;
    procedure SetPropertyEditorHook(const AValue: TPropertyEditorHook);
    procedure SetSelection(const NewSelection: TPersistentSelectionList);
  protected
    procedure DoSelectionChanged; override;
    function GetImageFor(APersistent: TPersistent):integer;
    procedure DragOver(Source: TObject; X, Y: Integer; State: TDragState;
                       var Accept: Boolean); override;
    procedure DragCanceled; override;
    procedure MouseLeave; override;
    procedure GetComponentInsertMarkAt(X, Y: Integer;
                              out AnInsertMarkNode: TTreeNode;
                              out AnInsertMarkType: TTreeViewInsertMarkType);
    procedure DoModified;
  public
    constructor Create(TheOwner: TComponent); override;
    destructor Destroy; override;
    procedure DragDrop(Source: TObject; X, Y: Integer); override;
    procedure RebuildComponentNodes; virtual;
    procedure UpdateComponentNodesValues; virtual;
    function CreateNodeCaption(APersistent: TPersistent): string; virtual;
  public
    property Selection: TPersistentSelectionList read GetSelection
                                                 write SetSelection;
    property PropertyEditorHook: TPropertyEditorHook
                           read FPropertyEditorHook write SetPropertyEditorHook;
    property OnSelectionChanged;
    property OnModified: TNotifyEvent read FOnModified write FOnModified;
  end;
Dort ist von einem Typ "TBackupComponentList" die rede.
(Auch von TComponent, allerdings scheint dies eine einzelne Komponente zu sein)

Noch was interressantes das ich gefunde hab:

Code: Alles auswählen

Type
  TRComponent = class(TObject)
  public
    Name: String;
    Page: String;
    unit_name: String;
  end;

Code: Alles auswählen

procedure GetChildren(); dynamic; //Kinder kriegen ^^
also, ich hab nix gefunden ob Components (insofern das überhaupt so heisst) eine Liste oder ein Feld ist (es gibt über 100 units)

mfg camper3000
Auch wenn man einen Hammer hat, ist nicht jedes Problem ein Nagel.

pluto
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)

Re: 2. Fenster öffnen

Beitrag von pluto »

also, ich hab nix gefunden ob Components (insofern das überhaupt so heisst) eine Liste oder ein Feld ist (es gibt über 100 units)
Dann mach mal bitte Folgendes:
schreib im Code-Editor einfach rein: Components und drücke Rechte Maustaste und wähle den ersten Menü-Punkt.
Dann solltest du das hier finden:
property Components[Index: Integer]: TComponent read GetComponent;

Na, was könnte das wohl sein?
Wenn man weiter schaut findet man recht schnell das hier:

Code: Alles auswählen

Function  TComponent.GetComponent(AIndex: Integer): TComponent;
 
begin
  If not assigned(FComponents) then
    Result:=Nil
  else
    Result:=TComponent(FComponents.Items[Aindex]);
end;
Und Rate mal wozu Items gehört? Richtig zu TList.
Dafür habe ich keine Minuten gebraucht *G*.
MFG
Michael Springwald

camper3000
Beiträge: 31
Registriert: Fr 8. Jan 2010, 16:29

Re: 2. Fenster öffnen

Beitrag von camper3000 »

Auf die Idee bin ich auch gekommen - aber erst nach dem post: pech.
Damit hätten wir das ja geklärt, wo ichs mir aber hinterher überlege werden die Komponenten einer Klasse (TForm1 oder Sonstewie)
hinzugefügt.Das is nix mit Feld und Liste und Components.

Das heißt, wir haben uns hier völlig umsonst gestritten.
Tja, wie heisst es? Erst Kopf einschalten, dann nachdenken ;)

mfg camper3000
Auch wenn man einen Hammer hat, ist nicht jedes Problem ein Nagel.

pluto
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)

Re: 2. Fenster öffnen

Beitrag von pluto »

Damit hätten wir das ja geklärt, wo ichs mir aber hinterher überlege werden die Komponenten einer Klasse (TForm1 oder Sonstewie)
hinzugefügt.Das is nix mit Feld und Liste und Components.
Was genau meinst du hiermit? Die Felder(Variablen, Propertys) werden zu einer Klasse hinzugefügt, in den man von ihr Ableitet. Komponenten hingegen werden Automatisch zum "Container" Hinzugefügt. Wobei ein Container ein TForm sein kann oder ein TPanel. Das sagt du der Komponenten, in den Parameter bei Craete.
Das heißt, wir haben uns hier völlig umsonst gestritten.
Naja, geritten haben wir uns ja nicht. Wir haben Diskutiert. Nur weil der Ton mal etwas "Häter" wird heißt das noch lange nicht das man sich streitet.
MFG
Michael Springwald

camper3000
Beiträge: 31
Registriert: Fr 8. Jan 2010, 16:29

Re: 2. Fenster öffnen

Beitrag von camper3000 »

Nach langer Zeit komme ich endlich mal wieder an den Rechner:

mit dem gestritten und diskutiert haste recht, das war nur diskutiert.
an diesem thread fehlt nur nich das " [gelöst]"

mfg camper3000
Auch wenn man einen Hammer hat, ist nicht jedes Problem ein Nagel.

Antworten