OOP Getter, Setter und andere Probleme

Noel

Mitglied
Hallo,

es fällt mir schwer durchzublicken was genau "gutes OOP" heißt. Ich hab jetzt ein Programm geschrieben, dass Celsius in Fahrenheit umrechnet.

Es wäre mir fürs Selbststudium wichtig, wenn jemand vielleicht mal schauen könnte was an meinem geschrieben Code zu verbessern wäre.

zB

-> Konstruktor so ok? kommt mir irgendwie komisch vor, da das was eigentlich da drin steht doch in eine Methode gehoert oder?

-> Sind die Getter überflüssig? Brauch ich Setter?

-> Sind die Variablen so gut genutzt bzw deklariert? (private/public?)

-> cels = richtigeEingabe("^[0-9]?[0-9].?[0-9]*?$"); Soll EIGENTLICH nur 1 oder 2 Zahlen vor dem Komma und 1 oder 2 Zahlen hinter dem Komma zulassen. Das Kommas [.] soll ebenfalls optional sein

Klasse Temperatur
Java:
package nichtStatisch;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Tempertaur {

	private double fahrenheit;
	private double celsius;
	private String cels;

	public void tempUmrechnen() {
		fahrenheit = (celsius * 9.0 / 5.0) + 32.0;
		System.out.println("Gegeben sind: " + celsius
				+ "° Grad Celsius und das entspricht: " + fahrenheit
				+ "° Fahrenheit");
	}

	/**
	 * 
	 * Liest die Daten durch <code>input</code> ein!
	 * 
	 * @param input
	 * @return Eingabe
	 */
	public String richtigeEingabe(String input) {
		Pattern p = Pattern.compile(input);
		String richtig = null;
		boolean repeat = true;
		while (repeat) {
			try {
				BufferedReader eingabe = new BufferedReader(
						new InputStreamReader(System.in));
				richtig = eingabe.readLine();
				Matcher m = p.matcher(richtig);
				repeat = !m.matches();
			} catch (IOException ioe) {
				System.out.println("Das war zu erwarten! ");
				ioe.printStackTrace();
			}
		}
		return richtig.trim();
	}

	// GETTER - public

	public double getCelsius() {
		return celsius;
	}

	public double getFahrenheit() {
		return fahrenheit;
	}

	public String getCels() {
		return cels;
	}

	// SETTER - private 

	// Konstruktor
	
	public Tempertaur() {
		System.out
				.println("Geben Sie die Tempperatur an: ");
		cels = richtigeEingabe("^[0-9]?[0-9].?[0-9]*?$");
		try {
			celsius = Double.parseDouble(cels);
		} catch (NumberFormatException e) {
			System.out.println("Schlimme Exception! ");
			e.printStackTrace();
		}
	}
}

Klasse BerechneTemperatur
Java:
package nichtStatisch;

import java.io.IOException;
import nichtStatisch.Tempertaur;

;

public class BerechneTemperatur {

	/**
	 * Die <code>Main-Methode</code> nimmt 2 Werte an:
	 * <ul>
	 * <li>Celsius</li>
	 * <li>Fahrenheit</li>
	 * </ul>
	 * rechnet dann Celsius in Fahrenheit um! <br>
	 * <br>
	 */
	public static void main(String[] args) throws IOException {

		Tempertaur test = new Tempertaur();
		test.tempUmrechnen();

	}

}

Vielen Dank
 
Zuletzt bearbeitet:

Raistlin

Mitglied
Aaaalso, um schon mal ein paar deiner Fragen zu beantworten:
Die Variablen sind als private schon mal so ok. Man sollte, jedenfalls laut meinem Prof, Variablen nach möglichkeit immer private halten. Die getter und setter brauchst du dann natürlich, um auf die Variablen zugreifen zu können.
Was den Konstruktor angeht, der ist, ehrlich gesagt, Stuhl. Der Konstruktor dient ja nur dazu, dir ein Objekt zu erstellen, das gewisse Datenelemente hat. In deinem Fall sollte der Konstruktor vielleicht so aussehen:
Java:
public Temperatur(double celsius){
      this.celsius = celsius;
}
und wenn du keine Clesius-Zahl mitgeben willst, nimmst du den Standard-Konstruktor, der dann so aussieht:
Java:
public Temperatur(){
       this.celsius = 0;
}

