Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Liskov Substitution Principle

Liskov Substitution Principle

Thomas Agé

January 23, 2025
Tweet

Other Decks in Programming

Transcript

  1. 2025-01-19 2 Hello World! Solutions TLM Fondée en 2003 Chicoutimi

    & Québec 100+ employés https://tlmgo.com Tél : 418.696.4472 | 1.877.896.4472 Thomas Agé • Développeur (pro) depuis 2003 • Expat depuis 2022 • Architecture logicielle, analyse statique, Loi de Murphy • J’aime me casser la tête ;-) • Fan de LEGO • Pratique le Ju-Jutsu Traditionnel • https://www.linkedin.com/in/thomas-age/
  2. 2025-01-19 3 Conception logicielle S.O.L.I.D. Composition Over Inheritance Demeter Law

    Hollywood Principle Tell, don’t ask Calisthenics Objects D.D.D. T.D.D. B.D.D. Hexagonal Architecture ... Screaming Architecture
  3. 2025-01-19 4 S.O.L.I.D. Single Responsibility Principle Robert C. Martin (Tom

    DeMarco) - 1979/2000 Open/Closed Principle Bertrand Meyer - 1988 Liskov Substitution Principle Barbara Liskov & Jeanette Wing - 1987/1994 Interface Segregation Principle Robert C. Martin - 2000 Dependency Inversion Principle Robert C. Martin - 1996 Par Angelacleancoder — Travail personnel, CC BY-SA 4.0 2000/2002
  4. 2025-01-19 5 Barbara Liskov – Jeanette Wing Mirko Raner —

    Travail personnel, CC BY-SA 3.0 World Economic Forum — Flickr: An insight, CC BY-SA 2.0
  5. 2025-01-19 6 Définition Si q(x) est une propriété démontrable pour

    tout objet x de type T, alors q(y) est vraie pour tout objet y de type S tel que S est un sous-type de T. - Wikipedia
  6. 2025-01-19 11 Variance Comportement des sous-types et des super-types en

    tant que préconditions ou postconditions. Covariance Contravariance Invariance (≠ invariants)
  7. 2025-01-19 13 Préconditions : contravariance • Conditions nécessaires à l’exécution

    (ex : paramètres d’une méthode). • Le sous-type ne doit pas renforcer une précondition. • Le sous-type peut affaiblir une précondition.
  8. 2025-01-19 14 Postconditions : covariance • Conditions réalisées après l’exécution

    (ex : retour d’une méthode). • Le sous-type ne doit pas affaiblir une postcondition. • Le sous-type peut ajouter renforcer une postcondition.
  9. 2025-01-19 15 Invariance Un sous-type ne peut pas être assigné

    à une variable d’un type plus élevé. Généralement utilisé avec les génériques.
  10. 2025-01-19 16 Variance : résumé Covariance (sortie) ✗ Weapon ✔

    Bow ✔ LongBow Contravariance (entrée) ✔ Weapon ✔ Bow ✗ LongBow Weapon > Bow > LongBow
  11. 2025-01-19 18 Respect des invariants • Conditions garanties avant et

    après l’exécution d’une opération, quelque soit l’état de l’objet. • Empêche que l’état de l’objet devienne invalide ou incohérent. • Exemples : • Un solde bancaire toujours positif • Une date doit être valide (29 février 2025)
  12. 2025-01-19 20 Comportement attendu • Contrat implicite ou explicite •

    Gestion des exceptions • Historique des objets • État compatible
  13. 2025-01-19 21 Respect du contrat Contrat explicite Contrat implicite Les

    règles sont : • définies dans le code, • imposées à l’exécution. Les règles sont : • attendues mais non vérifiées par le code.
  14. 2025-01-19 22 Nouvelles exceptions Aucune nouvelle exception ne doit être

    levée (sauf si c’est un sous-type). Aucune exception ne doit être retirée.
  15. 2025-01-19 23 Historique Le sous-type ne doit pas autoriser un

    changement que le super-type n’autorise pas. (ne faites pas ça...)
  16. 2025-01-19 29 Support du L.S.P. Support complet : • C#,

    Java, Kotlin, Rust, Swift... Support partiel : • C++, PHP, Python, Ruby, TypeScript... Support absent ou insuffisant : • Go, JavaScript, Lua, Perl...
  17. 2025-01-19 30 Le L.S.P., c’est bon pour la santé !

    • La composition et l’héritage sont sécurisés. • Le code est plus robuste. • Les tests sont facilités. • L’ajout de nouvelles classes est facilité. • Le code est plus prévisible et plus maintenable.
  18. 2025-01-19 31 Merci ! • Agile Software Development, Principles, Patterns,

    and Practices • Robert C. Martin (2002) • Functional Design: Principles, Patterns, and Practices Paperback • Robert C. Martin (2023) • Software Craft • Cyrille Martraire, Arnaud Thiéfaine, Dorra Bartaguiz, Fabien Hiegel, Houssam Fakih (2022) • Clean Architecture • Robert C. Martin (2017)