Java NON e' ostico, anzi, da un certo punto di vista e' molto (ma molto molto) meglio di altri linguaggi “"orientati agli oggetti”" (in ordine CRESCENTE di complicazione, tanto per fare un esempio: C# e C++).
Da ex programmatore Fortran/C/assembler/VB (ALIAS programmazione “procedurale” all'ennesima potenza ;-) ) per poter “comprendere” Java devi fare il “cambio di paradigma”: da “programmazione procedurale” a “programmazione ad oggetti”.
Attento a non confondere:
- il paradigma di programmazione (ad oggetti con l'aggiunta di una serie di concetti estremamente comodi quali classi e interfacce e poco altro)
- la sintassi usata per supportare il paradigma di programmazione
- la (sterminata) libreria al servizio del linguaggio di programmazione
- le estensioni al linguaggio per fare “meta-programmazione” (nella fattispecie le ‘annotazioni’) ma che nel 99.9% dei casi “si usano” NON si implementano.
Fortran, C, assembler avevano (ed ancora oggi “hanno”) quattro librerie messe in croce, ed i linguaggi, proprio per la loro “natura procedurale” hanno una sintassi abbastanza “striminzita”. Da un certo punto di vista il linguaggio piu' complesso e' proprio l'assembler, con i suoi n-mila metodi di indirizzamento, n-mila istruzioni assembler, con le loro n-mila varianti per ogni possibile combinazione di parametri/registri/indirizzi di memoria/…
La programmazione ad oggetti richiede NON SOLO di capire che cosa sia un'oggetto, una classe, un'interfaccia, o che cosa sia l'ereditarieta' o l'overloading, MA sopprattutto, cambiare “mentalita'”.
Se vuoi, un “metodo” e' solo un modo diverso di scrivere una funzione.
Non c'e' “”differenza sintattica"" tra scrivere:
class MyClass {
void print(){ printf("Ciao ciccio"}; }
};
MyClass c = new MyClass();
c.print();
e
struct MyClass { }
void print(MyClass c) { printf("Ciao ciccio"}; }
MyClass c = new MyClass();
print(c);
La differenza e' “semantica” ed ha a che vedere con i concetti della OOP.
(Nota: in questo specifico caso, la differenza e' ZERO)
Se vuoi, la versione “”generalizzata"" della programmazione ad oggetti e' quello che viene chiamato “multimetodo”, supportato da Julia (linguaggio di programmazione abbastanza recente che, potenzialmente, dovrebbe andare in sostituzione di Python, in un futuro non troppo remoto).
https://en.wikipedia.org/wiki/Multiple_dispatch
Quindi, visto che non sei proprio “di primo pelo” come supponevo inizialmente ;-) , il consiglio e' quello di approfondire i concetti di programmazione ad oggetti, usando qualche LIBRO, non Wikipedia o le scemenze di videocorsi che trovi su Internet (a meno che non siano corsi SERI di qualche buona/ottima universita').
Qualcosa tipo questo:
https://www.amazon.it/Introduction-Object-Oriented-Programming-Timothy-Budd/dp/0201760312/ref=sr_1_3?__mk_it_IT=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=Z55BBD1VZGSD&keywords=object+oriented+programming+introduction&qid=1673109681&sprefix=object+oriented+programming+introduction%2Caps%2C253&sr=8-3
(costosetto? Embe', se devo consigliare, consiglio “robba seria” ;-) )
D'altra parte, se e' vero che il “Vero Programmatore”, al contrario del “Mangiatore di Ciocori' ”, che tu dovresti conoscere alla perfezione ;-), fa programmi di contabilita' in Fortran, la programmazione ad oggetti di semplifica non poco la realizzazione di diverse categorie di applicazioni.
http://web.tiscali.it/vittoriobaroni/ciocori.htm
Non e' la pancea di tutti i mali, in certi casi e' anche inutilmente complicata, ma in diversi altri non e' sufficiente.
Un esempio per tutti: avendo pasticciato con la bioingegneria sai perfettamente che ci sono n-mila tipologie diverse di matrici: quadrate, rettangolari, simmetriche, hermitiane, triangolari superiori/inferiori a bande, diagonali, sparse, dense, ecc.
Una delle operazioni piu' comuni e' la moltiplicazione tra matrici. Ci sono algoritmi “”efficienti"" che sono in gradi di sfruttare le proprieta' delle matrici per fare la moltiplicazione.
Con la semplice OOP implementare un meccanismo automatico che scelga l'algoritmo piu' adatto di volta in volta e' "un bagno di sangue" e lacrime".
Invece mediante il “multidispach”, la cosa sarebbe "“banale”".