I costruttori, in informatica e specificamente nella programmazione orientata agli oggetti, indicano dei metodi associati alle classi che hanno lo scopo di inizializzare le variabili di istanza. La chiamata è effettuata automaticamente all'atto della creazione di un nuovo oggetto di una classe e nella maggior parte dei linguaggi non è possibile chiamarlo manualmente in un secondo tempo.

Utilizzo

modifica

In molti linguaggi (per esempio in Java e C++) hanno lo stesso nome della classe a cui appartengono. Come tutti gli altri metodi, i costruttori possono avere dei parametri ed essere definiti in molteplici versioni attraverso l'overloading. Non è ovviamente possibile far ritornare alcun valore dai costruttori, poiché il tipo di ritorno è di default l'oggetto stesso.

Tipi di costruttore

modifica

Oltre al semplice costruttore esistono due tipi speciali di costruttori: i default constructor e i copy constructor. I primi sono dei costruttori a cui non viene passato alcun parametro, mentre i copy sono quelli che ricevono come parametro un'altra istanza della stessa classe e quindi copiano tutte le proprietà di quell'istanza.

Costruttore implicito

modifica

Il costruttore implicito è un tipo di costruttore predefinito che, come unica istruzione, crea e istanzia le variabili e per definizione non viene descritto nel codice sorgente.

Costruttore privato

modifica

Il costruttore privato è un tipo di costruttore non visibile alle altre classi. Per creare l'oggetto viene creato un metodo statico con tipo di ritorno l'oggetto; in questo modo, se alcune condizioni vengono rispettate, viene istanziato l'oggetto, mentre, se le condizioni non vengono soddisfatte, l'oggetto non viene creato. Questo per impedire che vengano creati oggetti non utilizzati o con caratteristiche non idonee.

Linguaggi di programmazione

modifica

Quasi tutti i linguaggi di programmazione ad oggetti permettono la definizione dei costruttori.

C++

modifica

In C++ è sufficiente dichiarare un metodo con lo stesso nome della classe. Il tipo di ritorno non deve essere inserito.

class Point
{
  public:
    Point();              // Costruttore di default
    Point(int x,int y);   // Costruttore generico
    Point (Point &other); // Costruttore di copia
    // ... altri metodi ...
  private:
    int x;
    int y;
}

C#

modifica

Anche in C# è sufficiente dichiarare un metodo con lo stesso nome della classe. Il tipo di ritorno non deve essere inserito.

public class Punto
{
  private float x;
  private float y;
  public Punto()  // Costruttore di default
  { // ... codice qui ...
  }
  public Punto(Punto altroPunto) // Costruttore di copia
  { // ... codice qui ...
  }
  public Punto(float x, float y) // Costruttore generico
  { // ... codice qui ...
  }
}

Java

modifica

La sintassi in Java, per il costruttore esplicito, è identica a quella di C#.

public class Punto
{
  private float x;
  private float y;
  public Punto()  // Costruttore di default
  { // ... codice qui ...
  }
  public Punto(Punto altroPunto) // Costruttore di copia
  { // ... codice qui ...
  }
  public Punto(float x, float y) // Costruttore generico
  { // ... codice qui ...
  }
}

mentre la funzione del costruttore è equivalente al costruttore esplicito sottostante

public class Punto
{
  private float x;
  public Punto()
  { //qui rimane senza codice
  }
}

e può essere omessa.

PHP

modifica

Il comportamento di PHP varia in base alla versione utilizzata.

PHP 4

modifica

È sufficiente chiamare il nome del costruttore come quello della classe.

class Point
{
   var $x;
   var $y;
   function Point ( $x, $y )
   {
     // ... codice qui ...
   }
}

PHP 5 e successivi

modifica

Nella versione 5 il nome della funzione deve essere __construct

class Point
{
  private $x;
  private $y;
  public function __construct ( $x, $y )
  {
    // ... codice qui ...
  }
}

Note

modifica

Bibliografia

modifica

Voci correlate

modifica

Altri progetti

modifica

Collegamenti esterni

modifica
  Portale Informatica: accedi alle voci di Wikipedia che trattano di Informatica

📚 Artikel Terkait di Wikipedia

Effetto Beaujolais

e l'overloading delle subroutine, può accadere che coesistano diverse funzioni o procedure con lo stesso identificatore (nel caso dell'overloading hanno

Operatori in C e C++

su www.andreaminini.com. URL consultato il 30 agosto 2024. ^ Operator Overloading - D Programming Language, su dlang.org. URL consultato il 30 agosto 2024

Funzione (informatica)

blocco stesso. Lo stesso argomento in dettaglio: Funzione anonima e Overloading. Una funzione è una porzione di codice che può essere invocata da qualsiasi

Ada (linguaggio di programmazione)

definite indicando il nome dell'operatore tra doppi apici, e Ada supporta l'overloading degli stessi, così come l'overload e l'override delle routine in generale

Objective-C

first-class object. A differenza del C++, Objective C non supporta l'overloading degli operatori, consente l'ereditarietà solo diretta da una singola

Funtore (programmazione)

compare_function); } In C++ un funtore può essere usato al posto di una funzione ordinaria attraverso la definizione di una classe che fa overloading dell'operatore

Xojo

ricompilata. Questo è un esempio di sovraccarico dell'operatore (operator overloading) per un'ipotetica classe Complex che permette di sommare un numero reale

Distruttore (informatica)

per ogni classe può esserci un solo distruttore, rendendo impossibile l'overloading. Non è obbligatorio che un distruttore sia dichiarato public. L'esempio: