Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Class methode problem in DEC (https://www.delphipraxis.net/207145-class-methode-problem-dec.html)

TurboMagic 28. Feb 2021 08:30

Class methode problem in DEC
 
Hallo,

mir ist gerade aufgefallen, dass eine Architekturänderung neulich dazu führt, dass eines
der Demo Programme nicht mehr funktioniert. Leider habe ich noch keinen Weg gefunden,
wie ich das umbauen muss, damit es wie gedacht funktioniert.

Worum geht's?

1. Es gibt eine Klasse TDECHash als Basisklasse aller Hash Algorithmen
2. Diese hat eine Klassenmethode ClassByName, da sich alle konkreten Implementierungen in
einer Verwaltungsliste registrieren können. ClassByName gibt eine TDECHashClass zurück
wenn die zu suchende Klasse in der Liste ist. TDECHashClass ist so definiert:
Delphi-Quellcode:
TDECHashClass = class of TDECHash;
3. Die Architekturänderung von neulich war, dass zwischen TDECHash und den einzelnen
Implementierungsklassen eine TDECHashAuthentication Klasse geschoben wurde und die
Klassenmethode IsPasswordHash, welche das hier ausführt:
Delphi-Quellcode:
Result := self.InheritsFrom(TDECPasswordHash);
wurde
nach TDECHashAuthentication verschoben. TDECPasswordHash erbt von TDECHashAuthentication
und alle in Zukunft hinzugefügten Password Hash Umsetzungen sollen von
TDECPasswordHash erben.
4. Das FMX Hash Demo Programm enthält eine COmbobox mit einer Liste aller registrierter Hash
Algorithmen und folgenden Code:
Delphi-Quellcode:
   procedure TFormMain.ComboBoxHashFunctionChange(Sender: TObject);
   begin
     CheckBoxIsPasswordHash.IsChecked :=
       TDECHash.ClassByName(
        ComboBoxHashFunction.Items[ComboBoxHashFunction.ItemIndex]).IsPasswordHash;
   end;
IsPasswordHash wird so natürlich nicht mehr gefunden, nur haben alle probierten
Änderungen nicht zum erfolg geführt. Wenn's compiliert hat und ich eine Hash-Klasse
vererbungstechnisch auf TDECPasswordHash geändert habe war IsPasswordHash trotzdem false...

Wie muss ich das anpacken, damit es sauber so wie von mir gedacht funktioniert?

Grüße
TurboMagic

TurboMagic 28. Feb 2021 10:38

AW: Class methode problem in DEC
 
Ok, habe selber einen Lösungsansatz gefudnen:

Die Basisklasse TDECHashBase bekommt auch so eine Klassenmethode IsPasswordHash
die ist virtual und liefert immer False.

In TDECHashAuthentication wird diese dann überschrieben.
Das funktioniert.

himitsu 28. Feb 2021 15:40

AW: Class methode problem in DEC
 
Jupp, das ist auch eine der allgemeinen Lösungen dafür.

Eine andere Lösung wäre die Einführung eines Interfaces, aber dagegen ist das hier schon einfacher, da bereits ein gemeinsamer Vorfahre existiert.

TurboMagic 28. Feb 2021 16:37

AW: Class methode problem in DEC
 
Danke!

Übrigens: die DUnit und DUnitX Projekte haben jetzt auch eingebaute TestInsight Unterstützung,
falls installiert und aktiviert. :-D

Und die Cipher und Hash demos wurden aktualisiert bei Google Play eingereicht. :-D


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