Costruttore (informatica): differenze tra le versioni
m rimossa Categoria:Programmazione usando HotCat |
|||
(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 |
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 |
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 |
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. |
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++ === |
||
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. |
||
< |
<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# === |
||
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. |
||
< |
<syntaxhighlight lang="csharp" line="1"> |
||
public class Punto |
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 ... |
|||
} |
|||
} |
} |
||
</syntaxhighlight> |
|||
</source> |
|||
=== |
=== Java === |
||
La sintassi in |
La sintassi in [[Java (linguaggio di programmazione)|Java]], per il costruttore esplicito, è identica a quella di [[C#]]. |
||
< |
<syntaxhighlight lang="java" line="1"> |
||
public class Punto |
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 ... |
|||
} |
|||
} |
} |
||
</syntaxhighlight> |
|||
</source> |
|||
mentre la funzione del costruttore è equivalente al costruttore esplicito sottostante |
mentre la funzione del costruttore è equivalente al costruttore esplicito sottostante |
||
< |
<syntaxhighlight lang="java" start="15"> |
||
public class Punto |
public class Punto |
||
{ |
{ |
||
private float x; |
|||
public Punto() |
|||
{ //qui rimane senza codice |
|||
} |
|||
} |
} |
||
</syntaxhighlight> |
|||
</source> |
|||
e può essere omessa. |
e può essere omessa. |
||
=== |
=== PHP === |
||
Il comportamento di PHP varia in base alla versione utilizzata. |
Il comportamento di [[PHP]] varia in base alla versione utilizzata. |
||
==== |
==== PHP 4 ==== |
||
È sufficiente chiamare il nome del costruttore come quello della classe. |
È sufficiente chiamare il nome del costruttore come quello della classe. |
||
< |
<syntaxhighlight lang="php"> |
||
class Point |
class Point |
||
{ |
{ |
||
Riga 91: | Riga 93: | ||
function Point ( $x, $y ) |
function Point ( $x, $y ) |
||
{ |
{ |
||
// ... codice qui ... |
|||
} |
} |
||
} |
} |
||
</syntaxhighlight> |
|||
</source> |
|||
==== |
==== PHP 5 e successivi ==== |
||
Nella versione 5 il nome della funzione deve essere |
Nella versione 5 il nome della funzione deve essere <code>__construct</code> |
||
< |
<syntaxhighlight lang="php" line="1"> |
||
class Point |
class Point |
||
{ |
{ |
||
private $x; |
|||
private $y; |
|||
public function __construct ( $x, $y ) |
|||
{ |
|||
// ... codice qui ... |
|||
} |
|||
} |
} |
||
</syntaxhighlight> |
|||
</source> |
|||
==Note== |
==Note== |
||
* |
* {{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++] |
|||
⚫ | |||
==Bibliografia== |
==Bibliografia== |
||
*{{cita libro|Fabrizia|Scorzoni|Informatica Programmazione in Java|2009|Loescher|Torino|ISBN= |
*{{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}} |
|||
⚫ | |||
* {{FOLDOC|constructor|constructor}} |
|||
⚫ | |||
⚫ | |||
⚫ | |||
* {{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}} |
|||
⚫ | |||
{{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.
Utilizzo
[modifica | modifica wikitesto]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.
C++
[modifica | modifica wikitesto]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 | modifica wikitesto]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 | modifica wikitesto]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 | modifica wikitesto]Il comportamento di PHP varia in base alla versione utilizzata.
PHP 4
[modifica | modifica wikitesto]È 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 ...
}
}
Note
[modifica | modifica wikitesto]- costruttore java, su illuminamente.org.
Bibliografia
[modifica | modifica wikitesto]- Fabrizia Scorzoni, Informatica Programmazione in Java, Torino, Loescher, 2009, ISBN 978-88-8433-030-7.
Voci correlate
[modifica | modifica wikitesto]Altri progetti
[modifica | modifica wikitesto]- Wikizionario contiene il lemma di dizionario «costruttore»
Collegamenti esterni
[modifica | modifica wikitesto]- (EN) Opere riguardanti constructors, su Open Library, Internet Archive.
- (EN) Denis Howe, constructor, in Free On-line Dictionary of Computing. Disponibile con licenza GFDL
- Costruttori, su DIS UNIROMA. URL consultato il 29 aprile 2014.
- Programmazione ad oggetti (PDF), su IET UNIPI. URL consultato il 29 aprile 2014.
- Costruttore C#, su MSDN MICROSOFT. URL consultato il 29 aprile 2014.
- Costruttore C++, su MSDN MICROSOFT. URL consultato il 29 aprile 2014.
- Regole per la dichiarazione dei costruttori in C++, su MSDN MICROSOFT. URL consultato il 29 aprile 2014.