# get/set-methode ?



## Guest (20. Nov 2007)

Hi,

ich habe ein Verständnisproblem mit set/get-methoden.

Beispielsweise "getLabel()", "getChar()", "getMenu()" oder "setPage()", "setLabel()" usw.

Was passiert denn da eigentlich. Ich verstehe das nicht 

Wozu brauche ich die denn??
Wann nutze ich sie??

Könnt ihr mir vielleicht ein paar Beispiel geben oder mir vielleicht ein paar Seiten nennen wo ich mich informieren
könnte???

Weiter verstehe ich solche nicht Sätze wie "get liefert einen Wert zurück" usw.

Hat das etwas mit getter und setter Methoden zu tun???

Wäre nett, wenn ihr mir da weiterhelfen könntet. 

mfg monet


----------



## SlaterB (20. Nov 2007)

sowas steht wohl auf keiner Seite explizit, das ist doch vom Sinn her gegeben,
du hast ein Objekt Person und willst dessen Namen haben,
um ihn z.B. auf dem Bildschirm auszugeben

->
String name = person.getName();

was muss man da überlegen?


----------



## Gast (20. Nov 2007)

Also ist die Methode "getName()" eine eigenständige Methode, die in einer Klasse defieniert ist.

person ist also das Objekt, aber woher weiss die Methode "getName()", dass sie den Namen wiedergeben soll, die sich in dem Objekt befindet. Wenn ich z.B. den Namen in der Variable xyz gespeichert habe????

es hat wohl bei mir noch nicht klick gemacht... 

mfg monet


----------



## Beni (20. Nov 2007)

Weil die Methode folgendermassen in der Klasse "Person" steht:

```
public class Person{
  private String xyz;

  public String getName(){
    return xyz;
  }
}
```

Getter/Setter-Methoden unterscheiden sich syntaktisch überhaupt nicht von irgendwelchen anderen Methoden. Getter und Setter sind keine spezielle Spracheigenschaft.
Das ist lediglich eine informale Abmachung unter Programmierern, "get..." und "set..."-Methoden zu schreiben. Da die meisten Programmierer sich an diese Abmachung halten, weiss halt jeder sofort was ein Getter oder Setter ist. :wink:


----------



## Gast (20. Nov 2007)

Also muss ich die Methode, wenn ich den Namen aufrufen will, z.B. aus einem anderen Objekt immer die Methode vorher in die Klasse eintragen indem der Name gespeichert wird. Dann benutze ich die Methode getName() im anderen Objekt um den Namen aufzurufen um den Namen auf dem Blidschirm wiedergeben zu können???

Stehe heute ein wenig auf der Leitung

