Pedidos

Vertrag programmierung

Ja (Nebenwirkungen in Verträgen führen zu undefiniertem Verhalten). [a] Begründung: Ältere Versionen dieser Bibliothek generierten auch automatisch Doxygen-Dokumentation aus Vertragsdefinitionsmakros. Diese Funktionalität wurde aus einer Reihe von Gründen aufgegeben: Diese Bibliothek verwendet keine Makros mehr, um Verträge zu programmieren; Schon vorher wurde die Implementierung dieser Bibliotheksmakros zu komplex und der Doxygen-Präprozessor war nicht mehr in der Lage, sie zu erweitern; die Doxygen-Dokumentation war nur eine Wiederholung des Vertragscodes (so dass Programmierer Verträge im Quellcode direkt betrachten konnten); Doxygen ist möglicherweise nicht unbedingt das Dokumentationstool, das von allen C++-Programmierern verwendet wird. Klasseninvarianten werden überprüft, da diese Funktion Teil der öffentlichen Klasse der Klasse ist, aber nur statische Klasseninvarianten können überprüft werden (da es sich um eine statische Funktion handelt, sodass sie nicht auf das Objekt zugreifen kann, das stattdessen erforderlich wäre, um nicht statische Klasseninvarianten zu überprüfen, flüchtig oder nicht). Darüber hinaus können statische Funktionen keine Funktion außer Kraft setzen, so dass das Substitutionsprinzip nicht gilt und sie keine Unterauftragnehmer vergeben. Wir sehen, dass DBC-Verträge als Inspiration für unsere Komponententests dienen können, vorausgesetzt, die Verträge wurden formuliert. Methodenzentrierte Testfälle können in der Regel direkt in Vor- und Nachbedingungen übersetzt werden und umgekehrt. Die große (unbeantwortete) Frage lautet daher: An welchem Punkt unseres Test-First-Entwicklungszyklus ist es sinnvoll, die Verträge explizit zu spezifizieren? Ein DBC-Vertrag kann seine erfolgreichste Rolle als unwissende Ideenquelle während der Test-First-Entwicklung spielen, wenn der Entwickler häufig Vorbedingungen, Post-Bedingungen und Invarianten im Sinn hat, ohne sie explizit zu formulieren. Aber die eigentlichen Verträge stellen die Komponententests selbst dar. Eine Funktion ohne In-Vertrag bedeutet, dass alle Werte der Funktionsparameter zulässig sind. Dies bedeutet, dass, wenn eine Funktion in einer Vererbungshierarchie keinen Vertrag hat, alle in Verträgen auf Funktionen, die sie überschreiben, keine nützliche Wirkung haben. Microsoft-Vertragsprogrammierung für .NET-Programmiersprachen. Bauvertragsunterstützung in die Sprache macht für: Die folgende Tabelle vergleicht Vertragsprogrammierungsmerkmale unter dieser Bibliothek, [N1962] (leider lehnte der C++-Standardausschuss diesen Vorschlag ab, in dem er ein mangelndes Interesse an der Aufnahme von Vertragsprogrammierung zu C++ zu diesem Zeitpunkt kommentierte, auch wenn [N1962] selbst solide ist), ein neuerer Vorschlag [P0380] (der im C++20-Standard akzeptiert wurde, aber leider nur Vorbedingungen und Postbedingungen unterstützt).

, unterstützt jedoch keine Klasseninvarianten, alten Werte und Subunternehmer), die Programmiersprachen Eiffel und D. Einige der in dieser Zusammenfassungstabelle aufgeführten Elemente werden nach dem Lesen der verbleibenden Abschnitte dieser Dokumentation im Detail deutlich. Wie aus den oben genannten Schritten und in Übereinstimmung mit dem Substitutionsprinzip hervorgeht, prüft die Zuliefervergabe die Vorbedingungen in ODER, während Klasseninvarianten, Nachkonditionen und Ausnahmen in UND mit Vorbedingungen, Klasseninvarianten, Postbedingungen bzw. Ausnahmegarantien von Basisklassen geprüft werden. Der Digital Mars C++-Compiler erweitert C++-Erweiterung enden und bietet Unterstützung für Vertragsprogrammiersprachen (neben vielen anderen Funktionen). Die wohl einzige populäre "moderne" Umsetzung von Verträgen ist Clojure Spec. Ich bin nicht vertraut mit Clojure, also möchte ich nicht zu viele Kommentare machen, aber der Eindruck, den ich bekomme, ist, dass es zwar ein Schritt in die richtige Richtung ist, aber es ist nicht beabsichtigt, ein Vertragssystem zu sein. Es scheint, dass Spec eher dazu gedacht ist, bei der Überprüfung des Laufzeittyps zu helfen, aber hier falsch liegen könnte. Ihre Inspiration, Racket Contracts, sind ein wenig besser, aber immer noch weit von dem, was wir wollen, und ich würde Racket nicht "beliebt" nennen.

Dies unterstützt die Vertragsprogrammierung einschließlich der Untervergabe, jedoch mit Einschränkungen (z. B. Programmierer müssen manuell einen Vererbungsbaum mit künstlichen Vorlagenparametern erstellen), es verwendet keine Makros, aber Programmierer sind verpflichtet, eine erhebliche Menge an Kesselplattencode von Hand zu schreiben.

Los comentarios están cerrados.