Tutti dicono di pensare ad una classe come ad "un insieme di oggetti"
No, cercando dei paragoni col mondo reale, la classe è come il progetto di un'automobile, l'oggetto è l'automobile vera e propria. Per creare un'automobile devi prima progettarla, definendone diversi aspetti (proprietà, metodi ed eventi). Una volta che il progetto è completo potrò portarlo in fabbrica e realizzare migliaia di automobili identiche, che varieranno tra loro grazie alle proprietà che ho deciso di implementare (colore, cilindrata, clima si/no, ecc.). Tornando al mondo informatico, quando creo un oggetto da una classe si dice che creo una nuova "istanza" della classe, che rende funzionanti i concetti progettati nella classe.
Una volta che hai capito questo sistema di ragionamento, diventerà più facile comprendere tutto il resto della programmazione ad oggetti. La tua difficoltà, se non ho capito male, è quella di calare questi concetti alla programmazione reale. Facciamo un esempio reale, immagina di dover scrivere un software che calcoli area e perimetro di alcuni poligoni regolari. Con la programmazione procedurale tradizionale, potrei scrivere:
codice:
Function Area(nlati As Integer, lato As Integer) As Integer
'algoritmo di calcolo dell'area
'...
End Function
Function Perimetro(nlati As Integer, lato As Integer) As Integer
'...
End Function
Con la programmazione ad oggetti, mi sforzo di descrivere il poligono regolare con una classe:
codice:
Public Class Poligono
Private nlati As Integer
Private lato As Integer
Public Property NumeroLati() As Integer
'legge e scrive nella variabile nlati
End Property
Public Property LunghezzaLato() As Integer
'legge e scrive nella variabile lato
End Property
'costruttore
Public Sub New(numlati As Integer, lunglato As Integer)
nlati = numlati
lato = lunglato
End Sub
Public Function Area() As Integer
'....
End Function
Public Function Perimetro() As Integer
'....
End Function
End Class
Una volta definita questa classe, per utilizzarla dovrò scrivere:
codice:
Dim poligono1 As Poligono
'creo una istanza della classe Poligono - un triangolo lato 10
poligono1 = New Poligono(3, 10)
'stampo su console l'area e il perimetro
Console.WriteLine(poligono1.Area())
Console.WriteLine(poligono1.Perimetro())