Das Komma bei der Celsius-Zahl kann leider (meiner Meinung nach) nicht optional sein, da du die Variable Celsius ja schon als double gewählt hast.

Hoffe, dir ist fürs erste ein bisschen geholfen.
 

Noel

Mitglied
Ja danke ein wenig :)

Es geht mir auch nicht um den Variablenwert von double, sondern um den regulären Ausdruck:

("^[0-9]?[0-9].?[0-9]*?$")

Nur wie verhält sich das dann mit den Gettern & Settern wenn ich die Daten eh über die Tastatur eingeben lasse?
 

Final_Striker

Top Contributor
Die Eingabemethode für die Werte gehört nicht in die Klasse Temperatur. Stell dir mal vor du willst die Klassen in eine GUI verwenden, dann müsstest du die Klasse ja extra anpassen, sehr unpraktisch.

Die Klasse bekommt Werte. Woher die Werte kommen (Tastatur, Datenbank oder GUI) kann ihr herzlichst egal sein.
 

bLaSt

Aktives Mitglied
Ich hätte nur grundsätzlich anzumerken,dass es gerade bei komplexeren und längeren Programmen sinnvoll ist die main-Methode in eine eigene Klasse auszulagern.
In deinem aktuellen Beispiel ist das kein Problem, da deine main-Methode sehr klein ist.
Aber bei größeren Programmen wird sie sehr schnell viel größer und eine zusätzliche Klasse für die main-Methode steigert die Übersicht.
 
G

Gast2

Gast
hm, eigentlich sollten in der main Methode nur ein paar Zeilen drin stehen um das Programm zu starten (GUI erstellen oder ähnliches).
Zumindest meiner ansicht nach ;)
 

Noel

Mitglied
Die Eingabemethode für die Werte gehört nicht in die Klasse Temperatur. Stell dir mal vor du willst die Klassen in eine GUI verwenden, dann müsstest du die Klasse ja extra anpassen, sehr unpraktisch.

Die Klasse bekommt Werte. Woher die Werte kommen (Tastatur, Datenbank oder GUI) kann ihr herzlichst egal sein.

Genau darum geht es. Also schreibe ich dafuer eine eingene Methode?

@EikeB danke aber es ist eine eigene Klasse.


Kann mir snst noch jemand was zu dem regulären Ausdruck sagen?

cels = richtigeEingabe("^[0-9]?[0-9].?[0-9]*?$"); Soll EIGENTLICH nur 1 oder 2 Zahlen vor dem Komma und 1 oder 2 Zahlen hinter dem Komma zulassen. Das Kommas [.] soll ebenfalls optional sein
 
G

Gast2

Gast
der Post war auch auf meinen Vorposter bezogen.
Wenn man die main-Methode in ne andere Klasse auslagern muss damits übersichtlich bleibt, dann läuft da mMn was falsch ;)
 

bLaSt

Aktives Mitglied
der Post war auch auf meinen Vorposter bezogen.
Wenn man die main-Methode in ne andere Klasse auslagern muss damits übersichtlich bleibt, dann läuft da mMn was falsch ;)

