![]() |
Verträge für Delphi / Design by Contract
Hallo,
gibt es eine Möglichkeit, in Delphi Verträge (Contracts) benutzen zu können? Ich würde gerne das Konzept ![]() Für Java gibt es verschiedene Plugins, gibts sowas auch für Delphi? Grüße Dominik |
AW: Verträge für Delphi / Design by Contract
Require und ensure sind nur in Oxygene (ehemals Delphi Prism / Prism) Teil der Sprache. Wenn du doch dafür interessiert und Object Pascal nutzen willst, würde ich dir raten in die Richtung zu gehen.
![]() In Delphi selbst gibt es dafür nichts, da musst du das selbst im Quelltext umsetzen ohne dafür eine Sprachunterstützung zu haben. Auch Addons kenne ich dafür nicht (kann mir aber auch schwer vorstellen was die dabei helfen sollten). |
AW: Verträge für Delphi / Design by Contract
Zitat:
Delphi hat in den letzten 12 Jahren leider viel an Boden verloren. Also Emba: baut das ein, Pre-/Postconditions und Invariants wären doch relativ einfach unzusetzen. |
AW: Verträge für Delphi / Design by Contract
Ich sehe allerdings nicht viele Vorteile gegenüber rein eigenem Code. Denn angeben muss man das so oder so und ob man die Bedingungen nun komplett prüft oder nur die Bedingungen hinschreibt... Eine Funktion wie Assert für diese Fälle kann man auch selbst schreiben, die das Ergebnis prüft.
Invariants lassen sich natürlich nicht ganz so einfach umsetzen, weil man deren Prüfung manuell in jede Methode einer Klasse packen müsste... |
AW: Verträge für Delphi / Design by Contract
Zitat:
Bei echtem Design by Contract prüft Dir schon der Compiler ob die Argumente passen. Wenn Du einen Check <> nil drin hast, und die Methode mit einem hart codierten nil in einem ganz seltenen Use-case aufrufst, dann fliegt Dir das mit einer selbstgebastelten Lösung erst beim Kunden um die Ohren wenn der richtig (bzw. falsch) rumklickt. Mit echten Code Contracts sagt Dir aber schon der Compiler, das der eine Aufruf nicht passt weil er den Contract verletzt. Der Mehrwert ist nicht zu unterschätzen. |
AW: Verträge für Delphi / Design by Contract
Dass der Compiler so etwas erkennt, dürfte in echtem Code allerdings gegen Null gehen. Denn um bei deinem Beispiel zu bleiben eine Funktion absichtlich mit nil aufrufen, wenn die Funktion das gar nicht unterstützt, das mag vielleicht mal passieren, fällt aber beim Test auf und ist leicht zu finden.
Viel wahrscheinlicher und vor allem schwerer zu finden sind aber doch Fehler, die durch zur Laufzeit veränderte Variablen entstehen. Und die kann der Compiler ohnehin nicht erkennen. |
AW: Verträge für Delphi / Design by Contract
Zitat:
Außerdem gehört das dann zum Verhalten des Objektes, und nicht zum Datentyp an sich. Der Vertrag vermischt sich mit der Implementierung. Des Weiteren gibt es ein Einsatzgebiet bei dem das nicht funktioniert: abstrakte Datentypen. Einem Interface kannst du Pre- und Postconditions nicht beibringen. Da Interfaces für mich immer wichtiger werden (man soll mit Interfaces arbeiten, nicht direkt mit Objekten) habe ich gehofft, dass es ein Plugin / Addon für Delphi gibt. In Java kenne ich eins, dass dies mit Hilfe von Annotations umsetzt. Da man in Delphi auch Annotations einsetzen kann dachte ich, ich frag mal hier :-) |
AW: Verträge für Delphi / Design by Contract
Pluginmäßig lässt sich das denke ich in Delphi nicht umsetzen. Annotationen in Java bieten ganz andere Möglichkeiten...
|
AW: Verträge für Delphi / Design by Contract
Zitat:
Genau das ist ja gerade die Mächtigkeit von Design by Contract. Wenn man das konsequent durchzieht werden die Contracts direkt gegeneinander validiert und es ist zur Compilezeit möglich sämtliche Fehler durch falsche Ein- und Ausgabeparameter auszufiltern. |
AW: Verträge für Delphi / Design by Contract
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz