Skip to main content

Was ist eine Klasseninvariante?

In objektorientierten Computerprogrammierung und -entwurf ist eine Klasseninvariante eine Reihe von Regeln, mit denen definiert werden kann, ob eine Objektinstanz in einem gültigen Zustand vorliegt.Aus Designperspektive ist eine Klasse -Invariante eine Reihe von Grenzen, zwischen denen die Daten innerhalb eines Objekts in einem ordnungsgemäßen, funktionalen Zustand berücksichtigt werden müssen.Eine Klasseninvariante kann in Entwurfsdokumentation oder Quellcode -Kommentaren definiert werden oder in einigen Programmiersprachen direkt in umsetzbarer Computercode implementiert werden.Ein Programm, das codierte Invarianten und Behauptungen verwendet, kann dazu führen, dass das Programm die Ausführung einstellt oder verschiedene Fehler einstellt, wenn die Invariantenbedingungen nicht erfüllt sind.Im Gegensatz zur Standardfehlerüberprüfung werden Klasseninvarianten im Allgemeinen nur verwendet, um sicherzustellen, dass die innere Implementierung einer Klasse funktioniert, und sie sind normalerweise nicht in öffentlichen Dokumentationen oder Programmierschnittstellen aufgeführt.Im Wesentlichen ist eine Sammlung von Behauptungen für eine Klasse.Eine Behauptung, wiederum in einfachen Worten, ist eine Aussage, die einen Teil des Zustands der Klasse überprüft und die Programmenausführung für die Fortsetzung der Programmausführung bewerten muss.Ein Beispiel für eine Behauptung ist eine Aussage, die sicherstellt, dass eine bestimmte Ganzzahl immer zwischen 1 und 10 liegt. Wenn eine Klasseninvariante verwendet wirdDas Objekt befindet sich in den definierten Bereichen.Der Unterschied zwischen der Verwendung von Klasseninvarianten und der Standardfehlerprüfung besteht jedoch darin, dass Invarianten und Behauptungen überwiegend verwendet werden, um Fehler zu erfassen, die nur auftreten sollten, es sei denn, es gibt einen intrinsischen Fehler im Code.Ein weiterer Unterschied besteht darin, dass die Standardfehlerprüfung in der Regel die Wiederherstellung und Änderungen des Programmsteuerungsflusss beinhaltet, während das Ergebnis eines invarianten Fehlers die Programmabschluss sein sollte.Der Grund, warum die meisten Programme enden, wenn eine Klasseninvariante-Check fehlschlägtEigenschaften einer Klasseninvariante in objektorientierten Programmiersprachen, in denen sie implizit definiert sind, ist, dass der Invariante ein Mechanismus ist, der von Unterklassen geerbt wird.Dies verhindert, dass eine Unterklasse alle unveränderlichen Überprüfungen überschreibt, die in der übergeordneten Klasse durchgeführt werden.Letztendlich bedeutet dies, dass eine Unterklasse den von der Superklasse festgelegten Entwurfsvertrag nicht brechen kann, was zu unvorhersehbaren Ergebnissen oder schwer zu findenden Programmfehlern führen kann.