Concetti OOPS in Java – Esempio di Concetti OOPS

La programmazione orientata agli oggetti è molto importante per la programmazione. Senza avere un’idea dei concetti di OOPS, non sarai in grado di progettare sistemi nel modello di programmazione orientato agli oggetti.

Cosa si intende per Modello di Programmazione Orientato agli Oggetti?

Il modello di programmazione orientato agli oggetti ruota attorno al concetto di Oggetti. Cos’è un Oggetto? Un oggetto è un’istanza di una Classe. Contiene proprietà e funzioni. Sono simili agli oggetti del mondo reale. Ad esempio, la tua auto, casa, laptop, ecc. sono tutti oggetti. Hanno alcune proprietà specifiche e metodi per svolgere azioni. Cos’è una Classe? La Classe definisce la struttura degli Oggetti. Definiscono le proprietà e le funzionalità degli oggetti. Ad esempio, il Laptop è una classe e il tuo laptop ne è un’istanza.

Concetti di OOPS

I concetti principali di OOPS sono:

  1. Astrazione
  2. Incapsulamento
  3. Polimorfismo
  4. Ereditarietà
  5. Associazione
  6. Aggregazione
  7. Composizione

Esaminiamo uno per uno questi concetti di programmazione orientata agli oggetti. Useremo il linguaggio di programmazione Java per gli esempi di codice in modo che tu sappia come implementare i concetti OOPS in Java.

1. Astrazione

L’astrazione è il concetto di nascondere i dettagli interni e descrivere le cose in termini semplici. Ad esempio, un metodo che somma due interi. L’elaborazione interna del metodo è nascosta al mondo esterno. Ci sono molti modi per raggiungere l’astrazione nella programmazione orientata agli oggetti, come l’incapsulamento e l’ereditarietà. Un programma Java è anche un ottimo esempio di astrazione. Qui Java si occupa di convertire affermazioni semplici in linguaggio macchina e nasconde i dettagli dell’implementazione interna dal mondo esterno.

Ulteriori Letture: Che cos’è l’Astrazione in OOPS?

2. Incapsulamento

L’incapsulamento è la tecnica utilizzata per implementare l’astrazione nella programmazione orientata agli oggetti. L’incapsulamento è utilizzato per limitare l’accesso ai membri e ai metodi della classe. Le parole chiave modificatore di accesso vengono utilizzate per l’incapsulamento nella programmazione orientata agli oggetti. Ad esempio, in Java l’incapsulamento viene realizzato utilizzando le parole chiave private, protected e public.

3. Polimorfismo

Il polimorfismo è il concetto secondo il quale un oggetto si comporta in modo diverso in situazioni diverse. Ci sono due tipi di polimorfismo: polimorfismo a tempo di compilazione e polimorfismo a tempo di esecuzione. Il polimorfismo a tempo di compilazione è ottenuto tramite sovraccarico dei metodi. Ad esempio, possiamo avere una classe come segue.

public class Circle {

	public void draw(){
		System.out.println("Drwaing circle with default color Black and diameter 1 cm.");
	}
	
	public void draw(int diameter){
		System.out.println("Drwaing circle with default color Black and diameter"+diameter+" cm.");
	}
	
	public void draw(int diameter, String color){
		System.out.println("Drwaing circle with color"+color+" and diameter"+diameter+" cm.");
	}
}

Ecco abbiamo diversi metodi draw ma hanno comportamenti diversi. Questo è un caso di sovraccarico di metodo perché tutti i nomi dei metodi sono gli stessi e gli argomenti sono diversi. Qui il compilatore sarà in grado di identificare il metodo da invocare a tempo di compilazione, quindi è chiamato polimorfismo a tempo di compilazione. Il polimorfismo a tempo di esecuzione viene implementato quando abbiamo una relazione “IS-A” tra gli oggetti. Questo è anche chiamato overriding del metodo perché la sottoclasse deve sovrascrivere il metodo della superclasse per il polimorfismo a tempo di esecuzione. Se stiamo lavorando in termini di superclasse, la classe di implementazione effettiva viene decisa a tempo di esecuzione. Il compilatore non è in grado di decidere quale metodo di classe verrà invocato. Questa decisione viene presa a tempo di esecuzione, quindi il nome come polimorfismo a tempo di esecuzione o invio dinamico del metodo.

package com.journaldev.test;

public interface Shape {

	public void draw();
}
package com.journaldev.test;

public class Circle implements Shape{

	@Override
	public void draw(){
		System.out.println("Drwaing circle");
	}

}
package com.journaldev.test;

public class Square implements Shape {

	@Override
	public void draw() {
		System.out.println("Drawing Square");
	}

}

Shape è la superclasse e ci sono due sottoclassi Circle e Square. Di seguito è riportato un esempio di polimorfismo a tempo di esecuzione.

Shape sh = new Circle();
sh.draw();

Shape sh1 = getShape(); //some third party logic to determine shape
sh1.draw();

Negli esempi sopra, il compilatore Java non conosce la classe di implementazione effettiva di Shape che verrà utilizzata a tempo di esecuzione, quindi polimorfismo a tempo di esecuzione.

4. Ereditarietà

Ereditarietà è il concetto di programmazione orientata agli oggetti in cui un oggetto si basa su un altro oggetto. L’ereditarietà è il meccanismo del riutilizzo del codice. L’oggetto che viene ereditato è chiamato superclasse e l’oggetto che eredita la superclasse è chiamato sottoclasse. Utilizziamo la parola chiave extends in Java per implementare l’ereditarietà. Di seguito è riportato un semplice esempio di ereditarietà in Java.

package com.journaldev.java.examples1;

class SuperClassA {

	public void foo(){
		System.out.println("SuperClassA");
	}
	
}

class SubClassB extends SuperClassA{
		
	public void bar(){
		System.out.println("SubClassB");
	}
	
}

public class Test {
	public static void main(String args[]){
		SubClassB a = new SubClassB();
		
		a.foo();
		a.bar();
	}
}

5. Associazione

Associazione è il concetto OOPS per definire la relazione tra gli oggetti. L’associazione definisce la molteplicità tra gli oggetti. Ad esempio, gli oggetti Insegnante e Studente. C’è una relazione uno a molti tra un insegnante e gli studenti. Allo stesso modo, uno studente può avere una relazione uno a molti con gli oggetti insegnante. Tuttavia, entrambi gli oggetti studente e insegnante sono indipendenti l’uno dall’altro.

Agregazione

L’aggregazione è un tipo speciale di associazione. Nell’aggregazione, gli oggetti hanno il proprio ciclo di vita, ma c’è un possesso. Ogni volta che abbiamo una relazione “HAS-A” tra gli oggetti e un possesso, è un caso di aggregazione.

6. Composizione

La composizione è un caso speciale di aggregazione. La composizione è una forma più restrittiva di aggregazione. Quando l’oggetto contenuto in una relazione “HA-UN” non può esistere da solo, allora si tratta di composizione. Ad esempio, una Casa ha una Stanza. Qui la stanza non può esistere senza la casa. Si dice che la composizione sia migliore dell’ereditarietà, leggi di più su Composizione vs Ereditarietà.

Ulteriori letture: Composizione in Java

E questo è tutto per un rapido riassunto sui concetti OOPS.

Puoi consultare ulteriori esempi di programmi Java nel nostro Repository GitHub.

Riferimenti: https://docs.oracle.com/javase/tutorial/java/concepts/

Source:
https://www.digitalocean.com/community/tutorials/oops-concepts-java-example