Programmeren in Java/Getters en Setters: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
DimiC88 (overleg | bijdragen)
Label: bewerking met nieuwe wikitekstmodus
Bdijkstra (overleg | bijdragen)
poets
 
Regel 1:
{{Programmeren in Java|Deel=Klassen}}
Over het algemeen is het sterk aangeraden om eigenschappen of velden van klassen te beschermen door de ''access modifier'' ''<code>private''</code> te gebruiken. Dit zorgt ervoor dat enkel de klasse zelf kan bepalen of code buiten de klasse toegang heeft tot die informatie en indien wel wat er met deze informatie mag gebeuren. Hier komen ''getters'' en ''setters'' aan te pas. ''Getters'' en ''setters'' zijn methodes die toelaten om gegevens van een object respectievelijk op te halen en in te stellen. Niet alleen dat, maar ''getters'' en ''setters'' kunnen gegevensuitwisseling veiliger maken. Ze kunnen ervoor zorgen dat als er informatie wordt weggeschreven naar de klasse, dat er bijvoorbeeld eerst gecontrolleerdgecontroleerd wordt of de informatie die gegeven iswaarde wel mogelijkgeldig is.
 
== Enkele voorbeelden ==
Als voorbeeld gaan we een simpele ''Person'' -klasse gebruiken. DeDeze person klassenklasse heeft drie eigenschappen, ''firstName'', ''lastName'' en ''age''.
 
<syntaxhighlight lang=Java>
Regel 59:
</syntaxhighlight>
 
Je bent ook niet verplicht om ''getters'' en ''setters'' aan te maken voor al je velden. Je kunt zelf bepalen of die al dan niet nodig zijn, bijvoorbeeld je zou kunnen bepalen dat je enkel ''getters'' maakt omdat je misschien van mening bent dat de velden niet meer van waardeswaarde gaan veranderen. Of misschien voor een veld wel een ''setter'' en geen ''getter'' of omgekeerd.
 
== Booleans ==
Regel 85:
public static void main(String[] args) {
Person person = new Person();
if (person.isMarried()) {
System.out.println("Deze persoon is getrouwd.");
} else {
Regel 94:
</syntaxhighlight>
 
Met ''if (person.isMarried(())'' weet je sneller wat de ''if'' doet en krijg je ook een logischer klinkende zin dan als je bijvoorbeeld ''if (person.getMarried(())'' zou gebruiken.
 
== Arrays of Collections ==
Bij arrays, en daarmee ook bij uitbreiding collections, moet je rekening houden met eenderzijdsenerzijds de array zelf en anderzijds de waardes in de array. Daarmee wordt bedoeld dat je ''getters'' en ''setters'' kunt instellen voor de array en ook getters en setters voor de de waarderswaardes in de array. We gaan terug onze ''Person'' -klasse nemen en we voegen een array voor kinderen van die persoon toe, namelijk ''children''.
 
<syntaxhighlight lang=Java>
Regel 131:
</syntaxhighlight>
 
Op zich zijn deze ''getters'' en ''setters'' hetzelfdhetzelfde als normale ''getters'' en ''setters''. Je moet hier wel goed opletten op het feit dat je nu gegevens uitwisselt op basis van referenties. Een array wordt niet gekopieerd als je het meegeeft als een argument of terug geeftteruggeeft. Je geeft een referentie door en als je een referentie doorgeeft betekent dat je ergens anders in de code ongewenste aanpassingen kunt doen in de array die wordt gebruikt door de klasse ''Person''. Bijvoorbeeld als volgt:
 
<syntaxhighlight lang=Java>
Regel 140:
 
System.out.println(father.getFirstName() + " heeft volgende kinderen:");
for (Person child : father.getChildren()) {
father.getChildren()) {
System.out.println(child.getFirstName());
}
Regel 150 ⟶ 149:
 
System.out.println(father.getFirstName() + " heeft volgende kinderen:");
for (Person child : father.getChildren()) {
father.getChildren()) {
System.out.println(child.getFirstName());
}
Regel 158 ⟶ 156:
</syntaxhighlight>
 
Dit zal volgende ouputoutput geven.
 
<pre>
Regel 168 ⟶ 166:
</pre>
 
We hebben met ''father.getChildren()'' dus niet een kopie van de array opgehaald en in de ''main'' bewaard, maar een referentie naar de array in het ''father'' -object. Dan hebben we de kinderen in ''main'' vervangen door ''null''. Doordat het geen kopie was zijn die aanpassingen doorgevoerd op het origineel en toen we de array een tweede keer ophaalden en probeerde af te printen kregen we opnieuw een referentie naar het origineel. Wanneer we die dan proberen af te printen kregen we een ''NullPointerException'', want in de array zat een ''null''.
 
Hierbij kan duskunnen ''getters'' en ''setters'' ook bij helpen. Je zou dan bijvoorbeeld in de ''getter'' in de plaats van een referentie naar het origineel, een kopie aanmaken van het origineel en dat doorgeven. Als er dan ongewenste aanpassingen worden gedaan gebeurt dit enkel op de kopie van de array en niet op het origineel.
 
<syntaxhighlight lang=Java>
Regel 178 ⟶ 176:
 
public void setChildren(Person[] children) {
for (Person child : children) {
if children(child == null) {
if(child == null) {
throw new IllegalArgumentException("Array mag geen null bevatten.");
}
Regel 210 ⟶ 207:
<syntaxhighlight lang=Java>
public Person getChild(String firstName) {
for (Person child : children) {
if (child.firstName.equals(firstName)) {
return child;
}
Regel 225 ⟶ 222:
public void removeChild(Person child) {
for (int i = 0; i < children.length; i++) {
if (children[i].equals(child)) {
children[i] = null;
}
Regel 232 ⟶ 229:
</syntaxhighlight>
 
Dit zijn natuurlijk maar voorbeelden en met zulke ''getters'' en ''setters'' kun je nog variaties maken. Je kunt ook bijvoorbeeld meerdere ''addChild'' ''-setters'' hebben, zoals een extra ''addChild'' die in de plaats van een ''Person'' als parametertype heeft gewoon een ''String'' nodig heeft voor de voornaam van het kind. Je kunt dan binnen de methode een ''Person'' object aanmaken met die voornaam en dan toevoegen aan de array. Je kunt ook dehet returntype aanpassen. Je kunt bij ''removeChild'' in de plaats van ''void'' eventueel een ''boolean'' terug geven, om aan te geven of een kind is verwijderd (''true'') of niet (''false''). Of bij ''getChild'' een [[Programmeren in Java/Optional|Optional]] gebruiken om een NullPointerException te vermijden.
 
== Combinatie van gegevens of berekende gegevens ==
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.