Výrobce (programování)

Konstruktér je v objektově orientovaného programování , je speciální funkce nazývá během instance . Umožňuje přidělit potřebnou paměť objektu a inicializovat jeho atributy .

Pokud to jazyk umožňuje, je možné přetížení a konstruktory se liší počtem a typem předaných a vrácených parametrů, ale také použitým formalismem. V mnoha jazycích rozlišujeme zejména určité konstruktory:

Tyto dva konstruktory často mají definici přiřazenou ve výchozím nastavení kompilátorem . Výchozí konstruktor pak nemá žádný účinek; konstruktor překódování na druhé straně přepíše hodnoty všech členů daného objektu na aktuální objekt. To může být obzvláště nebezpečné, zejména v případě, kdy jsou ukazatele přiděleny konstruktorem a uvolněny destruktorem .

V Javě

V Javě je new unární stavební operátor, který vytváří nový objekt nebo pole.

Chcete-li vytvořit nový objekt, za novým klíčovým slovem musí následovat metoda, která je konstruktorem. Mohli bychom například mít:

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

pokud však má třída MyClass konstruktor, který má dva parametry: celé číslo a řetězec znaků.

K vytvoření nové tabulky můžeme například napsat:

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

V C ++

V C ++ je konstruktor veřejná členská funkce třídy se stejným názvem jako tento. Volá se při deklaraci objektu nebo při použití nového klíčového slova (při alokaci na haldě ). Konstruktor může pomocí syntaxe constructeur(argument) : variable(argument)inicializovat proměnné.

#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 }

V C #

Příklad konstruktoru v 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");

V C # jsou také statické konstruktory , které vám umožňují inicializovat statická data a provést konkrétní akci, kterou je nutné provést pouze jednou. Statické konstruktory jsou implicitně volány před vytvořením instance. Jakékoli volání třídy (statické volání nebo konstruktor) spouští provedení statického konstruktoru.

Příklad použití statického konstruktoru:

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();

Kritický

V jazycích, jako je Java , je volání konstruktoru ekvivalentní volání statické metody, což ztěžuje psaní testů jednotky pro metodu. Vkládání závislostí umožňuje programátorovi, aby nemusel psát žádné volání konstruktoru, protože je místo něj podporováno vkládání závislostí rozhraní .

Podívejte se také