Onveranderlijk

Bij objectgeoriënteerd en functioneel programmeren is een onveranderlijk object een object waarvan de toestand niet kan worden gewijzigd nadat het is gemaakt. De openbare API van een onveranderlijk object garandeert dat het zich tijdens zijn levensduur op dezelfde manier zal gedragen. In sommige gevallen wordt een object als onveranderlijk beschouwd, zelfs als intern gebruikte attributen veranderen, maar de toestand van het object lijkt onveranderd vanuit een extern standpunt. Hieronder ziet u een voorbeeld van een fundamentele onveranderlijke klasse:

klas gebruiker {

privé finale Long ID kaart;
private finale String naam;

Gebruiker (Long id Draad naam) {
deze.id = ID kaart;
deze.naam = naam;
}}

Alle velden zijn definitief, wat betekent dat de compiler wordt verteld dat hun waarden na initialisatie niet mogen veranderen. Alle veldwaarden worden vervolgens doorgegeven aan de constructor.

Onveranderlijke objectvoordelen

Omdat het object onveranderlijk is, weten gebruikers precies wat ze ervan kunnen verwachten. Code kan niet worden gewijzigd, wat betekent dat er geen mogelijkheid is om inconsistenties te introduceren die tot runtime-fouten kunnen leiden. Onveranderlijke objecten zijn thread-safe, dus synchronisatieproblemen worden vermeden. Ze zijn gemakkelijker te ontwerpen, implementeren en gebruiken dan veranderlijke klassen.

Zodra een onveranderlijk object is gemaakt en geverifieerd, kan geen enkele andere thread of achtergrondproces het object wijzigen zonder directe medeweten van een gebruiker. Dit is handig voor programma’s die een hoge beveiliging nodig hebben. Wanneer er zich een probleem voordoet, is foutopsporing gemakkelijker met onveranderlijke objecten omdat de oorsprong van een bug gemakkelijk kan worden achterhaald.

Onveranderlijke versus veranderlijke objecten

Hoewel onveranderlijke objecten hun toestand niet kunnen veranderen, kunnen veranderlijke objecten dat wel. Veranderlijke objecten bieden methoden om de inhoud van een object te wijzigen en zijn niet zo thread-safe als onveranderlijke objecten.

In Java zijn voorbeelden van veranderlijke objecten StringBuilder en java.util.Date. Voorbeelden van onveranderlijke objecten zijn alle legacy-klassen, wrapper-klassen en string-klassen.

In Python zijn voorbeelden van veranderlijke typen lijst, dict en set. Onveranderlijke typen in Python zijn onder meer int, float, bool, string, unicode en tuple.