Programmazione orientata agli oggetti - Prima parte

4 pagine in totale: <<Indietro 1 2 [3] 4 Avanti >>

In base a quanto detto relativamente all'incapsulamento, le classi e, in particolare, i loro membri (campi, proprietà e metodi) possono avere un diverso grado di accessibilità. Questo significa che i membri di una classe possono essere mascherati e resi invisibili agli altri oggetti. L'insieme degli elementi accessibili è detto interfaccia della classe. Esistono diversi livelli di accessibilità a ciascuno dei quali corrisponde una parola chiave specifica (vedi tabella 4.1).

Tabella 4.1 - Modificatori di accessibilità in C# e Visual Basic

Visual C# 2005Visual Basic 2005Accessibilità
publicPublicDa tutte le classi.
protectedProtectedSolo dalle classi derivate.
privatePrivateNon accessibile.
internalFriendAll'interno dell'assembly.
protected internalProtected FriendCombinazione delle due.

Il modificatore di accessibilità per una classe si riferisce alla sua visibilità in relazione all'assembly di appartenenza. Una classe pubblica può essere richiamata anche dagli oggetti presenti in altri assembly, una classe definita come internal in C# o Friend in Visual Basic è accessibile unicamente all'interno dell'assembly di appartenenza.

Gli access modifier sono facoltativi. In caso di omissione, sia in C# che in Visual Basic i membri di una classe vengono considerati di tipo privato, mentre le classi diventano visibili unicamente all'interno dell'assembly di appartenenza. In Visual Basic l'omissione del modificatore di accessibilità nella dichiarazione di un campo (vedi esempio 4.2) implica l'utilizzo della keyword Dim come nel caso della definizione di variabili locali (quindi Dim equivale a Private).

Nota
È buona norma definire sempre i campi di una classe come privati e renderli eventualmente accessibili dall'esterno tramite una proprietà corrispondente.

Gli accessor hanno lo stesso livello di accessibilità definito per la proprietà a cui si riferiscono. In Visual C# 2005 è peraltro possibile differenziare l'accessibilità dei due blocchi, in modo tale, per esempio, che l'operazione di lettura sia pubblica, mentre l'operazione di scrittura abbia un livello di accesso limitato (esempio 4.4).


Esempio 4.4 - C#
public string FullName
{
  get { return _fullName; }
  private set { _fullName = value; }
}

Le istanze delle classi sono gli oggetti definiti nell'introduzione del capitolo. Dal momento che per ogni oggetto il CLR alloca un'area di memoria distinta nell'ambito del managed heap, ciascuno di essi è caratterizzato da un'identità univoca, da uno stato particolare (memorizzato nei campi) e da comportamenti specifici (metodi). Questo significa che oggetti diversi di una stessa classe mantengono in memoria copie differenti dei dati (quindi presentano uno stato distinto da tutti gli altri oggetti simili), anche se in generale condividono gli stessi comportamenti.

Un oggetto viene istanziato invocando un metodo particolare, che prende il nome di costruttore. Il costruttore di default non presenta parametri, ma per una classe è possibile definire più costruttori, ciascuno caratterizzato da una firma differente. Questo è possibile in quanto nell'ambito delle classi i metodi possono essere soggetti ad overload, ovvero possono esistere più metodi con lo stesso nome, ma con parametri diversi. La condizione di overload è applicabile a tutti i metodi di una classe in base alla firma. L'esempio 4.5 mostra un caso di overload del costruttore.


Esempio 4.5 - VB
Public Class Person

  Private _fullName As String
  Private ReadOnly _age As Integer

  Public Sub New()
    _fullName = String.Empty
    _age = 18
  End Sub

  Public Sub New(ByVal name As String, ByVal age as Integer)
    _fullName = name
    _age = age
  End Sub

End Class

Dim x As New Person()
Dim y As New Person("Riccardo Golia", 35)

Esempio 4.5 - C#
public class Person
{
  private string _fullName;
  private readonly int _age;

  public Person()
  {
    _fullName = string.Empty;
    _age = 18;
  }
  public Person(string name, int age)
  {
    _fullName = name;
    _age = age;
  }
}

Person x = new Person();
Person y = new Person("Riccardo Golia", 35);

La sintassi per la dichiarazione dei costruttori è diversa nei due linguaggi. In C# il costruttore è contrassegnato dallo stesso nome della classe a cui si riferisce (non occorre utilizzare la keyword void). In Visual Basic il costruttore è una vera e propria procedura con nome identificativo New, ovvero lo stesso nome della keyword utilizzata per la creazione di un oggetto.

Nota
In una classe è possibile utilizzare una o più costanti secondo le regole sintattiche già esposte nei capitoli dedicati ai linguaggi. In aggiunta è possibile definire un campo come readonly (la parola chiave in C# è readonly, in Visual Basic è ReadOnly), che può essere inizializzato e modificato unicamente nell'ambito di un costruttore (esempio 4.5). Una volta che una classe viene istanziata, i suoi campi readonly non sono più modificabili.

II costruttore viene richiamato durante la creazione di un oggetto utilizzando la parola chiave new in C# e la keyword New in Visual Basic (esempio 4.5). La creazione e la dichiarazione degli oggetti è stata affrontata anche nel corso dei capitoli dedicati ai linguaggi, ai quali si rimanda per ulteriori dettagli.

Nota
Un altro tipo particolare di metodo è il distruttore. Questo metodo viene richiamato ogni qualvolta un oggetto viene finalizzato. A differenza di quanto succede nei linguaggi unmanaged, la distruzione non è deterministica, in quanto gli oggetti obsoleti contenuti nel managed heap vengono rimossi in modo autonomo e non prevedibile dal Garbage Collector. Per ulteriori informazioni sul distruttore di una classe, si rimanda alla documentazione in linea di MSDN.

4 pagine in totale: <<Indietro 1 2 [3] 4 Avanti >>

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

TUTORIALS
TOP TEN ARTICOLI
NOTIFICHE

Iscriviti alla nostra newsletter nuoviarticoli per ricevere e-mail le notifiche!

Indirizzo e-mail:
PROVIDER ASP.NET 2.0

Seleziona il database per avere il web.config pronto per Membership, Roles e Profile API.



IN EVIDENZA
MISC