Classi in C#
Molti linguaggi di programmazione moderni supportano il paradigma orientato agli oggetti, e C# ne è un esempio notevole.
Comprendere come C# gestisce classi e oggetti risulta quindi fondamentale a prescindere dal linguaggio OOP che si decide di adottare.
In questa lezione vedremo in che modo le classi in C# rappresentano le fondamenta per la costruzione di applicazioni, illustrando un esempio concreto con la classe Gatto
.
Classi in C
Finora abbiamo analizzato diverse caratteristiche comuni della OOP. Gran parte dei linguaggi di programmazione moderni sono object-oriented, ognuno con particolarità proprie per quanto riguarda l'utilizzo di classi e oggetti.
Sebbene qui ci concentriamo sul linguaggio C#, è bene comunque sapere che i concetti OOP in C# possono risultare utili in qualunque linguaggio orientato agli oggetti, poiché la OOP è un concetto fondamentale nella programmazione, utilizzato praticamente da tutti i linguaggi moderni.
Cosa Sono le Classi in C#?
Una classe in C# viene definita mediante la keyword class
, seguita da un identificatore (il nome della classe) e da un insieme di membri (dati e metodi) racchiusi in un blocco di codice separato.
Le classi in C# possono contenere:
- Campi: variabili membro di un determinato tipo.
- Proprietà: elementi speciali che estendono la funzionalità dei campi, consentendo una gestione più accurata dei dati all'atto di leggere e scrivere i valori. Approfondiremo le proprietà nelle prossime lezioni.
- Metodi: implementano le operazioni e la logica di manipolazione dei dati.
Una Classe di Esempio
Ecco un esempio di una classe in C#, che include i membri elencati.
La classe Gatto
modella l'oggetto reale gatto e possiede le proprietà Nome e Colore.
Nella definizione compaiono alcuni campi, proprietà e metodi che vedremo più avanti in modo dettagliato.
Per ora osserviamo la struttura:
public class Gatto
{
// Campo: Nome
private string nome;
// Campo: Colore
private string coloree;
public string Nome
{
// *Getter* della proprietà "Nome"
get
{
return this.nome;
}
// *Setter* della proprietà "Nome"
set
{
this.nome = value;
}
}
public string Colore
{
// *Getter* della proprietà "Colore"
get
{
return this.coloree;
}
// *Setter* della proprietà "Colore"
set
{
this.coloree = value;
}
}
// Costruttore di Default
public Gatto()
{
this.nome = "SenzaNome";
this.colore = "grigio";
}
// Costruttore con Parametri
public Gatto(string nome, string colore)
{
this.nome = nome;
this.colore = colore;
}
// Metodo Miagola
public void Miagola()
{
Console.WriteLine("Gatto {0} dice: Miao!", nome);
}
}
La classe Gatto
definisce le proprietà Nome e Colore, che archiviano i valori effettivi all'interno dei campi (fields) nome
e colore
(privati).
Inoltre, vengono dichiarati due costruttori: uno di default senza parametri e uno che riceve in input i valori di nome e colore.
Infine, si trova un metodo Miagola()
, che fa eseguire al gatto l'azione di miagolare.
Dopo aver definito la classe di esempio, possiamo usarla nel seguente modo:
static void Main()
{
Gatto primoGatto = new Gatto();
primoGatto.Nome = "Zefiro";
primoGatto.Miagola();
Gatto secondoGatto = new Gatto("Mochi", "rosso");
secondoGatto.Miagola();
Console.WriteLine("Gatto {0} è {1}.",
secondoGatto.Nome, secondoGatto.Colore);
}
Se eseguiamo questo codice, otterremo l'output:
Gatto Zefiro dice: Miao!
Gatto Mochi dice: Miao!
Gatto Mochi è rosso.
Questo è un semplice esempio per definire e usare classi.
Nella prossima lezione, esamineremo con maggiori dettagli come creare oggetti, accedere alle loro proprietà e invocarne i metodi, e capiremo meglio come funziona tale esempio.
Classi di Sistema
La chiamata al metodo Console.WriteLine(...)
della classe System.Console
è un esempio di uso di una classe di sistema in C#.
Vengono chiamate system classes le classi definite nelle librerie standard, utilizzabili con C# (o con altri linguaggi di programmazione). Esse sono parte della piattaforma .NET, che include un insieme di linguaggi (C#, VB.NET, ecc.), compilatori e una standard class library contenente migliaia di classi di sistema per le operazioni più comuni: input/output da console, elaborazione di testi, collezioni di dati, parallel execution, networking, accesso a database, elaborazione di dati, creazione di applicazioni Web, GUI e mobili.
È importante notare che l'implementazione della logica in tali classi è incapsulata (nascosta) al loro interno. Per il programmatore è importante sapere che queste classi funzionano, ma non necessariamente come sono implementate. Questo approccio, chiamato astrazione, evita di esporre dettagli superflui e rappresenta uno dei principi fondamentali della OOP.
Approfondiremo le classi di sistema più avanti. Ora è il momento di familiarizzare con la creazione e l'uso di oggetti nei programmi. Questo sarà l'argomento della prossima lezione.
In Sintesi
In questa lezione abbiamo visto i seguenti concetti chiave:
- Classi in C#: vengono definite con
class NomeClasse { ... }
e possono includere campi, proprietà e metodi. - Esempio
Gatto
: mostra come un'unica classe può avere più costruttori, oltre a campi privati gestiti attraverso proprietà e metodi pubblici. - Creazione di oggetti: avviene istanziando la classe con
new
. L'uso di costruttori multipli permette diversi modi di inizializzare gli oggetti. - Classi di sistema: C# fornisce librerie standard (
System.Console
,String
,Environment
,Math
, ecc.) che incapsulano funzionalità comuni, semplificando la programmazione. - Incapsulamento e astrazione: la logica interna delle classi di sistema non è visibile all'utente, garantendo semplicità e sicurezza del codice.