AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

OOP Umwandlung eines Testprogrammes

Ein Thema von NoGAD · begonnen am 30. Mär 2020 · letzter Beitrag vom 31. Mär 2020
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#1

OOP Umwandlung eines Testprogrammes

  Alt 30. Mär 2020, 14:13
Hallo,

durch einige Hinweise in einem anderen Thema ( https://www.delphipraxis.net/203816-...-funktion.html) bitte ich, falls sich jemand die Zeit nehmen könnte, um das angehängte Beispiel in korrektes OOP, insbesondere die globale Variable in Unit2 betreffend, umzuschreiben.

Falls es mehrere Ansichten bezüglich der Umwandlung gibt, wäre es für mich schön, wenn statt Diskussion über einen anderen Beitrag, lieber eine neue Variante zur Verfügung gestellt würde.


LG Mathias
Angehängte Dateien
Dateityp: zip 2020-03-30-OOP.zip (2,3 KB, 18x aufgerufen)
Mathias
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: OOP Umwandlung eines Testprogrammes

  Alt 30. Mär 2020, 18:43
Warum sollen andere die Arbeit für dich machen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#3

AW: OOP Umwandlung eines Testprogrammes

  Alt 30. Mär 2020, 18:48
Schon recht dreist, oder?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli
Online

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: OOP Umwandlung eines Testprogrammes

  Alt 30. Mär 2020, 19:16
Finde ich nicht schlimm, Vorschläge für Verbesserungen einzuholen.

Allerdings ist mir die "Fragestellung" zu unkonkret, so dass es für mich zu aufwendig wäre, das Projekt zu überarbeiten (und Records (um die es ja wohl auch geht) ohnehin nicht mein Fall sind).
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: OOP Umwandlung eines Testprogrammes

  Alt 30. Mär 2020, 22:09
Schon recht dreist, oder?
Es war eine Bitte.
Mathias
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli
Online

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: OOP Umwandlung eines Testprogrammes

  Alt 30. Mär 2020, 22:16
Vielleicht kannst Du Deine Frage oder Anliegen nochmal knapper fassen...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#7

AW: OOP Umwandlung eines Testprogrammes

  Alt 30. Mär 2020, 22:52
Wie es scheint will er eine globale Variable los werden. Geht's dabei evtl. um automatisch erzeugte Forms?
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: OOP Umwandlung eines Testprogrammes

  Alt 31. Mär 2020, 09:15
Wie es scheint will er eine globale Variable los werden. Geht's dabei evtl. um automatisch erzeugte Forms?
Nein. Es geht um eine globale Variable, die ein Record ist.
Mathias
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#9

AW: OOP Umwandlung eines Testprogrammes

  Alt 31. Mär 2020, 10:17
Wie man das umsetzt, hängt natürlich von den konkreten Gegebenheiten ab. Daher kann man keinen allgemeinen Ansatz vorgeben.

Eine Möglichkeit die globale Variable zu eliminieren ohne den Funktionsaufruf unnötig aufzublähen wäre eine Klasse:
Delphi-Quellcode:
unit Unit2;

interface

uses
  system.StrUtils,
  system.Sysutils;

type
  TSettings = record
    Show_Errors: Boolean;
    Show_Questions: Boolean;
    Delete_Fields: Boolean;
  end;

type
  TResult = record
    String_1: string;
    String_2: string;
    initFoo_MultiUser: Boolean;
    initFoo_Done: Boolean;
    initFoo_Error: Boolean;
  end;

type
  TFooMaker = class
  private
    FSettings: TSettings;
  public
    constructor Create(const ASettings: TSettings);
    function init_FOO(const _FooFileName, _FooDatabaseName: string; _FooMultiUser: Boolean = True): TResult;
    property Settings: TSettings read FSettings;
  end;

const
  BR = #13#10;
  DBR = BR + BR;

implementation

constructor TFooMaker.Create(const ASettings: TSettings);
begin
  inherited Create;
  FSettings := ASettings;
end;

function TFooMaker.init_FOO(const _FooFileName, _FooDatabaseName: string; _FooMultiUser: Boolean = True): TResult;
var
  StringTest: string;
begin
  try
    Result.String_1 := _FooFileName;
    Result.String_2 := _FooDatabaseName;
    Result.initFoo_MultiUser := _FooMultiUser;
    Result.initFoo_Done := (Trim(_FooFileName) <> '') and (Trim(_FooDatabaseName) <> '');

    if Trim(_FooFileName) = 'EXCEPTIONthen
    begin
      StringTest := '';
      StringTest := StringTest[1];
      Result.initFoo_Done := True;
    end;

    Result.initFoo_Error := False;
  except
    if Settings.Show_Errors then
      Result.initFoo_Error := True;
    Result.initFoo_Done := False;
  end;
end;

end.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  fooMaker: TFooMaker;
  myResult: TResult;
  mySettings: TSettings;
begin
  mySettings.Show_Errors := true;
  mySettings.Show_Questions := false;
  mySettings.Delete_Fields := false;

  fooMaker := TFooMaker.Create(mySettings);
  try
    myResult := fooMaker.init_FOO('Test', 'Test 1');
    Result2Memo(myResult);

    myResult := fooMaker.init_FOO('Hallo', 'Test 2', false);
    Result2Memo(myResult);

    myResult := fooMaker.init_FOO('EXCEPTION', 'Test 3', true);
    Result2Memo(myResult);

    myResult := fooMaker.init_FOO('EXCEPTION', 'Test 4', false);
    Result2Memo(myResult);
  finally
    fooMaker.Free;
  end;

  Memo1.SetFocus;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: OOP Umwandlung eines Testprogrammes

  Alt 31. Mär 2020, 10:45
Wie man das umsetzt, hängt natürlich von den konkreten Gegebenheiten ab. Daher kann man keinen allgemeinen Ansatz vorgeben.

Eine Möglichkeit die globale Variable zu eliminieren ohne den Funktionsaufruf unnötig aufzublähen wäre eine Klasse:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  fooMaker: TFooMaker;
  myResult: TResult;
  mySettings: TSettings;


Danke, Uwe, für das Beispiel.
Ich verstehe es dennoch nicht. Was ist der Unterschied der drei Variablen, welche hier genutzt werden?

*TFooMaker* ist doch am Ende auch wieder ein globales Konstrukt, welches in jeder Unit verfügbar ist, welche Unit2 einbindet?

Und solange ich Unit2 nicht einbinde, wäre eine globale Variable (welche in Unit2 deklariert ist) in der jeweiligen Unit doch auch nicht sichtbar?

LG Mathias
Mathias
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:43 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