Darstellungsinvariante vs. Implementationsinvariante: Was ist das?

Hallo zusammen :)

Frage steht im Titel, ich versteh einfach nicht was genau damit gemeint ist.
Soweit ich es verstanden hab, ist die Darstellungsinvariante die Summe all der Methoden, Attribute etc. einer Klasse, die PUBLIC sind.
Die Implementationsinvariante dementsprechend alles was NICHT public ist, also private, protected, default.

Als Beispiel zur Darstellungsinvariante wurde mir im Skript folgendes genannt: "Ein Objekt von Klasse X repräsentiert zu jedem Zeitpunkt seiner Lebenszeit eine Matrix von double. Zeilen- und Spaltenzahl sind konstant und größer 0."

Also so ganz versteh ich das ganze nicht.. muss man das immer so aufschreiben, was schreibt man überhaupt auf??

Viele Grüße!
 

httpdigest

Top Contributor
Ich habe beide Begriffe noch niemals gehört.
Google liefert für "Darstellungsinvariante" 0 Treffer und weicht gleich auf "Darstellungsvariante" aus und zu Implementationsinvariante gibt es genau 6 Treffer...
Wo hast du diese Begriffe her?
 
Ich habe beide Begriffe noch niemals gehört.
Google liefert für "Darstellungsinvariante" 0 Treffer und weicht gleich auf "Darstellungsvariante" aus und zu Implementationsinvariante gibt es genau 6 Treffer...
Wo hast du diese Begriffe her?
In meinem Skipt steht das...
Darunter noch auf Englisch: "Representation invariant" und "Implementation invariant"

Es steht im Zusammenhang mit "Korrektheit von Klassen"
 

LimDul

Top Contributor
Die Begriffe sagen mir in der Form auch nichts.

Invarianten beschreiben aber generell einen Zustand, der immer eingehalten wird. Das wäre beispielsweise bei einer SortedList das die Elemente immer sortiert sind. Oder das eine bestimmte Methode nie null liefert oder das gewisse Werte immer größer 0 sind etc.

Was ich mir dann unter den beiden Begriffen vorstellen kann:

Representation invariant: Der Zustand, den ein Objekt nach Außen repräsentiert. Also z.B. das die Methode int getTankKapazität() vom Auto immer einen Wert größer/gleich 0 liefert.

Implementation invariant wäre der Zustand, der innerhalb der Klasse gilt, in der Implementierung. Der dürfte in der Regel weniger streng sein, als der nach außen. So stellt sich eine SortedList nach außen immer sortiert da - aber ob die Liste im Inneren immer sortiert ist oder nur beim Zugriff sortiert wird und wie genau sie gespeichert wird, ist Implementierungsdetails.
 

Untwisted

Neues Mitglied
Hey,
ich habe in meinem Skript genau das gleiche und auch unter dem gleichen Thema gefunden.
Wie hier schon erwähnt, beschreibt die Darstellungsinvariante die Darstellung/Funktionsweise einer Klasse nach außen.
So, dass die Nutzer der Klasse die Klasse durch die Darstellungsinvariante verstehen und ordnungsgemäß nutzen können.

Dabei muss man so komplizierten Krams schreiben, aber die Formulierungen ähneln einander meistens.
Bei String z.B. "Ein Objekt der Klasse String repräsentiert zu jedem Zeitpunkt seiner Lebenszeit eine Zeichenkette von fester, aber beliebiger Länge."
Oder so ähnlich.
Feste, aber beliebige Länge heißt einfach nur, dass man sich die Länge bei der Initialisierung aussuchen kann, diese sich aber nicht mehr ändern lässt.
Die Darstellungsinvariante muss von alles Subklassen eingehalten werden.
Methoden fürfen also entweder erweitert oder verfeinert werden.

Die Implementationsinvariante ist nur für die Entwickler interessant, in ihr ist festgehalten wie das in der Darstellungsinvariante genannte Verhalten umgesetzt wird und wie private- default und protected Attribute und Methoden funktioneren.

LG
 

Neue Themen


Oben