Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Neustrukturierung (nach OOP) meines Programmes (https://www.delphipraxis.net/129886-neustrukturierung-nach-oop-meines-programmes.html)

DelphiManiac 27. Feb 2009 10:41


Neustrukturierung (nach OOP) meines Programmes
 
Hallo, ich habe ein sehr gewachsenes Programm welches mit einer
Industrieelektronik über USB kommuniziert.

Diese Elektronik gab es ursrprünglich nur als CO2 / Druck Mess und Auswertelektronik.

Jetzt kann die eine Platine (abhängig von der Firmware) aber auch
z.B.:
-Sauerstoff messen
oder
- Schalllaufzeit etc (wer weiß was noch kommt :-))

Mein Programm benutzt zwar Klassen (aber viel zu große und im Prinzip sind es nur Container für Funktionen)
Also habe ich bedingt durch das wachsen der Anforderungen nicht gerade OOP-like programmiert,
das würde ich gerne ändern, aber ich bräuchte ein paar Anregungen von euch.
Hierzu noch ein paar Infos:

Es gibt zurzeit 3 Geräterversionen:

-Druck
-Sauerstoff
-Schall

zurzeit ist alles in einer Klasse TGeraet

Beispiel

Delphi-Quellcode:
getSeriennummer(var SN:string);
getDruck(var Druck:int);
getSauerstoff(var Sauerstoff:double);
getSchall (var Schall:double)
wobei zb.: getSchall und getLaufzeit die Werte aus der gleichen Adresse vom Gerät holen.


In der GUI mach ich dann sowas:

Delphi-Quellcode:
case deviceID
1: getDruck(druck);
2: getSauerstoff(st);
3: getSchall(schall);
end;

also mir gefällt die ganze Geschichte nicht so, sie mach Änderungen seeehr schwierig...

Vielen Dank
schonmal für eure Anregungen.

Sherlock 27. Feb 2009 10:51

Re: Neustrukturierung (nach OOP) meines Programmes
 
Zitat:

Zitat von DelphiManiac
also mir gefällt die ganze Geschichte nicht so, sie mach Änderungen seeehr schwierig...

Wirklich? Auf den ersten Blick sieht das für mich sehr einfach aus. Neuer Messwert -> weitere Zeile im case und fertig. Was versprichst Du Dir genau von einem Redesign?

Sherlock

DelphiManiac 27. Feb 2009 10:57

Re: Neustrukturierung (nach OOP) meines Programmes
 
Hi,

da hängt noch viel mehr dran:

- Ein/Ausblenden von Menüs / Editfeldern /Labels etc
- Einheiten ändern sich
- uvm.

Also so vereinfacht wie ich es dargestellt habe ist es wirklich nicht, leider :-)

Ich mache diese Überpüfung zig mal.

Durch ein Redesign würde ich mir eine flexiblere Erweiterung fü kommende Geräte wünschen. Und eine bessere Fehlersuche / besseren Verständnis des eigenen Quellcodes :-)

Gruß

RWarnecke 27. Feb 2009 11:10

Re: Neustrukturierung (nach OOP) meines Programmes
 
Ich würde vielleicht hergehen und es nach Kategorien ordnen. Damit meine ich, suche Dir alle Gemeinsamkeiten von den Geräten raus und packe diese in eine Klasse. Die Unterschiede würde ich dann jeweils in eine extra Klasse packen. Die extra Klassen würde ich dann von der gemeinsamen Klasse ableiten.

DelphiManiac 27. Feb 2009 11:24

Re: Neustrukturierung (nach OOP) meines Programmes
 
Hi,

ja genau so habe ich es geplant, will jetzt auch aus den gemachten Fehlern einwenig lernen.

Ich habe ja viele Komponenten die ich ausblende einblende etc.

Kann ich diese Logik auch irgendwie in die Klasse die dem Gerät angehört packen?

Also quasi dass die GUI sagt hier das sind meine Kompos entscheide du welche du brauchst welche nicht und was du damit machst.
Wäre das ein eher schlechtes Design?

Oder sollte die Logik über die Anzeige generell in der GUI selbst liegen?

Bisher ist es ja so

Delphi-Quellcode:
if softwareversion = 1 then
begin
lblxyz.visible:=false;
editxyz.visible:=false;
end;

if softwareversion = 2 then
begin
lblxyzaa.visible:=false;
editxyzaa.visible:=true;
end;
edit:sorry Tags vergessen

Gruß

RWarnecke 27. Feb 2009 12:00

Re: Neustrukturierung (nach OOP) meines Programmes
 
Ich würde das ganze so machen :
Delphi-Quellcode:
type
  THauptklasse = class
  private
    FZeigeMenuepunkt1 : boolean;
    FZeigeMenuepunkt2 : boolean;
  published
    property ZeigeMenuepunkt1 : booelan read FZeigeMenuepunkt1 write FZeigeMenuepunkt1;
    property ZeigeMenuepunkt2 : booelan read FZeigeMenuepunkt2 write FZeigeMenuepunkt2;
  end;

  TSchall = class(THauptklasse)
  private
    // Irgendwas machen
  public
    // Irgendwas machen
  protected
    // Irgendwas machen
  published
    // Irgendwas machen
  end;

{...}

procedure ZeigeMenupunkte;
var
  Schall : TSchall;
begin
  Schall := TSchall.Create;
  try
    Menupunkt1.Visible := Schall.ZeigeMenuepunkt1;
    {...}
  finally
    Schall.Free
  end;
end;
So würde ich das ganze aufbauen. Wie gesagt, es ist nicht komplett und soll auch nur die grobe Struktur zeigen, wie ich es aufbauen würde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz