Saturday 25 November 2017

Jforex Ordnung Zustand Unveränderlich


Ich höre oft den Begriff Stateless und Unveränderlich. Beispielsweise ist HTTP ein stateless-Protokoll, und ein String-Objekt ist ein unveränderliches Objekt. Aber ich habe eine harte Zeit, den Unterschied zwischen den beiden zu erfassen. Wenn ich ein statusloses Objekt verursache, speichert es keine Zustanddaten intern. Und wenn ich einen unveränderlichen Gegenstand erschaffe, dann bedeutet es, daß sich sein Wille niemals ändert. Bedeutet das nicht dasselbe Ding Da sich das unveränderliche Objekt nicht ändert, kann es definitionsgemäß keinen Zustand haben. Es ist, was es für immer ist. Und wenn ein Objekt nicht Zustand hat, kann es nicht mutiert (per Definition). Also, arent alle staatenlosen Objekt unveränderlichen und unveränderlichen Objekt staatenlos Was könnte ein Beispiel für mutable staatenloses Objekt oder unveränderlich stateful Objekt Wie kann ein Objekt keinen Zustand haben Auch wenn Sie das grundlegendste Objekt instanziieren, es hat einige Zustand. Das einfachste in Java vorstellbare Objekt wird zum Beispiel den Zustand enthalten. Der Hinweis auf seine Klasse unter anderem. Ist es sogar möglich, ein wirklich staatenloses Objekt in jeder Sprache zu erhalten ndash toniedzwiedz Jan 28 16 am 9:24 Der Zusammenhang ist wichtig und es gibt zwei unabhängige Konzepte hier. HTTP ist ein stateless Protokoll bedeutet, dass jede Anfrage keine implizite Kenntnis anderer Anforderungen hat. Einschließlich aller früheren Anfragen, die von demselben Client gesendet wurden. Dies unterscheidet sich von einem Protokoll wie FTP oder SMTP, wo eine Verbindung aufgebaut wird und dann verschiedene Befehle gesendet werden - jede Befehlsanforderung ist der gleichen Clientverbindung zugeordnet. Selbstverständlich wird die Rückverfolgung durch die Rückverfolgung wieder aufgenommen. Cookies und Tracking-URIs, und sogar Pipelining - aber der Punkt ist, dass jede Anfrage ist neu und getrennt in das HTTP-Protokoll. String ist ein unveränderliches Objekt, das bedeutet, dass bestimmte Objektdaten immer identisch mit dem sind, was es jetzt in jeder beobachtbaren Weise ist (dies bedeutet auch, dass beobachtbare Attribute nicht geändert werden können). Manche Puristen mögen argumentieren, dass sie tiefere Konsequenzen hat als diese, aber in der Praxis geht es um beobachtbare Attribute - das Problem wird komplizierter, wenn unwandelbare Objekte veränderliche Objekte enthalten können. (Und ja, technisch gesehen, ein Objekt mit nicht zugelassenen Daten - oder Staat kann nicht aktualisiert und somit unveränderlich sein.) Doch wieder ist der Kontext wichtig und es ist komisch, über Fangs an einem Elefanten oder einem Stamm auf einem Tiger zu reden. ) Bearbeiten: Unterschied zwischen den beiden Ein Objekt, das keinen Zustand hat, ist staatenlos. Alle staatenlosen Objekte sind unveränderlich (weil es nichts zu mutieren gibt), das ist eine tautologische Technik. Ein Objekt kann Zustand haben und dennoch unveränderlich sein - ein Objekt mit Zustand (unveränderlich oder anders) kann nicht mehr als staatenlos betrachtet werden. Wie kommentiert die verknüpfte Antwort. Ein unveränderliches Objekt hat genau einen Zustand, den Anfangszustand. LaurentBourgault-Roy Ein Objekt, das keinen Staat hat, ist staatenlos. Alle staatenlosen Objekte sind unveränderlich (weil es nichts zu mutieren gibt), das ist eine tautologische Technik. Ein Objekt kann Zustand haben und dennoch unveränderlich sein - ein Objekt mit Zustand (unveränderlich oder anders) kann nicht mehr als staatenlos betrachtet werden. Wie pro Kommentar auf die verknüpfte Antwort: quotan immutable Objekt hat genau ein Statequot, den Anfangszustand. Ndash User166390 Oct 19 12 at 20:04 Ah, ich sehe jetzt. Würde es richtig sein, zu sagen, dass Stateless-Objekte eine Untermenge von unveränderlichen Objekten mit der gleichen interessanten Eigenschaft sind (sicher verwendet werden kann in Gewinde-Code, garantiert nicht in der Zukunft ändern, etc.), aber mit einigen zusätzlichen Eigenschaften ihrer eigenen ( Wie eine Methode aufgerufen, auf jede Instanz der gleichen Klasse ist garantiert, um immer wieder das gleiche Ergebnis, da sie kein Zustand, um das Ergebnis zu beeinflussen) ndash Laurent Bourgault-Roy 19.10.2007 um 22:34 Sie sind definitiv nicht die gleichen. Unveränderliche Gegenstände sind die nie geänderten. Der Zustand der unveränderlichen Objekte wird nie modifiziert, Aliasing unveränderliche Objekte ist harmlos und keine Alias-Kontrolle ist für unveränderliche Objekte notwendig, obwohl Alias-Kontrolle erforderlich sein kann, um zu beweisen, dass Objekte in der Tat unveränderlich sind. Und Staatenlos bedeutet, dass es keinen Staat gibt. HTTP wird ein stateless-Protokoll genannt, da jeder Befehl unabhängig ausgeführt wird, ohne Kenntnis der Befehle, die vor ihm gekommen sind. Sie basiert auf einem Anforderungsparadigma. In diesem Protokoll erfolgt die Kommunikation im Allgemeinen über ein TCPIP-Protokoll. Antwort # 2 am: August 19, 2010, 07:12:13 pm »Id sagen, es ist das gleiche in einigen Kontexten, aber wir konzentrieren uns auf eine etwas andere Aspekte. Wenn die Leute sagen, dass Staatenlose bedeutet, es hat keinen Staat, es macht mich zum Lachen. Natürlich hat es irgendeinen Zustand von irgendeinem Gesichtspunkt, z. B. Kann der zustandslose Dienst durch komplexes Diagramm von Objekten (Abhängigkeitsinjektion) unterstützt werden. Die Sache ist Netzwerk-Protokoll hat etwas unterschiedliche Bedeutung des Staates: Es ist etwas, das von früheren Anfragen Antwort abhängig ist. Aber unveränderlicher Service hängt nicht von vorherigen Aufrufen zu, durch Definition ab. Stateless nicht immer im Zusammenhang mit HTTP-Protokoll, den gleichen Begriff können wir verwenden, um Setter in Service-Objekte in Ihrem glänzenden OOP-Code zu argumentieren. Und hier sehen Sie, dass diese beiden Begriffe in Wirklichkeit gleich sind: Unveränderlicher Dienst ist ein staatenloser Dienst und umgekehrt. Allerdings ist seine umständlich für mich, ein Objekt null Wertobjekt. Es klingt schrecklich. Recap: im Falle von Dienstleistungen (Netzwerk oder OOP, doesnt Angelegenheit) Id sagen, diese Begriffe sind austauschbar. Es spielt keine Rolle, wie oft wir als logWarning oder logError und Reihenfolge der Anrufe doesnt Angelegenheit zu. So können wir es nutzlos nennen. Aber dieser Dienst hat auch keine Setter und alle Mutatoren wie changeFileName () - es ist ein unveränderliches Serviceobjekt. Die Umwandlungsfähigkeit macht das Objekt zustandsbehaftet. Stateful macht Objekt veränderlich. Diese Begriffe sind im Kontext von Diensten interdependent. Immutable Objekte sind einfach Objekte, deren Zustand (die Objektdaten) sich nach der Konstruktion nicht ändern können. Beispiele für unveränderliche Objekte aus dem JDK sind String und Integer. Unveränderliche Objekte vereinfachen Ihr Programm erheblich, da sie einfach zu erstellen, zu testen und zu verwenden sind automatisch threadsicher und haben keine Synchronisation Probleme brauchen nicht eine Kopie Konstruktor brauchen nicht eine Implementierung von Klon erlauben hashCode, um faul Initialisierung zu verwenden. Und Cache seinen Rückgabewert müssen nicht defensiv kopiert werden, wenn sie als ein Feld machen gute Map-Tasten und Set-Elemente (diese Objekte dürfen nicht ändern Zustand während in der Sammlung) haben ihre Klasse invariante etabliert einmal auf Bau, und es muss nie (Ein Begriff von Joshua Bloch): Wenn ein unveränderlicher Gegenstand eine Ausnahme auslöst, bleibt er niemals in einem unerwünschten oder unbestimmten Zustand. Unveränderliche Gegenstände haben eine sehr überzeugende Liste positiver Eigenschaften. Ohne Frage, sie gehören zu den einfachsten und robustesten Arten von Klassen können Sie bauen. Wenn Sie unveränderliche Klassen erstellen, verschwinden ganze Kategorien von Problemen einfach. Machen Sie eine Klasse unveränderlich, indem Sie diesen Richtlinien folgen: Stellen Sie sicher, dass die Klasse nicht überschrieben werden kann - machen Sie die Klasse endgültig. Oder verwenden Sie statische Fabriken und halten Konstruktoren private machen Felder private und endgültige Kraft-Aufrufer, ein Objekt vollständig in einem einzigen Schritt zu erstellen, anstatt einen No-Argument-Konstruktor kombiniert mit nachfolgenden Aufrufen von setXXX-Methoden (das heißt, vermeiden Sie die Java-Beans-Konvention) Keine Methoden, die den Zustand des Objekts in irgendeiner Weise ändern können - nicht nur setXXX-Methoden, sondern jede Methode, die den Zustand ändern kann, wenn die Klasse über veränderliche Objektfelder verfügt, dann müssen sie defensiv kopiert werden, wenn sie zwischen der Klasse passieren Und seinem Anrufer In Effective Java. Joshua Bloch macht diese überzeugende Empfehlung. Klassen sollten unveränderlich sein, es sei denn theres ein sehr guter Grund, sie veränderlich zu machen. Wenn eine Klasse nicht unveränderlich gemacht werden kann, beschränken sie ihre Veränderlichkeit so weit wie möglich. Seine interessant zu beachten, dass BigDecimal ist technisch nicht unveränderlich, da seine nicht endgültig. Beachten Sie, dass javadoc 1.4 die Option - tag enthält, wobei einfache benutzerdefinierte Tags definiert werden können. Man könnte ein is. Immutable-Tag definieren, um beispielsweise eine Klasse als unveränderlich zu dokumentieren. Sie könnten auch die Definition Ihrer eigenen Tag-Schnittstelle für immutable Objekte. Verwenden Sie diese Technik kopieren 2017 Hirondelle Systems Source Code Kontakt Lizenz RSS Einzelne Code-Snippets können unter dieser BSD-Lizenz verwendet werden - Letzte Aktualisierung am 21. September 2013. Mehr als 2.000.000 einzigartige IPs im vergangenen Jahr - Erbaut mit WEB4J. - In Memoriam. Bill Dirani -

No comments:

Post a Comment