Paradigmi della Programmazione Orientata agli Oggetti

Indice Tutorial

Una caratteristica dei linguaggi di programmazione orientata agli oggetti OOP (che non è solo java ma anche altri linguaggi, ad esempio C#) è il supporto dei principi base della OOP.

I principali paradigmi sono:

Incapsulamento

Incapsulamento: accesso dei dati tramite metodi. L’idea di base dell’incapsulamento è quella di permettere l’accesso ai dati di una classe solo tramite dei metodi appositi. In questo modo, nel caso in cui i metodi necessitano di alcune migliorie o controlli aggiuntivi sarà sufficiente quindi modificare il codice relativo al metodo senza modificare niente dal punto di vista dell’utente. L’utente userà la stessa interfaccia senza essere al corrente che sono state apportate modifiche.  Questo principio, in java, si traduce nel rendere i dati delle classi non visibili dall’esterno, quindi privati, e creare dei metodi pubblici delegati all’accesso ad essi.  

Esempio:

Immaginiamo di avere una classe Persona, con l’attributo nome, cognome, eta. Applicando il principio dell’incapsulamento la classe avrà la seguente forma:

public class Persona {
	
	private String cognome;
	private String nome;
	private int eta;

	Persona(String c, String n, int e){
		this.cognome = c;
		this.nome = n;
		this.eta = e;
	}

	public String getCognome() {
		return cognome;
	}

	public void setCognome(String cognome) {
		this.cognome = cognome;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public int getEta() {
		return eta;
	}

	public void setEta(int eta) {
		this.eta = eta;
	}
}

Se volessimo mettere il vincolo che l’età deve essere compresa tra 18 e 50, e che il cognome, una volta creato l’oggetto, non sia più modificabile, è sufficiente mettere il primo vincolo nel metodo setEta e eliminare il metodo setCognome:

public class Persona {

	private String cognome;
	private String nome;
	private int eta;

	Persona(String c, String n, int e) {
		this.cognome = c;
		this.nome = n;
		this.eta = e;
	}

	public String getCognome() {
		return cognome;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public int getEta() {
		return eta;
	}

	public void setEta(int eta) {
		if (eta > 18 && eta < 60)
			this.eta = eta;
		else
			System.out.println("Eta non permessa");
	}
}

Ereditarietà

Nel mondo reale classifichiamo tutto con categorie e sottocategorie. Per esempio un cane è un animale, cioè cane è una sotto categoria della categoria animale perché ha tutte le caratteristiche di un animale e in più le particolarità di cane. Ma le categorie nella OOP sono rappresentate come classi, quindi “cane” è una sottoclasse della classe “animale”. L’ereditarietà è la caratteristica che mette in relazione più classi che hanno caratteristiche comuni.

Polimorfismo

Capacità di un oggetto di assumere molte forme, ridefinendo anche  i metodi. Collegandoci all’esempio precedente, un animale può essere un cane, ma anche un leone. Le classi possono prendere la “forma” di tutte le loro sotto-classi.

Astrazione

mostra all’esterno solo le cose essenziali, nascondendo l’implementazione all’interno. In altre parole, si occupa della vista esterna di un oggetto (interfaccia), cercando di separare l’interfaccia dalla implementazione.  È un modo per ridurre la complessità del sistema.  In java l’astrazione è realizzata tramite l’uso di classi astratte, metodi astratti e interfacce. La differenza principale tra l’incapsulamento e l’astrazione è che l’astrazione nasconde i dettagli di implementazione per ridurre la complessità del codice mentre l’incapsulamento nasconde i dati ai fini della protezione dei dati. 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *