Tuesday, September 30, 2008

parlare di predicibilità...

Oggi ho scoperto cose mistiche su VS2008... ad esempio che bisogna creare ogni volta la cartella (del progetto, della soluzione, ecc)... Grazie Guido!!!

Vi posto un estratto di codice, giusto per divertirsi... e per riaprire questo gioioso blog! :D

string temp = solution.GetProjectTemplate("SequentialWorkflowLibrary.zip", "CSharp");
Directory.CreateDirectory(where + "\\WFlow");
solution.AddFromTemplate(temp, where + "\\WFlow", "WFlow", false);

e ora cerchiamo di capire come si mette del codice in un metodo... :P

Monday, September 01, 2008

“Sia l’oggetto” e l’oggetto fu

Come possiamo rappresentare la realtà? Possiamo essere dichiarativi e dire che la coda è una proprietà di cavallo, possiamo essere imperativi e dire che cavallo ha una coda. Oppure possiamo essere “ad oggetti” e dare un punto di vista diverso sul nostro cavallo. Niklaus Wirth diceva “Programma = Dati + Algoritmi”. Indubbiamente vero, ma cercare di spiegare il funzionamento di una grande multinazionale parlando di “dati” e “algoritmi” non è prettamente cosa facile. O per lo meno non lo è utilizzare solo tipi di dato primitivi. Il paradigma ad oggetti non è infatti molto lontano da quello imperativo procedurale. Solo che invece di avere “Programma = Dati + Algoritmi” diventa “Realtà = Entità + Relazioni” o, in un’ottica più legata all’interazione attiva, “Programma = Oggetti + Interazioni”.

Detto questo, non ci resta che definire Oggetto e Interazione.

Un oggetto è la descrizione astratta di un’entità. Una sua versione utilizzabile è un’istanza. Cavallo è un concetto chiaro nella nostra mente, ma nella nostra mente un cavallo esiste solo come informazione. Un cavallo reale è un’istanza del nostro modello di cavallo, del nostro oggetto “Cavallo” (si, lo so, il paragone è forte e dire che il cavallo reale è un’istanza del nostro modello mentale può sembrare forte, ma ci addentreremo in altri momenti nella questione filosofica della differenza tra percezione della realtà e realtà).
Come Cavallo è un tipo di oggetto chiaro nella nostra mente e “istanziabile”, così non è il concetto di Animale. Un cavallo è un animale, ma non tutti gli animali sono cavalli. E non esiste un Animale “puro”, ovvero che non sia nulla di più specifico di un animale. Questo genere di classe è detta “astratta”, e non è mai istanziabile in modo diretto. Ora facciamo un ulteriore salto verso l’astrazione. Sia un animale, che abbiamo già visto essere astratto, che una pianta (per similitudine la supporremo anch’essa astratta) hanno la caratteristica di essere “viventi”. Hanno quindi delle proprietà caratteristiche quali (tanto per fare dei nomi) un certo numero di cellule, possono vivere e morire. Ma queste caratteristiche sono effettivamente diverse all’interno di entrambe le tipologie di esseri viventi. Cionondimeno il fatto che qualcuno ci dica che ad un nostro amico è stato regalato un “essere vivente” (per quanto infinitamente vaga possa essere questa affermazione) ci permette di dedurre che l’entità che gli è stata regalata è nata, può morire, ecc. Questo tipo di informazione (che definisce solo le caratteristiche ma non il modo di valutarle) è detta nel paradigma ad oggetti Interfaccia. Quindi, gerarchicamente, possiamo vedere che un cavallo (classe) è un animale (classe astratta), che a sua volta è un essere vivente (interfaccia), così come una rosa (classe) è una pianta (classe astratta) che è a sua volta un essere vivente (interfaccia).

Le interazioni possono essere di due tipi. Vi sono le interazioni di tipo strutturale, ovvero che definiscono una gerarchia tra gli oggetti (come tra cavallo e animale), e di tipo diretto, che definiscono l’uso di un oggetto da parte di altri oggetti. Le interazioni di tipo strutturale sono ad esempio

  • la generalizzazione, ovvero la constatazione che sia cavallo che foca sono animali e quidni posseggono tutte le caratteristiche degli animali, e inoltre hanno, separatamente, delle caratteristiche in più. La classe astratta “animale” è detta classe padre, le classi “foca”, “cavallo” sono dette classi figlio.
  • la realizzazione, ovvero la considerazione che un animale, essendo un essere vivente, ne realizza in modo peculiare le caratteristiche e le proprietà
Le interazioni di tipo diretto sono invece definite dai metodi all’interno delle singole classi. Quindi l’interazione tipica è l’uso di un dato metodo all’interno di un dato oggetto.