Bitte noch mehr Beispiele, vielleicht verstehe ich es dann besser:-(

mfg monet


----------



## Beni (20. Nov 2007)

Du hast alles richtig beschrieben.

Der ganze Witz an der Sache ist, dass du nicht wissen musst, was innerhalb von "getName" geschieht. Du musst nicht wissen ob da wirklich eine Variable "String name" existiert, oder ob das ein "String xyz" ist, oder ob die Person ihren Namen erst in einer Datenbank nachschauen muss... all diese Probleme werden für dich gelöst, ohne dass du die Probleme überhaupt kennen musst (vorausgesetzt du willst die Klasse "Person" nur benutzen. Wenn du sie selber schreiben willst, musst du schon auch selbst nachdenken wie die "get..."-Methoden zu implementieren sind :wink: ).


----------



## ARadauer (21. Nov 2007)

Am Anfang kam mir das auch einwenig aufwändig vor, alle attribute private zu setzen und dafür public getter und setter methoden zu schreiben. aber die meisten IDEs (Programmiertools, zb Eclipse) bieten dafür Funktionen. zb unter Eclipse Source->Generate Getter and Setter.


----------



## Gast (21. Nov 2007)

Wenn ich also z.B. einen Text dem Objekt "Label" zugeordnet habe, kann ich dann mit der get-Methode "getLabel()" den Text, der sich darin befindet aufrufen und diesen dann einer anderen Variable zuordenen. Ist das richtig gedacht?? Denn ich habe sehr viele get/set-Methoden gesehen, auch getLabel zuim Beispiel.

D.h. also, bezogen auf "getName", dass die Methode mir einen oder alle Werte, die in einer Stringvariable gespeichert sind zurück gibt. Oder bekomme ich Werte aus allen Stringvariablen (Referenzvariablen) wieder, die man in einer Klasse definiert hat ??

Wo kann ich denn dann erkennen auf welche Datentypen die get (auch set??)-Methoden zugreifen, bzw. wo finde ich solche Angabe und Beschreibungen, wie z.B. bei Klassen/Methoden.

Ist noch alles ein wenig kompliziert, also helft mir bitte weiter.


----------



## SlaterB (21. Nov 2007)

> Wenn ich also z.B. einen Text dem Objekt "Label" zugeordnet habe, kann ich dann mit der get-Methode "getLabel()" den Text, der sich darin befindet aufrufen und diesen dann einer anderen Variable zuordenen. 

du tauschst also getName durch getLabel,
kannst es auch getRaumschiff, getFruehlingsrolle oder sonst wie nennen,
das Prinzip ist immer das gleiche: irgendwas wird zurückgegeben,
mehr kann man dazu kaum sagen

> mir einen oder alle Werte, die in einer Stringvariable gespeichert sind zurück gibt

ein String ist nur ein String, kann nicht mehrere Werte enthalten,

natürlich ist es nicht verboten, dass das Objekt Person gar keinen String name hat, sondern nur einen String anschrift 
und getName dann von diesem langen String eine substring berechnet und zurückgibt

> Oder bekomme ich Werte aus allen Stringvariablen (Referenzvariablen) wieder, die man in einer Klasse definiert hat ?? 

wie gesagt: vorgegeben ist nix, das hängt allein davon ab, wie getName() programmiert wurde,
das macht kein Computer sondern der Programmierer dieser Klasse,
alles ist denkbar, normal ist 


```
public class Person{ 
  private String xyz; 

  public String getName(){ 
    return xyz; 
  } 
}
```

> Wo kann ich denn dann erkennen auf welche Datentypen die get (auch set??)-Methoden zugreifen

wie bei jeder anderen Operation/ Methode in Java am Rückgabetyp,
bzw. das verrät dir nur was zurückgegeben wird,
was die Operation intern macht weißt du nicht (wie bei jeder anderen Operation/ Methode in Java)

>  bzw. wo finde ich solche Angabe und Beschreibungen, wie z.B. bei Klassen/Methoden. 

wie bei jeder anderen Operation/ Methode in Java in der API, in Code-Kommentaren, direkt im Quellcode oder gar nicht


----------



## Nikolor (21. Nov 2007)

hmmm ich tütel auch gerade an diesen get methoden  herum .

deshalb eine reine verständnissfrage 

sehe ich das richtig das mir ,wie hier ,

die getMethode nur einen Wert zurückgibt ---um damit arbeiten zu müssen muss ich diesen Wert aber 

wieder als String speichern ? (Der String kann aber irgendwie heissen?)

 :? 

Und ist damit Schnittstelle gemeint , das ich eben mit den get oder set Methoden, mit einer Klasse(Objekt)A auf die Klasse B(Objekt),die diese Methoden enthält, zugreifen kann    und ich nur einen Rückgabewert aus den Methoden enthalte,i ch aber sozusagen aus sichtweise von Klasse A nicht sehen kann  wie diese Methoden arbeiten.-oder sehe ich das ---falsch. ???:L  :bahnhof:


----------



## SlaterB (22. Nov 2007)

> die getMethode nur einen Wert zurückgibt 

ja, jede Operation in Java gibt maximal einen Wert zurück, 
ob die Operation intern noch viel mehr macht weißt du nicht, ist ja auch egal

> um damit arbeiten zu müssen muss ich diesen Wert aber wieder als String speichern ?

erstmal kann alles mögliche kommen, nicht nur String,
und wie bei jeder anderen 'Arbeit mit Objekten' kann es gut Sinn machen, den Wert in einer Variablen zu speichern,

muss aber nicht sein, etwa bei
System.out.println(person.getName());
oder
int alter = Helper.rechneAlterAus(person.getGeburtstag());

> Der String kann aber irgendwie heissen?

ein String hat keinen Namen,
die lokale Variable, in der du das Objekt (oder auch den primitiven Wert int 17) ablegst, darf einen beliebigen Namen haben, ja

> Und ist damit Schnittstelle gemeint  [..]

das ist alles in allem eine recht philosophische Frage, zu der ich mich nicht klar äußern möchte 

als Schnittstelle kann man bezeichen, dass die Klasse B eine Operation mit der Signatur
Rückgabewert getX();
hat, ja, 
könnte so auch in einem Java-Interface definiert sein,
die Implementation dieser Operation ist egal, stimmt


----------

