Einzelnen Beitrag anzeigen

DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#1

OOP Programmierung eines Prüfprogrammes

  Alt 1. Apr 2009, 16:23
Hallo,

ich entwickle zurzeit ein Prüfprogramm für eine Hardware

- Relais testen
- LED's testen
- Kalibrieren von Ausgängen / Eingängen...

Ich wollte die nun, nach anfänglichen nicht OOP-konformen Implementierungen jetzt mal sauber konzipieren,
aber dafür brauche ich eure Hilfe.

So sieht es zurzeit aus:

Klasse:
 TPruefling Implementiert alle Methoden um mit dem Prüfling zu kommunizieren.
Beispiel: Set_Relais_1(true); // Schalte Relais 1 vom Prüfling


Delphi-Quellcode:
  TTest = class(TObject)
  private
    FshouldStopp:Boolean;
  protected
    FPruefling:TPruefling;
    FPruefGeraet:TPruefGeraet;
    FUSB:TSchnittstelle;
    FProgressEvent:TProgressEvent;
    FPruefText:string;
    procedure SetProgressEvent( Event : TProgressEvent );
    procedure ShowProgressToGUI(PruefText:String;Fortschritt:Integer);
  public
    constructor Create; virtual;
    destructor Destroy; override;
    function Execute:TTestResult; virtual;abstract;
    procedure StoppTest;
    property PruefText:String
      read FPruefText;
    property OnShowProgress:TProgressEvent
      read FProgressEvent write SetProgressEvent;
  end;
Oberklasse für einen Test



Delphi-Quellcode:
  TTestRelais = class(TTest)
  private
  public
    constructor Create; override;
    function Execute:TTestResult; override;
  end;
Spezielle Testklasse abgleitet von TTest

Delphi-Quellcode:
TControlTest = class(TObject)
private
  FTests:array of TTest;
  FactualTest: TTest;
  FTestObjList:TObjectList;
  FAnzahlTest:Integer;
  FStoppTesting:Boolean;
// FKalibrierWerte:TKalibrierDaten;
  FOnShowTestName:TShowTestName;
  FOnProgressEvent:TProgressEvent;
    procedure setFonProgressEvent(const Value: TProgressEvent);
    procedure setOnShowTestName(const Value: TShowTestName);
  procedure ClearKalbrierwert;
    function getTests(TestNr:integer): TTest;
public
  PruefNummer:Word;
  constructor Create;
  destructor Destroy;override;
  procedure AddTest(const aTest:TTest);
  procedure ClearTest;
  function StarteTestAblauf:TTestResult;
  procedure StoppeTestAblauf;

  property OnShowTestName : TShowTestName
    read FOnShowTestName write setOnShowTestName;
  property OnShowFortschrittGesamt:TProgressEvent
    read FOnProgressEvent write setFonProgressEvent;
  property AnzahlTests : Integer
    read FAnzahlTest;
  property Tests[index:integer] : TTest
    read getTests;
end; // of TControlTest = class(TObject)

Also ich habe also im Prinzip eine GUI die die spezifischen Tests in die Controlklasse einfügt, diese Controlklasse übernimmt dann das Ausführen der Tests (arbeitet die Liste ab).

Jetzt ist das Problem, das ich immer habe, wenn ich solche losen Kopplungen mache, wie ich dann am Besten die Unteschiedlichkeit der Tests behandle.

Beispiel ich habe ein TestRelais Klasse, diese steuert nacheinander die Relais an und liest sich zurück ob das Relais geschaltet hat, nun will ich nach jedem Ansteueren das grafisch darstellen in meiner GUI....

Dann müsste ich wohl ein Callback realisieren, der in der Testklasse direkt aufgerufen wird, oder, da die TControlTestklasse ja da auch keinen Zugriff mehr hat (während der Ausführung eines einzelnen Tests), richtig, oder?


Vielen Dank schonmal für Anregungen...

Gruß
DM
  Mit Zitat antworten Zitat