tutorials.de Buch-Aktion 02/2012
Like Tree2Danke
  • 1 Beitrag von Bratkartoffel
  • 1 Beitrag von Akeshihiro
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
302
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Oct 2005
    Beiträge
    277
    Hallo,
    ich habe in meinem Lehrbuch den Satz "Achten Sie darauf, keine Zugriffsmethoden zu schreiben, die Referenzen auf veränderbare Objekte zurückgeben." gelesen. Als Beispiel wird nur gesagt, z.B. ein Objekt der Klasse Date.

    Habe jetzt mal eine einfache Beispielklasse:

    import java.util.*;
    public class Test {

    public Test(int jahr, int monat, int tag) {
    GregorianCalendar kal = new GregorianCalendar(jahr, monat-1, tag);
    this.tag = kal.getTime();
    }

    public Date getTag() {
    return tag;
    }

    public static void main(String[] args) {
    Test t1 = new Test(2007, 7, 26);
    System.out.println(t1.getTag());
    }

    private Date tag;

    }

    Wieso sollte man das besser lassen.

    Danke schiese
     

  2. #2
    Avatar von Bratkartoffel
    Bratkartoffel Bratkartoffel ist offline gebratene Kartoffel
    tutorials.de Premium-User
    Registriert seit
    Jun 2007
    Ort
    Passau (Niederbayern)
    Beiträge
    1.298
    Hallo,

    denke, dass die Aussage grundsätzlich einmal übertrieben ist. Manchmal ist es gewünscht, nur Referenzen zurückzugeben damit eine andere Klasse damit arbeiten kann.
    Als Beispiel hier die Methode getContentPane() von einem JFrame, welche dir den sichtbaren Bereich des Fensters zurückgibt.

    Jedoch würde es ja grundsätzlich der Sichtbarkeit wiedersprechen, wenn man private-Objekte über eine public-Get-Methode abrufen könnte.

    Von daher denke ich, dass man Grundsätzlich dem Ansatz folgen sollte, es jedoch auch nicht schlimm ist, wenn man ihn unter gegebenen Umständen bricht.

    Gruß
    BK
    Geändert von Bratkartoffel (17.08.10 um 12:52 Uhr)
    schiese bedankt sich. 
    Über eine gute Bewertung freut sich jeder ;)
    Bitte erledigte Threads als "Erledigt" markieren.

    "Though a program be but three lines long, someday it will have to be maintained.''
    -- Geoffrey James, "The Tao of Programming"

  3. #3
    Registriert seit
    Oct 2005
    Beiträge
    277
    Vielen Dank für deine Antwort.
    Ich hätte gedacht, dass es damit was zu tun hat, dass sich nachher mehrere Sachen aufs selbe Objekt beziehen und so Probleme entstehen können.
    Werde den Abschnitt dann erst einmal überspringen.

    schiese
     

  4. #4
    Avatar von Akeshihiro
    Akeshihiro Akeshihiro ist offline Mitglied Platin
    Registriert seit
    Aug 2008
    Ort
    Kirchlengern (NRW)
    Beiträge
    575
    Ich hab den Satz mal gegooglet und bin darauf gestoßen: klick
    Ich sag mal so: Es kommt drauf an, aber als Grundsatz würde ich das nicht verbuchen. In dem Beispiel der verlinkten Seite stimme ich dem Satz zu. Allerdings ist das ein Fall, wo man in der Regel automatisch explizit einen Klon erstellen würde, z.B. indem man ein neues Date-Objekt mit dem Timestamp des alten füttert. In der OOP ist es nunmal so, dass man Referenzen verwendet und mehrere Variablen nunmal auf das selbe Objekt verweisen können, das ist auch sinnvoll. Wozu soll man bei jeder Parameter-Übergabe oder Funktions-Rückgabe eine Kopie weiterreichen, damit stopft man nur den RAM und verschwendet Rechenleistung.

    Wie gesagt, das hängt vom Fall ab und ich denke auch nicht, dass der Autor das wirklich ernst meinte. Ich denke eher, dass das ein Hinweis für Neulinge ist und sagen will: "Hey, pass mal auf. Wenn du eine Referenz weiterreichst und in dieser Daten änderst, dann werden in allen anderen Referenz-Variablen die Änderungen genauso wirksam, weil sie alle auf das selbe Objekt (bzw. die selbe Speicherstelle) verweisen und somit alle Referenzen davon betroffen sind."
    schiese bedankt sich. 
    Man sagt, das Schwert eines Samurai sei seine Seele ...

    Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.

    Das Schmieden ist eine Kunst; Das Schreiben auch ;)

  5. #5
    Registriert seit
    Oct 2005
    Beiträge
    277
    Vielen Dank, Akeshihiro.
    Klonen ist auch das nächste Kapitel
     

  6. #6
    Anime-Otaku Anime-Otaku ist offline Mitglied Brillant
    Registriert seit
    Aug 2005
    Ort
    Karlsruhe (Baden-Württemberg)
    Beiträge
    900
    Kleiner Einwurf:
    Was bei String (und Date) zum Beispiel umgesetzt wird ist das immutable Pattern (oder wie das heißt). Daher eine Klasse die man nicht mehr ändern kann, sondern nur beim Initialisieren die Werte bestimmt.
    Dabei braucht man Dinge wie der hashCode nur einmal berechnen.
     
    Wäre super wenn ihr euren Code in dieser Form einfügt:
    Code java:
    1
    
    System.out.println("Hello World");
    [java]System.out.println("Hello World");[/java]
    Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
    Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
    Blog: http://javaeffective.wordpress.com/

Ähnliche Themen

  1. C/C++ Anfängerfrage
    Von mazzaker im Forum C/C++
    Antworten: 10
    Letzter Beitrag: 13.11.07, 14:19
  2. Antworten: 2
    Letzter Beitrag: 27.06.07, 10:57
  3. mal ne anfängerfrage
    Von Phalax im Forum Algorithmen & Datenstrukturen mit Java
    Antworten: 1
    Letzter Beitrag: 27.05.05, 06:42
  4. Anfängerfrage
    Von kmf im Forum PHP
    Antworten: 3
    Letzter Beitrag: 11.04.05, 09:42
  5. Objekte selektieren und Objekte einfärben
    Von wal im Forum Cinema 4D
    Antworten: 4
    Letzter Beitrag: 09.02.04, 18:00