[Italian] Classi ed Oggetti, una semplice prospettiva filosofica con Platone
Tags: programming, phylosophy, oop, softskill
Published: 2021-12-31 17:01:38

Nel corso dei miei studi filosofici accompagnati dalle attività formative che svolgo parallelamente al mio lavoro mi son trovato a valutare e far emergere la consapevolezza di quanto la **Filosofia**, intesa come disciplina e madre storica di tutti i saperi, possa essere utile non solo come materia ad accrescere il nostro livello culturale e apprendere lo sviluppo del pensiero umano. 
Possiamo associargli, per esempio, una dimensione didattica per comprendere nell'ambito dell'informatica meglio dei concetti imprescindibili nel mondo della programmazione moderna come la programmazione orientata ad oggetti (in inglese OOP). 

Davvero? Come possiamo conciliare la disciplina originaria del sapere umano, con un'altra dal forte carattere tecnico-scientifico?
Proviamo a scoprirlo.

**Chi è Platone?**
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r56o9nikw1460wjnoave.jpg)
Penso che almeno una volta nella vostra vita avete sentito parlare di uno dei più grandi filosofi della storia del pensiero occidentale ,e che ha influenzato tutta la storia del pensiero umano. Partendo dagli scritti del suo maestro **Socrate**, _l'uomo del sapere giusto e dalle tante virtù_, è anche tra i primi ad aver raccolto tutti gli scritti e i dialoghi dei pensatori venuti prima di lui (i presocratici) e aver stilato una raccolta di 35 Dialoghi e una raccolta di 13 lettere che parlano di Politica, Metafisica, Scienza e Morale.
Di lui disse **Alfred North Whitehead**, matematico e filosofo inglese del Novecento: _"Tutta la storia della filosofia occidentale non è che una serie di note a margine sulle opere di Platone”_.

Ci sarebbe tantissimo altro da aggiungere, ma ora focalizziamoci sul nostro obiettivo e cerchiamo di spiegare come facciamo ad associare Platone alla programmazione ad oggetti.
Con la sua celeberrima **_Teoria delle Idee_**.

**Cos'è la Teoria delle Idee?**
Prima di spiegarla cerchiamo di concentrarci prima sulla parola  Idea. Il concetto di Idea, come sappiamo tutti, è associato ad una attività del pensiero umano. Ad esempio quando si scopre di trovare una soluzione ad un problema.

Da un punto di vista etimologico la parola Idea deriva dal greco 
antico **Eidos** (_**εἶδος**_) che signfica "_forma, aspetto o anche figura_".
Per Platone quindi le idee sono entità o forme immutabili, ingenerate ed eterne che vivono in una realtà metafisica (da lui chiamata Iperuranio) e rappresentano la forma perfetta di tutte le cose esistenti nella realtà di tutti i giorni. Oggetti, Persone e Animali o anche ad esempio l'idea di Politica , Coraggio, Bene etc..
Le cose esistenti nella nostra realtà riflettono la perfetta Idea ad esempio del Cane proveniente dall'Iperuranio e che non può cambiare. Per Platone quindi le idee sono anche la forma giusta e benefica di tutte le cose esistenti nella realtà.

Quindi abbiamo introdotto il concetto di Idea e Forma Concreta nella filosofia di Platone. 
Con quali concetti possiamo associarli alla programmazione ad oggetti? Ma naturalmente con le Classi e gli Oggetti.

**Esempio Classe e Oggetto in Java**


```
public class Cane {}
public class Dobermann extends Cane {}
public class Main {
    public static void main(String args[]){
        Dobermann dobermann = new Dobermann();
     }
}
```
Questo è un semplice esempio di un programma che ha due entità: una Classe Cane e una Classe Dobermann, che eredita tutte le caratteristiche del tipo Cane. 
Non c'è bisogno di specificare se Cane sia una classe di tipo "Abstract", per il nostro semplice esempio concettuale ragioniamo con le classi semplici.


**Idea e Forma Concreta scritte in Java**

Abbiamo costruito una rappresentazione fedele del concetto platonico scrivendo in linguaggio Java il concetto base di istanza di una classe. Nel nostro caso abbiamo una classe Cane che rappresente la nostra Idea, e l'istanza della classe Dobermann derivata da Cane che sarebbe la Forma Concreta contenente tutte le caratteristiche principali di un Cane di tipo Dobermann. Anche qui la nostra istanza non è un Cane perfetto e unico come l'**Idea** (Classe Cane), ma la **Forma Concreta** (Oggetto dalla Classe Dobermann) ha le caratteristiche reali legate alla razza specifica di un Dobermann.

Abbiamo messo in pratica, in maniera semplificata, una delle più famose strutture filosofiche della storia con un linguaggio di programmazione per comunicare al nostro compilatore come deve strutturare un elemento Cane nel nostro codice.

**Conclusione e due domande...**
La Filosofia è anche madre del pensiero astratto. 
Possiamo sfruttarla anche per prendere scelte migliori e porre le giuste domande che servono poi per trovare e organizzare una possibile teoria risolutiva a qualsiasi problema tecnologico , scientifico o umanistico. 
E quali se non i problemi di progettazione in campo informatico e della programmazione, dove si può mettere alla prova notevolmente la nostra mente esaltando il ragionamento logico. 

In futuro l'umanità fino a dove riuscirà a portare la rappresentazione del pensiero umano all'interno di una macchina? Esisterà mai una Intelligenza Artificiale "buona" che interpreterà al meglio il pensiero degli uomini per poter compiere sempre azioni tendenti al giusto?