Variablen in Klasse verpacken?

Status
Nicht offen für weitere Antworten.

michi2

Bekanntes Mitglied
Hallo,
Ich hatte bisher in der Hauptklasse viele Variablen auf die ich von überall direckt zugegriffen habe:
Code:
   // globale Variablen innerhalb der Klasse
   public File einausgabedatei;           		// zu ladende/speichernde Datei
   public String dateiname_Name = "";          		// reiner Name
   public String dateiname_Path = "";           		// reiner Pfad
   boolean dateiname_gueltig = false;
   boolean gespeichert = false;

Jetzt dachte ich mir ich benütze stadt dessen eine Instanz folgender Klasse:
Code:
package pk;

public class FileInfo
   {
   private File einausgabedatei;           		// zu ladende/speichernde Datei
   private String dateiname_Name = "";          		// reiner Name
   private String dateiname_Path = "";           		// reiner Pfad
   private boolean dateiname_gueltig = false;
   private boolean gespeichert = false;
   
   
   public FileInfo(File datei)
      {
      einausgabedatei = datei;
      dateiname_Name = datei.getName();
      dateiname_Path = datei.getPath().substring(0,
      datei.getPath().length() - dateiname_Name.length());
      dateiname_gueltig = true;
      }
   
   public File getFile()
      {
      return einausgabedatei;
      }  
   public void setFile(File datei)
      {
      einausgabedatei = datei;
      }
   
   public String getName()
      {
      return dateiname_Name;
      }
   public void setName(String name)
      {
      dateiname_Name = name
      }
   public void generateName()
      {
      dateiname_Name = einausgabedatei.getName();
      }
   
   public String getPath()
      {
      return dateiname_Path;
      }
   public void setPath(Sting path)
      {
      dateiname_Path = path;
      }
   public void generatePath()
      {
      dateiname_Path = einausgabedatei.getPath().substring(0,
      einausgabedatei.getPath().length() - dateiname_Name.length());
      }
   
   public boolean isValidated()
      {
      return dateiname_gueltig;
      }  
   public void validate(boolean gueltig)
      {
      dateiname_gueltig = gueltig;
      }
   
   public boolean isSaved()
      {
      return gespeichert;
      }
   public void setSaved(boolean saved)
      {
      gespeichert
      }
   
   }

Und greife darauf dan auf deren Variablen, so wie auf die Instanz selbst, nur mit den get-/set-ern zu!

Ist das die richtige Angehensweise? Was sollte ich beachten/besser machen?

Vielen Dank,
Michi
 
G

Gast

Gast
Attribute public zu machen solltest du dir abgewöhnen. Lediglich bei Konstanten kann es u.U. ok sein. Ansonsten gilt prinzipiell: Alles private machen und den Zugriff über getter/setter regeln.

Merk dir: public == nicht gut *g*
 
G

Gast

Gast
noch was: Zur Benennung von Attributen sollten keine Unterstriche verwendet werden. Das ist auch nur bei Konstanten ok.
 
B

Beni

Gast
Die Idee ist :toll:

Für mich stellen sich folgende Fragen:
  • was sollen diese public generateX-Methoden? Wenn intern etwas zu berechnen ist, soll das FileInfo das selbstständig machen. Ansonsten vergisst du einmal den Aufruf, und schon suchst du Stunden nach dem Fehler.
  • Sind diese "dateiname_X"-Variablen notwendig? Du kannst diese Werte jederzeit aus dem File neu berechnen (und es ist nicht zeitaufwendig)
  • Wieso hat es in den generateX-Methoden und dem Konstruktor denselben Code? Das ist einfach nur schreibaufwendig und fehleranfällig.
  • Bei den set-Methoden (und dem Konstruktor) wären kleine Prüfungen, ob das Argument korrekt ist (z.B. nicht null), angebracht. Das kann ein "if" sein, welches dann eine "IllegalArgumentException" mit einer aussagekräftigen Fehlermeldung versendet.
 

michi2

Bekanntes Mitglied
Beni hat gesagt.:
Die Idee ist :toll:
*Luftsprung*

