SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Downloaden Sie, um offline zu lesen
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 !

Weitere ähnliche Inhalte

Was ist angesagt?

php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDOAbdoulaye Dieng
 
Javascript objet : que fait ce code ?
Javascript objet : que fait ce code ?Javascript objet : que fait ce code ?
Javascript objet : que fait ce code ?Ruau Mickael
 
Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Ruau Mickael
 
Javascript - Tableaux : que fait ce code ?
Javascript - Tableaux : que fait ce code ?Javascript - Tableaux : que fait ce code ?
Javascript - Tableaux : que fait ce code ?Ruau Mickael
 
Cours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partieCours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partiekadzaki
 
2014 04-09-fr - app dev series - session 4 - indexing
2014 04-09-fr - app dev series - session 4 - indexing2014 04-09-fr - app dev series - session 4 - indexing
2014 04-09-fr - app dev series - session 4 - indexingMongoDB
 
Chapitre 4 persistance des donnees
Chapitre 4  persistance des donneesChapitre 4  persistance des donnees
Chapitre 4 persistance des donneesAmir Souissi
 
PHP #3 : tableaux & formulaires
PHP #3 : tableaux & formulairesPHP #3 : tableaux & formulaires
PHP #3 : tableaux & formulairesJean Michel
 
PHP5 - POO
PHP5 - POOPHP5 - POO
PHP5 - POOmazenovi
 
Cascade et héritage : concevoir, organiser, optimiser…
Cascade et héritage : concevoir, organiser, optimiser…Cascade et héritage : concevoir, organiser, optimiser…
Cascade et héritage : concevoir, organiser, optimiser…Romy Duhem-Verdière
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptMicrosoft
 
Malwares
MalwaresMalwares
Malwaresc0r3war
 
Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objetAmir Souissi
 
Procédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénientsProcédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénientsDenis Voituron
 
Comment Créer Un Site De Membres vol 03
Comment Créer Un Site De Membres vol 03Comment Créer Un Site De Membres vol 03
Comment Créer Un Site De Membres vol 03Patrick Van Hoof
 

Was ist angesagt? (20)

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

Andere mochten auch

Fauxproverbes 0
Fauxproverbes 0Fauxproverbes 0
Fauxproverbes 0lyago
 
El conocimiento silencioso
El conocimiento silenciosoEl conocimiento silencioso
El conocimiento silenciosoEuler
 
Cataclysme par hérodote & platon
Cataclysme par hérodote & platonCataclysme par hérodote & platon
Cataclysme par hérodote & platonTocup
 
8 sites vietnamiens classés à l'unseco - voyage au Vietnam - Horizon Vietnam ...
8 sites vietnamiens classés à l'unseco - voyage au Vietnam - Horizon Vietnam ...8 sites vietnamiens classés à l'unseco - voyage au Vietnam - Horizon Vietnam ...
8 sites vietnamiens classés à l'unseco - voyage au Vietnam - Horizon Vietnam ...Horizon-Vietnam-Voyage
 
Les internautes moteurs des processus d’adoption et développement de
Les internautes moteurs des processus d’adoption et développement deLes internautes moteurs des processus d’adoption et développement de
Les internautes moteurs des processus d’adoption et développement deM@rsouin
 
Prof Edgar Jose Valderrama
Prof  Edgar Jose ValderramaProf  Edgar Jose Valderrama
Prof Edgar Jose ValderramaManuel Mujica
 
adavantages and disdvantages of where people live.
adavantages and disdvantages of where people live.adavantages and disdvantages of where people live.
adavantages and disdvantages of where people live.alice ayel
 
Despedida de la forma humana y de la estancia en el planeta tierra
Despedida de la forma humana y de la estancia en el planeta tierraDespedida de la forma humana y de la estancia en el planeta tierra
Despedida de la forma humana y de la estancia en el planeta tierraEuler
 
Doc97713
Doc97713Doc97713
Doc97713lyago
 
Presentacion Festival Logros Liz Carlos Javier 2
Presentacion Festival Logros Liz Carlos Javier 2Presentacion Festival Logros Liz Carlos Javier 2
Presentacion Festival Logros Liz Carlos Javier 2Liz Pagan
 
