Hallo euch allen,
für diese Frage habe ich mich hier angemeldet (aber es werden sicherlich viele weitere folgen):
Ich studiere seit diesem Semester Informatik (neben meinem Master in Sozialwissenschaften) und dank Corona haben wir ein Onlinemodul, das uns die Programmierung beibringen soll. In diesem Modul war eine Übungsaufgabe:
Die Aufgabe war, auszuwählen (Single Chioce), welchen Wert die Methoden obja.getFirstName, objb.getFirstName, objc.getFirstName liefern. Meine Annahme (Michel, John, Florian) war falsch. Offenbar liefern alle drei Methoden den Wert Michel.
Ich habe jetzt unterschiedliche Hypothesen aufgestellt, um mir das zu erklären (da ich meinen Denkfehler nicht finde), die aber z.T. unsinnig sind:
1) Es werden zuerst die Methodenzeilen des Programms und dann erst die Zuweisungen durchgeführt (was absolut doof wäre, spätestens bei einem mehrere hundert Zeilen langen Programm)
2) Über das this in der setter-Methode wird nicht das Attribut firstName der einzelnen Variablen/Objekte adressiert, welchen gerade ein neuer Wert für ihr Attribut zugewiesen wird, sondern die Klasse. Ergo wird in der Klassendefinition diesem Attribut ein Wert zugewiesen, was sich dann nachträglich auf ALLE Objekte, die bereits aus dieser Klasse erzeugt wurden, überträgt (so eine Art "Generalschlüssel", um zeitgleich die Werte aller Objekte auf ein und denselben Wert zu setzen)
3) nur "obj" wurde als neues, eigenständiges Objekt mittels "new" erstellt- Ergo wurde den anderen Variablen(die halt Variablen, keine Objekte sind -> obja, objb, objc) nicht das das Attribut bzw. ein neuer Wert für das Attribut zugewiesen, sondern die Speicherstelle von obj, sodass in den Methoden erst obja/objb/objc als Variable abgerufen wurde, die nur als Verweis auf obj dient. Ergo wurde bei allen Zuweisungen nicht z.B. objc ein Wert zugewiesen, sondern obj, welches über den Inhalt der Variable objc "erreichbar" ist (im Rahmen der Zuweisung). Umgekehrt wird dann halt bei der getter-Methode immer der Wert von "obj" Aufgerufen über die Weiterleitungen durch die in den Variablen enthaltenen "Weiterleitungen"
Wenn alle drei Hypothesen Mist sind (was ich mir gut vorstellen kann): könnte mir jemand erklären, was der korrekte Gedankengang ist+(was mir helfen würde, das Problem nicht nur fachlich, sondern inhaltlich zu verstehen) Zeile für Zeile erklären, welche Werte sich wie verändern?
Ich danke euch jetzt schon einmal dafür, dass ihr euch die Zeit genommen habt, bis hierher zu lesen und eventuell sogar darüber nachdenkt, zu antworten
für diese Frage habe ich mich hier angemeldet (aber es werden sicherlich viele weitere folgen):
Ich studiere seit diesem Semester Informatik (neben meinem Master in Sozialwissenschaften) und dank Corona haben wir ein Onlinemodul, das uns die Programmierung beibringen soll. In diesem Modul war eine Übungsaufgabe:
Java:
class Name {
String firstName;
String surname;
public void setFirstName (String firstName) {
this.firstName = firstName;
}
public String getFirstName () {
return this.firstName;
}
}
...
Name obj = new Name();
obj.setFirstName("John");
Name obja = obj;
obja.setFirstName("Florian");
Name objb = obj;
Name objc = obja;
obja.setFirstName("Michel");
Die Aufgabe war, auszuwählen (Single Chioce), welchen Wert die Methoden obja.getFirstName, objb.getFirstName, objc.getFirstName liefern. Meine Annahme (Michel, John, Florian) war falsch. Offenbar liefern alle drei Methoden den Wert Michel.
Ich habe jetzt unterschiedliche Hypothesen aufgestellt, um mir das zu erklären (da ich meinen Denkfehler nicht finde), die aber z.T. unsinnig sind:
1) Es werden zuerst die Methodenzeilen des Programms und dann erst die Zuweisungen durchgeführt (was absolut doof wäre, spätestens bei einem mehrere hundert Zeilen langen Programm)
2) Über das this in der setter-Methode wird nicht das Attribut firstName der einzelnen Variablen/Objekte adressiert, welchen gerade ein neuer Wert für ihr Attribut zugewiesen wird, sondern die Klasse. Ergo wird in der Klassendefinition diesem Attribut ein Wert zugewiesen, was sich dann nachträglich auf ALLE Objekte, die bereits aus dieser Klasse erzeugt wurden, überträgt (so eine Art "Generalschlüssel", um zeitgleich die Werte aller Objekte auf ein und denselben Wert zu setzen)
3) nur "obj" wurde als neues, eigenständiges Objekt mittels "new" erstellt- Ergo wurde den anderen Variablen(die halt Variablen, keine Objekte sind -> obja, objb, objc) nicht das das Attribut bzw. ein neuer Wert für das Attribut zugewiesen, sondern die Speicherstelle von obj, sodass in den Methoden erst obja/objb/objc als Variable abgerufen wurde, die nur als Verweis auf obj dient. Ergo wurde bei allen Zuweisungen nicht z.B. objc ein Wert zugewiesen, sondern obj, welches über den Inhalt der Variable objc "erreichbar" ist (im Rahmen der Zuweisung). Umgekehrt wird dann halt bei der getter-Methode immer der Wert von "obj" Aufgerufen über die Weiterleitungen durch die in den Variablen enthaltenen "Weiterleitungen"
Wenn alle drei Hypothesen Mist sind (was ich mir gut vorstellen kann): könnte mir jemand erklären, was der korrekte Gedankengang ist+(was mir helfen würde, das Problem nicht nur fachlich, sondern inhaltlich zu verstehen) Zeile für Zeile erklären, welche Werte sich wie verändern?
Ich danke euch jetzt schon einmal dafür, dass ihr euch die Zeit genommen habt, bis hierher zu lesen und eventuell sogar darüber nachdenkt, zu antworten
Zuletzt bearbeitet: