java-forum.org
JBoss Seam
Alter Preis: 39,95 €
Jetzt: 0,00 €

zzgl. Versandkosten

Zurück   java-forum.org > Java-Forum FAQs > FAQ - Übersicht > Java-FAQ Beiträge > Die Top-Fragen

Thema geschlossen
Themen-Optionen Thema durchsuchen Ansicht
Alt 05.05.2004, 11:19   #1 (permalink)
Stammbenutzer
CD-R 80
 
Benutzerbild von bygones
 
Registriert seit: 07.10.2003
Beiträge: 7.431
Blog-Einträge: 7
Abgegebene Danke: 16
Erhielt 33 Danke für 31 Beiträge
Standard Warum Instanzvariablen privat deklarieren

Oft sieht man hier im Forum Code in dem Instanzvariablen public deklariert sind.
Warum man das nicht tun soll wird hier nun erklärt:

Man deklariert Instanzvariablen aus drei Gründen nie als public.
  • 1. Schnittstellen Definitionen:[list:cefaceb114]Stellt euch vor ihr habt eine Klasse die z.b. eine Map Struktur als Instanzvariabel hat. Der User soll etwas in diese Map eintragen können und sich Werte holen.
    Ist diese Map nun als private deklariert könnt ihr diese Anforderungen durch zwei einfache setValue und getValue methoden realisieren und ihr habt keinerlei Probleme.
    Ist diese Map aber als public definiert, so kann man von außen ohne Probleme auf diese Map zugreifen und u.a. Werte aus der Map löschen oder sogar die Map komplett löschen, was möglicherweise zu Fehlern im Programm führt

    Anderes Beispiel: Ihr habt eine Klasse die eine mathematische Funktion darstellt, die nur im positiven Bereich definiert ist. Wenn ihr nun eine private Instanzvariable habt könnt ihr z.b. bei der set Methode der Variable testen ob diese auch positiv ist (und wenn nicht eine Exception schmeißen oder so).
    Ist sie hingegen als public definiert, so kann man jeden beliebigen Wert setzen, ohne dass eine Kontrollmöglichkeit besteht
  • 2. Flexibiltät:[list:cefaceb114]Nehmen wir wieder das Beispiel der Map Struktur von oben.
    Stellt euch vor nach längere Programmierzeit stellt ihr fest, dass die von euch gewählte Map Struktur leider nicht die richtig ist und ihr sie ändern müsst.
    Ist sie nun als private deklariert und nur mit den zwei oben beschriebenen Methoden zugänglich, so müsst ihr nur diese beiden Methoden anpassen und das Programm läuft weiterhin.
    Ist sie aber als public deklariert müsst ihr im kompletten Programm suchen, wo ihr auf diese Struktur zugreift und den Code auch dort anpassen
  • 3. Unabhängigkeit:[list:cefaceb114]Basiert stark auf punkt 2 und ist eine kleine Erweiterung. Ein optimales Progamm trennt zwischen Modell (also die Klasse die die Daten hält - in dem Fall die mit der Map) und Nutzen der Daten bzw. Visualisierung der Daten.
    D.h. optimal wäre, wenn die aussehenstehenden Klassen die bestehende Struktur des Datenmodells gar nicht kennen (sie müssen nicht wissen wie die Daten gespeichert sind, sondern nur wie sie an sie rankommen).
    Hier gilt die gleiche Argumentation wie oben.
    Ist die Map struktur als private deklariert läuft man kein Problem dieses Paradigma zu verletzen, da man nur über die gewählten Schnittstellen an die Struktur kommt.
    Ist die Struktur aber als public deklariert, so ist das Paradigma eindeutig verletzt
Daher: Instanzvariablen IMMER als private deklarieren
  • Ausnahmen:[list:cefaceb114]1. Konstanten können als public deklariert werden, wenn sie Informationen bereitstellen die auch von anderen Klassen gebraucht werden
  • 2. Instanzvariablen in einer Superklasse können als protected deklariert sein, so dass erbende Klassen auf diese Variablen direkt zugreifen können
__________________
Test Driven Development is like sex. If you dont like it, you probably aint doing it right !

Proleptic programming is like driving 15 on the freeway because you will exit once and pass a school area !
bygones ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Thema geschlossen

Lesezeichen

Latex Maths & Physics Editor ...

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
abstract, privat, Vererbung OOP-ler Allgemeine Java-Themen 29 30.09.2008 09:23
privat mit und ohne final Bit2_Gosu Java Basics - Anfänger-Themen 4 27.02.2008 17:12
Zugriff auf attribut anderer Klasse privat/public? Delight Java Basics - Anfänger-Themen 9 17.02.2008 14:43
Vererbung: privat Variablen Bob2 Java Basics - Anfänger-Themen 6 10.02.2005 11:45
Privat Java Basics - Anfänger-Themen 4 14.01.2004 15:59


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:03 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de