Calendrier des infirmières
Calendrier des infirmièresCalendrier des infirmières
Calendrier des infirmièreslyago
 
Experiencias en construcción de un servicio de investigación para parlamentos
Experiencias en construcción de un servicio de investigación para parlamentos Experiencias en construcción de un servicio de investigación para parlamentos
Experiencias en construcción de un servicio de investigación para parlamentos congresochile
 
Antonio Puerta
Antonio PuertaAntonio Puerta
Antonio Puertasergiofm
 
Nomenclature vandemeulebroecke carlos
Nomenclature vandemeulebroecke carlosNomenclature vandemeulebroecke carlos
Nomenclature vandemeulebroecke carlosFabrice Carlier
 
Pres basso seminario senado 6-11-2011 long
Pres basso  seminario senado 6-11-2011 longPres basso  seminario senado 6-11-2011 long
Pres basso seminario senado 6-11-2011 longcongresochile
 
Scoop.it - Curando contenidos en Scoop.it
Scoop.it - Curando contenidos en Scoop.itScoop.it - Curando contenidos en Scoop.it
Scoop.it - Curando contenidos en Scoop.itEmelys Rukoz
 
La educacion en mexico y la eficiencia terminal
La educacion en mexico y la eficiencia terminalLa educacion en mexico y la eficiencia terminal
La educacion en mexico y la eficiencia terminalEuler
 

Andere mochten auch (20)

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

Ähnlich wie Design patterns et Design Emergeant - Micro Days - Modern Software Development -

DesignPatternsISI.pdf
DesignPatternsISI.pdfDesignPatternsISI.pdf
DesignPatternsISI.pdfandre543581
 
Java-2eme partie.pptx
Java-2eme partie.pptxJava-2eme partie.pptx
Java-2eme partie.pptxHassanAbdel
 
SSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLSSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLHervé Leclerc
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
Hands on lab Elasticsearch
Hands on lab ElasticsearchHands on lab Elasticsearch
Hands on lab ElasticsearchDavid Pilato
 
Cours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partieCours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partiekadzaki
 
Deuxième partie.pptx
Deuxième partie.pptxDeuxième partie.pptx
Deuxième partie.pptxSafaeLhr1
 
22410B_04.pptx bdsbsdhbsbdhjbhjdsbhbhbdsh
22410B_04.pptx bdsbsdhbsbdhjbhjdsbhbhbdsh22410B_04.pptx bdsbsdhbsbdhjbhjdsbhbhbdsh
22410B_04.pptx bdsbsdhbsbdhjbhjdsbhbhbdshkhalidkabbad2
 
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDB
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDBSGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDB
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDBRomain Cambien
 
Kevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NETKevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NETMSDEVMTL
 

Ähnlich wie Design patterns et Design Emergeant - Micro Days - Modern Software Development - (20)

OOP and Design Patterns
OOP and Design PatternsOOP and Design Patterns
OOP and Design Patterns
 
DesignPatternsISI.pdf
DesignPatternsISI.pdfDesignPatternsISI.pdf
DesignPatternsISI.pdf
 
Cours_Java.pdf
Cours_Java.pdfCours_Java.pdf
Cours_Java.pdf
 
Qualité de code et bonnes pratiques
Qualité de code et bonnes pratiquesQualité de code et bonnes pratiques
Qualité de code et bonnes pratiques
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Java-2eme partie.pptx
Java-2eme partie.pptxJava-2eme partie.pptx
Java-2eme partie.pptx
 
SSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLSSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQL
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
Hands on lab Elasticsearch
Hands on lab ElasticsearchHands on lab Elasticsearch
Hands on lab Elasticsearch
 
Cours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partieCours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partie
 
Design patterns
Design patternsDesign patterns
Design patterns
 
22410 b 04
22410 b 0422410 b 04
22410 b 04
 
Android ORMLite
Android   ORMLiteAndroid   ORMLite
Android ORMLite
 
Deuxième partie.pptx
Deuxième partie.pptxDeuxième partie.pptx
Deuxième partie.pptx
 
