Vous êtes sur la page 1sur 78

Conception en UML, Architecture n-tiers, par lexemple

Utilisation de php 5, Mysql, Html, css, ... Inspir de UML2 par la pratique M. Blay-Fornarino Les codes sont disponibles sur le site web
vendredi 14 octobre 2011

Bibliographie

Why MVC is not an application architecture Stefan Priebsch, the PHP.cc ZendCon 2010 Developing Web Applications with PHP, RAD for the World Wide Web,

2 vendredi 14 octobre 2011

Diagramme de Use-cases

vendredi 14 octobre 2011

Afcher Informations : niveau Analyse

vendredi 14 octobre 2011

Grer Informations : niveau Analyse (0)

vendredi 14 octobre 2011

Choix dArchitecture
Prsentation

Logique applicative

Grer les informations


CREATE TABLE `information` ( `titre` varchar(20) NOT NULL, `date` varchar(22) NOT NULL, `identiant` int(11) NOT NULL auto_increment, PRIMARY KEY (`identiant`))

Stockage

vendredi 14 octobre 2011

Choix dArchitecture
Prsentation

Logique applicative

Grer les informations


CREATE TABLE `information` ( `titre` varchar(20) NOT NULL, `date` varchar(22) NOT NULL, `identiant` int(11) NOT NULL auto_increment, PRIMARY KEY (`identiant`))

Stockage

vendredi 14 octobre 2011

Choix dArchitecture
Prsentation

Logique applicative

Grer les informations


CREATE TABLE `information` ( `titre` varchar(20) NOT NULL, `date` varchar(22) NOT NULL, `identiant` int(11) NOT NULL auto_increment, PRIMARY KEY (`identiant`))

Stockage

vendredi 14 octobre 2011

Choix dArchitecture
Prsentation

Logique applicative

Grer les informations


CREATE TABLE `information` ( `titre` varchar(20) NOT NULL, `date` varchar(22) NOT NULL, `identiant` int(11) NOT NULL auto_increment, PRIMARY KEY (`identiant`))

Stockage

vendredi 14 octobre 2011

Choix dArchitecture
clickOn()

Prsentation

IHM
crer Information

Contrleur Logique applicative Grer les informations : mtier Stockage


CREATE TABLE `information` ( `titre` varchar(20) NOT NULL, `date` varchar(22) NOT NULL, `identiant` int(11) NOT NULL auto_increment, PRIMARY KEY (`identiant`))

vendredi 14 octobre 2011

Architecture en couches & Fichiers

vendredi 14 octobre 2011

Afcher Informations : niveau Conception

index_SI_View.php

vendredi 14 octobre 2011

Afcher Informations : niveau Conception

index_SI_View.php

class

SI_Controller { public function index($args) { $view = new Index_SI_View(); $view->display(); } SI_Controller.php public function display($args) { header('Content-type: text/xml'); $res='<?xml version="1.0"?><data>'; $infos = Information::findAll(); foreach($infos as $tmpInformation) { $res = $res.$tmpInformation->toXML() ; } $res=$res.'</data>'; echo $res; }

vendredi 14 octobre 2011

Afcher Informations : niveau Conception

index_SI_View.php

$view = new Index_SI_View(); $view->display


echo $res; }

class

SI_Controller { public function index($args) { $view = new Index_SI_View(); $view->display(); } SI_Controller.php public function display($args) { header('Content-type: text/xml'); $res='<?xml version="1.0"?><data>'; $infos = Information::findAll(); foreach($infos as $tmpInformation) { $res = $res.$tmpInformation->toXML() ; } $res=$res.'</data>';

vendredi 14 octobre 2011

Afcher Informations : niveau Conception


class Index_SI_View extends Main_Global_View { public function mainContent() { ob_start(); ?> index_SI_View.php <div id="main"> Information goes here! </div> <?php $content = ob_get_contents();

class

SI_Controller { public function index($args) { $view = new Index_SI_View(); $view->display(); } SI_Controller.php public function display($args) { header('Content-type: text/xml'); $res='<?xml version="1.0"?><data>'; $infos = Information::findAll(); foreach($infos as $tmpInformation) { $res = $res.$tmpInformation->toXML() ; } $res=$res.'</data>'; echo $res; }

vendredi 14 octobre 2011

Afcher Informations : niveau Conception

index_SI_View.php

class

SI_Controller { public function index($args) { $view = new Index_SI_View(); $view->display(); } SI_Controller.php public function display($args) { header('Content-type: text/xml'); $res='<?xml version="1.0"?><data>'; $infos = Information::findAll(); foreach($infos as $tmpInformation) { $res = $res.$tmpInformation->toXML() ; } $res=$res.'</data>'; echo $res; }

vendredi 14 octobre 2011

Afcher Informations : niveau Conception

index_SI_View.php

$infos = Information::findAll();
echo $res; }

class

SI_Controller { public function index($args) { $view = new Index_SI_View(); $view->display(); } SI_Controller.php public function display($args) { header('Content-type: text/xml'); $res='<?xml version="1.0"?><data>'; $infos = Information::findAll(); foreach($infos as $tmpInformation) { $res = $res.$tmpInformation->toXML() ; } $res=$res.'</data>';

vendredi 14 octobre 2011

Afcher Informations : niveau Conception

index_SI_View.php

class

SI_Controller { public function index($args) { $view = new Index_SI_View(); $view->display(); } SI_Controller.php public function display($args) { header('Content-type: text/xml'); $res='<?xml version="1.0"?><data>'; $infos = Information::findAll(); foreach($infos as $tmpInformation) { $res = $res.$tmpInformation->toXML() ; } $res=$res.'</data>'; echo $res; }

vendredi 14 octobre 2011

Afcher Informations : niveau Conception

index_SI_View.php

class

SI_Controller { public function index($args) { $view = new Index_SI_View(); $view->display(); } SI_Controller.php public function display($args) { header('Content-type: text/xml'); $res='<?xml version="1.0"?><data>'; $infos = Information::findAll(); foreach($infos as $tmpInformation) { $res = $res.$tmpInformation->toXML() ; } $res=$res.'</data>'; echo $res; }

vendredi 14 octobre 2011

Afcher Informations : niveau Conception


class Information implements iCRUD { private $_id; private $_titre; private $_date; public static function findAll() { $informations = array(); Database::connect(); $query = "SELECT * FROM information"; $res = mysql_query($query); while($line = mysql_fetch_assoc($res)){ $titre = $line["titre"]; $date = $line["date"]; $key = $line["identifiant"]; $info = new Information($titre,$date,$key); array_push($informations, $info); } Database::disconnect(); return $informations; }

index_SI_View.php

Information.php

class

SI_Controller { public function index($args) { $view = new Index_SI_View(); $view->display(); } SI_Controller.php public function display($args) { header('Content-type: text/xml'); $res='<?xml version="1.0"?><data>'; $infos = Information::findAll(); foreach($infos as $tmpInformation) { $res = $res.$tmpInformation->toXML() ; } $res=$res.'</data>'; echo $res; }

vendredi 14 octobre 2011

Crer Information : niveau Conception

vendredi 14 octobre 2011

Crer Information : niveau Conception

class

Index_Admin_View extends Main_Global_View { admin_View private $infosListe; public function Index_Admin_View($args) { $this->infosListe = $args['infosListe']; }... <h1>Gestion des Informations</h1> <h2> Liste des informations </h2> <form id="infoModifForm" name="infoModifForm" method="post" action="./"> <p>

vendredi 14 octobre 2011

Crer Information : niveau Conception


class Admin_Controller { public function index($args) { $args['infosListe'] = Information::findAll(); $view = new Index_Admin_View($args); $view->display(); Admin_Controller.php } public function confirmer_modifier($args) { $key = $_POST["key"]; $newTitre = $_POST["NouveauTitre"]; $info = Information::read($key); $info->setTitre($newTitre); $info->update(); $args['infosListe'] = Information::findAll(); $view = new Index_Admin_View($args); $view->display(); } public function create($args) { $titre = $_POST["Titre"]; $info = new Information($titre, $this->today()); $info->create(); $args['infosListe'] = Information::findAll(); $view = new Index_Admin_View($args); $view->display(); }

class

Index_Admin_View extends Main_Global_View { admin_View private $infosListe; public function Index_Admin_View($args) { $this->infosListe = $args['infosListe']; }... <h1>Gestion des Informations</h1> <h2> Liste des informations </h2> <form id="infoModifForm" name="infoModifForm" method="post" action="./"> <p>

vendredi 14 octobre 2011

modier Information : niveau Conception

vendredi 14 octobre 2011

SEPARATIONS : Donnes, Interactions et Visualisation, Contrles

13 vendredi 14 octobre 2011

Modle-Vue-Controleur (MVC)
Controller

View

Model

14 vendredi 14 octobre 2011

Modle-Vue-Controleur (MVC)
Controller

View La vue: prsente lutilisateur


14 vendredi 14 octobre 2011

Model

Modle-Vue-Controleur (MVC)
Controller

View La vue: prsente lutilisateur


14 vendredi 14 octobre 2011

Model

Le modle: les donnes indpendantes

Modle-Vue-Controleur (MVC)
Controller contrleur: chef dorchestre

View La vue: prsente lutilisateur


14 vendredi 14 octobre 2011

Model

Le modle: les donnes indpendantes

Controleur observe la vue


Controller

View

Model

15 vendredi 14 octobre 2011

Contrleur rcupre les donnes de la vue


Controller

View

Model

16 vendredi 14 octobre 2011

Contrleur modie le modle


Controller

View

Model

17 vendredi 14 octobre 2011

Vue observe le modle


Controller

View

Model

18 vendredi 14 octobre 2011

Vue rcupre les donnes du modle


Controller

View

Model

19 vendredi 14 octobre 2011

SEPARATIONS : De la dnition du systme sa mise en oeuvre

20 vendredi 14 octobre 2011

Domaine

21 vendredi 14 octobre 2011

Diagramme de squence systme

22 vendredi 14 octobre 2011

Vers la mise en oeuvre


- Reprise du scnario : dcomposition - Retour sur le diagramme de classes

23 vendredi 14 octobre 2011

Vers la mise en oeuvre des classes


Visibilit Abstraction Attributs et Oprations* de Classes Gnralisation Packages Transformations des associations Anti-Patterns
Opration : terme gnrique dsignant le plus souvent des mthodes
vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Association...

04/11

25 /115

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Association...

04/11

26 /115

vendredi 14 octobre 2011

Pattern ex.

Association: De la conception limplmentation

Packages

Itrations

Squences

Archi.

De seq .

Classes..

04/11

27 /115

vendredi 14 octobre 2011

Pattern ex.

Association: De la conception limplmentation

Packages

Itrations

Squences

Archi.

De seq .

Classes..

public Commande (Produit[] c) throws Exception { if (c.length != 0) lignes = c; else throw new Exception("Un produit au moins est requis"); }

04/11

28 /115

vendredi 14 octobre 2011

Pattern ex.

Association: De la conception limplmentation

Packages

Itrations

Squences

Archi.

De seq .

Classes..

public Commande (Produit[] c) throws Exception { if (c.length != 0) lignes = c; else throw new Exception("Un produit au moins est requis"); }


04/11

public boolean oterProduit(Course c) { if (lignes.length==1) return false; ... } 29 /115

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Gestion des associations

04/11

30 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Associations & Navigations

04/11

31 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Exemple de Rafnement

04/11

32 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Principes dimplmentation

04/11

33 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Principes dimplmentation
Extrmit dassociation 1

04/11

33 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Principes dimplmentation
Extrmit dassociation 1 Rle en Attribut avec type de lextrmit

04/11

33 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Principes dimplmentation
Extrmit dassociation 1 Rle en Attribut avec type de lextrmit Type getRole()

04/11

33 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Principes dimplmentation
Extrmit dassociation 1 Rle en Attribut avec type de lextrmit Type getRole() Extrmit dassociation *

04/11

33 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Principes dimplmentation
Extrmit dassociation 1 Rle en Attribut avec type de lextrmit Type getRole() Extrmit dassociation * Rle (pluriel) en collection

04/11

33 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Principes dimplmentation
Extrmit dassociation 1 Rle en Attribut avec type de lextrmit Type getRole() Extrmit dassociation * Rle (pluriel) en collection Type de lextrmit en lment de collection

04/11

33 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Principes dimplmentation
Extrmit dassociation 1 Rle en Attribut avec type de lextrmit Type getRole() Extrmit dassociation * Rle (pluriel) en collection Type de lextrmit en lment de collection Collection getRoles()

04/11

33 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Principes dimplmentation
Extrmit dassociation 1 Rle en Attribut avec type de lextrmit Type getRole() Extrmit dassociation * Rle (pluriel) en collection Type de lextrmit en lment de collection Collection getRoles() // Collection<TypeExtrmit>//

04/11

33 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Principes dimplmentation ( Suite)

04/11

34 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Principes dimplmentation ( Suite)


Fixer une extrmit dassociation 1

04/11

34 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Principes dimplmentation ( Suite)


Fixer une extrmit dassociation 1 void setRole(Type t)

04/11

34 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Principes dimplmentation ( Suite)


Fixer une extrmit dassociation 1 void setRole(Type t) Fixer une extrmit dassociation *

04/11

34 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Principes dimplmentation ( Suite)


Fixer une extrmit dassociation 1 void setRole(Type t) Fixer une extrmit dassociation * void setRoles(Collection c)

04/11

34 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Principes dimplmentation ( Suite)


Fixer une extrmit dassociation 1 void setRole(Type t) Fixer une extrmit dassociation * void setRoles(Collection c) void addRole(TypeElement t)

04/11

34 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Principes dimplmentation ( Suite)


Fixer une extrmit dassociation 1 void setRole(Type t) Fixer une extrmit dassociation * void setRoles(Collection c) void addRole(TypeElement t) Fixer une association navigable dans les 2 sens :

04/11

34 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Principes dimplmentation ( Suite)


Fixer une extrmit dassociation 1 void setRole(Type t) Fixer une extrmit dassociation * void setRoles(Collection c) void addRole(TypeElement t) Fixer une association navigable dans les 2 sens : Dnir les responsabilits : un des objets est responsable de la connexion/dconnexion (cf. exemple)

04/11

34 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Implmentation

Prise de responsabilits

04/11

35 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Implmentation

Prise de responsabilits

04/11

35 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Implmentation

Prise de responsabilits

04/11

35 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Implmentation
Class Student { Collection getClasses() { return classes;//Collection<Course> } protected List classes=new ArrayList } Class Course { Collection getHasSections(); protected List addSection = new protected addHasSections(Section s){ hasSections.add(s); }

Dnition des responsabilits Ne jamais appeler addHasSections ou addClass directement !

04/11

36 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Implmentation
Class Student { Collection getClasses() { return classes;//Collection<Course> } protected List classes=new ArrayList } Class Course { Collection getHasSections(); protected List addSection = new protected addHasSections(Section s){ hasSections.add(s); }

Dnition des responsabilits Ne jamais appeler addHasSections ou addClass directement !

04/11

36 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Implmentation
class Student { Result getResult(Section s) } class Section { Result getResult(Student s) } class Result { Student getStudent() Section getSection() }

04/11

37 /115

DUML java Ph. Collet -- Miage

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

En rsum : Traduction des associations en attributs

04/11

38 Introduction au langage de modlisation UML, Denis Conan, Chantal Taconet, Christian Bac, Telecom Sud Paris

/115

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

En rsum : Traduction des associations en attributs


Autant dattributs que de classes auxquelles elle est relie (navigable)

04/11

38 Introduction au langage de modlisation UML, Denis Conan, Chantal Taconet, Christian Bac, Telecom Sud Paris

/115

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

En rsum : Traduction des associations en attributs


Autant dattributs que de classes auxquelles elle est relie (navigable) Association unidirectionnelle = pas dattribut du ct de la che

04/11

38 Introduction au langage de modlisation UML, Denis Conan, Chantal Taconet, Christian Bac, Telecom Sud Paris

/115

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

En rsum : Traduction des associations en attributs


Autant dattributs que de classes auxquelles elle est relie (navigable) Association unidirectionnelle = pas dattribut du ct de la che Nom de lattribut = nom du rle ou forme nominale du nom de lassociation

04/11

38 Introduction au langage de modlisation UML, Denis Conan, Chantal Taconet, Christian Bac, Telecom Sud Paris

/115

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

En rsum : Traduction des associations en attributs


Autant dattributs que de classes auxquelles elle est relie (navigable) Association unidirectionnelle = pas dattribut du ct de la che Nom de lattribut = nom du rle ou forme nominale du nom de lassociation Attribut du type rfrence sur un objet de la classe lautre extrmit de lassociation Rfrence note @

04/11

38 Introduction au langage de modlisation UML, Denis Conan, Chantal Taconet, Christian Bac, Telecom Sud Paris

/115

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

En rsum : Traduction des associations en attributs


Autant dattributs que de classes auxquelles elle est relie (navigable) Association unidirectionnelle = pas dattribut du ct de la che Nom de lattribut = nom du rle ou forme nominale du nom de lassociation Attribut du type rfrence sur un objet de la classe lautre extrmit de lassociation Rfrence note @ Traduction des multiplicits 1 = @Classe = Collection @Classe Tableau[N] Classe

0..N =

04/11

38 Introduction au langage de modlisation UML, Denis Conan, Chantal Taconet, Christian Bac, Telecom Sud Paris

/115

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

En rsum : Traduction des associations en attributs


Autant dattributs que de classes auxquelles elle est relie (navigable) Association unidirectionnelle = pas dattribut du ct de la che Nom de lattribut = nom du rle ou forme nominale du nom de lassociation Attribut du type rfrence sur un objet de la classe lautre extrmit de lassociation Rfrence note @ Traduction des multiplicits 1 = @Classe = Collection @Classe Tableau[N] Classe

0..N =

Multiplicit avec tri = Collection ordonne @Classe

04/11

38 Introduction au langage de modlisation UML, Denis Conan, Chantal Taconet, Christian Bac, Telecom Sud Paris

/115

vendredi 14 octobre 2011

Pattern ex.

Packages

Itrations

Squences

Archi.

De seq .

Classes..

Compositions

Introduction au langage de modlisation UML, Denis Conan, Chantal Taconet, Christian Bac, Telecom Sud Paris
04/11

39 /115

vendredi 14 octobre 2011

Vous aimerez peut-être aussi