Kad Dembele

Les principes du design objet

Un bon logiciel orienté objet est caractérisé entre autre par la qualité du design de ses briques de base, de l'interaction entre ses différentes briques logicielles, de sa capacité à auto-gérer ses dépendances, de son habileté à évoluer et de sa facilité de compréhension, d'utilisation, ... .

Pour concevoir de tels logiciels (qui ne sont ni rigides, ni fragiles, ni immobiles et ni visqueux), plusieurs principes ont vu le jour depuis la naissance du paradigme orienté objet et se sont affinés au fur et à mesure des challenges aux quels a fait face cette révolution dans le domaine du génie logiciel, principes, qui aujourd'hui sont encore soit inconnus de la nouvelle vague de développeurs orientés objets, soit mal appliqués par certains vétérans du code.

Tout art, métier est guidé par des principes de bonnes pratiques. Dans le cadre de l'artisanat du logiciel et plus précisément dans le contexte des systèmes orientés objets, les principes de design sont aussi vieux que le paradigme lui même. Ces principes, tout comme les langages de programmation orienté objet ont su évolué avec le paradigme, ce qui donne et continuera à donner vie au concept. Dans ce billet, je vais donc vous parler des 11 principes de base du design objet et de la gestion des dépendances énoncés par Uncle Bob, dont les 5 premiers sont plus connus sous le nom de principes SOLID et sont appliqués à l'écriture du code des objets, tandis-que les 6 autres font plus référence à la ré-utilisabilité, à la cohésion et à la gestion des dépendances dans les différents packages du système logiciel.

Les principes SOLID

La famille des principes SOLID est à un artisan du logiciel ce que sont les fondations à un architecte de bâtiments. Ces principes visent à rendre un logiciel maintenable, testable et évolutifs. SOLID désigne les cinq principes suivant:

  • S pour Single Responsibility Principle (SRP): Principe de Responsabilité Unique
  • O pour Open Closed Principle (OCP): Principe d'Ouverture Fermeture
  • L pour Liskov Substitution Principle (LSP): Principe de Substitution de Liskov
  • I pour Interface Segregation Principle (ISP): Principe de Ségrégation des Interfaces
  • D pour Dependency Inversion Principle (DIP): Principe d'inversion des dépendances

Le Principe de Responsabilité Unique (SRP)

Énoncé:

THERE SHOULD NEVER BE MORE THAN ONE REASON FOR A CLASS TO CHANGE.


Entendez simplement par là qu'une classe ne doit avoir qu'une et une seule raison de changer. Autrement dit, la définition de la responsabilité ici équivaut à une raison de changement. Ceci peut sembler superflu, mais si on revient aux racines de la POO, il est évident que son objectif est de permettre l'écriture de logiciels en conceptualisant le monde réel, or dans le monde réel tout objet à une seule responsabilité: un exemple parlant est celui du barillet qui est un objet, la gâche un autre objet, les deux composés forment une serrure de porte qui est un objet composé. Et c'est ça l'objectif du SRP, créer des objets spécialisés dans leur fonction, de tels sorte qu'un objet puisse être modifié, remplacé, testé sans affecter le fonctionnement du système. En d'autres termes, créer des systèmes inébranlables.
Maintenant jetons un coup d’œil sur cette classe basique Logger.java qui permet d'écrire des logs (Pour des raisons de goût, j'écris mes exemples en Java, mais ils restent valables pour tout langage orienté objet)

 

A première vue, cette classe semble correcte, car si les spécification étaient de stocker les logs dans une base de donnée MariaDB et de les afficher en même temps sur la console, elle fait largement son boulot. Toutefois, on voit clairement qu'on peut avoir plus d'une raison de modifier cette classe:

  • Changement du format des messages dans la console et dans la base de donnée (Ajout du nom de la classe appelante, de la date et de l'heure par exemple)
  • Changement du SGBD (Changement de MariaDB pour Cassandra par exemple)

En effet, imaginez une seconde que cette classe soit utiliser par d'autres applications (Classes) ayant des besoins différents, par exemple une d'entre elles souhaitant simplement afficher les logs dans la console, une autre souhaitant stocker les logs dans une base de données, une autre dans un fichier, ...; le simple changement de cette classe Logger.java, devra entraîner l'adaptation, la ré-compilation, le test et le redéploiement de toutes les classes qui l'utilisent. La solution pour remédier à ce problème de couplage entre les responsabilité est de respecter le SRP en dédiant une classe générique pour la persistance des données, une autre pour l'affichage, ... et la classe Logger sera simplement un objet composé (comme notre serrure). Pour les autres composants du système qui souhaitent utiliser le stockage dans la base de donnée, ils utiliseront uniquement la classe dédiée à ce travail, ainsi de suite.

Le Principe d'Ouverture Fermeture (OCP)

3326 comments

  • esurance
    esurance , 25 March, 2018 07:03 Comment Link

    cheap insurance cheap auto insurance quotes usaa car insurance quote cheap insurance

  • auto owners ins
    auto owners ins , 25 March, 2018 06:03 Comment Link

    compare auto insurance compare car insurance compare multiple auto insurance quotes compare car insurance

  • stuctSes
    stuctSes, 25 March, 2018 01:03 Comment Link

    which viagra to buy
    generic viagra
    viagra jelly
    generic viagra

  • Buy Essay Online
    Buy Essay Online , 25 March, 2018 12:03 Comment Link

    help writing a thesis a thesis statement gives an essay its thesis statement argumentative essay thesis statement for cause and effect essay

  • acounda
    acounda, 24 March, 2018 10:03 Comment Link

    viagra ad actress
    buy viagra online
    viagra tablet
    viagra online

  • canadian pharmacies
  • car insurance cost
    car insurance cost , 24 March, 2018 09:03 Comment Link

    best auto insurance companies auto insurance company car insurance rates by state state auto insurance company

  • e insurance auto
    e insurance auto , 24 March, 2018 07:03 Comment Link

    home and auto insurance auto insurance comparison direct car insurance direct auto insurance pay online

  • aig auto insurance
    aig auto insurance , 24 March, 2018 07:03 Comment Link

    best auto insurance best insurance cheap car insurance in alabama best insurance

  • Online Essay
    Online Essay , 24 March, 2018 05:03 Comment Link

    argumentative about essay writing argumentative writing an argumentative essay

Leave a comment

Make sure you enter the (*) required information where indicated. HTML code is not allowed.