Beni hat gesagt.:
[*]Sind diese "dateiname_X"-Variablen notwendig? Du kannst diese Werte jederzeit aus dem File neu berechnen (und es ist nicht zeitaufwendig)
[*]Wieso hat es in den generateX-Methoden und dem Konstruktor denselben Code? Das ist einfach nur schreibaufwendig und fehleranfällig.
[*]Bei den set-Methoden (und dem Konstruktor) wären kleine Prüfungen, ob das Argument korrekt ist (z.B. nicht null), angebracht. Das kann ein "if" sein, welches dann eine "IllegalArgumentException" mit einer aussagekräftigen Fehlermeldung versendet.[/list]
Ok, werd ich machen - Danke für den Tipp.
Weis jedoch nicht wie ich Exceptions werfe... :oops: :###

Beni hat gesagt.:
Für mich stellen sich folgende Fragen:
  • was sollen diese public generateX-Methoden? Wenn intern etwas zu berechnen ist, soll das FileInfo das selbstständig machen. Ansonsten vergisst du einmal den Aufruf, und schon suchst du Stunden nach dem Fehler.

  • Nun ich dacht mir das so: Normalerweise hat die Datei immer seinen Dateinamen als Namen, allerdings soll es möglich sein der Datei auch einen anderen Namen zu geben (z.B: mian-Klasse WollMichSau.java - man kann Namen auf 'Main-Klasse' setzen) und um wieder den eigentlichen Dateinamen zu setzen niemt man generateName().
    Vieleicht ist es jedoch klüger 2 Variablen/Methodenpaare zu machen: 1 für den Dateinamen und eine für den Namen der Datei. (vileicht noch einen für ne Beschreibung)

    Vielen Dank,
    Michi

    PS1: ja ich weis das klingt verwierend
    PS2: Das einfügen von Schilden geht seit einiger Zeit nicht mehr!
 

michi2

Bekanntes Mitglied
OK, hab das jezt geändert:
Code:
package pk;

import java.io.*;

public class FileInfo
   {
   private File einausgabedatei;           	//die Datei
   private String name = "";		//ein freiwählbarer Name für die Datei
   private String description = "";	//eine freiwählbare Beschreibung der Datei
   private boolean dateiname_gueltig = false;	//ist diese FileInfo Korekt?
   private boolean gespeichert = false;	//ist die Datei schon gespeichert?
   
   public FileInfo(File datei)
      {
      if(datei == null)
         throw new IllegalArgumentException ("Arrgument 'null' is not allowed in FileInfo(File)");
      einausgabedatei = datei;
      dateiname_gueltig = true;
      generateDescription();
      generateName();
      }
   
   public File getFile()
      {
      return einausgabedatei;
      }  
   public void setFile(File datei)
      {
      if(datei == null)
         throw new IllegalArgumentException ("Arrgument 'null' is not allowed in FileInfo(File)");
      einausgabedatei = datei;
      generateDescription();
      generateName();
      }
   
   //Ändern des Pfades, falls die Datei in einen anderen Ordner verschoben wurde
   public String getPath()
      {
      return generatePath();
      }
   public void setPath(String path)
      {
      if(path == null)
         throw new IllegalArgumentException ("Arrgument 'null' is not allowed in FileInfo(File)");
      einausgabedatei = new File( path+getFilename() );
      }
   private String generatePath()
      {
      return einausgabedatei.getPath().substring(0,
      einausgabedatei.getPath().length() - getFilename().length());
      }
   
   //Ändern des Dateinamens, falls die Datei umbenennt wurde
   public String getFilename()
      {
      return generateFilename();
      }
   public void setFilenamen(String newName)
      {
      if(newName == null)
         throw new IllegalArgumentException ("Arrgument 'null' is not allowed in FileInfo(File)");
      einausgabedatei = new File( getPath()+newName );
      }
   private String generateFilename()
      {
      return einausgabedatei.getName();
      }
   
   //Gibt an ob die Informationen in dieser FileInfo korrekt sind
   public boolean isValidated()
      {
      return dateiname_gueltig;
      }  
   public void validate(boolean gueltig)
      {
      dateiname_gueltig = gueltig;
      }
   
   //Gibt an ob die Datei, seit dem letzten speichern, geändert wurde
   public boolean isSaved()
      {
      return gespeichert;
      }
   public void setSaved(boolean saved)
      {
      gespeichert = saved;
      }
   
   //set-, get- und generate- Methoden für den Namen
   public String getName()
      {
      return name;
      }
   public void setName(String newName)
      {
      if(newName == null)
         throw new IllegalArgumentException ("Arrgument 'null' is not allowed in FileInfo(File)");
      name = newName;
      }
   public void generateName()
      {
      name = generateFilename();
      }
   
   //set-, get- und generate- Methoden für die Beschreibung
   public String getDescription()
      {
      return description;
      }
   public void setDescription(String desc)
      {
      if(desc == null)
         throw new IllegalArgumentException ("Arrgument 'null' is not allowed in FileInfo(File)");
      description = desc;
      }
   public void generateDescription()
      {
      description = generateFilename();
      }
   
   } //Ende Klasse "FileInfo"

