# Esercizi su equals

Esercizi per mostrare l'utilità di eseguire l'override del metodo **equals** nelle sottoclassi per avere l'ugualianza per valore del metodo **equals**.

### ESERCIZI:

* Riprendendo il punto <https://github.com/checksound/TestBase#3-domanda-verifica-ugualianza-per-riferimento-vs-ugualianza-per-valore> della verifica, imprlmentate una versiona di equals che restituisca il valore true quando due oggetti di tipo `Persona` hanno gli attributi `nome` ed `eta` uguali come valore. Nell'implementazione della classe fate anche si che gli attributi `nome` ed `eta` siano privati e quindi accessibili solo tramite metodi. Verificate che l'**`equals`** si comporta correttamente (caso in cui ritorna true e false):

{% code title="laboratorio1/test/TestPersona.java" %}

```java
package laboratorio1.test;

import laboratorio1.Persona;

public class TestPersona {

	public static void main(String[] args) {
		
		Persona persA = new Persona("Marco", 6);
		
		Persona persB = new Persona("Marco", 6);
		
		Persona persC = new Persona("Luca", 6);
		
		
		// verificate
		if(persA.equals(persB)) {
			System.out.println("IMPLEMENTAZIONE CORRETTA");
		} else {
			System.out.println("IMPLEMENTAZIONE ERRATA");
		}
		
		if(persA.equals(persC)) {
			System.out.println("IMPLEMENTAZIONE ERRATA");
		} else {
			System.out.println("IMPLEMENTAZIONE CORRETTA");
		}
	}

}

```

{% endcode %}

* Implementate una classe `CassaVino` con due attributi **private**: `nomeVino` di tipo *String* e `annata` di tipo *int* . Implemenentate la **equals** nella classe `CassaVino` che esegua il controllo solo sul `nomeVino` cioè due casse di vino di *Lambrusco* una del *1996* e una del *2000* sono uguali. Implementate la equals e una classe di test che verifichi il comportamento della classe `CassaVino`.
* Ora scrivete un programma che simula un negozio che vende vino all'ingrosso: il cliente entra nel negozio e chiede al gestore se ci sono 3 casse di Lambrusco ad esempio. Il gestore verifica dal magazzino se c'è la disponibilità. Le casse di Lambrusco possono essere di annate differenti e andare bene oppure il cliente può chiedere un tipo di vino e chiedendo anche che sia di una certa annata, tipo Amarone del 2001. Poi il cliente deve poter ordinare le casse del vino che desidera, con o senza annata, e in magazzino devono essere tolte le casse. Utilizzare una classe **`java.util.Vector`** per contenere le casse di vino e i metodi della classe.

### ESEMPI SOLUZIONI

<https://github.com/checksound/ObjectEqualsOverride>, con esempi di override del metodo **equals** di `Object` nella classe `laboratorio.persona.Persona` (la classe che esegue il test è `laboratorio.persona.TestPersona`).&#x20;

Nel package `laboratorio.negoziovini` c'è l'esempio del negozio vini. La classe per testare le funzionalità è `laboratorio.negoziovini.TestNegozio`.
