Come possiamo definire un concetto nel nostro codice?

Ci eravamo lasciati nel precedente articolo dicendo che se vogliamo esplorare la possibilità di fare coding con i concetti, dobbiamo risolvere tre problemi, il primo dei quali è legato proprio alla domanda scelta come titolo per questo articolo:

Come possiamo definire un concetto nel nostro codice?

Sempre nell’articolo già citato abbiamo definito il concetto* di concetto** in questo modo:

Un concetto può essere visto come una etichetta che rimanda ad una entità reale o astratta.

In questo senso l’etichetta concetto* potrebbe rimandare all’entità astratta “cerchio” (concetto**) che a sua volta potrebbe rimandare all’entità reale “ruota avente raggio di 22cm”.

Proviamo a partire con le nostre riflessioni proprio dalla definizione che abbiamo dato.

Innanzitutto suddividiamola nelle sue parti costitutive per verificare se possiamo tradurle in codice:

  • un concetto è identificato da una etichetta;
  • un concetto rimanda ad una entità reale o astratta.

Concentriamoci per il momento sulla sola prima frase e facciamo entrare nel flusso dei nostri pensieri anche gli argomenti trattati nella nostra Guida al FreeBASIC. Sappiamo che uno dei sinonimi del verbo identificare è far coincidere. Facendo ora un parallelo con quanto abbiamo imparato studiando il FreeBASIC, ci dovrebbe venire in mente l’articolo dedicato alla dichiarazione delle variabili: ad una variabile, infatti, coincide uno spazio in memoria. In altri termini, all’etichetta scelta come nome della variabile corrisponderà un certo valore: quindi una certa informazione.

Tenendo a mente questa idea e passando alla seconda frase, il rimando ad entità reali o astratte porta il nostro pensiero al tema più specifico della dichiarazione di un tipo di dato definito ad hoc che possa rappresentare queste entità.

Attenzione! Nell’ambito dell’informatica, rappresentare una qualsiasi cosa significa, in ultima analisi, costruire un modello.

Le nostre riflessioni ci hanno quindi per ora condotto ad un altro concetto, quello di modellizzazione.

Il processo di modellizzazione avviene attraverso l’interazione tra l’atto dell’osservazione e l’atto del pensare. Questa interazione permette di creare un modello, cioè una classe generica (concetto**) che rappresenta una certa entità astratta che a sua volta rappresenta idealmente una entità reale o astratta (cioè il cosiddetto oggetto o istanza della classe).

Esprimendo il problema in questi termini ci sembra di giungere come logica conseguenza al paradigma della programmazione orientata agli oggetti.

Ma allora questo ipotetico nuovo paradigma di programmazione per concetti che andiamo vagheggiando non è altro, in realtà, che l’arcinoto paradigma di programmazione ad oggetti?

Apparentemente sembrerebbe di sì, ma cè un aspetto che facilmente può sfuggire ad una prima analisi.

Proviamo ad approfondire la questione dicendo quanto segue:

Nella programmazione per concetti non si vogliono creare dei modelli, ovvero delle classi al fine di istanziarle per ottenere degli oggetti con cui lavorare, ma si vuole rimanere al solo livello concettuale del tipo (type), e solo con questo lavorare. Non si creano quindi delle classi e non si istanziano oggetti.

Si abbandona quindi l’idea della rappresentazione: ovvero la creazione arbitraria e soggettiva di un modello (concetto**), nella convinzione che il modello non potrà mai essere la realtà.

Si persegue invece l’idea dello sviluppo dinamico di una rete di concetti* interconnessi.

Nel nuovo paradigma di programmazione per concetti che andiamo definendo il ruolo fondamentale spetta alla riflessione del programmatore: sarà il suo pensare riflessivo che creerà dinamicamente le connessioni concettuali che sveleranno l’idea che di volta in volta informa una determinata realtà.

Un esempio pratico

''definiamo il tipo di dato "concetto*"
type concetto
  id as integer ''identificativo del concetto
  etichetta as string
end type

''dimensioniamo e creiamo il vettore dei concetti
''del tipo di dato "concetto"
dim vettore_concetti(1 to 2) as concetto

''valorizziamo i membri dei diversi concetti
vettore_concetti(1).id = 1
vettore_concetti(1).etichetta = "albero"
vettore_concetti(2).id = 2
vettore_concetti(2).etichetta = "pioppo"

Bene. Possiamo per oggi fermarci qui.

Nel prossimo articolo affronteremo il secondo quesito:

Come possiamo far entrare in relazione più concetti?

Fare coding con i concetti

Proviamo a domandarci: è possibile fare coding con i concetti?

Ma cos’è un concetto?

Un concetto può essere visto come una etichetta che rimanda ad una entità reale o astratta. Un esempio del primo tipo potrebbe essere il concetto di “albero” riferito al pioppo che vedo fuori dalla finestra di casa mia, il secondo tipo potrebbe essere ancora una volta il concetto di “albero”, questa volta però inteso come astrazione per indicare genericamente le piante legnose perenni.

Il concetto però, di per sé, risulta statico: se dico all’improvviso al mio vicino la parola “albero”, è probabile che lui si volti e mi guardi con aria interrogativa senza sapere che pensare. Fare coding significa invece creare qualcosa in grado di fare qualcos’altro: quindi un qualcosa di dinamico.

Dobbiamo allora domandarci: come possiamo mettere in moto un concetto? Se è vero che un concetto, preso da solo, ci appare come una entità statica, allora è forse probabile che ci occorra qualcos’altro per renderlo attivo. Ma cosa?

Stiamo attenti. Concentriamoci un attimo su questo punto…

Ebbene, qualsiasi sia quest’altra entità che andiamo cercando, sarà pure essa stessa esprimibile attraverso un concetto!

Ma allora sarà sufficiente accostare ad un concetto un secondo concetto per renderlo attivo?

Facciamo una prova: prendiamo il concetto di “numero” e il concetto di “pace”. Immaginiamo di accostarli… non accade nulla.

Facciamo allora una seconda prova: prendiamo sempre il concetto di “numero” e accostiamogli il concetto di “parità”.

Ecco che in questo caso nella nostra mente accade qualcosa, come una piccola scintilla: i due concetti si collegano; tra loro si stabilisce una relazione, nasce una immagine, una idea.

I due concetti, sino a quel momento inerti, entrano in una relazione generativa e nella nostra mente vi è un’esplosione di numeri pari che danzano davanti ai nostri occhi.

Che sia questa una possibile via per fare coding con i concetti?

Se vogliamo provare a percorrere questa via, appare evidente che abbiamo di fronte a noi 3 problemi da risolvere:

  1. Come possiamo definire un concetto nel nostro codice?
  2. Come possiamo far entrare in relazione più concetti?
  3. Come possiamo far fare qualcosa al computer sulla base di una serie di concetti interconnessi?

Rispondere a questi tre quesiti sarà oggetto dei prossimi articoli. 🙂