Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
programmierung:public_vs._privat [2024/07/01 19:04] – [Getter und Setter] sweprogrammierung:public_vs._privat [2024/07/03 16:04] (current) – removed swe
Line 1: Line 1:
-====== public und private ====== 
- 
-Jedes Attribut einer Klasse und jede Methode kann eine der Eigenschaften ''public'' oder 
-''private'' erhalten. Hat sie keine davon, gilt sie standardmäßig als ''public''. 
- 
-===== Benutzung von Attributen außerhalb der Klasse ===== 
-''public'': ja 
- 
-''private'': nein 
- 
-Das bedeutet, dass Attribute, die ''public'' sind, im konkreten Programmablauf bsp. in einer ''main''-Methode, ausgelesen und geschreiben werden können - mit allen Konsequenzen, die dahinter stecken.  
-So könnten Werte eingetragen werden, die ich als Programmierer gar nicht zulassen möchte, bsp. einen positives Dispo-Wert in einer Klasse ''Konto''. 
- 
-<WRAP group> 
-<WRAP half column> 
-<code java [enable_line_numbers="true", highlight_lines_extra="5"]> 
-public class Konto { 
-     
-    String inhaber;  
-    double guthaben;  
-    double dispo; 
- 
-... 
-     
-} 
-</code> 
-</WRAP> 
- 
-<WRAP half column> 
-<code java [enable_line_numbers="true", highlight_lines_extra="6"]> 
-public class Main { 
-    public static void main(String[] args) { 
- 
-        Konto giro = new Konto(); 
-        giro.inhaber = "Homer"; 
-        giro.dispo = 1000; 
-        ... 
-    } 
-} 
-</code> 
-</WRAP> 
-</WRAP> 
- 
-Hier wird in der ''Main''-Klasse ein Wert für ''Dispo'' eingetragen, der nicht zulässig ist. Wie kann man solch unerwünschtes Zugreifen auf Attribute verhindern? 
- 
-===== Attribut privat setzen ===== 
- 
- 
-Wenn ich selbst bestimmen möchte, wie auf bestimmte Attribute zugegriffen wird, muss ich das Attribut nach außen schützen, indem ich es auf ''private'' setze. Damit geht jeder Zugriff nach außen verloren. Probiere das Beispiel aus, indem das Attribut ''dispo'' das Schlüsselwort ''private'' vorangestellt wird. Du wirst sehen, dass es in der ''Main'' eine Fehlermeldung gibt. Schon ein Text-Editor mit Java-Extension wird sich über nicht Nicht-Sichtbarkeit beschweren. 
- 
-<WRAP group> 
-<WRAP half column> 
-<code java [enable_line_numbers="true", highlight_lines_extra="5"]> 
-public class Konto { 
-     
-    String inhaber;  
-    double guthaben;  
-    private double dispo; 
- 
-... 
-     
-} 
-</code> 
-</WRAP> 
- 
-<WRAP half column> 
-<code java [enable_line_numbers="true", highlight_lines_extra="6"]> 
-public class Main { 
-    public static void main(String[] args) { 
- 
-        Konto giro = new Konto(); 
-        giro.inhaber = "Homer"; 
-        giro.dispo = 1000; 
-        ... 
-    } 
-} 
-</code> 
-</WRAP> 
-</WRAP> 
- 
-===== Getter und Setter ===== 
- 
-Nun wäre es ein ziemlich sinnloses Programm, wenn ich bestimmte Attribute im Programmablauf nicht verändern könnte. Als Programmierer möchte ich ja, dass Attribute ja nach Objekt unterschiedlich sein können. Ich möchte das aber eben nach **meinen eigenen Bedingungen**! 
- 
-Hier kommt das Konzept der sogenannten **Getter** und **Setter**-Methoden zum Tragen. 
- 
-Statt dass ich das Attribut ''public'' mache, biete ich eine **Methode** öffentlich (public) an, die das Setzen (Set) oder Auslesen (Get) von Attributen übernimmt. 
- 
-Was ist nun der große Unterschied zum direkten Bearbeiten? 
- 
-Ich kann in den **Getter** und **Setter**-Methoden meinen eigenen Bedingungen implementieren! So kann ich für das Beispiel des Kontos festlegen, dass ein Attribut ''dispo'' niemals positiv sein darf. Ich als Programmierer erlange somit Kontrolle über mögliche Werte von Attributen! 
- 
-<WRAP group> 
-<WRAP half column> 
-<code java [enable_line_numbers="true", highlight_lines_extra="7,8,9,10,11,12,13,14"]> 
-public class Konto { 
-     
-    String inhaber;  
-    double guthaben;  
-    private double dispo; 
-     
-    public void setDispo(int x){ 
-       if (x > 0){ 
-         this.dispo = -1 * x; 
-       } 
-       else{ 
-         this.dispo = x; 
-       } 
-    } 
- 
-... 
-     
-} 
-</code> 
-</WRAP> 
- 
-<WRAP half column> 
-<code java [enable_line_numbers="true", highlight_lines_extra="7"]> 
-public class Main { 
-    public static void main(String[] args) { 
- 
-        Konto giro = new Konto(); 
-        giro.inhaber = "Homer"; 
-         
-        giro.setDispo(1000); 
-        ... 
-    } 
-} 
-</code> 
-</WRAP> 
-</WRAP>