La programmazione nei linguaggi orientati agli oggetti (Object Oriented Programming o più semplicemente OOP) si basa su tipologie di entità denominate classi ed oggetti. Java è un linguaggio OOP.

Java un linguaggio orientato agli oggetti (Object Oriented Programming, più
semplicemente OOP) si basa su tipologie di entità denominate classi ed oggetti.

Le classi definiscono modelli per componenti che condividono proprietà similari.
Ovvero, ipotizzando una classe Autoveicolo, che vuole modellare un generico veicolo, potremmo prevedere come proprietà, il peso, la tipologia di patente richiesta per guidarlo, il numero di ruote (se è veicolo dotato di ruote, potrebbe essere un cingolato altrimenti), la cilindrata, la targa, il telaio e così via.
Quando definiamo quindi una classe Autoveicolo, non stiamo creando nessun oggetto,
similmente, quando creiamo o definiamo una funzione, stiamo solo descrivendo come si
comporterà se verra chiamata/applicata a degli argomenti.

La classe definisce un modello per componenti che condividono proprietà similari.
Ad esempio, classe Autoveicolo, come modello un veicolo generico, come proprietà potrebbe avere:

  • Peso
  • Cilindrata
  • Telaio
  • Targa
  • Tipo di patente
  • Numero di ruote in dotazione (...altrimenti potrebbe essere una Ape Car o un cingolato!)

Quando definiamo quindi una classe Autoveicolo, non stiamo creando nessun oggetto,
similmente, quando creiamo o definiamo una funzione, stiamo solo descrivendo come si
comporterà se verra chiamata/applicata a degli argomenti.

L'oggetto realizza le istruzioni di una classe.
Data una classe che abbiamo definito, possiamo creare una o più istanze, per esempio potremmo creare un oggetto automobileNumero1 di tipo (classe) Autoveicolo, per la quale definiamo il valore della targa, del telaio, possiamo poi creare, sempre utilizzando la definizione della classe Autoveicolo, un oggetto moto1 che avrà per la proprietà numero di ruote l'intero 2, una sua targa e così via.

In termini più formali, e con maggior dettaglio:
Le classi permettono di strutturare gerarchicamente le informazioni prevedendo strumenti di incapsulamento e di limitare l'accesso e la visibilità delle stesse (information hiding).
Permettono inoltre di realizzare il polimorfismo funzionale, assicurando l'implementazione di metodi caratterizzati da uguale funzionalità ma operanti su domini differenti. Ossia, metodi (il nome che prendono le funzioni nella OOP) che a parità di nome operano su un numero e tipo differente di parametri). Per rendere più chiara quest'ultimo concetto, immaginate di avere una
classe OperazioniAritmetiche che abbia due metodi somma uno per i numeri interi e uno per i numeri reali, non dovremmo definire e poi scegliere un metodo sommaInteri o sommaReali, sarà sufficiente chiamare il metodo somma e a differenza del tipo degli argomenti la computazione (cioè il calcolo) sarà quella aspettata.

I concetti sopra esposti, vi saranno più chiari in seguito, attraverso gli esempi che forniremo nei prossimi post, nel frattempo abbiamo avuto modo di apprendere una parte della terminologia dell'OOP, concetti come classe, oggetto, incapsulamento, polimorfismo, il cui valore prescinde dal linguaggio Java.