OOP Nutzen von Accesors?

djafix

Mitglied
hallo,
ich hab mal eine eher allgemeine frage, die auch für andere programmiersprachen als java gilt..und zwar:

ist es eigentlich guter programmierstil accesors zu nutzen? da diese ja public sind, kann ich mir nicht ganz vorstellen, dass das so das gelbe vom ei ist? kann mir das vielleicht einer erklären :idea:
 

Joose

Top Contributor

djafix

Mitglied
also vereinfacht erklärt sind accesors folgendes:

Java:
private String name;
public String Name;
{
      get{
            return name;
      }
      set{
           name = value;
      }

in java gibt es zwar dieses get/set-konstrukt soweit ich weiß nicht, aber in c# z.b. ist das gängige praxis...ich kann mir nur nicht erklären ob das nun eigentlich gut oder schlecht ist :D

man kann dann also quasi Name = "test" schreiben und somit würde name den wert "test" haben.
 
Zuletzt bearbeitet:

Thallius

Top Contributor
Das Ganze nennt sich (eigentlich überall, ich kann mir kaum vorstellen das das in C# anders ist) Getter und Setter.
Und diese machen eigentlich immer Sinn, nur sollte die zugehörige Property dann auch private sein. Setter und Getter zu benutzen ist die feinste Art OOP zu programmieren, nur leider sind die meisten zu Faul dazu und machen die Porperty einfach public und greifen direkt darauf zu. Damit enhebe ich der Klasse die Kontrolle über die Porperty was schlicht weg schlechter OOP Stil ist.

Gruß

Claus
 

Joose

Top Contributor
Ach so, verstehe.
In C# kann man Properties dazu sagen (welche get/set Methoden für Attribute ersetzen).

Ich muss sagen ich vermisse Properties in Java sehr, aber ich glaub mal gelesen zu haben diese Syntax zu Java hinzugefügt werden soll. (irgendwann einmal). Ich finde sie sehr angenehm.
 

Aristro

Mitglied
in java gibt es zwar dieses get/set-konstrukt soweit ich weiß nicht

Code:
private String name; 

public String getName(){
    return this.name;
}

public void setName(String value){
     this.name = value;
}

aber in c# z.b. ist das gängige praxis...ich kann mir nur nicht erklären ob das nun eigentlich gut oder schlecht ist

In Java wie auch in c# werden getter/setter verwendet um Objekte zu kapseln. Außerdem können mithilfe der setter/getter Objekte validiert werden.

Für OOP sind Akzessor wichtig und können in den meisten Entwicklungsumgebungen auch schnell generiert werden, sodass der zusätzliche Aufwand sehr gering ist. ( In eclipse z.B. mit dem Shortcut Strg +1 auf dem Feld anwenden dem du einen getter/setter hinzufügen möchtest)

mfg

Aristro :popcorn:
 
Zuletzt bearbeitet:

Joose

Top Contributor
Je nach Schreibweise auch etwas mehr ;)

Java:
private String name;

public String Name {
   get;
   set;
}

oder 

public String Name {
   get {
      return name;
   }
   set {
      name = value;
   }
}

Ich finde auch schöner zu lesen

Java:
this.Name = "Fritz";

statte

this.setName("Fritz");
 

djafix

Mitglied
naja was getter/setter sind ist mir schon klar :D mir gings lediglich darum ob das nicht irgendwie komisch ist über die getter/setter einer variable auf eine andere variable zuzugreifen.... aber da es das in java anscheinend so eh nicht gibt, dann kann das im prinzip auch schnuppe sein :D
 

Joose

Top Contributor
...quasi die propertys(keine methoden),die öffentlich zugänglich sind und damit die privaten variablen getten/setten

Das passt ja eh, du willst Werte setzen können aber das was gesetzt wird auch überprüfen!
Somit muss den "Umweg" über getter/setter gehen. Wenn es egal wäre welchen Wert du draufschreibst könntest du dir die getter/setter auch Sparen.
 

ceving

Aktives Mitglied
Das passt ja eh, du willst Werte setzen können aber das was gesetzt wird auch überprüfen!

Das würde aber nur den Setter motivieren.

Die Motivation für den Getter kommt aus dem Wunsch, die Implementation der Klasse ändern zu können, ohne dass es einen Einfluss auf andere Klassen hat, die deine Klasse verwenden.

Beispiel: du schreibst eine Klasse ohne Accessor (mit 2 s), auch Mutator genannt. Wenn eine andere Klasse deine Klasse verwenden will, greift sie direkt auf die Member-Variablen zu. Jetzt will jemand deine Klasse aber in einem Server verwenden, der parallel über mehrere Threads verteilt Requests verarbeitet und dafür deine Klasse verwenden soll. Das bedeutet, du musst den Zugriff Thread-sicher machen. Und das bedeutet, dass man nicht mehr direkt auf die Member-Variablen zugreifen kann. Statt dessen muss der Zugriff über alle Threads synchronisiert werden. Das bedeutet, dass vor jedem Zugriff ein Lock akquiriert werden muss. Hättest du eine Klasse mit Getter programmiert, wäre es problemlos möglich, diesen Mechanismus in deinem Getter zu ergänzen ohne, dass es Einfluss auf den Code der anderen Klassen hätte. Wenn du eine Klasse ohne Getter schreibst, musst du sie spätestens jetzt auf Getter umstellen und alle anderen Klassen müssen geändert werden, weil dort an Stelle des Member-Variablen-Zugriffs jetzt der Getter-Aufruf stehen muss.

Und um sich diese Änderung im Falle eines Falles zu ersparen, verwendet man direkt von Anfang an gleich Getters, auch wenn man sie in den meisten Fällen eigentlich nicht braucht. Und zusätzlich spekuliert man darauf, dass der Compiler sie weg optimiert, wenn sie nicht wirklich ausprogrammiert sind, denn ein Methoden-Aufruf ist eigentlich langsamer als der Zugriff auf eine Member-Variable.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Klassen Instanzen einer Klasse in einer anderen unabhängigen Klasse nutzen Java Basics - Anfänger-Themen 4
I Objekte in ShareProject speichern um später zu nutzen Java Basics - Anfänger-Themen 4
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
A Ein Array bearbeiten und in einer anderen Methode nutzen Java Basics - Anfänger-Themen 6
jamboy7 Java-API kennenlernen, verstehen und nutzen lernen Java Basics - Anfänger-Themen 4
K Zweimal dieselbe Methode als Übergabeparameter nutzen Java Basics - Anfänger-Themen 1
low_in_the_head Eigene Exception nutzen Java Basics - Anfänger-Themen 4
T Mathe Bibliotheksfunktionen nutzen bei Geany Java Basics - Anfänger-Themen 1
B Jsoup: gleiche Session nutzen Java Basics - Anfänger-Themen 0
G Scanner nutzen und Index auslesen Java Basics - Anfänger-Themen 8
I Greedy Methode Methoden nutzen Java Basics - Anfänger-Themen 3
I Klassen als Datentyp nutzen? Java Basics - Anfänger-Themen 11
J Button als Feld nutzen Java Basics - Anfänger-Themen 17
CptK Interface 2 von einander unabhängige Frames mit Panel gleichzeitig nutzen Java Basics - Anfänger-Themen 66
I System.currentTimeMillis() nutzen Java Basics - Anfänger-Themen 2
K FYI: Reguläre Ausdrücke nutzen ja/nein Java Basics - Anfänger-Themen 2
M Welches Framework für kleine WebApp nutzen? Java Basics - Anfänger-Themen 6
M WebApp in Azure - Welse Tools nutzen? Java Basics - Anfänger-Themen 2
I Java updatebar? Oder lieber C# nutzen? Java Basics - Anfänger-Themen 9
J Polymorphie und Dynamisches Binden richtig nutzen Java Basics - Anfänger-Themen 11
L Variable aus einer Klasse in einer anderen Klasse nutzen Java Basics - Anfänger-Themen 6
S Abstrakte Methode nutzen Java Basics - Anfänger-Themen 9
Kornblume Comparable Interface für Objektvergleiche nutzen Java Basics - Anfänger-Themen 15
deatzi Variable aus If Abfrage später nutzen Java Basics - Anfänger-Themen 4
L Variablen in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
B Methoden Nutzen der Instanzvariablen in Klassenmethoden Java Basics - Anfänger-Themen 1
S Vererbung Variablen klassenübergreifend nutzen Java Basics - Anfänger-Themen 42
B Variable in mehreren Klassen nutzen Java Basics - Anfänger-Themen 4
A Kann man ein Attribut aus einer anderen Klasse nutzen? Java Basics - Anfänger-Themen 3
O Datentypen Volle 16 Bit eines Short für flags Abfrage nutzen Java Basics - Anfänger-Themen 11
L Java 1.6 ohne sicherheitsmedung nutzen Java Basics - Anfänger-Themen 4
U Array werte speichern und für berechnungen nutzen Java Basics - Anfänger-Themen 4
J Wie lässt sich der Konstruktor einer Klasse einer Funktion einer Klasse nutzen. Java Basics - Anfänger-Themen 4
P Verschiedene Java Versionen nutzen Java Basics - Anfänger-Themen 6
F Interface aus anderem Package nutzen Java Basics - Anfänger-Themen 10
S Input/Output JS Source code in Java nutzen Java Basics - Anfänger-Themen 1
M Pc Leistung zu 100% nutzen Java Basics - Anfänger-Themen 4
N Variablen Variable in Main deklarieren und in anderer Methode nutzen Java Basics - Anfänger-Themen 12
G Was ist der Nutzen von generischen Konstruktoren? Java Basics - Anfänger-Themen 4
O Innere Klassen nutzen? Java Basics - Anfänger-Themen 4
S Umgebungsvariable Wert einer Variable global nutzen Java Basics - Anfänger-Themen 3
T unterklasse will eine methode von der oberklasse nutzen Java Basics - Anfänger-Themen 4
D Name einer Variable als String nutzen Java Basics - Anfänger-Themen 13
K Vererbung Variable aus anderer Klasse nutzen Java Basics - Anfänger-Themen 3
A .jar unter Linux nutzen Java Basics - Anfänger-Themen 2
K Ein zentrales Objekt in vielen anderen Klassen nutzen? Java Basics - Anfänger-Themen 22
DStrohma Best Practice Hibernate für kleine Anwendung nutzen? Java Basics - Anfänger-Themen 4
B methoden aus einer anderen klasse nutzen Java Basics - Anfänger-Themen 3
B Kann man Windowbuilder auch mit Juno (also Eclipse 4.2) nutzen? Java Basics - Anfänger-Themen 1
J Sinn/Nutzen von Scanner Java Basics - Anfänger-Themen 23
C Printf nutzen Java Basics - Anfänger-Themen 10
C Printf nutzen Java Basics - Anfänger-Themen 6
Anfänger2011 selber geschriebene Programme nutzen Java Basics - Anfänger-Themen 11
K Verschiedene JDK´s paralell nutzen? Java Basics - Anfänger-Themen 3
M Interface als Konstruktorparameter nutzen, um Funktion zu plotten Java Basics - Anfänger-Themen 14
B lokales JRE bei Applets nutzen ? Java Basics - Anfänger-Themen 4
L Variable einer ListenerKlasse nutzen Java Basics - Anfänger-Themen 3
X Muss man Java können um Jython nutzen zu können? Java Basics - Anfänger-Themen 14
A Variablen Variable aus if in main nutzen Java Basics - Anfänger-Themen 14
V Ressourcen aus Ordner nutzen Java Basics - Anfänger-Themen 5
E JNI Registry in Executable Jar Datei nutzen? Java Basics - Anfänger-Themen 6
I Konstruktor in anderer Klasse nutzen Java Basics - Anfänger-Themen 11
T csv einlesen, nutzen einer direkten speicherort eingabe Java Basics - Anfänger-Themen 2
R Verschiedene Jar Versionen nutzen Java Basics - Anfänger-Themen 14
P Methoden Daten aus Methode weiter nutzen Java Basics - Anfänger-Themen 14
P Variablen Variable in if Bedingung anlegen, Wert zuweisen und diesen als Bedingung nutzen Java Basics - Anfänger-Themen 4
J 2d Koordinaten in Array richtig nutzen Java Basics - Anfänger-Themen 2
P WAV-Datei in Eclipse nutzen und in .jar exportieren Java Basics - Anfänger-Themen 5
W welches Paket für welches Aufgabe nutzen Java Basics - Anfänger-Themen 3
D Teile eines Time-Strings nutzen Java Basics - Anfänger-Themen 8
Binary.Coder Wie linkedlist für Djikstra nutzen? Java Basics - Anfänger-Themen 6
F Color Map .map-Datei nutzen Java Basics - Anfänger-Themen 4
N Variablen Variable nach Schleife nutzen Java Basics - Anfänger-Themen 5
E Clonable-Interface für Backups nutzen Java Basics - Anfänger-Themen 2
Bastie Compiler-Fehler Fremde .class nutzen? Java Basics - Anfänger-Themen 12
W Datentypen Operatoren für eigenen Datentyp nutzen Java Basics - Anfänger-Themen 2
M Mehrere Threads nutzen --> run() schneller als start(), Warum? Java Basics - Anfänger-Themen 3
E JButton klassenübergreifend nutzen? Java Basics - Anfänger-Themen 6
B Snowball Stemmer Bibliothek nutzen Java Basics - Anfänger-Themen 8
D Selbstprogrammierte Datein in Netbeans nutzen? Java Basics - Anfänger-Themen 2
Burny91 FileReader und Writer gleichzeitg nutzen Java Basics - Anfänger-Themen 2
E Programm auch auserhalb von Eclipse nutzen? Java Basics - Anfänger-Themen 3
Developer_X String[]args nutzen, wie? Java Basics - Anfänger-Themen 7
S Klassenbibliotheken nutzen und finden? Java Basics - Anfänger-Themen 6
M LinkedList in anderer Klasse nutzen Java Basics - Anfänger-Themen 4
B Variable einer Klasse in einer anderen Klasse nutzen Java Basics - Anfänger-Themen 14
B Eine neue Klasse in anderen Projekten nutzen Java Basics - Anfänger-Themen 5
H Maps? Wozu? Nutzen? Java Basics - Anfänger-Themen 3
B TR programmiert nun will ich es im PC nutzen Java Basics - Anfänger-Themen 2
C Von einer Klasse auf die nächste Zugreifen und die Methode nutzen? Java Basics - Anfänger-Themen 5
R Variablen Klassenübergreifend nutzen Java Basics - Anfänger-Themen 18
Antoras eine Instanz von mehrere Klassen aus nutzen Java Basics - Anfänger-Themen 2
B Datei aus Jar-Datei richtig nutzen Java Basics - Anfänger-Themen 4
Daniel_L Geschweifte Klammern nutzen oder nicht? Java Basics - Anfänger-Themen 3
D Integer aus Nebenklasse in Hauptklasse nutzen Java Basics - Anfänger-Themen 8
B Wie kann ich eigene Pakete nutzen? Java Basics - Anfänger-Themen 10
-horn- Bereits aufgerufene Class aus anderer Class nutzen? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben