Produttore (programmazione)

Un costruttore è, nella programmazione orientata agli oggetti , una funzione speciale chiamata durante l' istanziazione . Permette di allocare la memoria necessaria all'oggetto e di inizializzarne gli attributi .

Se il linguaggio lo consente, è possibile il sovraccarico ei costruttori si differenziano per numero e tipo di parametri passati e restituiti ma anche dal formalismo utilizzato. In molte lingue, distinguiamo alcuni costruttori in particolare:

Questi due costruttori hanno spesso una definizione assegnata per impostazione predefinita dal compilatore . Il costruttore predefinito quindi non ha alcun effetto; il costruttore recopy d'altra parte ricopierà i valori di tutti i membri dell'oggetto dato nell'oggetto corrente. Questo può essere particolarmente pericoloso, specialmente nel caso in cui i puntatori vengono allocati dal costruttore e rilasciati dal distruttore .

In java

In Java , new è un operatore di costruzione unario che crea un nuovo oggetto o array.

Per creare un nuovo oggetto, la nuova parola chiave deve essere seguita da un metodo che sia un costruttore. Ad esempio, potremmo avere:

MaClasse obj; ... obj = new MaClasse(5, "bonjour");

se invece la classe MyClass ha un costruttore che ha due parametri: un intero e una stringa di caratteri.

Per creare una nuova tabella, possiamo ad esempio scrivere:

String[] arguments = new String[10]; // ou bien : int[][] uneMatrice = new int[4][5]; // ou encore : int[][] quatreLignes = new int[4][];

In C ++

In C ++ , il costruttore è una funzione membro pubblica della classe con lo stesso nome di questa. Viene chiamato quando si dichiara l'oggetto o quando si utilizza la nuova parola chiave (durante l' allocazione sull'heap ). Il costruttore può utilizzare la sintassi constructeur(argument) : variable(argument)per inizializzare le variabili.

#include <memory> class Object { public : Object (); // Constructeur par défaut Object (int n) : nombre(n){}; // Constructeur paramétrique Object (const Object&); // Constructeur par recopie ~Object (); // Destructeur int nombre; }; int main () { { //allocation sur la pile Object obj; // Appel du constructeur par défaut pour obj Object obj2(obj); // Appel du constructeur par recopie pour obj2 Object obj3(4); // Appel du constructeur paramétrique pour obj3 } // Appel du destructeur pour obj, obj2 et obj3 lors de la sortie de la portée { //allocation sur le tas Object * p_obj = new Object(27); // Appel du constructeur paramétrique pour créer un Object sur le tas //et initialisation de p_obj à l'adresse de cet Object //si le pointeur sortait de la portée ici, l'adresse de l'Object déclaré sur le tas //serait perdue et ainsi de la mémoire ne serait pas libérée delete p_obj; // Appel du destructeur pour détruire l'objet pointé par p_obj //et libération de la mémoire allouée } { //allocation sur le tas grâce à un pointeur intelligent std::unique_ptr<Object> p_obj2; //on déclare un objet sur le tas qu'on a pas besoin de supprimer manuellement p_obj2 = new Object(42); //Appel du constructeur paramétrique pour créer un Object sur le tas //et initialisation de p_obj2 à l'adresse de cet Object } //appel du destructeur de p_obj2 qui lui même appelle le destructeur de l'Object pointé et libère la mémoire lors de la sortie de la portée }

In C #

Costruttore di esempio in C #  :

public class MaClasse { private int a; private string b; // Constructeur public MaClasse() : this(42, "string") { } // Surcharge d'un constructeur public MaClasse(int a, string b) { this.a = a; this.b = b; } } // Instanciation d'un objet à l'aide du constructeur MaClasse c = new MyClass(42, "string");

Esistono anche costruttori statici in C # , che consentono di inizializzare dati statici ed eseguire un'azione particolare che deve essere eseguita una sola volta. I costruttori statici vengono chiamati implicitamente prima della creazione di un'istanza. Qualsiasi chiamata a una classe (chiamata statica o costruttore) attiva l'esecuzione del costruttore statico.

Esempio di utilizzo di un costruttore statico:

public class MaClasse { private static int _A; // Constructeur statique static MaClasse() { _A = 32; } // Constructeur standard public MaClasse() { } } // Instanciation d'un objet à l'aide du constructeur // juste avant l'instanciation // Le constructeur statique est exécuté, _A prend la valeur 32 MaClasse c = new MaClasse();

Critico

In linguaggi come Java , chiamare un costruttore equivale a chiamare un metodo statico, il che rende più difficile scrivere unit test per un metodo. L' inserimento delle dipendenze consente al programmatore di non dover scrivere alcuna chiamata al costruttore poiché l' inserimento delle dipendenze del framework è supportato al suo posto.

Vedi anche