Was ich mich jetzt noch frage ob dateiname_gueltig überhaupt sinfoll ist, oder ob ich einfach die Instanz on FileInfo auf null setze wenn die Infos falsch sind.

[Edit: :oops: Fehler im Code -> korrigiert]
 
B

Beni

Gast
michi2 hat gesagt.:
Nun ich dacht mir das so: Normalerweise hat die Datei immer seinen Dateinamen als Namen, allerdings soll es möglich sein der Datei auch einen anderen Namen zu geben (z.B: mian-Klasse WollMichSau.java - man kann Namen auf 'Main-Klasse' setzen) und um wieder den eigentlichen Dateinamen zu setzen niemt man generateName().
Vieleicht ist es jedoch klüger 2 Variablen/Methodenpaare zu machen: 1 für den Dateinamen und eine für den Namen der Datei. (vileicht noch einen für ne Beschreibung)
Achso, in diese Richtung habe ich nicht gedacht. Ich kann dir nicht sagen, welche Lösung die bessere ist. Das "generate" hat mich halt auf die falsche Fährte geführt.

Was ich mich jetzt noch frage ob dateiname_gueltig überhaupt sinfoll ist, oder ob ich einfach die Instanz on FileInfo auf null setze wenn die Infos falsch sind.
Ich würde das nicht auf null setzen. Null führt sehr schnell zu NullPointerExceptions, und du hast schon einige Methoden in FileInfo die davon ausgehen, dass nichts null ist.
 

michi2

Bekanntes Mitglied
Beni hat gesagt.:
Was ich mich jetzt noch frage ob dateiname_gueltig überhaupt sinfoll ist, oder ob ich einfach die Instanz on FileInfo auf null setze wenn die Infos falsch sind.
Ich würde das nicht auf null setzen. Null führt sehr schnell zu NullPointerExceptions, und du hast schon einige Methoden in FileInfo die davon ausgehen, dass nichts null ist.
Ich glaub du hast das falsch gelessen: ich will nicht dateiname_gueltig null-Setzen sondern die Instanz von FileInfo:
Code:
FileInfo datei;
datei = new FileInfo(File xx); //Datei ab hier gültig
//...
datei = null;  //Datei ab hier ungültig
//... - andere Methode:
if(datei != null)
datei.getName();

Und lieber eine NullPointerExceptions als ein Logik-Fehler, oder? :wink:
 
B

Beni

