Final: Unterschied zwischen den Versionen

Aus Programmieren-Wiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
Zeile 1: Zeile 1:
{{Bewertungsrichtlinie
{{CategoryBlock
|baustelle=Ja
|Baustelle=Ja
|blatt=2
|Java Grundlagen=Nein
|beschreibung=Wir wollen in unserem Programm dafür sorgen, dass wir entscheiden können, welche Elemente verändert werden dürfen und welche möglichst nicht verändert werden sollten. Dafür gibt es das Schlüsselwort <syntaxhighlight inline lang="Java">final</syntaxhighlight>. Die korrekte Verwendung davon ist wichtig und entsprechend gibt es auch folgende Regeln die beachtet werden sollten:
|Organisation=Nein
|Programmierstil=Ja
|Bewertungsrichtlinie=Ja
|blattAnnotation=2
|blattAbzug=3
}}
{{Inhaltsblock
|vorher==== Beschreibung ===
Wir wollen in unserem Programm dafür sorgen, dass wir entscheiden können, welche Elemente verändert werden dürfen und welche möglichst nicht verändert werden sollten. Dafür gibt es das Schlüsselwort <syntaxhighlight inline lang="Java">final</syntaxhighlight>. Die korrekte Verwendung davon ist wichtig und entsprechend gibt es auch folgende Regeln die beachtet werden sollten:
# Attribute sollten soweit wie möglich final sein
# Attribute sollten soweit wie möglich final sein
# final ist nur für das jeweilig referenzierte Objekt gültig (Bsp. können Collections wie List final sein, ihr Inhalt kann aber trotz final verändert werden. Siehe dazu auch: [[Getter / Setter für Listen]])
# final ist nur für das jeweilig referenzierte Objekt gültig (Bsp. können Collections wie List final sein, ihr Inhalt kann aber trotz final verändert werden. Siehe dazu auch: [[Getter / Setter für Listen]])
# Der Zustand eines Objektes ist eine unsichtbare Abhängigkeit und kann zu zahlreichen Fehlern führen. Randfälle können demnach auch schnell übersehen werden
# Der Zustand eines Objektes ist eine unsichtbare Abhängigkeit und kann zu zahlreichen Fehlern führen. Randfälle können demnach auch schnell übersehen werden
|schweregrad=leicht
}}
|negativ=<syntaxhighlight lang="Java">
{{Inhaltsblock
public class DepartmentBad {
|color=red
|vorher=Negativbeispiel:
|Beispiel=public class DepartmentBad {
private List<Employee> employees;
private List<Employee> employees;


Zeile 19: Zeile 29:
}
}
}
}
</syntaxhighlight>
|beispielname=FinalBad
|positiv=<syntaxhighlight lang="Java">
}}
public class DepartmentGood {
{{Inhaltsblock
|color=green
|vorher=Positivbeispiel:
|Beispiel=public class DepartmentGood {
private final List<Employee> employees = new ArrayList<>();
private final List<Employee> employees = new ArrayList<>();


Zeile 30: Zeile 43:
}
}
}
}
</syntaxhighlight>
|beispielname=FinalGood1
 
}}
Ein weiteres Beispiel:
{{Inhaltsblock
<syntaxhighlight lang="Java">
|color=green
class Event {
|vorher=Ein weiteres Beispiel:
|Beispiel=class Event {
private static final int BASE_FEE = 1000;                        // constants should be final
private static final int BASE_FEE = 1000;                        // constants should be final
private final List<String> participants;                        // fields should be final if possible
private final List<String> participants;                        // fields should be final if possible
Zeile 51: Zeile 65:
}
}
}
}
</syntaxhighlight>
|beispielname=FinalGood2
|kategorie=Programmierstil
|weiterlesen=Nein
}}
}}

Aktuelle Version vom 13. Oktober 2025, 15:03 Uhr

🚧 Diese Seite befindet sich in Bearbeitung 🚧
🤓 Diese Seite ist eine Bewertungsrichtlinie, die ab Blatt 2 annotiert und ab Blatt 3 abgezogen wird. 🤓

Beschreibung

Wir wollen in unserem Programm dafür sorgen, dass wir entscheiden können, welche Elemente verändert werden dürfen und welche möglichst nicht verändert werden sollten. Dafür gibt es das Schlüsselwort final. Die korrekte Verwendung davon ist wichtig und entsprechend gibt es auch folgende Regeln die beachtet werden sollten:

  1. Attribute sollten soweit wie möglich final sein
  2. final ist nur für das jeweilig referenzierte Objekt gültig (Bsp. können Collections wie List final sein, ihr Inhalt kann aber trotz final verändert werden. Siehe dazu auch: Getter / Setter für Listen)
  3. Der Zustand eines Objektes ist eine unsichtbare Abhängigkeit und kann zu zahlreichen Fehlern führen. Randfälle können demnach auch schnell übersehen werden

Negativbeispiel:

public class DepartmentBad {
	private List<Employee> employees;

	public DepartmentBad() {
		clear();
	}

	public void clear() {
		employees = new ArrayList<>();
	}
}

Positivbeispiel:

public class DepartmentGood {
	private final List<Employee> employees = new ArrayList<>();

	//...

	public void clear() {
		employees.clear();
	}
}

Ein weiteres Beispiel:

class Event {
	private static final int BASE_FEE = 1000;                        // constants should be final
	private final List<String> participants;                         // fields should be final if possible

	public Event() {
		participants = new ArrayList<>();
	}

	public void addParticipant(String name) {                        // final not required for parameters
		participants.add(name);                                      // the list is final, its content is not
	}

	public int calculateProfit(int ticketPrice, int venueCost) {
		int fixedCost = BASE_FEE + venueCost;                        // final is not needed for local variables
		return participants.size() * ticketPrice - fixedCost;
	}
}