# Zugriff auf attribut anderer Klasse privat/public?



## Delight (15. Feb 2008)

Hallo,

wenn ich von Klasse 2 auf das object text in Klasse 1 zugreifen will, muss ich dann in Klasse 1 eine getXX Methode dafür schreiben? oder kann ich das JTextField auch public machen sprich 
	
	
	
	





```
public JTextField text = new JTextField();
```
 ?? dann bräuchte ich die umständliche Methode nicht.... ok Klassenattribute sollen gekapselt sein daher nur zugriff mit Methode, doch ist text ja kein attribut im eigentlichen Sinn...


```
Klasse 1:

private JTextField text = new JTextField();


Klasse 2:
```


----------



## Pappenheimer++ (15. Feb 2008)

wieso soll denn das kein attribut "im eigentlichen sinn" sein? was sind denn für dich attribute im eigentlichen sinn? etwa nur native datentypen?


----------



## maki (15. Feb 2008)

Und was ist an gettern und setter umständlich?

Entweder OO oder nicht, imho.


----------



## Ocean-Driver (15. Feb 2008)

Halte dich an die Kapselung. Alles andere ist unsauber.


----------



## Marco13 (15. Feb 2008)

Eine Methode wie
JTextField tf = meinPanel.*getTextField();*
ist auch unsauber...  Das sollte man IMHO nicht machen  :noe:


----------



## André Uhres (16. Feb 2008)

Delight hat gesagt.:
			
		

> ..wenn ich von Klasse 2 auf das object text in Klasse 1 zugreifen will..


Ich geh mal davon aus, dass du in Klasse2 die GUI aktualisieren willst. Mach in Klasse1 eine Methode

```
public void update(...) {...}
```
der du die nötigen Parameter übergibst, damit sie die GUI aktualisieren kann.


----------



## Marco13 (16. Feb 2008)

Bei diesem "update" müssen aber u.U. Verbindungen hergestellt werden, die es nicht geben sollte (d.h. dafür müßte ggf. das Modell das GUI kennen) :noe: Damit landet man schnell in einem chaotischen Gewirr von "updates", die sich gegenseitig aufrufen, und die man schwer wieder auflösen kann. 

Es wurde ja nicht gesagt, umd welche Klassen es sich handelt (bzw. ob dort überhaupt irgendwas "modelliert" wurde, oder ob einfach "Klasen geschrieben wurden, so dass es funktioniert" :roll: ) aber beim klassischen Model-View-Controller oder Observer-Pattern wäre es ja gerade umgekehrt: Das GUI sollte als Observer (oder Listener) fungieren. Wenn sich das Modell ändert (also das, was im GUI angezeigt wird), dann sagt es "notifyObservers" oder wirft einen Event, und die GUI kriegt das mit, und holt sich _selbst_ die Daten aus dem Modell, die es anzeigen will.


----------



## André Uhres (16. Feb 2008)

Mein Vorschlag passt auch zum MVC Konzept


----------



## Marco13 (17. Feb 2008)

Wie gesagt: Die Informationen darüber, in welchem _Zusammenhang_ der Zugriff benötigt wird, waren etwas zu knapp, aber sowas wie

```
class Model
{
    private Data data;
    private GUI gui;

    private void somethingChanged()
    {
         gui.update(data);
    }
}
```
sollte man IMHO und AFAIK eben NICHT machen... Das Model sollte das GUI eigentlich nicht kennen.... Falls es aber so gemeint war

```
class Controller
{
    private Model model;
    private GUI gui;

    private void changeSomething()
    {
         model.changeSomething();
         gui.update(model.getData());
    }
}
```
passt das schon eher, aber trotzdem sollte man sich überlegen, ob man das GUI-update dem Controller überlassen will...


----------



## André Uhres (17. Feb 2008)

Wie gesagt: das update macht die GUI


----------

