Null Object & Null
pour les nuls
GUILLEMETEAU HIPPOLYTE, FORT GABIN,
DESMARTIN JULIAN, NONY ANTOINE
Histoire et définition d’un design pattern.
Premièrement qu’est ce qu’un pattern ?
Fait : les humains sont fainéants.
Dans tous les domaines de conception, il existe des problèmes récurrents spécifiques.
L’idée d’un pattern est de proposer une solution générique, un modèle à suivre pour
résoudre un problème de la meilleure des manières.
Christopher
Alexander
Christopher Alexander a émis sa théorie des
patrons de conception remet en question l'idée
qu'il puisse y avoir une création ou une invention
originale et individuelle dans le domaine de la
conception.
En résumé, pour lui, toute conception s’inspire de
ce qui est déjà connu et suit un processus
d’amélioration constante.
Gang of Four
et Design
Patterns
Les travaux d’Alexander ont
inspiré quatre informaticiens
répondant aux noms de Erich
Gamma, Richard Helm, Ralph
Johnson et John Vlissides,
surnommés le ”Gang of Four”
(d'où le terme GoF pour ces
pattern). Ils proposent eux aussi
des solutions élégantes, et
toujours différentes pour
résoudre différents problèmes
récurrents rencontrés par les
architectes logiciels.
Quelques
précisions...
3 types de pattern :
Création, structure,
comportement
Le pattern null object ne
fait pas parti du GoF, car il
n’est pas présent dans le
livre “Design Patterns”,
néanmoins, il est mentionné
dans le livre “Refactoring”
de Martin Fowler, Architecte
en informatique. Ainsi que
dans “Insert Null Object
Refactoring“ de Joshua
Kerievsky
Exemple :
Déplacement
d’un
personnage
Exemple :
Exemple :
problème
de cet
exemple
Exemple : une solution
Exemple
: Null
Object
Le Patron de conception
NULL OBJET
Problématique :
- Savoir comment simplifier la gestion des références
nulles
- Comment l'absence de l'objet peut être traitée de
façon transparente ?
- Éviter le risque de nullPointerException
(Éviter les problèmes induits par le test
(object==null) source de nombreux bugs)
Intention :
Ce Pattern permet d’encapsuler l’absence d’un objet en fournissant un
substitut qui implante le comportement de ne rien faire.
SOLUTION et rôles des classe
participants
Le Client requiert une instance
d’un objet abstrait.
L’objet Abstrait “AbstractObject”
défini lui le contrat Client expiré
L’objet Réel “RealObject” implémente l’objet
Abstrait et fournit un comportement réel
L’objet Null “NullObject” implémente l’objet
abstrait et fournit un comportement neutre
PRINCIPE SOLID
Notre pattern permet à notre code de
respecter :
Le principe OCP ( suppression des multiple
condition if else pour les conditions null )
Le principe DIP ( mise en place de ce
pattern possible seulement à partir d’une
class abstraite )
Avantages et Inconvénients
- Suppression de nombreux check pour null qui - Ce pattern doit être utilisé avec précaution car il
rendait le code long et mauvais. peut faire passer des erreurs pour un
déroulement normal du programme.
- Améliore la lisibilité du code et respect les
principes SOLID - Le prix à payer pour se débarrasser des
conditionnels crée encore une nouvelle classe.
- Faciliter à mettre en lien avec les pattern
state, strategy et singleton.
Les Patterns
STATE et STRATEGY
Ce patron peut être considéré comme
un cas spécial du patron état et du
patron stratégie.
Permet d’en les deux cas d’initialiser les
premières actions des objets créer.
Exemple :
Ici Le concept d’une balle pouvant
changer colour et pouvant bouger. Le
concept le plus simple pouvant les
initialiser et de ne rien faire tout l'emploi
du pattern null object
Démonstration
LIVE-CODING
Sitographie / Bibliographie
https://www.youtube.com/watch?v=rQ7BzfRz7OY
https://www.geeksforgeeks.org/null-object-design-pattern/
http://mborne.github.io/cours-patron-conception/annexe/design_pattern/behavior/NullObject.html
https://refactoring.guru/design-patterns
https://www.codingame.com/playgrounds/491/avoiding-null-anti-patterns/the-null-object-pattern
https://foad.ensicaen.fr/pluginfile.php/1214/course/section/633/DP-03.pdf?time=1566973225228
https://en.wikipedia.org/wiki/Null_object_pattern
https://sourcemaking.com/design_patterns/null_object
QCM
cutt.ly/qcm2019
Question 1.
Question 2.
Question 3.
Question 4.
Question 5.
Merci !