Einzelnen Beitrag anzeigen

Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: [OOP Grundsatzfragen] Vom Problem zur Klasse exemplarisc

  Alt 30. Nov 2008, 20:01
Angeblich benutzt jeder OOP und es kommen kaum Antworten ? Es ist entsetzlich.

OOP dürfte wohl kalr sein, aber wie nutzt man das richtig ?

Zuerst sucht man sich mal den am Besten geeigneten Vorfahren für das Vorhaben. Da kommt bereits das erste große Du leitest alles von TComponent ab, es wird also quasi nichts Vorhandenes weiterverwendet. Du fängst also bei Null an.

Das nächste wäre die Suche nach Gemeinsamkeiten, damit das Ganze einen Sinn hat. Da kommt das nächste Was hat Excel, Word und Outlook gemeinsam ? Ich denke sehr wenig. Dass diese Programme alle zufällig im MS-Officepaket sind spielt keine Rolle. Was soll man nun da überhaupt mit OOP besser machen ? Vielleicht könnte man für ein Word-Dokument und eine Excel-Arbeitsmappe irgendwas mit Öffnen, speichern etc. vereinheitlichen ? Kenne den OLE-Krempel jetzt allerdings zu wenig. Mein Vorredner hat das ja schön gezeigt mit diversen Excel-Versionen.

Ich will mal noch anhand einer Komponente zeigen, wie das auch geht (stark vereinfacht) : es soll ein Edit-Feld her, in welches man nur Zahlen eingeben kann und davon abgeleitet soll noch eins erzeugt werden, welches einen DecimalSeparator zulässt. Man hat dann schonmal zumindest die Standardeigenschaften, also Keypress, Mausereignisse etc. vordefiniert. Wenn ich jetzt da nur zulasse, Zahlen einzugeben, dann muss man ja nur das OnKeyPress behandeln.

Delphi-Quellcode:
  TZulZeichen = set of char;
...

  TIntEdit = class(TEdit)
  protected
    procedure KeyPress(var Key: Char); override;
    property ZulZeichen: TZulZeichen read FZulZeichen write SetZulZeichen;
  published
...
  end;
Das override braucht man, damit das "eigene" OnKeyPress verwendet wird, anstatt des standardmässigen. Es ist protected deklariert, damit danach auch noch die real-Eingaben damit erledigt werden können.

Und das sieht dann so aus:

Delphi-Quellcode:
procedure TIntEdit.KeyPress(var Key: Char);
begin
  inherited KeyPress(Key);
  if not (Key in FZulZeichen) then
    key := #0;
end;
Das inherited widerspricht zwar scheinbar dem override, aber das Editfeld soll sich ja schon im Grunde so verhalten, wie ein TEdit. Schließlich zeigt es die Eingaben an, hat ein OnEnter etc. Hinzu kommt lediglich die Einschränkung auf Zahlen. Der Vorteil liegt eben hauptsächlich darin, an einer Stelle was zu ändern und nicht an vielen. Ändere ich irgendwas an diesen Prozeduren, dann
sind sie eben überall geändert und fertig. Alternativ könnte man auch für alle betroffenen Edits diese OnKeyPress-Prozedur kopieren und einfügen. Bedeutet, dann allerdings auch im Fehlerfalle die Suche an zig-Stellen.

Bei Dir sehe ich an dieser Stelle allerdings eher das Problem, dass Du versuchst Sachen unter einen Hut zu bringen, die kaum was gemeinsam haben. Da verliert OOP eventuell schnell seine Vorteile.
Gruß
Hansa
  Mit Zitat antworten Zitat