Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Grundsätzliche Frage zu Klassen/ objektorientierter Progra. (https://www.delphipraxis.net/87842-grundsaetzliche-frage-zu-klassen-objektorientierter-progra.html)

fapsons 6. Mär 2007 09:39


Grundsätzliche Frage zu Klassen/ objektorientierter Progra.
 
Hallo Leute,
bin der totale Anfänger, was objektorientierte Programmierung angeht.

Delphi-Quellcode:
TSoftwarePaket = class
  private
      Software: TIntArray;
  public
      constructor Create;
      procedure Init;
      function Create_Key :String;
          procedure Mitarbeiter5(Bool :boolean);
          procedure ZE(Bool :boolean);
          procedure BDE(Bool :boolean);
          procedure PEP(Bool :boolean);
          procedure ZK(Bool :boolean);
          procedure AV(Bool :boolean);
          procedure WebZE(Bool :boolean);
          procedure AntragsV(Bool :boolean);
          ...
       end;
So weit bin ich bisher gekommen. Die einzelnen Proceduren schreiben alle auf das TIntArray Software.
Merke allerdings im Nachinein, dass so mein TSoftwarePaket sehr unübersichtlich wird.
Ich brauche nämlich ausserdem noch die Möglichkeit die Daten aus dem TIntArray wieder auszulesen.

Würde gerne sowas wie
TSoftwarePaket.Set.Mitarbeiter5
TSoftwarePaket.Set.ZE
TSoftwarePaket.Set.BDE...

und

TSoftwarePaket.Get.Mitarbeiter5
TSoftwarePaket.Get.ZE
TSoftwarePaket.Get.BDE


Ich hoffe, ihr könnt mir folgen...;) Wie löse ich das am besten?

Gruß
--fapsons--

mkinzler 6. Mär 2007 09:48

Re: Grundsätzliche Frage zu Klassen/ objektorientierter Prog
 
Löse das doch mit Gettern/Settern und Properties.
Delphi-Quellcode:
TSoftwarePaket = class
  private
  ...
      procedure setMitarbeiter5( Value: ...);
      function GetMitarbeiter5: ...;
  ...
  published
    property Mitarbeiter5: ... read getMitarbeiter write setMitarbeiter;
...

Der_Unwissende 6. Mär 2007 09:57

Re: Grundsätzliche Frage zu Klassen/ objektorientierter Prog
 
Hi,
erstmal vorweg, dein Problem hat so noch nicht viel mit der Objekt Orientierten Programmierung zu tun. Die OOP ist ein Konzept, das weit über das verwenden von Klassen hinaus geht. Eindeutig ein Thema für sich. Die Kernpunkte liegen deutlicher in der Möglichen Abstraktion und Kapselung. Das alles führt dazu, dass Du im Idealfall immer austauschbare Konstrukte bekommst, die zudem leicht wiederverwendet werden können. Das ist aber wie gesagt ein ganz eigenes Thema (einfach mal nach OOP suchen und/oder Bücher und Tutorials bemühen).

Was dein Problem angeht, so kannst Du es am einfachsten über die Eigenschaften (Properties) einer Klasse regeln. Ein Property ist eine Eigenschaft, auf die wie auf eine Variable zugegriffen werden kann. Die eigentlichen Lese- bzw. Schreibzugriffe finden jedoch nicht direkt statt, vielmehr kannst Du diese an eine Methode delegieren (der direkte Zugriff auf eine Variable ist natürlich auch möglich).

Delphi-Quellcode:
type
  TClass = class(TObject)
    private
      FVariable1: TTyp;
      FVariable2: TTyp;
    protected
      procedure setVar1(const Value: TTyp);
      function getVar1: TTyp;
    public
      // hier die eigentlichen Eigenschaften
      property Variable1: TTyp read getVar1 write setVar1;
      property Variable2: TTyp read FVariable2;
  end;
In diesem einfachen Beispiel siehst Du den Aufbau. Mit dem Schlüsselwort property zeigst Du an, dass es sich hier um eine Eigenschaft handelt. Es folgt der Name und Typ (wie bei einer Variable auch). Danach kannst Du nun Lese- und/oder Schreibzugriffe delegieren. Für die erste Eigenschaft werden dabei zwei Methoden bemüht. Wird der Wert von Variable1 gelesen, dann wird eigentlich die Methode getVar1 aufgerufen. Was in der gemacht wird ist egal, wichtig ist nur, dass die ein TTyp zurückgeben muss. Beim schreiben wird analog setVar1 aufgerufen, ohne dass man das von außen sieht.
Variable2 hingegen kann nur gelesen werden (write wurde weggelassen). Zudem greift sie direkt auf den Wert von FVariable2 zu. Du kannst das auch beliebig kombinieren (Lesen und Schreiben können direkt auf eine Variable zugreifen).

Von außen verhalten die sich wie normale Variablen:
Delphi-Quellcode:
var instanz: TClass;
begin
  instanz := TClass.Create;
  instanz.Variable1 := XYZ; // würde jetzt setVar1(XYZ) aufrufen
  blubb := instanz.Variable2; // liest direkt den Wert FVariable2

  // NICHT MÖGLICH:
  blubb := instanz.FVariable2; // Da Variable privat
  instanz.Variable2 := XYZ; // da kein write für Variable2 existier
Gruß Der Unwissende

[Roter Kasten]
Ja, da ich nichts anderes geschrieben habe, aber etwas ausführlicher :wink: lasse ich es mal als Ergänzung stehen
[/Roter Kasten]

IngoD7 6. Mär 2007 09:59

Re: Grundsätzliche Frage zu Klassen/ objektorientierter Prog
 
Zitat:

Zitat von mkinzler
Löse das doch mit Gettern/Settern und Properties.
Delphi-Quellcode:
TSoftwarePaket = class
  private
  ...
      procedure setMitarbeiter5( Value: ...);
      function GetMitarbeiter5: ...;
  ...
  published
    property Mitarbeiter5: ... read getMitarbeiter write setMitarbeiter;
...

Genau.
Und dann erfolgt der Zugriff auch nicht so ...
Zitat:

Zitat von fapsons
TSoftwarePaket.Set.Mitarbeiter5
[...]
und
TSoftwarePaket.Get.Mitarbeiter5
[...]

... sondern so
TSoftwarePaket.Mitarbeiter5 := ...
und
... := TSoftwarePaket.Mitarbeiter5

fapsons 6. Mär 2007 10:09

Re: Grundsätzliche Frage zu Klassen/ objektorientierter Prog
 
Super, danke für eure Antworten. Werde es direkt mal ausprobieren...

fapsons 6. Mär 2007 10:26

Re: Grundsätzliche Frage zu Klassen/ objektorientierter Prog
 
Vielen Dank an Der_Unwissende und IngoD7, ihr habt mir super weitergeholfen!!!
Schön, dass ihr euch so viel Zeit genommen habt...;)

LG
fapsons

IngoD7 6. Mär 2007 12:20

Re: Grundsätzliche Frage zu Klassen/ objektorientierter Prog
 
Zitat:

Zitat von fapsons
Vielen Dank an Der_Unwissende und IngoD7, ihr habt mir super weitergeholfen!!!
Schön, dass ihr euch so viel Zeit genommen habt...;)

... und mkinzler. :)
Ich habe seine Ausführungen nur ergänzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 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