Wie ist java.io.Serializable das Memento-Muster?

8

Wie wir wissen, ist das Memento-Muster ohne Verletzung der Verkapselung, erfasst und externalisiert den inneren Zustand eines Objekts und kann später ohne Kenntnis des ursprünglichen Zustandes zurückgewonnen werden.

Meine Frage kommt hier, wie java.io.Serializable unter dieses Muster kommt, denn wenn wir eine private Variable serialisieren und gleichzeitig den Objektstatus in eine Datei schreiben, ist der Wert der privaten Variable geöffnet der Welt und die Verkapselung scheint hier zu versagen.

    
BOSS 07.07.2011, 11:17
quelle

3 Antworten

4

Der Wikipedia-Artikel zum Memento-Muster erwähnt in der Tat nichts über die Verkapselung Dort wird genau der Zustand erfasst, der in einer privaten Variablen in einem Memento enthalten ist.

Encapsulation ('A Sprache Mechanismus zum Beschränken des Zugriffs auf einige der Komponenten des Objekts) bezieht sich darauf, wie Sie Code schreiben müssen, um den internen Zustand eines Objekts zu ändern.

Der interne Zustand eines Objekts könnte jedoch durch eine externe Eingabe bestimmt worden sein, wie beispielsweise der Inhalt einer Zeichenkette von der Datei abhängt, von der sie gelesen wurde oder welche Daten von dem Netzwerk empfangen wurden. Der Status eines Kontrollkästchens hängt davon ab, ob der Benutzer das Kontrollkästchen aktiviert hat oder nicht, während das entsprechende Feld in der Klasse möglicherweise privaten Zugriff hat und der Status für andere Klassen möglicherweise schreibgeschützt ist.

Das Schützen von Feldern, indem sie unter privaten Zugriff gestellt werden, soll dem Entwickler helfen, die Zustände von Objekten in einem konsistenten Zustand zu halten, dh vermeiden, dass Felder aus einem Code außerhalb dieser Klasse in einen inkonsistenten Zustand gesetzt werden (zum Beispiel wenn der Wert von Feld A hängt vom Wert des Feldes B ) ab.

Es hat nichts mit "Privatsphäre" in dem Sinne zu tun, dass diese Daten als geheim gelten. Natürlich könnte man eine andere Klasse schreiben, die dann die serialisierten privaten Felder liest und sie öffentlich in einer anderen Klasse verfügbar macht, oder man könnte sogar die serialisierte Datei bearbeiten, aber ich bin nicht sicher, was man daraus gewinnen könnte.

    
Andre Holzner 07.07.2011 11:33
quelle
0

Aus Wikipedia's Encapsulation-Artikel: In einer Programmiersprache wird die Kapselung verwendet, um auf einen der folgenden Begriffe zu verweisen zwei verwandte aber unterschiedliche Begriffe und manchmal auch die Kombination davon:

  • Ein Sprachmechanismus zum Beschränken des Zugriffs auf einige der Objektkomponenten.
  • Ein Sprachkonstrukt, das das Bündeln von Daten mit den Methoden (oder anderen Funktionen) erleichtert, die mit diesen Daten arbeiten.

Aus dem undurchsichtigen Objekt Artikel: Der Inhalt ist undurchsichtig und wird normalerweise nicht interpretiert, bis der Empfänger den Cookie übergibt (oder in unserem Fall, das Objekt) Daten zurück zum Absender oder vielleicht ein anderes Programm zu einem späteren Zeitpunkt.

Die Kapselung ist nicht kaputt. Das Memento-Muster verhindert, dass das Hausmeisterobjekt das Memento-Objekt ändert, so dass der Urheber es zum Zurücksetzen oder anderen Dienstprogrammen verwenden kann.

    
2rs2ts 07.07.2011 12:05
quelle
0

Mein Verständnis ist, dass das Memento-Muster nichts über das Format / die Opazität / Sicherheit des Mementos / Tokens selbst aussagt. Das Format des Mementos (für Menschen lesbar, vollständig verschlüsselt oder irgendwo dazwischen) ist für das Muster selbst irrelevant.

Ich würde behaupten, dass die Serialisierung (XML oder Binär) ein gutes Beispiel für eine Memento-Implementierung ist. Die Tatsache, dass Objektobjekten ausgesetzt sind, kann bedeuten, dass es nicht die beste Implementierung für Ihr Projekt ist. Es ist jedoch immer noch eine gültige Implementierung des Musters. :)

    
mikemanne 07.07.2011 17:32
quelle