Üretici (programlama)

Bir kurucu , nesne yönelimli programlamada , örnekleme sırasında çağrılan özel bir işlevdir . Nesneye gerekli belleğin tahsis edilmesine ve özniteliklerinin başlatılmasına izin verir .

Dil izin veriyorsa, aşırı yükleme mümkündür ve kurucular, aktarılan ve döndürülen parametrelerin sayısı ve türünün yanı sıra kullanılan biçimcilikle de farklılaşır. Birçok dilde, özellikle belirli kurucuları ayırt ederiz:

Bu iki yapıcının genellikle derleyici tarafından varsayılan olarak atanan bir tanımı vardır . Varsayılan kurucunun hiçbir etkisi olmaz; Öte yandan yeniden kopyalama kurucusu, verilen nesnenin tüm üyelerinin değerlerini geçerli nesneye yeniden kopyalayacaktır. Bu, özellikle işaretçilerin kurucu tarafından tahsis edildiği ve yıkıcı tarafından serbest bırakıldığı durumda özellikle tehlikeli olabilir .

Java'da

In Java , yeni yeni bir nesne ya da dizi oluşturan bir tekli yapı operatörüdür.

Yeni bir nesne oluşturmak için, yeni anahtar sözcüğün ardından kurucu olan bir yöntem gelmelidir. Örneğin, sahip olabilirdik:

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

ancak, MyClass sınıfının iki parametresi olan bir kurucusu varsa: bir tamsayı ve bir karakter dizesi.

Yeni bir tablo oluşturmak için örneğin şunu yazabiliriz:

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

C ++ ile

Olarak C ++ , yapıcı bu aynı isimde sınıfının ortak üye fonksiyonudur. Nesne bildirilirken veya yeni anahtar sözcük kullanılırken ( öbek üzerinde ayırırken ) çağrılır . Yapıcı constructeur(argument) : variable(argument), değişkenleri başlatmak için sözdizimini kullanabilir .

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

C #

C # 'da örnek kurucu  :

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

C # 'da statik verileri başlatmanıza ve yalnızca bir kez gerçekleştirilmesi gereken belirli bir eylemi gerçekleştirmenize izin veren statik oluşturucular da vardır . Statik oluşturucular, bir örnek oluşturulmadan önce örtük olarak çağrılır. Bir sınıfa yapılan herhangi bir çağrı (statik çağrı veya yapıcı), statik oluşturucunun yürütülmesini tetikler.

Statik bir oluşturucu kullanma örneği:

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

Kritik

Java gibi dillerde , kurucu çağırmak statik bir yöntemi çağırmaya eşdeğerdir ve bu da bir yöntem için birim testleri yazmayı daha zor hale getirir . Bağımlılık enjeksiyon gibi herhangi yapıcı çağrı yazmak zorunda değil programcı verir çerçeve bağımlılık enjeksiyon yerinde desteklenmektedir.

Ayrıca görün