Costruttore (informatica): differenze tra le versioni

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Contenuto cancellato Contenuto aggiunto
 
(26 versioni intermedie di 18 utenti non mostrate)
Riga 1: Riga 1:
{{F|linguaggi di programmazione|giugno 2023}}
I '''costruttori''', in [[informatica]] e specificamente nella [[programmazione orientata agli oggetti]], indicano dei [[metodo (programmazione)|metodi di programmazione]] associati alle [[classe (programmazione)|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.
I '''costruttori''', in [[informatica]] e specificamente nella [[programmazione orientata agli oggetti]], indicano dei [[metodo (programmazione)|metodi]] associati alle [[classe (programmazione)|classi]] che hanno lo scopo di inizializzare le [[Variabile di istanza|variabili di istanza]]. La chiamata è effettuata automaticamente all'atto della creazione di un nuovo [[Oggetto (informatica)|oggetto]] di una classe e nella maggior parte dei linguaggi non è possibile chiamarlo manualmente in un secondo tempo.


== Utilizzo ==
== Utilizzo ==
In molti linguaggi (per esempio in [[Linguaggio Java|Java]] e [[C++]]) hanno lo stesso nome della classe a cui appartengono. Come tutti gli altri metodi, i costruttori possono avere dei parametri e 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.
In molti linguaggi (per esempio in [[Linguaggio Java|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 ===
=== Tipi di costruttore ===
Oltre al semplice costruttore esistono due tipi speciali di costruttori: i '''''default constructor''''' o ''costruttore predefinito'' e i '''''copy constructor''''' o i ''costruttori di copia''. 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.
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====
====Costruttore implicito====
Riga 11: Riga 12:


====Costruttore privato====
====Costruttore privato====
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 creato viene istanziato l'oggetto mentre se le condizioni non vengono soddisfatte l'oggetto non viene creato. In questo modo non vengono creati oggetti non utilizzati o con caratteristiche non idonee.
Il costruttore privato è un tipo di costruttore non visibile alle altre [[Classe (informatica)|classi]].
Per creare l'oggetto viene creato un [[Metodo (programmazione)|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 ==
== Linguaggi di programmazione ==
Quasi tutti i linguaggi di programmazione ad oggetti permettono la definizione dei costruttori.
Quasi tutti i linguaggi di programmazione ad oggetti permettono la definizione dei costruttori.
=== [[C++]] ===
=== C++ ===
In C++ è sufficiente dichiarare un metodo con lo stesso nome della classe. Il tipo di ritorno non deve essere inserito.
In [[C++]] è sufficiente dichiarare un metodo con lo stesso nome della classe. Il tipo di ritorno non deve essere inserito.
<source lang="cpp">
<syntaxhighlight lang="cpp" line="1">
class Point
class Point
{
{
public:
public:
Point(); // Costruttore di default
Point(); // Costruttore di default
Point(int x,int y); // Costruttore generico
Point(int x,int y); // Costruttore generico
Point (Point &other); // Costruttore di copia
Point (Point &other); // Costruttore di copia
// ... altri metodi ...
// ... altri metodi ...
private:
private:
int x;
int x;
int y;
int y;
}
}
</syntaxhighlight>
</source>
=== [[C sharp|C#]] ===
=== C# ===
Anche in C# è sufficiente dichiarare un metodo con lo stesso nome della classe. Il tipo di ritorno non deve essere inserito.
Anche in [[C sharp|C#]] è sufficiente dichiarare un metodo con lo stesso nome della classe. Il tipo di ritorno non deve essere inserito.
<source lang="csharp">
<syntaxhighlight lang="csharp" line="1">
public class Punto
public class Punto
{
{
private float x;
private float x;
private float y;
private float y;
public Punto() // Costruttore di default
public Punto() // Costruttore di default
{ // ... codice qui ...
{ // ... codice qui ...
}
}
public Punto(Punto altroPunto) // Costruttore di copia
public Punto(Punto altroPunto) // Costruttore di copia
{ // ... codice qui ...
{ // ... codice qui ...
}
}
public Punto(float x, float y) // Costruttore generico
public Punto(float x, float y) // Costruttore generico
{ // ... codice qui ...
{ // ... codice qui ...
}
}
}
}
</syntaxhighlight>
</source>


=== [[linguaggio Java|Java]] ===
=== Java ===
La sintassi in java, per il costruttore esplicito, è identica a quella di [[C#]].
La sintassi in [[Java (linguaggio di programmazione)|Java]], per il costruttore esplicito, è identica a quella di [[C#]].
<source lang="java">
<syntaxhighlight lang="java" line="1">
public class Punto
public class Punto
{
{
private float x;
private float x;
private float y;
private float y;
public Punto() // Costruttore di default
public Punto() // Costruttore di default
{ // ... codice qui ...
{ // ... codice qui ...
}
}
public Punto(Punto altroPunto) // Costruttore di copia
public Punto(Punto altroPunto) // Costruttore di copia
{ // ... codice qui ...
{ // ... codice qui ...
}
}
public Punto(float x, float y) // Costruttore generico
public Punto(float x, float y) // Costruttore generico
{ // ... codice qui ...
{ // ... codice qui ...
}
}
}
}
</syntaxhighlight>
</source>


mentre la funzione del costruttore è equivalente al costruttore esplicito sottostante
mentre la funzione del costruttore è equivalente al costruttore esplicito sottostante
<source lang="java">
<syntaxhighlight lang="java" start="15">
public class Punto
public class Punto
{
{
private float x;
private float x;
public Punto()
public Punto()
{ //qui rimane senza codice
{ //qui rimane senza codice
}
}
}
}
</syntaxhighlight>
</source>
e può essere omessa.
e può essere omessa.


=== [[PHP]] ===
=== PHP ===
Il comportamento di PHP varia in base alla versione utilizzata.
Il comportamento di [[PHP]] varia in base alla versione utilizzata.
==== [[PHP]] 4 ====
==== PHP 4 ====
È sufficiente chiamare il nome del costruttore come quello della classe.
È sufficiente chiamare il nome del costruttore come quello della classe.
<source lang="php">
<syntaxhighlight lang="php">
class Point
class Point
{
{
Riga 91: Riga 93:
function Point ( $x, $y )
function Point ( $x, $y )
{
{
// ... codice qui ...
// ... codice qui ...
}
}
}
}
</syntaxhighlight>
</source>
==== [[PHP]] 5 ====
==== PHP 5 e successivi ====
Nella versione 5 il nome della funzione deve essere ''__constructor''
Nella versione 5 il nome della funzione deve essere <code>__construct</code>
<source lang="php">
<syntaxhighlight lang="php" line="1">
class Point
class Point
{
{
private $x;
private $x;
private $y;
private $y;
public function __constructor ( $x, $y )
public function __construct ( $x, $y )
{
{
// ... codice qui ...
// ... codice qui ...
}
}
}
}
</syntaxhighlight>
</source>


==Note==
==Note==
* [http://www.illuminamente.org/dokuwiki/doku.php?id=appunti3s:costruttore costruttore java]
* {{cita web|url=http://www.illuminamente.org/dokuwiki/doku.php?id=appunti3s:costruttore|titolo=costruttore java}}
* [http://msdn.microsoft.com/it-it/library/ms173115.aspx costruttore C#]
* [http://msdn.microsoft.com/it-it/library/s16xw1a8.aspx costruttore C++]
* [http://msdn.microsoft.com/it-it/library/63kwz036.aspx regole per la dichiarazione dei costruttori in C++]


==Bibliografia==
==Bibliografia==
*{{cita libro|Fabrizia|Scorzoni|Informatica Programmazione in Java|2009|Loescher|Torino|ISBN=9788884330307}}
*{{cita libro|Fabrizia|Scorzoni|Informatica Programmazione in Java|2009|Loescher|Torino|ISBN=978-88-8433-030-7}}


== Voci correlate ==
== Voci correlate ==
Riga 123: Riga 122:
* [[Programmazione orientata agli oggetti]]
* [[Programmazione orientata agli oggetti]]
* [[Overloading]]
* [[Overloading]]

== Altri progetti ==
{{Interprogetto|wikt=costruttore}}


==Collegamenti esterni==
==Collegamenti esterni==
* {{Collegamenti esterni}}
* [http://www.dis.uniroma1.it/~liberato/laboratorio/costruttori/costruttori.html costruttori]
* {{FOLDOC|constructor|constructor}}
* [http://www.iet.unipi.it/g.dini/Teaching/tiga/materiale-didattico/java/Java-Oggetti.pdf programmazione ad oggetti]
* {{cita web|url=http://www.dis.uniroma1.it/~liberato/laboratorio/costruttori/costruttori.html|titolo=Costruttori|sito=DIS UNIROMA|accesso=29 aprile 2014}}
* {{cita web|url=http://www.iet.unipi.it/g.dini/Teaching/tiga/materiale-didattico/java/Java-Oggetti.pdf|titolo=Programmazione ad oggetti|sito=IET UNIPI|accesso=29 aprile 2014}}
* {{cita web|url=https://msdn.microsoft.com/it-it/library/ms173115.aspx|titolo=Costruttore C#|sito=MSDN MICROSOFT|accesso=29 aprile 2014}}
* {{cita web|url=https://msdn.microsoft.com/it-it/library/s16xw1a8.aspx|titolo=Costruttore C++|sito=MSDN MICROSOFT|accesso=29 aprile 2014}}
* {{cita web|url=https://msdn.microsoft.com/it-it/library/63kwz036.aspx|titolo=Regole per la dichiarazione dei costruttori in C++|sito=MSDN MICROSOFT|accesso=29 aprile 2014}}


{{Portale|Informatica}}
{{Portale|Informatica}}


[[Categoria:Programmazione]]
[[Categoria:Programmazione orientata agli oggetti]]
[[Categoria:Programmazione orientata agli oggetti]]

Versione attuale delle 17:14, 29 lug 2024

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.

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 | modifica wikitesto]

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 | modifica wikitesto]

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 | modifica wikitesto]

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 | modifica wikitesto]

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

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

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

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.

Il comportamento di PHP varia in base alla versione utilizzata.

È 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 | modifica wikitesto]

Nella versione 5 il nome della funzione deve essere __construct

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

Voci correlate

[modifica | modifica wikitesto]

Altri progetti

[modifica | modifica wikitesto]

Collegamenti esterni

[modifica | modifica wikitesto]
  Portale Informatica: accedi alle voci di Wikipedia che trattano di Informatica