Che cos’è un costruttore predefinito?

Un costruttore predefinito è un metodo specializzato che crea e inizializza un oggetto nella programmazione orientata agli oggetti. Esistono più tipi di costruttori, ma un costruttore predefinito deve soddisfare uno dei due criteri specifici, oltre a creare e inizializzare un oggetto. Non deve avere parametri, nel qual caso potrebbe anche essere chiamato un costruttore nullary, oppure deve assegnare valori predefiniti a tutti i parametri che è in grado di impostare. Alcuni linguaggi di computer specificano in modo implicito un costruttore nullary predefinito se il programmatore non specifica affatto un costruttore. Una volta scritto qualsiasi tipo di costruttore, il costruttore nullary predefinito non viene più specificato e deve essere scritto in modo esplicito se necessario.

Per i linguaggi informatici che consentono l’ereditarietà orientata agli oggetti, i costruttori predefiniti nelle sottoclassi devono essere collegati con precisione ai costruttori nelle superclassi. I costruttori di sottoclassi devono sempre chiamare i costruttori di superclassi prima di fare qualcosa di specifico per la sottoclasse. In alcuni linguaggi, come Java®, un costruttore di sottoclassi chiama implicitamente un costruttore nullo di default della superclasse. Se non esiste un costruttore nullary predefinito della superclasse, l’oggetto della sottoclasse non può essere compilato correttamente. Le sottoclassi possono ancora avere entrambi i tipi di costruttore predefinito in questo caso, ma un costruttore di superclasse disponibile deve essere chiamato correttamente, magari passandogli valori predefiniti univoci per la sottoclasse.

La generazione implicita di un costruttore nullary predefinito ha il vantaggio di ridurre il numero di metodi che un programmatore deve specificare e documentare, ma ha anche lo svantaggio di rendere più difficile la manutenzione e la comprensione del codice. Alcuni programmatori considerano l’omissione di un costruttore predefinito una cattiva pratica, mentre altri no. Non c’è nulla che impedisca a un singolo programmatore di aderire a uno di questi metodi di programmazione, quindi l’inclusione di un costruttore nullary predefinito nel codice è in gran parte una scelta stilistica da parte del programmatore. Se il costruttore è incluso, la maggior parte delle scuole di pensiero impongono che debba essere commentato e documentato proprio come qualsiasi altro costruttore o metodo.

Qualsiasi costruttore predefinito può avere modificatori di accesso associati, rendendo il costruttore pubblico, protetto o privato. Ciò fornisce al costruttore abilità specifiche in base alla classe in cui è specificato. Un costruttore pubblico predefinito può essere utilizzato per creare un nuovo oggetto da un’altra classe, mentre un costruttore protetto può essere chiamato solo dalla propria classe e da eventuali sottoclassi. I costruttori predefiniti protetti vengono visualizzati spesso in una gerarchia di ereditarietà. I costruttori privati ​​sono solitamente impiegati solo in classi autonome, dove è disponibile qualche tipo di metodo factory per chiamarlo, piuttosto che il programmatore.