SlideShare une entreprise Scribd logo
DESIGN PATTERNS ET
DESIGN EMERGEANT
Tarik Zakaria Benmerar
Acigna Inc.
LES PRINCIPES DE LA
CONCEPTION DES
LOGICIELS
DRY
( DON’T REPEAT YOURSELF )
Chaque connaissance dans le système doit avoir une représentation unique
et non ambigüe.
DRY:
• Réutilisez du code, ne le dupliquez pas.
• Choisissez des noms clairs.
• Choisissez le bon endroit pour le code.
DRY: <?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 results";
}
$conn->close();
?>
DRY: <?php
function retrieveGuests( $conn ) {
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql),
$resultArr = [];
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$resultArr[] = $row;
}
}
return $resulArr;
}
?>
Le code sera placée dans guests/models.php
SRP
( SINGLE RESPONSABILITY
PRINCIPLE )
Chaque code doit avoir une seule responsabilité. Le code doit être cohésive.
SRP: <?php
$conn = getConnection();
$guests = retrieveGuests( $conn );
showGuests( $guests );
closConnection( $conn );
?>
----------------------------------------------------------------------
<?php
function showGuests( $guests ) {
if( count( $guests ) ) {
for( $i = 0; $i < count( $guests ); $i++ ) {
$row = $guests[ i ];
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 results";
}
}
?>
TDA
( TELL DON’T ASK )
Déclarez des actions, au lieu de se poser des questions.
TDA: ----------------------------------------------------------------------
<?php
function showGuests( $guests ) {
if( count( $guests ) ) {
foreach( $guests as $row ) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 results";
}
}
?>
-----------------------------------------------------------------------
var numbers = [….];
numbers.some(function ( number ) {
return !numbers % 2;
});
YAGNI
( YOU AREN’T GONNA NEED IT YET )
Ecrivez du code que vous avez besoin maintenant.
OCP
( OPEN CLOSE PRINCIPLE )
Ouvert pour l’extensibilité. Fermé pour la modification.
LSP
( LISKOV’S SUBTITUTION PRINCIPLE )
Utilisez l’héritage seulement si la vous signifiez la substitution des deux
classes (parent et fils).
LSP:
<?php
class Rectangle {
private $topLeft;
private $width;
private $height;
public function setHeight($height) {
$this->height = $height;
}
public function getHeight() {
return $this->height;
}
public function setWidth($width) {
$this->width = $width;
}
public function getWidth() {
return $this->width;
}
public function area() {
return $this->width * $this->height;
}
}
?>
<?php
class Square extends Rectangle {
public function setHeight($height) {
$this->height = $height;
$this->widget = $height;
}
public function setWidth($width) {
$this->width = $width;
$this->height = $width;
}
}
?>
<?php
class Square {
private $rectangle
public function setSide( $side ) {
$this->rectangle->setWidth( $side );
$this->rectangle->setHeight( $side );
}
public function area() {
return $this->rectangle->area();
}
}
?>
DIP
( DEPENDENCY INVERSION
PRINCIPLE )
Inversement du contrôle des dépendances.
DIP: <?php
class Square {
private $rectangle
public function _construct() {
$this->rectangle = new Rectangle();
}
public function setSide( $side ) {
$this->rectangle->setWidth( $side );
$this->rectangle->setHeight( $side );
}
public function area() {
return $this->rectangle->Area();
}
}
?>
<?php
class Square {
private $rectangle
public function _construct( $rectangle ) {
$this->rectangle = $rectangle;
}
public function setSide( $side ) {
$this->rectangle->setWidth( $side );
$this->rectangle->setHeight( $side );
}
public function area() {
return $this->rectangle->Area();
}
}
?>
LE DESIGN PATTERN
DESIGN
PATTERN:
• Recettes prêtes pour des problèmes de
programmation orienté objet (Qui
répondent aux principes déjà discutés).
• Reutilisation de code : pas de
reinvention de la rue.
• Assurer un langage commun.
• Applicable à un contexte.
DESIGN
PATTERN:
• 23 patterns
classiques.
3 CATÉGORIES DE
PATTERNS
• Créationnel.
• Instanciation d’objets.
• Structurel.
• Structures larges
d’objets et de classes.
• Comportemental.
• Interaction et distribution
de responsabilités.
DESIGN PATTERNS
CRÉATIONNELS:
• Factory : Créer des objets sans exposer la logique
d’instanciation.
• Abstract Factory : Encapsulation d’une famille de factories
qui produit des familles d’objets.
• Builder : Séparation de la construction d’un objet complexe
de sa représentation.
• Singleton : Assurer qu’une seule instance d’une classe
existe tout en fournissant une seule méthode pour accéder
cette instance.
• Prototype : Créer une instance initialisée pour clonage.
• Object Pool : Réutilisation et partage d’objets coûteux à
créer.
DESIGN PATTERNS
STRUCTURELS:
• Adapter : Adapter une interface à une autre incompatible.
• Bridge : Séparer l’abstraction de l’implémentation.
• Composite : Composer les objets dans une structure
d’arbres.
• Decorator : Ajouter de nouveaux comportements de façon
dynamique ou statiques.
• Facade : Simplifier l’utilisation en définissant une interface
de haut niveau.
• Flyweight : Partager une partie des états d’objets.
• Proxy : Créer une référence à un autre objet (pouvant être
distant).
DESIGN PATTERNS
COMPORTEMENTAUX:
• Chaine de Responsabilité : Définir une méthode pour faire
passer une requête à travers une chaine d’objets.
• Commande : Encapsuler une requête type commande dans
un objet.
• Interpreter : Spécifier comment interpréter un langage.
• Iterator : Accéder aux éléments d’une conteneur.
• Mediator : Centralisation du mécanisme de communication
entre les objets.
• Memento : Permettre la récupération des états antérieurs.
• Observer : Notifier plusieurs objets du changement d’état
d’un objet particulier.
DESIGN PATTERNS
COMPORTEMENTAUX:
• State : Encapsuler différents comportements pour la même
routine en se basant sur l’état de l’objet.
• Strategy : Séparer l’implémentation de l’algorithme de son
utilisation.
• Template Method : Définir le squelette d’un algorithme
dans une opération, différer certaines étapes dans les sous-
classes.
• Visitor : Séparer un algorithme de la structure d’objet sur
lequel il opère.
• Null Object : Définir un objet avec un comportement neutre.
TOUT CELA EST BIEN, MAIS
CE N’EST QUE LE DÉBUT DE
L’HISTOIRE……
LE DESIGN EMERGEANT
(ET ARCHITECTURE
ÉVOLUTIONNAIRE)
LE DESIGN EMERGEANT:
• On ne peut pas prévoir les design patterns à utiliser, on les
découvre.
• Les patterns présentés sont de nature technique, alors qu’il
existe des patterns du domaine.
• Le logiciel en lui-même change d’objectif et de structure, de
fait de plusieurs facteurs de l’environnement.
PRÉPARER L’ÉMERGENCE DU
DESIGN:
• Le code doit être expressif.
• Les responsables de l’architecture doivent coder eux aussi.
• Séparer l’architecture (difficile à changer) du design (assez
flexible pour être changé).
• Les décisions définitives de la conception doivent être faits
le plus tard possible.
• Choisissez un framework qui est découplé et qui respecte
les principes de la bonne conception.
• Comprendre le domaine d’étude.
• Adopter le TDD (Un programme difficile à tester implique à
un certain niveau une mauvaise conception).
QUELQUES CLASSIQUES À
LIRE !

Contenu connexe

PDF
Programmation Orientée Objet et les Traits en PHP 5.4
PPTX
OOP & Design Pattern - Algiers Developers Meetup August 2015
PDF
Programmation orientée objet en PHP 5
KEY
Exploiter php 5
PPT
Php mysql cours
 
PDF
Cours j query-id1575
PDF
Php 2 - Approfondissement MySQL, PDO et MVC
PDF
Notions de base de JavaScript
Programmation Orientée Objet et les Traits en PHP 5.4
OOP & Design Pattern - Algiers Developers Meetup August 2015
Programmation orientée objet en PHP 5
Exploiter php 5
Php mysql cours
 
Cours j query-id1575
Php 2 - Approfondissement MySQL, PDO et MVC
Notions de base de JavaScript

Tendances (20)

PPTX
php2 : formulaire-session-PDO
PPTX
Javascript objet : que fait ce code ?
PPTX
Javascript - Fonctions : que fait ce code ?
PPTX
Javascript - Tableaux : que fait ce code ?
PPTX
Introduction au Jquery
PDF
Cours php & Mysql - 2éme partie
PPTX
2014 04-09-fr - app dev series - session 4 - indexing
PDF
Chapitre 4 persistance des donnees
PDF
PHP #3 : tableaux & formulaires
PPT
PHP5 - POO
PDF
Cascade et héritage : concevoir, organiser, optimiser…
PPT
Structure de données en PHP
ODP
Introduction à JavaScript
PPTX
Cours javascript v1
PPTX
Introduction à jQuery
PDF
Ch03
PDF
Malwares
PDF
Chapitre 2 classe et objet
PPTX
Procédures CLR pour SQL Server : avantages et inconvénients
PDF
Comment Créer Un Site De Membres vol 03
php2 : formulaire-session-PDO
Javascript objet : que fait ce code ?
Javascript - Fonctions : que fait ce code ?
Javascript - Tableaux : que fait ce code ?
Introduction au Jquery
Cours php & Mysql - 2éme partie
2014 04-09-fr - app dev series - session 4 - indexing
Chapitre 4 persistance des donnees
PHP #3 : tableaux & formulaires
PHP5 - POO
Cascade et héritage : concevoir, organiser, optimiser…
Structure de données en PHP
Introduction à JavaScript
Cours javascript v1
Introduction à jQuery
Ch03
Malwares
Chapitre 2 classe et objet
Procédures CLR pour SQL Server : avantages et inconvénients
Comment Créer Un Site De Membres vol 03
Publicité

En vedette (20)

PPS
Fauxproverbes 0
PPSX
El conocimiento silencioso
RTF
Cataclysme par hérodote & platon
PDF
PDF
8 sites vietnamiens classés à l'unseco - voyage au Vietnam - Horizon Vietnam ...
PPT
Les internautes moteurs des processus d’adoption et développement de
PPTX
Prof Edgar Jose Valderrama
PPT
adavantages and disdvantages of where people live.
PDF
Despedida de la forma humana y de la estancia en el planeta tierra
PPS
Doc97713
PPS
Je laisse le temps faire
PPT
Presentacion Festival Logros Liz Carlos Javier 2
PPT
Calendrier des infirmières
PPT
Experiencias en construcción de un servicio de investigación para parlamentos
PPT
Antonio Puerta
PDF
Nomenclature vandemeulebroecke carlos
PPTX
Pres basso seminario senado 6-11-2011 long
PDF
Scoop.it - Curando contenidos en Scoop.it
PPT
G B M
PDF
La educacion en mexico y la eficiencia terminal
Fauxproverbes 0
El conocimiento silencioso
Cataclysme par hérodote & platon
8 sites vietnamiens classés à l'unseco - voyage au Vietnam - Horizon Vietnam ...
Les internautes moteurs des processus d’adoption et développement de
Prof Edgar Jose Valderrama
adavantages and disdvantages of where people live.
Despedida de la forma humana y de la estancia en el planeta tierra
Doc97713
Je laisse le temps faire
Presentacion Festival Logros Liz Carlos Javier 2
Calendrier des infirmières
Experiencias en construcción de un servicio de investigación para parlamentos
Antonio Puerta
Nomenclature vandemeulebroecke carlos
Pres basso seminario senado 6-11-2011 long
Scoop.it - Curando contenidos en Scoop.it
G B M
La educacion en mexico y la eficiencia terminal
Publicité

Similaire à Design patterns et Design Emergeant - Micro Days - Modern Software Development - (20)

PPTX
OOP and Design Patterns
PPT
Design Patterns
PDF
Design patterns
PDF
Cours design pattern m youssfi partie 1 introduction et pattern strategy
PPT
Design Patterns Java
PDF
Language objet : passé, présent et futur
PPT
Design poo togo_jug_final
PPT
Design poo togo_jug_final
PDF
DesignPatternsISI.pdf
PPTX
Cours_Magistral_Seance_1.pptx pour la conception orienté objet
PPT
U M L Analyse Et Conception Objet
PPTX
Design patterns : résumé
PDF
Design patterns
PPTX
Design patterns french
PDF
Cours php & Mysql - 4éme partie
PDF
jkhkhlkhkighlihkihilhlohljlhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh...
ODP
Patterns and OOP in PHP
PPTX
Design patterns gof fr
PDF
Conception et réalisation d’un Système d’information des étudiants du départe...
OOP and Design Patterns
Design Patterns
Design patterns
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Design Patterns Java
Language objet : passé, présent et futur
Design poo togo_jug_final
Design poo togo_jug_final
DesignPatternsISI.pdf
Cours_Magistral_Seance_1.pptx pour la conception orienté objet
U M L Analyse Et Conception Objet
Design patterns : résumé
Design patterns
Design patterns french
Cours php & Mysql - 4éme partie
jkhkhlkhkighlihkihilhlohljlhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh...
Patterns and OOP in PHP
Design patterns gof fr
Conception et réalisation d’un Système d’information des étudiants du départe...

Plus de Tarik Zakaria Benmerar (20)

PPTX
Videostreaming et visioconference pour le Web - Evènement GDSC USTHB Tech plus
PPTX
Chapitre 8 - les entrées - sorties
PPTX
Cyber pink - Time Management
PPTX
Chapitre 6 - couche transport
PPTX
Chapitre 5 - couche réseaux
PPTX
Chapitre 4 - couche liaison
PPTX
Chapitre 3 - connecteurs et câbles
PPTX
Chapitre 2 - Transmission
PPTX
Chapitre 1 - notions fondamentales
PPTX
Chapitre 9 - les interruptions
PPTX
Chapitre 7 - la pile
PPTX
Chapitre 6 - les instructions de chaînes de caractères
PPTX
Chapitre 5 - fichiers EXE-COM pour le dos
PPTX
Chapitre 4 - les instructions de saut et conditions
PPTX
Chapitre 3 - échanges de données et opérations arithmétiques - binaires
PPTX
Chapitre 2.2 - architecture d'un microprocesseur - jeux d'instructions et reg...
PPTX
Chapitre 2.1 - architecture d'un microprocesseur - bus et communication
PPTX
Chapitre 1 - représentation numérique des données
PPTX
Chapitre 3 - Protocole Bus CAN (2020/2021
PPTX
Chapitre 2 - Protocole Modbus (2020/2021)
Videostreaming et visioconference pour le Web - Evènement GDSC USTHB Tech plus
Chapitre 8 - les entrées - sorties
Cyber pink - Time Management
Chapitre 6 - couche transport
Chapitre 5 - couche réseaux
Chapitre 4 - couche liaison
Chapitre 3 - connecteurs et câbles
Chapitre 2 - Transmission
Chapitre 1 - notions fondamentales
Chapitre 9 - les interruptions
Chapitre 7 - la pile
Chapitre 6 - les instructions de chaînes de caractères
Chapitre 5 - fichiers EXE-COM pour le dos
Chapitre 4 - les instructions de saut et conditions
Chapitre 3 - échanges de données et opérations arithmétiques - binaires
Chapitre 2.2 - architecture d'un microprocesseur - jeux d'instructions et reg...
Chapitre 2.1 - architecture d'un microprocesseur - bus et communication
Chapitre 1 - représentation numérique des données
Chapitre 3 - Protocole Bus CAN (2020/2021
Chapitre 2 - Protocole Modbus (2020/2021)

Design patterns et Design Emergeant - Micro Days - Modern Software Development -

  • 1. DESIGN PATTERNS ET DESIGN EMERGEANT Tarik Zakaria Benmerar Acigna Inc.
  • 2. LES PRINCIPES DE LA CONCEPTION DES LOGICIELS
  • 3. DRY ( DON’T REPEAT YOURSELF ) Chaque connaissance dans le système doit avoir une représentation unique et non ambigüe.
  • 4. DRY: • Réutilisez du code, ne le dupliquez pas. • Choisissez des noms clairs. • Choisissez le bon endroit pour le code.
  • 5. DRY: <?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "SELECT id, firstname, lastname FROM MyGuests"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; } } else { echo "0 results"; } $conn->close(); ?>
  • 6. DRY: <?php function retrieveGuests( $conn ) { $sql = "SELECT id, firstname, lastname FROM MyGuests"; $result = $conn->query($sql), $resultArr = []; if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { $resultArr[] = $row; } } return $resulArr; } ?> Le code sera placée dans guests/models.php
  • 7. SRP ( SINGLE RESPONSABILITY PRINCIPLE ) Chaque code doit avoir une seule responsabilité. Le code doit être cohésive.
  • 8. SRP: <?php $conn = getConnection(); $guests = retrieveGuests( $conn ); showGuests( $guests ); closConnection( $conn ); ?> ---------------------------------------------------------------------- <?php function showGuests( $guests ) { if( count( $guests ) ) { for( $i = 0; $i < count( $guests ); $i++ ) { $row = $guests[ i ]; echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; } } else { echo "0 results"; } } ?>
  • 9. TDA ( TELL DON’T ASK ) Déclarez des actions, au lieu de se poser des questions.
  • 10. TDA: ---------------------------------------------------------------------- <?php function showGuests( $guests ) { if( count( $guests ) ) { foreach( $guests as $row ) { echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; } } else { echo "0 results"; } } ?> ----------------------------------------------------------------------- var numbers = [….]; numbers.some(function ( number ) { return !numbers % 2; });
  • 11. YAGNI ( YOU AREN’T GONNA NEED IT YET ) Ecrivez du code que vous avez besoin maintenant.
  • 12. OCP ( OPEN CLOSE PRINCIPLE ) Ouvert pour l’extensibilité. Fermé pour la modification.
  • 13. LSP ( LISKOV’S SUBTITUTION PRINCIPLE ) Utilisez l’héritage seulement si la vous signifiez la substitution des deux classes (parent et fils).
  • 14. LSP: <?php class Rectangle { private $topLeft; private $width; private $height; public function setHeight($height) { $this->height = $height; } public function getHeight() { return $this->height; } public function setWidth($width) { $this->width = $width; } public function getWidth() { return $this->width; } public function area() { return $this->width * $this->height; } } ?> <?php class Square extends Rectangle { public function setHeight($height) { $this->height = $height; $this->widget = $height; } public function setWidth($width) { $this->width = $width; $this->height = $width; } } ?> <?php class Square { private $rectangle public function setSide( $side ) { $this->rectangle->setWidth( $side ); $this->rectangle->setHeight( $side ); } public function area() { return $this->rectangle->area(); } } ?>
  • 15. DIP ( DEPENDENCY INVERSION PRINCIPLE ) Inversement du contrôle des dépendances.
  • 16. DIP: <?php class Square { private $rectangle public function _construct() { $this->rectangle = new Rectangle(); } public function setSide( $side ) { $this->rectangle->setWidth( $side ); $this->rectangle->setHeight( $side ); } public function area() { return $this->rectangle->Area(); } } ?> <?php class Square { private $rectangle public function _construct( $rectangle ) { $this->rectangle = $rectangle; } public function setSide( $side ) { $this->rectangle->setWidth( $side ); $this->rectangle->setHeight( $side ); } public function area() { return $this->rectangle->Area(); } } ?>
  • 18. DESIGN PATTERN: • Recettes prêtes pour des problèmes de programmation orienté objet (Qui répondent aux principes déjà discutés). • Reutilisation de code : pas de reinvention de la rue. • Assurer un langage commun. • Applicable à un contexte.
  • 20. 3 CATÉGORIES DE PATTERNS • Créationnel. • Instanciation d’objets. • Structurel. • Structures larges d’objets et de classes. • Comportemental. • Interaction et distribution de responsabilités.
  • 21. DESIGN PATTERNS CRÉATIONNELS: • Factory : Créer des objets sans exposer la logique d’instanciation. • Abstract Factory : Encapsulation d’une famille de factories qui produit des familles d’objets. • Builder : Séparation de la construction d’un objet complexe de sa représentation. • Singleton : Assurer qu’une seule instance d’une classe existe tout en fournissant une seule méthode pour accéder cette instance. • Prototype : Créer une instance initialisée pour clonage. • Object Pool : Réutilisation et partage d’objets coûteux à créer.
  • 22. DESIGN PATTERNS STRUCTURELS: • Adapter : Adapter une interface à une autre incompatible. • Bridge : Séparer l’abstraction de l’implémentation. • Composite : Composer les objets dans une structure d’arbres. • Decorator : Ajouter de nouveaux comportements de façon dynamique ou statiques. • Facade : Simplifier l’utilisation en définissant une interface de haut niveau. • Flyweight : Partager une partie des états d’objets. • Proxy : Créer une référence à un autre objet (pouvant être distant).
  • 23. DESIGN PATTERNS COMPORTEMENTAUX: • Chaine de Responsabilité : Définir une méthode pour faire passer une requête à travers une chaine d’objets. • Commande : Encapsuler une requête type commande dans un objet. • Interpreter : Spécifier comment interpréter un langage. • Iterator : Accéder aux éléments d’une conteneur. • Mediator : Centralisation du mécanisme de communication entre les objets. • Memento : Permettre la récupération des états antérieurs. • Observer : Notifier plusieurs objets du changement d’état d’un objet particulier.
  • 24. DESIGN PATTERNS COMPORTEMENTAUX: • State : Encapsuler différents comportements pour la même routine en se basant sur l’état de l’objet. • Strategy : Séparer l’implémentation de l’algorithme de son utilisation. • Template Method : Définir le squelette d’un algorithme dans une opération, différer certaines étapes dans les sous- classes. • Visitor : Séparer un algorithme de la structure d’objet sur lequel il opère. • Null Object : Définir un objet avec un comportement neutre.
  • 25. TOUT CELA EST BIEN, MAIS CE N’EST QUE LE DÉBUT DE L’HISTOIRE……
  • 26. LE DESIGN EMERGEANT (ET ARCHITECTURE ÉVOLUTIONNAIRE)
  • 27. LE DESIGN EMERGEANT: • On ne peut pas prévoir les design patterns à utiliser, on les découvre. • Les patterns présentés sont de nature technique, alors qu’il existe des patterns du domaine. • Le logiciel en lui-même change d’objectif et de structure, de fait de plusieurs facteurs de l’environnement.
  • 28. PRÉPARER L’ÉMERGENCE DU DESIGN: • Le code doit être expressif. • Les responsables de l’architecture doivent coder eux aussi. • Séparer l’architecture (difficile à changer) du design (assez flexible pour être changé). • Les décisions définitives de la conception doivent être faits le plus tard possible. • Choisissez un framework qui est découplé et qui respecte les principes de la bonne conception. • Comprendre le domaine d’étude. • Adopter le TDD (Un programme difficile à tester implique à un certain niveau une mauvaise conception).