Articles

Che cos’è un metodo mutatore in Java?

Scopri cos’è un metodo mutatore in java e i vantaggi dell’utilizzo di mutatori e metodi di accesso. Tutte le spiegazioni includono esempi per illustrare.

Cap immagine della scheda

In questo articolo, imparerai che metodo mutatore in java e metodo accessor. Inoltre, capirai i vantaggi dell’utilizzo dei metodi mutator e accessor e vedrai alcuni esempi java.

I concetti del metodo mutator e accessor sono strettamente correlati alla programmazione orientata agli oggetti e all’incapsulamento. Nel caso in cui non si abbia familiarità con la programmazione orientata agli oggetti. Ho incluso una breve introduzione di seguito; tuttavia, se volete ulteriori dettagli, controllare la documentazione.

Sommario

Programmazione orientata agli oggetti Recap

Programmazione orientata agli oggetti significa che si risolvono i problemi che rappresentano le entità del problema come classi. Una classe ha uno stato e metodi in cui lo stato è un insieme di variabili contenenti i dati rilevanti nella nostra rappresentazione. E i metodi determinano le operazioni che la nostra classe può eseguire.

Ad esempio, possiamo definire il Cerchio di classe:

public class Circle {private float radius; public Circle(float newRadius) { this.radius = newRadius; } public double area(){ return Math.PI * Math.pow(radius, 2); } }

Questa classe rappresenta il concetto di cerchio. Lo stato della classe circle ha il raggio e un metodo denominato area(), che restituisce l’area del cerchio.

È possibile aggiungere il seguente codice alla classe Circle per testarlo:

public static void main(String args){ Circle circle1 = new Circle(3); System.out.println(circle1.area()); }

Output:

28.274333882308138

Incapsulamento Recap

Abbiamo definito una classe utilizzando la programmazione orientata agli oggetti e creato l’oggetto circle1 della classe Circle. Cosa succede se volessi modificare il raggio dell’oggetto circle1. Allo stato attuale del codice, non posso cambiarlo poiché non esiste un metodo per accedere alla variabile radius. Tutto quello che posso fare è creare un nuovo oggetto Cerchio con un raggio diverso. Cosa posso fare per correggere questo?

Puoi fare due cose; uno porterà a una classe ben progettata e l’altro a un design povero e difficile da mantenere. Un’opzione è dichiarare il camporadius come campo pubblico, quindi è accessibile al di fuori della classe. Vedere le modifiche di seguito:

public class Circle {public float radius; public Circle(float newRadius) { this.radius = newRadius; } public double area(){ return Math.PI * Math.pow(radius, 2); } public static void main(String args){ Circle circle1 = new Circle(3); System.out.println(circle1.radius); circle1.radius = 5; System.out.println(circle1.radius); } }

Output:

3.05.0

L’altra opzione è la creazione di metodi per accedere e modificare il campo radius, che consente di nascondere i dettagli dell’implementazione. Questo meccanismo è anche noto come incapsulamento.

Definizione del metodo mutatore in Java

Il metodo mutatore in java, e qualsiasi linguaggio di programmazione orientato agli oggetti, è un metodo che consente di modificare le variabili all’interno della classe. Privato è il livello di accesso per le variabili, il che significa che l’unico modo per modificare le variabili è utilizzando i metodi mutator. In questo modo, i metodi mutator possono controllare la validità e la qualità dei dati salvati nella classe.

Ad esempio, nel frammento di codice precedente, il metodo setRadius() è un metodo mutatore. È possibile modificare questo metodo per aggiungere una convalida dei dati. Ad esempio, un esempio di convalida dei dati potrebbe essere il controllo se il nuovo raggio è un numero negativo.

Definizione del metodo di accesso in Java

I metodi di accesso sono metodi che consentono di leggere i campi della classe in altri metodi o classi al di fuori della classe. In questo modo è possibile controllare come il codice client può accedere ai campi della classe.

Esempi di mutatori e Accessors

Vediamo alcuni esempi per illustrare i metodi di mutatore e accessor. Setter e getter è un altro modo di riferirsi ai metodi accessor e mutator.

Sotto c’è un esempio di come aggiungere getter a una classe. La classe si chiamaProduct e ha due getter:getPrice() egetName(). Questi metodi consentono a qualsiasi codice client di accedere alla variabile di classe, che èprice ename.

import java.math.BigDecimal;public class Product { private BigDecimal price; private String name;// getter or accessor methods public BigDecimal getPrice() { return price; } public String getName() { return name; }}

E ora, aggiungerò i mutatori, in modo da poter accedere e modificare la variabile di classe.

import java.math.BigDecimal;public class Product { private BigDecimal price; private String name; public BigDecimal getPrice() { return price; } public String getName() { return name; } // mutator or setter methods public void setPrice(BigDecimal price) { if(price.compareTo(BigDecimal.ZERO)<0 )throw new IllegalArgumentException("Empty product name"); this.price = price; } public void setName(String name) { if(name.isEmpty()) throw new IllegalArgumentException("Empty product name"); this.name = name; }}

Come puoi vedere sopra, i metodi settersetPrice()esetName() includono anche la convalida, assicurandosi che i dati passati soddisfino alcuni criteri. Ad esempio, uno dei requisiti è che un prezzo dovrebbe essere sempre sopra lo zero. Nel caso in cui il parametro non sia valido, il codice genererà un’eccezione. Altrimenti, assegnerà il nuovo valore.

Convenzioni di denominazione per i mutatori

In java, i nomi di questi metodi, accessor e mutatori devono seguire specifiche convenzioni di denominazione. Queste regole sono completamente stabilizzate, il che le rende essenziali da seguire. Non seguire queste convenzioni può creare frustrazione e confusione quando altre persone stanno leggendo il tuo codice.

Iniziamo con le convenzioni di denominazione per i mutatori. Il metodo deve essere dichiarato pubblico e reso nullo. Inoltre, il nome del metodo dovrebbe iniziare con la parola set in minuscolo. Seguito dal nome della variabile di classe con una lettera iniziale maiuscola. Ad esempio, se la nostra classe ha una variabile chiamata age, il metodo mutator dovrebbe apparire come segue:

public void setAge(int age){...}

Convenzioni di denominazione per gli Accessor

Insieme ai mutatori, abbiamo visto gli accessor, che seguono anche una convenzione di denominazione simile. Le regole sono che il metodo dovrebbe essere dichiarato come pubblico. Inoltre, il nome del metodo dovrebbe iniziare da get, seguito dal nome della variabile di classe con una lettera iniziale maiuscola. Il metodo non ha parametri e restituisce il tipo di variabile di istanza. Seguendo l’esempio precedente, creiamo un metodo di accesso per la variabileage :

public int getAge(){...}

Vantaggi di mutatori e Accessors

Finora, abbiamo visto i metodi di accesso e mutatore in java con alcuni esempi. E familiarizzare con le convenzioni di denominazione che dovresti seguire quando dichiari questi metodi. Tuttavia, come sono utili questi metodi? Il vantaggio principale è l’incapsulamento. Ciò significa fondamentalmente che creando questi metodi, stai nascondendo i dettagli interni della tua classe da altri componenti. Altri componenti possono comunicare solo tramite l’API.

Di conseguenza, le classi sono disaccoppiate; non dipendono da ciascuno, consentendo di sviluppare in modo isolato, il che porta a sviluppi più rapidi poiché i membri del team possono creare classi e componenti diversi in parallelo. Oltre a facilitare la manutenzione, poiché i componenti possono essere modificati, con un piccolo impatto su altri componenti dipendenti.

Conclusione

Per riassumere, in questo articolo, abbiamo visto che i metodi mutator e accessors metodi in java sono metodi che ci permettono di leggere e scrivere variabili di classe. Il loro scopo principale è aiutarci a progettare classi ben incapsulate e disaccoppiate l’una dall’altra.

Spero che trovi l’articolo utile, e grazie mille per aver letto e sostenuto questo blog! Codifica felice!