In effetti, hai sbagliato la sezione, dovevi postare nel forum di Programmazione.
In attesa che ti spostino, vedo di darti un paio di dritte:
La Programmazione Orientata ad Oggetti è nata come uno specifico bisogno dei programmatori, i quali, in un universo di codice, non sto scherzando, se vedi alcuni programmi di una certa entità, non riuscivano più a districarsi senza uno strumento che si occupasse di gestire le strutture dei dati a basso livello, con allocazione di memoria, gestione puntatori e cose simili.
Per questo motivo, sono nati dei linguaggi come Java, Objective-C, C#. Anche Python, PHP ad Oggetti, JSP ed ASP.NET.
Ora, quali sono i principali vantaggi?
In generale, un linguaggio ad oggetti permette di creare un costrutto di nome classe la quale è una specie di scatola con dentro delle variabili, che possono essere sia oggetti, sia tipi di dati (interi, booleani e così via), e offre all'ESTERNO, una serie di funzioni, chiamati metodi. Questi metodi, se sono pubblici, vengono visti e possono essere chiamati dall'esterno della classe, la metafora più utilizzata è quella di una serie di pulsanti, attorno alla scatola, infatti possono essere premuti, ma l'utilizzatore non saprà mai cosa c'è dentro la scatola. Questo concetto si chiama incapsulazione, ovvero racchiudere il codice che viene eseguito all'interno della scatola, lasciando che l'utilizzatore veda soltanto il metodo (l'interruttore) che devi chiamare.
Un oggetto è un istanza, ovvero è come prendere un progetto (la nostra classe) e metterlo in produzione, creando l'oggetto, appunto, che il progetto descrive. In quanto software, l'istanza occupa una certa porzione di memoria alla quale possiamo accedere tramite il reference, che punta alla porzione di memoria che contiene i dati dell'oggetto.
Il reference è, a tutti gli effetti, quello che andiamo a manipolare di un oggetto, infatti, quando facciamo:
Codice PHP:
Object obj = new Object();
in "obj" on c'è l'oggetto, ma il reference alla nuova porzione di memoria dove l'oggetto appena istanziato è stato creato.
Quento introduce un nuovo aspetto: la manipolazione degli oggetti nel metodi.
Immagina di passare ad una funzione, o metodo, un tipo:
Codice PHP:
int a = 0;
myFunction(a);
ora, se all'interno della funzione capita:
Codice PHP:
function myFunction(a)
{
a = a + 1;
}
all'esterno della stessa, il valore non verrà modificato, infatti:
Codice PHP:
int a = 0;
myFunction(a);
print (a); //Verrà stampato 0
I reference, al contrario, funzionano, in questo senso, come i puntatori del buon vecchio C ansi.
Infatti:
Codice PHP:
//Metti di avere un variabile int a =0; ed un metodo add(int i) che esegue a = a + 1; nella classe Classe1
Classe1 classe = new Classe1();
classe.add(11);
se ora stampo classe.a, otterrò 11.
Allo stesso tempo, se passo il reference ad un metodo, lavorerò sempre sullo stesso oggetto, proprio perché facendo
Codice PHP:
Object obj = new Object(); //Creo un nuovo oggetto in una nuova locazione di memoria.
Object obj1 = obj; //NON creo un nuovo oggetto, solo copio il reference dell'oggetto precedente
i due reference punteranno al medesimo oggetto. Lo stesso discorso, se passo il reference ad un metodo, le modifiche applicate all'oggetto verranno viste anche dall'esterno.
L'ultimo, anche se non d'importanza, aspetto del linguaggio ad oggetti di cui parlerò è l'ereditarietà:
L'idea di base è quella di creare delle categorie, per fare un esempio, creo la classe Veicolo, che rappresenta un generale veicolo.
Codice PHP:
public class Veicolo{
private String targa;
private double altezza, lunghezza, larghezza, peso;
public Veicolo(targa){
this.targa = targa;
}
public void setMisure(double alt, double lng, double lrg, double ps)
{
this.altezza = alt;
this.lunghezza = lng;
this.larghezza = lrg;
this.peso = ps;
}
public String getTarga(){
return this.targa;
}
}
Questa classe definisce una serie di attributi (targa, altezza, larghezza, lunghezza, peso), e due metodi, più il costruttore, un metodo per settare i dati ed un metodo per richiamare la targa.
Questa classe può essere usata da un altra, tipo la classe Automobile, o Camion, o Moto, in questo modo:
Codice PHP:
public class Automobile extends Veicolo{
private String modello;
public Automobile(String targa, String modello)
{
super(targa);
this.modello = modello;
}
}
Ora un oggetto di tipo Automobile avrà tutti i metodi e gli attributi di Veicolo, in più quelli definiti in Automobile, in questo modo è possibile definire delle macro classi con le funzionalità base, più delle altre classi che possono estendere la macro e specializzarla in quello che gli serve.
Spero di averti dato una minima idea di quello che la programmazione ad oggetti permette di fare.
Concludo dicendo che il massimo di un programma ad oggetti sarebbe quello di creare una specie di struttura composta da una serie di oggetti che interagiscono tra di loro, senza preoccuparsi di quello che ciascuno fa, questa è l'idea dalla quale è nato il linguaggio ad oggetti.