Encapsulation et types paramétrés

images/orangebelt.png

Revenons sur quelques principes de réalisation de classes:

Exemple:

public class Panier {

    private List<Produit> produits = new ArrayList<>() ;
    // ici les modifications de la liste des produits
    // seront reportées sur vueNonModifiable
    // voir la méthode getProduits pour une autre stratégie
    private List<Produit> vueNonModifiableSurProduits = Collections.unmodifiableList(produits) ;

    // optionnel avant la fin des opérations (et là il sera obligatoire)
    private Client client ;

    //// CONSTRUCTEURS
    public Panier() {
    }

    public Panier(Client client) {
        this.client = client;
    }

    ///// ACCESSEURS/MUTATEURS

    public Optional<Client> getClient() {
        return Optional.ofNullable(client);
    }

    public void setClient(Client client) {
        this.client = client;
    }

    // autre option: faire return List.copyOf(produits)
    // différence: la liste retournée ne tiendra pas compte
    // des modifications ultérieures
    public List<Produit> getProduits() {
        return vueNonModifiableSurProduits ;
    }
    .....

Les codes "clients", avertis de l’aspect optionnel du résultat d’une méthode pourront alors prendre des précautions et tester la présence effective d’une valeur: voir les méthodes isPresent, get, orElseThrow

--exercice--