Warum können Objekte unterschiedlicher Klassen nicht den gleichen Zustand besitzen?

5 Antworten

Weil jede Instanz eines Objektes auch einen (versteckten) Zeiger auf den Prototypen der Klasse enthält.

Und selbst wenn zwei Klassen den gleichen Aufbau haben und nach der Instantiierung mit den gleichen Werten belegt wurden, so unterscheiden sie sich doch in dem Wert, der in diesem Zeiger steht.

Wenn dieser Wert auch der gleiche wäre, dann würde er auch auf denselben Prototypen verweisen. Das geht aber nur, wenn die beiden Klassen denselben Namen haben. Zwei Klassen mit identischem Namen sind aber im gleichen Namensraum untersagt. Der Compiler würde eine Fehler liefern.

CrystalixXx  20.04.2016, 19:08

Da müsste man jetzt noch zwischen Referenztypen und Wertetypen unterscheiden.

0

kA was genau du meinst.

Angenommen ich hab ne Klasse "Auto" mit der Eigenschaft farbe.

auto1 = Auto(blau)
auto2 = Auto(blau)
auto3 = Auto(rot)


In deinem Sinne haben auto1 und auto2 doch denselben Zusatand, oder was meinst du? Bin nicht sicher, was du mit "Zustand" meinst. Kann auch ne Klasse "CoolesAuto" mit der Eigenschaft Farbe machen und genauso verwenden.




Woher ich das weiß:Studium / Ausbildung – Informatikstudium

Es kommt auf die Definitiion von "Zustand" und auch der Semantik bzw. Mächtigkeit der jeweiligen Prog.Sprache an.
Wenn ich zwei Subklassen B1, B2 einer Klasse A bilde, und beide die selben Attribute sowie das selbe Protokoll (Methoden) haben, wären inst(B1) und inst(B2) z.B. in C++/Java/C# u.a.m. immer noch über getClass() unterscheidbar
(mal abgesehen davon, daß sie - sofern man den Wert des Pointers (=Speicheradresse) als Teil des Zustandes definiert, der sichtbar ist, darüber immer noch unterscheiden könnte. Auch nehmen viele Systeme die Adresse als identityHash-value - was auch als "Zustand" angesehen werden könnte.

Es gibt aber auch Sprachsysteme, wo man selbst diese Operatoren redefinieren kann und Instanzen von außen nicht unterscheidbar wären (Einschränkung bei Identität - aber auch da gibt es Ausnahmen, wo man den == Operator redefinieren kann).

Insofern würde ich zu einem "pauschal falsch - in den meisten Fällen aber richtig" tendieren.

Deine Frage lässt sich so pauschal nicht beantworten, weil sie eine kontextabhängige Behauptung als Falsch impliziert. Zunächst einmal müsste geklärt werden, was mit "Zustand" gemeint ist, bevor man weiter ins Detail geht.

Ich kann beispielsweise eine Klasse erstellen, die eine Gleitkommazahl darstellt. Dafür gibt es primitive Datentypen, die so etwas ermöglichen. Ich kann aber auch eine Klasse erzeugen, die eine Gleitkommazahl darstellt, in dem ich in ihr 4 Eigenschaften definiere: Vorzeichen, Mantisse, Basis und Exponent. In beiden Fällen kann ich die Zahl 3.1415 darstellen. Die Ausgabe/Darstellung des Wertes ist gleich, obwohl es zwei unterschiedliche Klassen sind.

Ähnliches Verhalten gilt für Vererbung. Wenn eine Klasse von einer anderen Klasse erbt, dann sind sie technisch gesehen unterschiedlich, aber beide erfüllen den gleichen Zweck, wenn keine Änderungen vorgenommen wurden. Vor allem in der Vererbung kann es kompliziert werden, wenn es darum geht zu definieren, was "gleicher Zustand" bedeutet/bedeuten soll.

Durch Konvertierungsmethoden ist die Umwandlung eines Objektes von einer Klasse in ein Objekt einer anderen Klasse möglich, entweder implizit ohne Datenverlust oder explizit mit Datenverlust. Implizit wäre gleichzusetzen mit "gleicher Zustand", explizit hingegen nicht. (Beispiel: ein Integer kann immer als Gleitkommazahl dargestellt werden - ohne Informationsverlust. Andersherum ist es jedoch nicht immer möglich.)

So lange nicht definiert ist, was mit Zustand gemeint ist oder in welchem Kontext die Aussage zu betrachten ist, gibt es keine richtige Antwort.

Der Zustand einer Klasse sagt ja aus welche Werte die Attribute der Klasse gerade besitzen. Verschiedene Klassen haben auch verschiedene Attribute und können daher nicht den selben Zustand haben. 

Woher ich das weiß:Berufserfahrung – Beruf, Schule, Hobby und eigene Erfahrungen
registerrr 
Fragesteller
 20.04.2016, 15:22

ok, danke

0
kordely  20.04.2016, 15:22

Was können wir sagen, wenn zwei Klasse dieselbe Attribute haben?

0
Berny96  20.04.2016, 15:27
@kordely

Der Fall existiert ganz einfach nicht. Warum sollte man dann eine neue Klasse schreiben?

0
kingbongo  20.04.2016, 16:56
@Berny96

Warum ist doch egal, aber man kann es durchaus tun und danach wurde gefragt. 

0
kingbongo  20.04.2016, 16:59
@registerrr

Hää??? Wenn es zwei Klassen sind mit gleichen Attributen kann es trotzdem nicht die gleiche Klasse sein.  Klasse Mann sowie Frau, Attribut zb Name, alter.... = 2 verschiedenen Klassen mit gleichen Objektzustand: name kim, alter 12

0
CrystalixXx  20.04.2016, 15:57

Was hält mich davon ab zwei Klassen mit den gleichen Attributen/Eigenschaften zu definieren?

1
kingbongo  20.04.2016, 16:54
@CrystalixXx

Nix, in der Welt der Programmierung ist alles erlaubt, ob es Sinn macht ist 'ne andere Frage nach der auch nicht gefragt wurde. Daher können Objekte anderer Klassen sehr wohl den gleichen Zustand haben. 

0
CrystalixXx  20.04.2016, 18:57
@kingbongo

Die Frage ging an Berny96, weil er der Meinung ist, dass es nicht möglich sei und ich gerne den Grund erführe.

0