Prima di tutto, nota che sono un C ++ e Python, non Java, quindi alcuni di questi potrebbero non essere applicati in modo così completo. Per favore, correggimi se faccio delle ipotesi errate su come funzionano le classi in Java.
Le classi sono utili soprattutto quando vengono istanziate. Una classe di cui non viene creata nessuna istanza è in realtà solo uno spazio dei nomi glorificato. Se usi tutte le tue classi in questo modo, in effetti, i vantaggi di spostare le cose dallo spazio dei nomi allo spazio dei nomi possono sembrare insignificanti: al massimo, vincerai avendo alcuni dati privati in ciascuno e incapsulando un po 'le cose.
Tuttavia, non è qui che brillano le classi. Considera la String
classe: potresti avere tutte le stesse funzionalità usando char
array e alcune funzioni statiche. A questo punto, le funzioni ti danno un po 'più di sicurezza e zucchero sintattico. Puoi scrivere string.length()
invece di length(char_array)
; non è un grosso problema, ma a molte persone piace ancora. Inoltre, sai che se qualcuno ti ha dato un String
, è stato creato con il String
costruttore e deve funzionare con la length
funzione: se la versione dell'array non è in grado di gestire alcuni caratteri, non ha modo di impedirti di inserirli lì .
Comunque non è ancora così. Il punto chiave è che le classi raggruppano i dati e le funzioni che operano su di essi e ne astraggono entrambi. Quando hai un metodo void f(Builder b)
che sai che otterrai Builder
, e puoi aspettarti che supporterà determinati comportamenti. Tuttavia, non si sa nulla dei dati o delle funzioni in esecuzione - in effetti, le definizioni per entrambi potrebbero non essere ancora scritte mentre si scrive e si compila f
.
Il primo punto da capire è quindi che le classi rendono conveniente il passaggio dei dati assicurandosi che non vengano interrotti. Il secondo punto è che sia i dati che la funzione (implementazioni) di un oggetto hanno qualcosa sull'oggetto, non qualcosa che si può semplicemente dire dal suo tipo.