Een van de manieren waarop we gegevensinkapseling kunnen afdwingen, is door het gebruik van accessors en mutators. De rol van accessors en mutators is om terug te keren en de waarden van de status van een object in te stellen. Laten we leren hoe we accessors en mutators in Java kunnen programmeren. Als voorbeeld gebruiken we een klasse Person met de status en constructor al gedefinieerd:
Een accessormethode wordt gebruikt om de waarde van een privéveld te retourneren. Het volgt een naamgevingsschema dat voorafgaat aan het woord "get" aan het begin van de methode naam. Laten we bijvoorbeeld accessormethoden toevoegen voor voornaam, middelste namen en achternaam:
Deze methoden retourneren altijd hetzelfde gegevenstype als hun bijbehorende privéveld (bijvoorbeeld String) en retourneren vervolgens eenvoudig de waarde van dat privéveld.
We hebben nu toegang tot hun waarden via de methoden van een Person-object:
Een mutatiemethode wordt gebruikt om een waarde van een privéveld in te stellen. Het volgt een naamgevingsschema dat voorafgaat aan het woord "set" aan het begin van de methode naam. Laten we bijvoorbeeld mutatorvelden toevoegen voor adres en gebruikersnaam:
Deze methoden hebben geen retourtype en accepteren een parameter die hetzelfde gegevenstype is als het bijbehorende privéveld. De parameter wordt vervolgens gebruikt om de waarde van dat privéveld in te stellen.
Het is nu mogelijk om de waarden voor het adres en de gebruikersnaam in het Person-object te wijzigen:
Het is gemakkelijk om tot de conclusie te komen dat we de privévelden van de klassendefinitie gewoon kunnen wijzigen om openbaar te zijn en dezelfde resultaten te bereiken. Het is belangrijk om te onthouden dat we de gegevens van het object zo veel mogelijk willen verbergen. De extra buffer die door deze methoden wordt geboden, stelt ons in staat om:
Laten we zeggen dat we besluiten om te wijzigen hoe we middelste namen opslaan. In plaats van slechts één String kunnen we nu een reeks Strings gebruiken:
De implementatie in het object is veranderd, maar de buitenwereld wordt niet beïnvloed. De manier waarop de methoden worden genoemd, blijft exact hetzelfde:
Of laten we zeggen dat de toepassing die het Person-object gebruikt, alleen gebruikersnamen kan accepteren die maximaal tien tekens bevatten. We kunnen validatie toevoegen in de mutator setUsername om te controleren of de gebruikersnaam aan deze vereiste voldoet:
Als de gebruikersnaam die aan de setUsername-mutator is doorgegeven langer is dan tien tekens, wordt deze nu automatisch afgekapt.