Gast
Achso, ja ich hab dich falsch verstanden. Ja, sowas funktioniert gut (und dann ist ein FileInfo-Objekt immer valid, das vereinfacht die Logik).
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Klassen Einfügen von unbekannter menge an Variablen in eine Klasse mithilfe von ASM Allgemeine Java-Themen 5
B Übernommene Variablen(werte) aus der Main-Klasse ändern? Allgemeine Java-Themen 9
Messoras Klassen Sämtliche Variablen einer Klasse übernehmen Allgemeine Java-Themen 6
D ClassLoader für Variablen einer Klasse setzen Allgemeine Java-Themen 24
K Mehrere JVMs die auf eine Klasse mit statischen Variablen zugreift Allgemeine Java-Themen 19
P Variablen in einer anderen Klasse auf Änderungen überwachen Allgemeine Java-Themen 12
G Nur bestimmte Variablen einer Klasse übernehmen Allgemeine Java-Themen 4
C Erste Schritte Variablen in abhängigkeit von Git branch Allgemeine Java-Themen 7
Fabiator Variablen Variablen Zählen Allgemeine Java-Themen 3
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
berserkerdq2 Labels in IJVM sind keine lokalen Variablen oder? Allgemeine Java-Themen 2
O Fehler bei Variablen Allgemeine Java-Themen 2
N File Path mit Variablen angeben Allgemeine Java-Themen 1
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
R Geometry erstellen die abhängig von Variablen ist Allgemeine Java-Themen 6
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
P static Blocks und variablen Allgemeine Java-Themen 41
V Datentypen Graphikrechner 2/Strings und Variablen in Doubles umwandeln Allgemeine Java-Themen 6
S Kann man Variablen oder Felder definieren deren Typ zwei Interfaces ist..? Allgemeine Java-Themen 9
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
D BlueJ, Variablen die mehrfach vorkommen gleichzeitig umbenennen Allgemeine Java-Themen 3
C Variablen Variablen mit unendlichem Wert Allgemeine Java-Themen 22
J Variablen Mehrere int-variablen in txt abspeichern und danach wieder auslesen Allgemeine Java-Themen 1
T Maximale Felder maximale Variablen Allgemeine Java-Themen 2
W Lebendige Variablen herauslesen Allgemeine Java-Themen 1
K Summierung einer Variablen Allgemeine Java-Themen 5
B Gibt es eine Funktion die den Datentyp einer Variablen ermittelt? Allgemeine Java-Themen 8
X Threads Externe Variablen in Run Methoden verändern Allgemeine Java-Themen 4
K Static Variablen verbieten Allgemeine Java-Themen 10
I Problem beim Aufrufen, von Objektmethoden/ -variablen Allgemeine Java-Themen 6
J Text lesen und in Variablen speichern Allgemeine Java-Themen 3
A Best Practice Variablen vertauschen - Performance Allgemeine Java-Themen 1
F Variablen Variablen schachteln Allgemeine Java-Themen 6
7 6 int variablen vergleichen Allgemeine Java-Themen 34
C Threads Variablen in einem Thread Aktualisieren Allgemeine Java-Themen 17
M Variablen Variablen in Text einbinden Allgemeine Java-Themen 5
K Überschreiben von Variablen bei rekursivem Funktionsaufruf Allgemeine Java-Themen 2
R Übergreifende Variablen? Allgemeine Java-Themen 10
OnDemand Input/Output Variablen in Datei Speichern um sie wieder auszulesen Allgemeine Java-Themen 4
D Variablen zur Laufzeit global speichern (Registry Pattern?) Allgemeine Java-Themen 6
iB0T "goto" Befehl aus Batch in Java und Variablen wert immer wieder neu setzen Allgemeine Java-Themen 4
B Methoden Alle Methoden und Variablen aus Java-Dateien auslesen. Allgemeine Java-Themen 7
D Alle Variablen final setzen ? Allgemeine Java-Themen 26
C Kapselung Warum graift man auf Variablen nur über Methoden und nich direkt zu? Allgemeine Java-Themen 10
C Classloading und statische Variablen Allgemeine Java-Themen 2
K Variablen speichern Allgemeine Java-Themen 2
S Variablen bei Aufruf zurücksetzen Allgemeine Java-Themen 4
faetzminator statische Variablen in Interface - Vererbung? Allgemeine Java-Themen 9
V Gibt es einen Variablen Cast? Allgemeine Java-Themen 8
D Wann sollte ich statische Methoden und Variablen benutzen? Allgemeine Java-Themen 44
M Generische Methoden mit Java und globale Variablen Allgemeine Java-Themen 9
J Statische Variablen, Threadübergreifend. Allgemeine Java-Themen 4
E Variablen anderer Klassen auslesen (nur Name bekannt) Allgemeine Java-Themen 4
V Typargument einer Variablen erfragen Allgemeine Java-Themen 4
B Rechnen mit mehreren Variablen Allgemeine Java-Themen 2
G Thread variablen Sichtbarkeit Allgemeine Java-Themen 15
J Java Pfad nicht mehr in Path Variablen??? Allgemeine Java-Themen 2
T Mit JNI finale Variablen überschreiben Allgemeine Java-Themen 14
T JNI -> auf Java-Variablen etc zugreifen Allgemeine Java-Themen 6
M Bezeichnung für Component-Variablen Allgemeine Java-Themen 6
M Variablen an Java-Programm übergeben Allgemeine Java-Themen 3
Airwolf89 dynamischer Zugriff auf Variablen/ Objekte Allgemeine Java-Themen 4
A Überschreibung von Variablen Allgemeine Java-Themen 3
A JavaCC: Variablen zaehlen Allgemeine Java-Themen 12
B globale und lokale Variablen Allgemeine Java-Themen 17
G referenz von variablen Allgemeine Java-Themen 9
O getRuntime().Exec() - Environment - Variablen setzen? Allgemeine Java-Themen 2
S XML-Parsing / public-Member-Variablen / Design-Frage Allgemeine Java-Themen 8
M Variablen Speicher wieder freigeben ? Allgemeine Java-Themen 9
N Variablen eines Objektes (instanz) in einen Array lesen Allgemeine Java-Themen 7
S In Subklasse auf private Variablen zugreifen Allgemeine Java-Themen 4
S Variablen und ihre Tücken. Allgemeine Java-Themen 7
C Binärbereich einer Variablen abfragen Allgemeine Java-Themen 8
J Zugriff auf den Namen einer Variablen Allgemeine Java-Themen 7
J Überschreiben von Variablen Allgemeine Java-Themen 3
C dynamische variablen Namen! Allgemeine Java-Themen 4
M Int und String Variablen verändern Allgemeine Java-Themen 10
H zwei Date Variablen überschreiben sich Allgemeine Java-Themen 2
G Taushen der Input variablen einer method Allgemeine Java-Themen 14
P Objekt- Variablen Allgemeine Java-Themen 16
K Environment Variablen per java -D weitergeben Allgemeine Java-Themen 9
D in class-Dateien nach variablen suchen! Allgemeine Java-Themen 5
F Werte von Member-Variablen erst im Konstruktor setzen? Allgemeine Java-Themen 7
T Größe eine Variablen in Bytes? Allgemeine Java-Themen 22
B Reguläre ausdrücke mit variablen? Allgemeine Java-Themen 12
MQue JButton an verschiedenen Variablen Allgemeine Java-Themen 2
T Unabhängigkeit von Variablen/ Objekten. Allgemeine Java-Themen 6
G Frage zu statischen Variablen bei Vererbung Allgemeine Java-Themen 15
L Sichtbarkeit von Variablen / getMethode Allgemeine Java-Themen 4
H Variablen (A1, A2, A3 mit A_irgendetwas aufrufen) ohne Array Allgemeine Java-Themen 5
M Variablen in einer .doc Vorlage ersetzen Allgemeine Java-Themen 4
A Reflection - Variablen innerhalb einer Methode ermitteln Allgemeine Java-Themen 9
E Zugriff auf Variablen äusserer Klassen Allgemeine Java-Themen 2
F Allegemeiner Datentyp für Objekte und Primitive Variablen Allgemeine Java-Themen 6
W Array mit Variablen aus Vararg füllen Allgemeine Java-Themen 4
S Problem mit Boolean Variablen Allgemeine Java-Themen 8
A [SOLVED] Classpath und statische Variablen Allgemeine Java-Themen 6
J variablen wert ändernung mit einer art actionlistener? Allgemeine Java-Themen 4
C klassenübergreifende variablen Allgemeine Java-Themen 3
J 28 Variablen vergleichen und die höchsten addieren Allgemeine Java-Themen 15

Ähnliche Java Themen

Neue Themen


Oben