...
Java, poi, introduce una nuova metodologia (paradigma), denominata OOP (programmazione orientata agli oggetti), che, a partire dal concetto di "sistema", stravolge, in un certo senso, la "vecchia" nozione di programmazione strutturata :asd:
Mentre la programmazione strutturata si focalizza sulla divisione del problema in sottoproblemi, la OOP si concentra maggiormente sui dati (oggetti), al centro c'è sempre il "sistema" da analizzare.
...
Se permetti :)
OOP non e' stato introdotto in Java, in effetti venne introdotto agli albori della programmazione (anni 50 e 60) per diventare poi tra i principali paradigmi di programmazione avanzata (ossia dove la programmazione strutturata perde importanza. Purtroppo, devo aggiungere, perche' a volte si vede OOP usato dove non ha alcun senso.
Capisco che stai cercando di semplificare, ma non e' corretto dire che OOP si concentra sui "dati" (anche se "principalmente") infatti in OOP dati e metodi si fondono insieme proprio nella definizione di "oggetto". Mentre nella programmazione strutturata si definivano i "dati" e poi qualche funzione per operare su di loro (per esempio il dato "double" e la funzione cos() per calcolarne il coseno), in OOP si definisce un "oggetto" che ingloba SIA il dato che le funzioni, che si possono perfino riscrivere con un altro significato. Per esempio, e' possibile redifinire l'operatore + (piu') tra oggetti, operatore che in linguaggi strutturati ha senso solo tra operandi aritmetici. Non solo, ma gli oggetti possono derivare da altri oggetti, per cui ne ampliano le caratteristiche, sono due oggetti diversi ma possono operare tra loro.
Per esempio, possiamo scrivere cose come
C:
QualcheOggetto a, b, c;
a = new QualcheOggetto(qualcheValore);
b = d; // d e' un altro oggetto del cui tipo QualcheOggetto deriva
c = a + b;
In altre parole, i "dati", a differenza di quello che dici tu, in OOP finiscono con il "perdere" la loro importanza. Nell'esempio sopra riportato, le variabili 'a' e 'b' sono di tipo QualcheOggetto, ma 'b' necessariamente non lo e' nemmeno (purche 'd' lo implementi). I dati quindi in OOP perdono la rigidita' che hanno in altri paradigmi, per venire sostituiti da "oggetti" che nascondono al loro interno come i dati vengano rappresentati e operati. Quella e' proprio una delle piu' potenti caratteristiche di OOP: potere definire degli oggetti e operare tra loro, ma come i "dati" siano poi rappresentati non ha alcuna importanza. Non ha nemmeno importanza da "dove" vengano, posso scrivere una oggetto "base" e poi derivarne altri che leggano i dati da tastiera, da documento, da database, da internet. La potenza di questa caratteristica era ben conosciuta dai programmatori in C che finivano con il definire il tutto come il tipo (void *) che permetteva (senza alcuna restrizione, con gli inconvenienti del caso) di assegnare puntatori di qualsiasi tipo si voleva (e io ero uno di quelli)
NOTA per gli addetti ai lavori: in questa mia digressione ho volutamente usato la parola "oggetto" invece che la parole "classe" perche' volevo essere generico. In realta' sono due concetti diversi e formalmente avrei dovuto usare il termine "classe".