Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.

Ähnliche Präsentationen


Präsentation zum Thema: "Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold."—  Präsentation transkript:

1 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold Institut für Wirtschaftsinformatik Software Engineering JKU Linz

2 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 2 das Selbe (Identität) zb. Zwei Referenzen auf ein Objekt zeigen auf dasselbe Objekt das Gleiche werden als gleich angesehen; zb. bestimmte Werte gleich. Im Falle zweier Referenzen auf dasselbe Objekt sind natürlich ebenso alle Werte gleich. Manchmal möchte man auch zwei verschiedene Objekte (im Speicher) als gleich betrachten. Objektidentität Grundlegende Begriffe

3 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 3 Prüfung der Identität: a == b Prüfung der Gleichheit (Semantik kommt ins Spiel) a.equals(b) a.equals(b) wird immer true ergeben, für zwei Referenzen, die auf dasselbe Objekt zeigen. Zusätzlich ermöglicht equals die Definition einer Gleichheitsrelation für den gewünschten Typ. Objektidentität Prüfung zB. Collection contains()-Methoden verwenden equals() um auf Gleichheit zu prüfen.

4 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 4 In der Oberklasse Objekt wird die equals() Methode über Objektidentität implementiert: equals(Object o) { return this == o; } Für die meisten echten Objekte ist dies ausreichend. (Beispiel Person, WayPoint) Objektidentität Warum gibt es da einen Unterschied?

5 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 5 Für einige Klassen ist dies nicht ausreichend, da zB. Zwei verschiedene Objekte von Typ Integer mit gleichem Wert auch als gleich angesehen werden sollen. Objekte solcher Klassen haben meist keine eigene Identität, man sagt sie haben Wertsemantik. Sie respräsentieren eher einen Wert, als ein „echtes“ Objekt mit Identität. Für diese Klassen ist nun equals(...) überschrieben, um diese Gleichheitsrelation zu ermöglichen. Beispiele: String, Integer, Long, Double,.... Objektidentität Objekte mancher Klassen haben „Wertsemantik“

6 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 6 Objektidentität in Java Implementierungen in der Klassenbibliothek //String: public boolean equals(Object anObject) { if (this == anObject) { //Referenzen auf //dasselbe Objekt -> true return true; } if (anObject instanceof String) { // + Werte vergleichen String anotherString = (String)anObject; int n = count; if (n == anotherString.count) { char v1[] = value; char v2[] = anotherString.value; int i = offset; int j = anotherString.offset; while (n-- != 0) { if (v1[i++] != v2[j++]) { return false; } return true; } return false; }

7 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 7 Objektidentität in Java Implementierungen in der Klassenbibliothek //Integer: public boolean equals(Object obj) { if (obj == this) return true; if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; } //Object: public boolean equals(Object obj) { return (this == obj); }


Herunterladen ppt "Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold."

Ähnliche Präsentationen


Google-Anzeigen