Ja, als nächstes beschäftigen wir uns damit, was Gleichheit von Objekte ist.
Dazu gehen wir zur Folie 7, 27, sagt man, Spiegzettel.
Frage der Gleichheit von Objekten, das brauchen wir,
wenn wir Objekte als Werte behandeln wollt oder mit Objekten Werte nachbilden wollen.
Zunächst müssen wir erst mal feststellen, in Programmiersprachen gibt es den Gleichheitsbegriff.
Man unterscheidet zwischen Werten und Objekten, das können wir uns zunutze machen.
Zum Beispiel in Java gibt es den Operator ist gleich,
ist gleich, der den Vergleich macht auf eine andere Weise,
als das, das ist gleich zeichnender Mathematik tut.
Ja, denn A, ergibt sich zu B,
das schreibt man A, ist gleich B, das ist eine Zuweisung.
If A, gleich B, dann passiert irgendetwas,
hier, drei Pünktchen, Pünktchen, Pünktchen in der Klammer,
das ist ein Vergleich.
Also Zuweisung, Vergleich, Zuweisung A, 42,
B wird 42, EFA, gleich B, dann passiert irgendwas.
Hier würden wir jetzt erwarten, dass A und B
gleich ist
Wie ist das mit Strings? Ja. Bei hier sind
sie tatsächlich gleich, weil sich beides im Intageer handelt.
Aber wie wäre das mit String? Ja, wenn wir
Elling nehmen und dann Lower Case machen, was passiert denn dann?
Ist das noch gleich oder wie auch immer?
Technisch gibt es drei Arten von Gleichheit von Objekten.
Ja, und zwar die Referenzgleichheit, die Identität.
Dann sprechen wir wirklich vom gleichen Objekt. Referenz. Sie
erinnern sich, das hat was zu tun mit dem Speicherplatz.
Also wir verweisen auf einen Speicherplatz. Dort steht das
gleiche Objekt
Ja, das wäre jetzt so. Zum Beispiel,
wir haben ein Objekt, wir nehmen jetzt mal hier so ein Symbol,
wie das für ein zusammengesetztes Objekt genommen werden kann,
zum Beispiel ein Listenobjekt, der Inhalt und der Wert,
der auf das Nächste zeigt.
Ja, also hier haben wir zum Beispiel ein Objekt,
das enthält die Sieben und zeigt auf ein nächstes Objekt,
das sie 42 km hält. Irgendwelche Zahlen werden, wir nehmen,
das sind ja Objekte. Und um das zu verdeutlichen,
Identität oder hier Referenzgleichheit, ja, also A,
die Variable A und die Variable B enthalten Werte,
die auf das gleiche Objekt zeigen.
Das ist einmal Speicherplatz, das ist die Gleichheit der Referenz
und damit ist das wirklich das gleiche Objekt.
Die einfache Gleichheit, strukturelle Gleichheit bedeutet, ja, wir haben das Gleiche. Die gleichen Inhalte,
ja, also A,
hat den Wert sieben und zeigt auf etwas mit 42,
C und D hat auch den Wert sieben und zeigt etwas mit 42. Aber bitteschön,
die beiden sind nicht gleich, das merken wir spätestens dann,
wenn wir das C verändern,
dann werden wir merken,
oh,
ist nicht mehr
das Gleiche wie die
So, und das Gleiche könnten wir jetzt noch in die Tiefe fortsetzen.
Dieb equality, rekursive, strukturelle Gleichheit, könnte man das auf Deutsch übersetzen.
Das Englische hat ja den Vorzug, dass es eindeutiger ist. Ja,
also wir haben das wirklich auch in der Tiefe, gilt das,
bei Fortgesetzten, bei abhängigen Objekten, die sind gleich.
Auch das ist eine Gleichheit. So,
wenn wir jetzt, ach so, genau,
also die Deep Identity impliziert die Shellow Equality,
also die einfache strukturelle Gleichheit und die implizit
impliziert diese
Wenn man das hat, können wir alle Operationen machen,
die das hat und das auch diese.
Umgekehrt gilt das nicht. Ja, also wir können das nicht auch rumdrehen.
Das dürfen wir nicht tun. Wenn wir das technisch sehen,
ja, dann wird das uns schon klarer, dass es da nicht das Gleiche ist.
Aber wir können schon versuchen, das zu implementieren. Zum Beispiel,
wir haben ein Buch in der Bibliothek,
dieses Beispiel hatten wir ja eben schon mal und können dann darstellen,
das hat Eigenschaften, wir können das durch Felder repräsentieren,
Titelauto,
ISBM,
Ja, und die können wir da gleich als gleich ansehen,
auch wenn wir die Referenznummer unterschiedlich ist,
weil es steht ja das Gleiche drin.
Ja, und das ist die Frage, welches dieser Gleichheiten
das jetzt ist. Wir haben tatsächlich die Möglichkeit,
diese unterschiedlichen Vergleichsoperatoren darzustellen und jetzt wieder ein Beispiel aus Java,
das Equals. Equals haben sie schon gehört,
ich würde sie jetzt am liebsten direkt fragen,
wo sie das gehört haben,
in welchem Zusammenhang
Ich bin sicher, Sie wissen es,
es hat mit den Eigenschaften zu tun, die jedes,
jedes Objekt in Java von der absoluten Oberklasse Object erbt.
Denn von Object in Object für dieses Equals definiert.
Und wir hatten damals schon gesagt, ja, das braucht man für die Gleichheit.
Genau jetzt brauchen wir es. Und das Eagles erlaubt uns zu vergleichen,
nämlich das, was wir hier hatten, hier eins vorher,
dass wir auch sagen können, equals, ja,
also wenn das unten drin auch gleich ist, dann liefert equals tot.
Ja, so. Und das können wir dann
wie ein Aufruf einer Operation sagen. Wir können sagen,
ja, wir vergleichen etwas, das eine mit dem anderen
Aber das gibt noch die Frage, wie ist das,
wenn wir es mit Nichts vergleichen, mit einer Referenz,
die ins Leere zeigt, wo kein Objekt dran hängt.
Oder welchen Typ ein Parameter hat, ist das Be Object in Java.
Also können wir etwas mit einem anderen Objekt,
mit einer höheren Klasse, die in niederen Klasse vergleichen?
Das ist die Frage. Und wenn wir das jetzt mal
versuchen zu sagen, wie ist das bei Mathematischen Operationen?
Sie wissen zum Beispiel für Additionen und Multiplikationen
kann ich
die Heidenfolge vertauschen
Wie sieht das aus mit Reflexivität? Haben Sie irgendwann mal
in Mathematik gehört? Ja, A ist gleich. A
, das heißt, Identität ist auch das Gleiche wiegleichheit.
Das mit dem impliziert hatten wir ja zwei Folien vorher bei
den drei Typen. Symmetrisch. Wenn A gleich B ist,
dann gilt auch B gleich auch. Und es ist prinsitiv,
wenn A gleich B ist und B gleich C,
dann ist auch A gleich C.
Ja, jetzt sehe ich das noch ein bisschen anders aus
oder noch mehr Möglichkeiten mit Auto-boxing,
Unboxing.
Seit Jahr war
Wenn wir einen Intager haben, A128 und B ist 1028
und C 128, dann gelten die drei. Als gleich,
ja, aber es ist nicht unbedingt A,
automatisch gleich C. Ja, das ist noch ein Punkt,
der wir, den wir unterschiedlich sehen können,
hier Intager und interessiert der kleine Unterschied.
Ja, also wir können das als Objekt formulieren und wir können
es als einfachen Typ formulieren und in der Einrichtung ist es gleich,
nämlich hier und in der anderen Richtung ist es nicht gleich,
nämlich hier
So. Das ist jetzt also was, was wir bemerken müssen,
durch den Werten und Typen, ja,
die unterschiedliche Frage Gleichheit und Identität, damit sie nochmal das zurückgehen.
Wir hatten das zwei, drei Folien vorher,
also habe ich es gleich so richtig entspringen, ja genau,
ihr war das mit der Gleichheit und der Identität.
So, lassen Sie uns das kurz zusammenfassen,
was ist Wert und was ist Typ? Wir hatten gesagt,
abstrakt zeitlos, veränderlich, Objektzustand behaftet, veränderbar erzeugbar,
im Programmiersprachen können wir Werttypen nehmen,
die eine unveränderliche Objektmenge haben und nicht irgendwie erzeugen,
sondern eher so selektieren und Objekte, die haben eine dynamische Elementmenge,
ich kann also ständig neue erzeugen und sie haben Konstruktoren.
Gleichheit und Identität ist hier unterschiedlich, während es hier gar keine Frage ist.
Und damit haben wir ein paar Sachen, die sind gemeinsam,
nämlich, dass wir Objekte als abstrakten Datentyp haben,
nämlich als Menge von der Typ definiert die Elementmenge und die
Operationen und die Variablen haben wir mit unterschiedlicher Belegung,
sind damit drin.
Ja, okay, bevor wir hier weitergehen,
nur noch mal der Hinweis,
das war die Ehrenwirt auf die Frage mit den
unterschiedlichen Definitionen,
von Gleichheit