Es war damit nur gemeint, dass es übersichtlicher ist es auszulagern, so hab ichs halt gelernt. Damit ist nicht gemeint,dass man ez die main-Methode besser zuspamen kann:D
Aber sobald man mal ein paar Eingaben vom User übernehmen will und diese dann zuordnen will plus Exception Behandlung kanns schon mal mehr werden. Ist ja auch geschmackssache, ich finds so übersichtlicher, sollte keiner angegriffen werden der das anderst macht;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Getter/Setter - wie sieht ein Setter aus? Und wie nicht? Java Basics - Anfänger-Themen 34
W Getter/Setter Java Basics - Anfänger-Themen 4
KogoroMori21 Objektvariable anderer Klasse übernehmen, Getter/Setter Java Basics - Anfänger-Themen 11
T Verständnisfrage Objekt Getter Setter Java Basics - Anfänger-Themen 102
KogoroMori21 Getter und Setter Java Basics - Anfänger-Themen 5
S Klassen instanziieren und verwenden von Getter und Setter Java Basics - Anfänger-Themen 4
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
V getter/setter Garage Java Basics - Anfänger-Themen 12
S getter, setter in abstrakter Klasse oder lieber Unterklassen Java Basics - Anfänger-Themen 4
topi Kapselung getter und setter Java Basics - Anfänger-Themen 5
D Setter/Getter für Instanzvariablen praktisch? Java Basics - Anfänger-Themen 19
S Getter/Setter - Variablenklasse ? Java Basics - Anfänger-Themen 5
S getter and setter Java Basics - Anfänger-Themen 12
L Getter und Setter Java Basics - Anfänger-Themen 2
M Generics getter und setter Methoden Java Basics - Anfänger-Themen 4
E Methoden Objekte in Methode aufrufen ohne getter und setter? Java Basics - Anfänger-Themen 1
L Klassen - Getter & Setter Methoden Java Basics - Anfänger-Themen 2
D Erste Schritte Java - Setter und Getter Java Basics - Anfänger-Themen 1
Z Getter/Setter NullPointer Exception Java Basics - Anfänger-Themen 6
K Klassen Setter/Getter Java Basics - Anfänger-Themen 3
F OOP Schleifen und Probleme mit Setter und Getter Java Basics - Anfänger-Themen 1
L Setter und Getter/Vererbung Java Basics - Anfänger-Themen 6
K Kapselung getter & setter Java Basics - Anfänger-Themen 11
J Frage zu Setter u. Getter Java Basics - Anfänger-Themen 7
T Variablen Getter-Setter vs Public Variable? Java Basics - Anfänger-Themen 5
Y Konstruktor - Setter/Getter Java Basics - Anfänger-Themen 3
N Klassen fragen zur getter und setter methode Java Basics - Anfänger-Themen 11
D Ab wann getter und setter Java Basics - Anfänger-Themen 2
K getter & setter Java Basics - Anfänger-Themen 6
C getter/setter Problem anscheinend Java Basics - Anfänger-Themen 13
G Erste Schritte Getter und Setter Java Basics - Anfänger-Themen 12
B Getter,Setter - Konstruktor überflüssig? Java Basics - Anfänger-Themen 26
N Sprite Methode (Getter, Setter, Konstruktor) Java Basics - Anfänger-Themen 9
S getter/setter aufrufen Java Basics - Anfänger-Themen 9
B Java getter/setter funktioniert nicht! Java Basics - Anfänger-Themen 7
X OOP Getter/Setter überschreiben den Wert ihrer Variablen nicht Java Basics - Anfänger-Themen 4
T Erste Schritte Verständnisfrage: Getter und Setter Methoden Java Basics - Anfänger-Themen 3
V public Variablen vs Getter + Setter Java Basics - Anfänger-Themen 4
F Getter und Setter Java Basics - Anfänger-Themen 4
lulas[]args getter/setter umstellung Java Basics - Anfänger-Themen 6
B Klassen Getter-Setter vor neuem Klassenaufruf - wie? Java Basics - Anfänger-Themen 20
A OOP Getter und Setter Java Basics - Anfänger-Themen 18
L Unterschied Konstruktor / Getter Setter Java Basics - Anfänger-Themen 13
L Setter und Getter für Arrays? Java Basics - Anfänger-Themen 4
N boolean bei Setter und getter methoden Java Basics - Anfänger-Themen 21
J Getter und Setter auch intern benutzen - guter Stil? Java Basics - Anfänger-Themen 31
Houly Setter/Getter MEthoden testen Java Basics - Anfänger-Themen 4
P OOP Getter&Setter Methoden funktionieren nicht Java Basics - Anfänger-Themen 7
H Setter-und-Getter-Konvention Java Basics - Anfänger-Themen 8
V Reflection API - getter und setter Java Basics - Anfänger-Themen 7
-horn- EINE setter/getter klasse aus mehreren klassen befüllen Java Basics - Anfänger-Themen 13
C Getter/Setter Java Basics - Anfänger-Themen 61
H Frage zu getter und setter Java Basics - Anfänger-Themen 5
S Unbenutzte/überflüssige Getter/Setter herausfinden? Java Basics - Anfänger-Themen 2
M getter/setter bei JTextField ? Java Basics - Anfänger-Themen 21
G warum Setter/Getter Java Basics - Anfänger-Themen 25
S In einer Liste auf getter und setter zugreifen Java Basics - Anfänger-Themen 6
Say Class scope und Instance scope und Getter nur selbstgeschrieben Methoden Java Basics - Anfänger-Themen 11
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
O Instanzattribut per Getter Methode zuweisbar, warum? Java Basics - Anfänger-Themen 8
P Klassenübergreifende Ausgabe mittels "getter" nicht möglich Java Basics - Anfänger-Themen 21
J Array über Getter erlangen Java Basics - Anfänger-Themen 34
M Getter einer PriorityQueue Java Basics - Anfänger-Themen 1
KopaCoda Getter mehrfach aufrufen -> ist das guter code? Java Basics - Anfänger-Themen 3
V Getter Methode Java Basics - Anfänger-Themen 38
T Extrahiertes Objekt durch Getter bekommen Java Basics - Anfänger-Themen 2
D Kapselung final Variablen mit Getter? Java Basics - Anfänger-Themen 2
A getter Java Basics - Anfänger-Themen 3
T Getter für Array Java Basics - Anfänger-Themen 4
J-Gallus Ein Getter bekommt eine anderen Type als er Return soll Java Basics - Anfänger-Themen 9
K Public Attribute oder getter - funktioniert leider beides hier nicht Java Basics - Anfänger-Themen 5
P getter Java Basics - Anfänger-Themen 1
M Getter Problematik mit ItemListener Java Basics - Anfänger-Themen 17
S Array und Getter-Methode Java Basics - Anfänger-Themen 2
Avarion Getter von Super-Klasse funktioniert nicht Java Basics - Anfänger-Themen 10
J Variable per Getter holen - wie ? Java Basics - Anfänger-Themen 2
D Getter Mehtode Unsicher Java Basics - Anfänger-Themen 6
M Problem mit getter, liefert nur alte Werte Java Basics - Anfänger-Themen 6
El_Lobo Methoden Zu viele Getter- und Settermethoden - geht das einfacher? Java Basics - Anfänger-Themen 3
G Generics kein Zugriff auf getter eines Objekts Java Basics - Anfänger-Themen 4
M OOP Aufruf vieler Getter Methoden abkürzen? Java Basics - Anfänger-Themen 7
MU5T4NG Getter und Setten bei GUI-Erstellung Java Basics - Anfänger-Themen 13
B Variablen keine Arrayübergabe für getter im Interface Java Basics - Anfänger-Themen 8
J int Wert mit getter holen und in String parsen Java Basics - Anfänger-Themen 5
O Universeller GETTER Java Basics - Anfänger-Themen 5
J Die Getter Methode Java Basics - Anfänger-Themen 6
E [Erledigt] Schöner Code zur Reduktion von unzähligen Getter-Methoden Java Basics - Anfänger-Themen 2
F 2 dimensionales Array getter Methode Java Basics - Anfänger-Themen 3
K Getter Java Basics - Anfänger-Themen 6
S JTextField in anderer Classe mit getter Methode auslesen. Java Basics - Anfänger-Themen 2
M if oder verschiedene getter Java Basics - Anfänger-Themen 31
I If / Else in Setter? Java Basics - Anfänger-Themen 8
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
C Setter-Methode mit final-Attribut Java Basics - Anfänger-Themen 9
M Gettter/Setter Methoden Klassenfelder kapselung und zugriff? Java Basics - Anfänger-Themen 1
JavaTalksToMe Kapselung Setter Frage Java Basics - Anfänger-Themen 15
kilopack15 Ist diese setter-Methode richtig? Java Basics - Anfänger-Themen 2
T setter im Konstruktor einbauen? Java Basics - Anfänger-Themen 8
F Setter Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben