1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Frage zur OOP in Java

  • anwesender
  • 17. April 2009 um 12:41
  • Unerledigt
  • anwesender
    8
    anwesender
    Mitglied
    Reaktionen
    12
    Punkte
    647
    Beiträge
    125
    • 17. April 2009 um 12:41
    • #1

    Also, ich hab folgende Frage zur OOP:

    wenn ich in einer Klasse eine Variable(private), die einen nicht-primitiven Datentyp hat anlege und sie per getter lese, kann ich eigentlich dann auch in den übergebenen nicht-primitiven Datentyp schreiben, und hätte somit das private umgangen oder lieg ich da falsch? in Code tät ich es mir so vorstellen: (das ja in dem Fall auch funktioniert)

    Code
    public class Test
    {
        class Obj
        {
            public int x;
        }
    
        private Obj var = new Obj();
    
        public Test()
        {
            var.x = 5;
        }
    
        public Obj getVar()
        {
            return var;
        }
    
        public static void main(String[] args)
        {
            Test t = new Test();
    
            Obj o = t.getVar();    // t.var.x = 5
            o.x=7;                 // t.var.x = 7
        }
    }
    Alles anzeigen

    Und das heisst, wenn ich einen nicht-primitiven Datentyp wirklich private machen möchte muss ich ihn im getter jedes mal clonen...?

    Und noch eine Frage zu den Signaturen, in Java ist statt const final zu verwenden, auch wenn es nicht ganz das selbe ist, und readonly gibt es gar nicht.

    Thomas

  • Paulchen
    1
    Paulchen
    Gast
    • 17. April 2009 um 12:54
    • #2
    Zitat von anwesender

    wenn ich in einer Klasse eine Variable(private), die einen nicht-primitiven Datentyp hat anlege und sie per getter lese, kann ich eigentlich dann auch in den übergebenen nicht-primitiven Datentyp schreiben, und hätte somit das private umgangen oder lieg ich da falsch?

    Ja, weil das, was dein Getter zurückgibt, das Objekt selbst ist und keine Kopie.

    Zitat von anwesender

    Und das heisst, wenn ich einen nicht-primitiven Datentyp wirklich private machen möchte muss ich ihn im getter jedes mal clonen...?

    Oder gar nicht per Getter zugänglich machen.

  • anwesender
    8
    anwesender
    Mitglied
    Reaktionen
    12
    Punkte
    647
    Beiträge
    125
    • 17. April 2009 um 13:01
    • #3

    und wie sonst zugänglich machen, wenn nicht per getter? (public wär ja noch die schlimmere lösung...)

    Thomas

  • sutupud
    13
    sutupud
    Mitglied
    Reaktionen
    59
    Punkte
    1.659
    Beiträge
    320
    • 17. April 2009 um 13:25
    • #4

    das objekt soll ja private sein, damit nicht jeder einfach so darauf zugreifen kann.
    mit gettern kann man kontrollieren, was zurückgegeben wird.
    eine korrekte datenkapselung wäre in diesem fall, wenn Obj.x auch private wäre und der Zugriff darauf auch nur per getter zugelassen wird.
    dann kanns du dir nämlich sicher sein, dass niemand änderungen an deinem zurückgelieferten objekt vornehmen kann die du nicht haben möchtest.
    Ein geklontes Objekt zurückzugeben ist auch eine möglichkeit, aber normalerweise erwartet man sich wenn man ein Objekt zurückbekommt, dass man diese auch ändern DARF und dass diese Änderungen sich auf das ursprüngliche Object auswirken.
    Beispiel: wenn ich irgendwas mache wie

    Code
    irgendwas.getSomething().setParameter("blaBla")


    dann möchte ich das meine änderungen auch am ursprünglichen objekt durchgeführt werden.

    "All through my life I've had this strange unaccountable feeling that something was going on in the world, something big, even sinister, and no one would tell me what it was."
    "No," said the old man, "that's just perfectly normal paranoia. Everyone in the Universe has that."

    😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏😐😒😓😔😖😘😚😜😞😠😡😢😣😥😨😩😪😫😭😰😱😲😳😵😶😷

  • anwesender
    8
    anwesender
    Mitglied
    Reaktionen
    12
    Punkte
    647
    Beiträge
    125
    • 17. April 2009 um 13:31
    • #5

    klingt irgendwie logisch...

    eigentlich heisst das, das wenn ich einen solchen getter hätte:
    Object getter()
    {
    return this.var;
    }

    das ich dann this.var auch gleich public machen kann, spar ich mir den getter und komm schlussendlich e auf einen ähnlichen protection-level (bis auf die sichtbarkeit)

    Wenn der getter anders aussieht ist es e etwas anderes, aber bei dem einen konkreten fall wäre der getter nur ballast und macht eigentlich keinen sinn....

    Thomas

  • sutupud
    13
    sutupud
    Mitglied
    Reaktionen
    59
    Punkte
    1.659
    Beiträge
    320
    • 17. April 2009 um 13:33
    • #6
    Zitat von anwesender


    das ich dann this.var auch gleich public machen kann, spar ich mir den getter und komm schlussendlich e auf einen ähnlichen protection-level (bis auf die sichtbarkeit)


    nicht ganz, denn dann kann ich z.b.

    Code
    o.var = null


    mache, und das kann böse sein...

    "All through my life I've had this strange unaccountable feeling that something was going on in the world, something big, even sinister, and no one would tell me what it was."
    "No," said the old man, "that's just perfectly normal paranoia. Everyone in the Universe has that."

    😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏😐😒😓😔😖😘😚😜😞😠😡😢😣😥😨😩😪😫😭😰😱😲😳😵😶😷

  • anwesender
    8
    anwesender
    Mitglied
    Reaktionen
    12
    Punkte
    647
    Beiträge
    125
    • 17. April 2009 um 13:38
    • #7

    Ok, an das hab ich nicht gedacht.
    Danke für die schnelle Antwort :)

    Thomas

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Tags

  • oop

Rechtliches

Impressum

Datenschutzerklärung