Etude d’un épluche-légumes (1/2)

epluchelegumes_cropped

Sous la jupe des filles

Ne vous fiez pas à l’apparente banalité de l’épluche-légumes.
Ok bon c’est un outil de de cuisine des plus banals.
Pourquoi un billet rien que pour lui ?

Tout simplement parce qu’il ne faut pas le sous-estimer.
Vous allez vite comprendre où je veux en venir.
En effet sous ses traits d’une banalité sidérante se cache un bon sujet de modélisation informatique du monde réel qui nous entoure.

Il sait faire des claquettes au moins ?

Non mon bon monsieur : mieux que çà !

Si on le considère comme un simple outil qui se range aux côtés des couverts, de l’ouvre-boîte et autre râpe à fromage, ya rien de bien spécial à en dire sinon qu’il permet de manger un fruit tout nu, tout de sa peau dévetu.
#dépenaillé, #chair-a-vif.

Maintenant observons notre épluche légume sous le prisme de la taxonomie, afin d’en tirer un enseignement tout à fait recevable. Et oui c’est possible.

Le but n’est pas d’être farfelu, ou chercher des poux sur un crâne chauve.

1. Vérifions l’usage de notre objet : « il permet d’éplucher un fruit ou un légume. »
– Ba oui.
– et bien en fait non. Il fait plus que ça.
o_O  ?

Oui…mais encore ?

En génie logiciel il existe les principes SOLID.
Nous allons nous servir de SOLID pour tacher de comprendre pourquoi j’avance cette thèse
qui semble complètement conne.

Dans SOLID il y a le S qui signifie Single Responsability.
A un objet doit être affecté 1 responsabilité, 1 seul rôle bien défini, donc 1 périmètre bien délimité.
Au dela de ce rôle unaire, il doit faire appel à d’autres objets unaires.

Attachons nous à vérifier si notre objet respecte ce principe.
En réalité il a un rôle de Service qui se décompose  en 2 fonctions :

  1. éplucher la peau du fruit,
  2. utiliser la pointe saillante pour extraire les pépins.
  3. creuser la pointe à l’extrémité du fruit pour enlever sa queue

Ainsi on voit bien que l’épluche-légumes en fait plus que ce que son nom laisse croire.
il permet en réalité de préparer un fruit plus sympa à manger, ôté de ses propriétés que nos chérubins
trouvent si désagréables :

  1. la peau parce que c’est moins bon que la chair sucrée du fruit,
  2. les pépins et la queue parce que c’est dur, noir et amer,
  3. parce que « ça peut faire pousser un pommier dans le ventre »

voire même un 3e rôle, mals bien plus galvaudé :
avec sa pointe accérée, on peut l’utiliser comme tournevis plat quand on se trouve en galère de caisse à outils.

La modélisation

Voici la modélisation de l’épluche-légumes telle que je l’entrevois.

interface Eplucher
{
    function eplucher();
    function bienPreparer();
}

class EplucheLegume implements Eplucher
{
    // Epluchage de base façon pomme croquée, seul restera le trognon
    public void function eplucher(Aliment aliment)
    {
        /*
         * on vérifie d'abord l'état de l'aliment pour pas éplucher 2 fois
         */
        // si déjà fait on interrompt l'épluchage
        if (aliment.isEpluche()) {
            return void;
        }
        // implémenter ici l'épluchage
        return void;
    }

    //Epluchage VIP : comme au resto ou alors pour les enfants
    public void function bienPreparer(Aliment aliment)
    {
        this.eplucher(aliment);
        this.enleverPepins(aliment);
        this.enleverQueue(aliment);
    }

    private bool function enleverPepins(Aliment aliment)
    {
        // soit par nature l'aliment est dépourvu de pépins
        // soit ils ont déjà été extrait
        if (! aliment.pepins || aliment.pepins.count() == 0)
        {
            return true;
        }
        // @todo : implémenter ici l'extraction des pépins
        return (bool) reponse;
    }

    private bool function enleverQueue(Aliment aliment)
    {
        // chômage technique : pas de queue à enlever
        if (! aliment.hasQueue()){
            return true;
        }
        // implémenter ici l'extraction de la queue
        return (bool) reponse;
    }
}

C’est mon premier article sur la modélisation en POO. Profitons en pour parcourir la terminologie employée car je le ferai sans doute moins à l’avenir.

Une interface c’est quoi ?
L’interface renseigne le développeur sur l’ensemble des actions proposées par l’objet qu’il s’apprête à exploiter.
En interne, l’interface oblige l’objet objet à proposer lesdites actions : existance, nommage, paramètres attendus, données de retour attendues.

Dans le code d’exploitation ça donne quoi?

On peut aller plus loin avec des propriétés residus qui accumule épluchures, pépins et queue

qu’on passe à un objet Poubelle pour jeter les détritus, ou un objet Compost pour les jeter intelligemment, favorisant le recyclage et la réutilisation écologique.

Maintenant penchons nous sur sa désignation et la sémantique qu’elle lui confère :
Etude d’un épluche-légumes : la sémantique (part 2)

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s