Des fois je trouve que la religion c'est un peu comme une interface, et que les grandes religions monothéistes c'est un peu comme des implémentations. Chaque fournisseur de contenu (Eglises) propose son propre framework (Religion) avec ses librairies (Rites, pratiques, ...) le plus généralement sous licence libre.

Bon, pour commencer, je vais préciser que je vais principalement parler des trois grandes religions monothéistes même si je ferai de petites excursions dans les autres croyances. Voici grosso modo la hiérarchie des classes :

classes 1.jpg

Afin d'éviter les tensions dans l'équipe d'architecte divin, il a été décidé de ne pas mettre d'héritage entre les trois religions. De plus, cela ne fait pas parti des exigences du client. Bon, maintenant il nous faudrait une ébauche d'interface Religion :

   public interface Religion {
       boolean isMonotheistes();
       String getGodName();
       LivreSaint getLivreSaint();
       Prophete getLastProphete();
   }

C'est un peu simple mais c'est pas mal. On va donc avoir besoin de nouvelles classes :

  • La classe LivreSaint qui représente un texte de référence pour la religion (on ne fait pas de list, on se contente du texte fondateur)
  • La classe Prophete qui représente la personnalité la plus importante dans la religion, celle qui fait office de guide (c'est une vue très simplifiée vue que je ne suis pas certain de saisir complètement le sens de ce mot ; néanmoins il m'est très pratique ici.)


Pour la suite, on va avoir besoin de quelques objets :

   Religion judaisme = new ReligionImpl();
   Religion catho = new ReligionImpl();
   Religion islam = new ReligionImpl();

Bon, et bien maintenant on peut commencer à créer les composants de notre application SuperReligion v3.0 :

Les livres saints

   private class Torah implements LivreSaint { }
   private class Bible implements LivreSaint { }
   private class Coran implements LivreSaint { }
   judaisme.setLivreSaint(new Torah());
   catho.setLivreSaint(new Bible());
   islam.setLivreSaint(new Coran());

Les Prophètes

Pour les chrétiens :

   Prophete p = new Prophete();
   p.setName("Jésus de Nazareth");
   p.setMessie(true);
   p.setFilsDeDieu(true);

Pour les musulmans, on garde la même instance mais on injecte quelques valeurs :

   p.setName("Îsâ");
   p.setMessie(true);
   p.setFilsDeDieu(false);

Quand au juifs, si je me souviens bien ils n'ont toujours pas eu signe de leur prophète :

   p = null;

Nous verrons par la suite comment les NullPointerException ont influencés la religion Judaïque.

Bah voila...

On va pas aller plus loin on s'en fou, on l'a modélisé notre religion. Pour finir, notez que les religions sont le plus souvent public mais la documentation est souvent obscure et énigmatique. Les applications de type religions disposent souvent d'une mécanique de persistance de données. De plus, il faut savoir que le Garbage Collector n'est pas compatible avec les religions, ce qui peut provoquer de mémoire des fuites de connerie.

   for (People p : World.getInstance().getAllPeople()) {
       try {
           p.setReligion(getCurrentReligion());
       } catch (AllreadyEndoctrinedException ex) {
       } catch (UnableToEndoctrineException ex) {
       } catch (HeavenSecurityException ex) {
       }
   }