Setter zum Berechnen nutzen?

Status
Nicht offen für weitere Antworten.

Verjigorm

Top Contributor
Hallo,
mal wieder eine kurze Frage zum Thema "guter Programmierstil"

Ich habe ein Objekt, welches 2 Kilometerangaben besitzt.
Diese werden per "Setter" gesetzt.
Nun möchte ich die Differenz der beiden bilden.
Ist es ok, wenn man das in der "Set-methode" aufruft?

In beiden Set-Methoden wird überprüft ob die beiden Kilometerwerte ungleich -1 (default) sind.
Wenn ja, dann wird die Länge berechnet und intern gespeichert.
Das hat den Vorteil, dass wann immer einer der beiden Werte neu gestzt wird, die Länger immer intern aktualisiert wird.
Kann man das so lassen, oder sollte man die Neuberechnung eher von Aussen her anstossen?

das ganze sieht momentan so aus:

Code:
	/**
	 * @param km_anfang the km_anfang to set
	 */
	public void setKm_anfang(double km_anfang) 
	{
		this.km_anfang = km_anfang;
		berechneLaenge();
	}


	/**
	 * @param km_ende the km_ende to set
	 */
	public void setKm_ende(double km_ende) 
	{
		this.km_ende = km_ende;
		berechneLaenge();
	}
	

	/**
	 * 
	 */
	private void berechneLaenge()
	{
		if(this.km_anfang != -1 && this.km_ende != -1)
		{
			laenge_in_m = (int) (this.km_ende*1000 - this.km_anfang*1000);
			//System.out.println("berechne Länge: " + laenge_in_m);
		}
	}

mfg Verjigorm
 
Hi,

also über Stil lässt sich natürlich immer streiten, aber generell würde ich die Berechnung der Länge in der "getXY()"-Methode anstellen, die diesen wert lieferen soll. Der Grund ist, dass du ja nur dann den aktuellen Wert berechnen musst, wenn es wirklich jemand wissen möchte. 🙂 Anders sieht das natürlich aus, wenn die Länge auch intern für andere Zwecke verwendet wird.

die Berechnung expilizt von aussen anzustoßen wäre wohl keine gute Idee (wird ja implizit angestoßen durch Reaktion auf get-Abfrage).
 
also über Stil lässt sich natürlich immer streiten, aber generell würde ich die Berechnung der Länge in der "getXY()"-Methode anstellen, die diesen wert lieferen soll. Der Grund ist, dass du ja nur dann den aktuellen Wert berechnen musst, wenn es wirklich jemand wissen möchte. Anders sieht das natürlich aus, wenn die Länge auch intern für andere Zwecke verwendet wird.

ja ist geschmackssache, ich schreib meine berechnungen auch meistens in die get methoden.
würde man jetzt jedoch unverhältnis mässig mehr get aufrufe als set aufrufe haben, wäre die berechnung in der set methode performanter...

meiner meinung nach ist das geschmacksache....
 
Stilfragen... wichtig wären imho dass man die Code Conventions einhält (wink wink 😉).

Ansonsten würde ich die Berechnung auch "dynamisch" im get machen und keine redundante Variable für die Differenz verwenden.
 
maki hat gesagt.:
Stilfragen... wichtig wären imho dass man die Code Conventions einhält (wink wink 😉).

Ansonsten würde ich die Berechnung auch "dynamisch" im get machen und keine redundante Variable für die Differenz verwenden.

ah stimmt, daran habe ich ja noch garnicht gedacht
 
Hmja, für diesen Fall ist es noch sehr einfach, mit 2 settern und einer Differenz - die kann auch direkt dynamisch im getter berechnet werden, oder eben in den settern, falls sie nochmal innerhalb der Klasse (also NICHT nur beim getter) gebraucht wird oder so...

Eine Alternative, die für diesen Fall "overkill" wäre, aber bei "komplexeren" Berechnungen angebracht sein KANN, wäre eine Art "dirty-flag":
Code:
class Blablubb
{
    private Input0 input0 = ...    
    private Input1 input1 = ... 
    ...

    private Result result = null;

    private boolean updateRequired = true;

    public void setInput0(Input0 input0)
    {
        this.input0 = input0;
        updateRequired = true; // Dirty-Flag setzten
    }

    ...

    public Result getResult()
    {
        if (updateRequired) // Nur neu berechnen, wenn sich was geändert hatte
        {
            result = computeResultFromInput();
            updateRequired = false;
        }
        return result;
    }
}
Aber wie gesagt: Hier ist das nicht nötig, und WO genau es angebracht ist (und wo die Vor- und Nachteile liegen) mag sich jeder selbst überlegen...
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben