Costruttore (informatica): differenze tra le versioni

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Contenuto cancellato Contenuto aggiunto
m →‎Tipi di costruttore: Rinominato la sezione "Tipi di costruttore"
 
(3 versioni intermedie di uno stesso utente non sono mostrate)
Riga 6: Riga 6:


=== Tipi di costruttore ===
=== 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 17: Riga 17:
== 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.
<syntaxhighlight 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>
</syntaxhighlight>
=== [[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.
<syntaxhighlight 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>
</syntaxhighlight>


=== [[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#]].
<syntaxhighlight 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>
</syntaxhighlight>


mentre la funzione del costruttore è equivalente al costruttore esplicito sottostante
mentre la funzione del costruttore è equivalente al costruttore esplicito sottostante
<syntaxhighlight 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>
</syntaxhighlight>
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.
<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
Riga 93: Riga 93:
function Point ( $x, $y )
function Point ( $x, $y )
{
{
// ... codice qui ...
// ... codice qui ...
}
}
}
}
</syntaxhighlight>
</syntaxhighlight>
==== [[PHP]] 5 e successivi ====
==== PHP 5 e successivi ====
Nella versione 5 il nome della funzione deve essere ''__construct''
Nella versione 5 il nome della funzione deve essere <code>__construct</code>
<syntaxhighlight lang="php">
<syntaxhighlight lang="php" line="1">
class Point
class Point
{
{
private $x;
private $x;
private $y;
private $y;
public function __construct ( $x, $y )
public function __construct ( $x, $y )
{
{
// ... codice qui ...
// ... codice qui ...
}
}
}
}
</syntaxhighlight>
</syntaxhighlight>
Riga 122: 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}}
* {{FOLDOC|constructor|constructor}}
* {{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.dis.uniroma1.it/~liberato/laboratorio/costruttori/costruttori.html|titolo=Costruttori|sito=DIS UNIROMA|accesso=29 aprile 2014}}
Riga 133: Riga 137:
{{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