Pensez objets avec java
Pensez objets avec javaPensez objets avec java
Pensez objets avec java
 
MariaDB une base de donnees NewSQL
MariaDB une base de donnees NewSQLMariaDB une base de donnees NewSQL
MariaDB une base de donnees NewSQL
 
22410B_04.pptx bdsbsdhbsbdhjbhjdsbhbhbdsh
22410B_04.pptx bdsbsdhbsbdhjbhjdsbhbhbdsh22410B_04.pptx bdsbsdhbsbdhjbhjdsbhbhbdsh
22410B_04.pptx bdsbsdhbsbdhjbhjdsbhbhbdsh
 
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDB
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDBSGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDB
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDB
 
Introduction à node.js
Introduction à node.js Introduction à node.js
Introduction à node.js
 
Kevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NETKevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NET
 

Mehr von Tarik Zakaria Benmerar

Videostreaming et visioconference pour le Web - Evènement GDSC USTHB Tech plus
Videostreaming et visioconference pour le Web - Evènement GDSC USTHB Tech plusVideostreaming et visioconference pour le Web - Evènement GDSC USTHB Tech plus
Videostreaming et visioconference pour le Web - Evènement GDSC USTHB Tech plusTarik Zakaria Benmerar
 
Chapitre 6 - les instructions de chaînes de caractères
Chapitre 6  - les instructions de chaînes de caractèresChapitre 6  - les instructions de chaînes de caractères
Chapitre 6 - les instructions de chaînes de caractèresTarik Zakaria Benmerar
 
Chapitre 5 - fichiers EXE-COM pour le dos
Chapitre 5 -  fichiers EXE-COM pour le dosChapitre 5 -  fichiers EXE-COM pour le dos
Chapitre 5 - fichiers EXE-COM pour le dosTarik Zakaria Benmerar
 
Chapitre 4 - les instructions de saut et conditions
Chapitre 4  - les instructions de saut et conditionsChapitre 4  - les instructions de saut et conditions
Chapitre 4 - les instructions de saut et conditionsTarik Zakaria Benmerar
 
Chapitre 3 - échanges de données et opérations arithmétiques - binaires
Chapitre 3  - échanges de données et opérations arithmétiques - binairesChapitre 3  - échanges de données et opérations arithmétiques - binaires
Chapitre 3 - échanges de données et opérations arithmétiques - binairesTarik Zakaria Benmerar
 
Chapitre 2.2 - architecture d'un microprocesseur - jeux d'instructions et reg...
Chapitre 2.2 - architecture d'un microprocesseur - jeux d'instructions et reg...Chapitre 2.2 - architecture d'un microprocesseur - jeux d'instructions et reg...
Chapitre 2.2 - architecture d'un microprocesseur - jeux d'instructions et reg...Tarik Zakaria Benmerar
 
Chapitre 2.1 - architecture d'un microprocesseur - bus et communication
Chapitre 2.1 -  architecture d'un microprocesseur - bus et communicationChapitre 2.1 -  architecture d'un microprocesseur - bus et communication
Chapitre 2.1 - architecture d'un microprocesseur - bus et communicationTarik Zakaria Benmerar
 
Chapitre 1 - représentation numérique des données
Chapitre 1  - représentation numérique des donnéesChapitre 1  - représentation numérique des données
Chapitre 1 - représentation numérique des donnéesTarik Zakaria Benmerar
 
Chapitre 3 - Protocole Bus CAN (2020/2021
Chapitre 3 - Protocole Bus CAN (2020/2021Chapitre 3 - Protocole Bus CAN (2020/2021
Chapitre 3 - Protocole Bus CAN (2020/2021Tarik Zakaria Benmerar
 
Chapitre 2 - Protocole Modbus (2020/2021)
Chapitre 2 - Protocole Modbus (2020/2021)Chapitre 2 - Protocole Modbus (2020/2021)
Chapitre 2 - Protocole Modbus (2020/2021)Tarik Zakaria Benmerar
 

Mehr von Tarik Zakaria Benmerar (20)

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