Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Franois Schwarzentruber
ENS Cachan Antenne de Bretagne
une problmatique:
pouvoir annuler
une faon de
structurer
le programme
Ce cours parle de a:
Proprits fonctionnelles
Proprits non
fonctionnelles
Facile comprendre
Facile partager
Facile tendre
Nombres entiers
Prouveur
Matrices
Jeu
Rubik's cube...
Logiciel de dessin
Mme problmatiques
de gnie logiciel
Mme concepts
Patrons de conception
(variste Galois)
Faade
Sous-groupes
Visiteur
Comme l'extension
est galoisienne...
La crme anglaise
sera parfaite avec
le gteau.
A notre problme,
appliquons le
patron Visiteur!
Patrons de cration
Patrons de structure
Patrons de comportement
Patrons de cration
Patron Prototype
Windows
Linux
MacOS
Android
enfants
lycens
new
new
new
new
new
b = new BriqueEffacerTout();
if(pourlesEnfants)
{
b = new briqueEffacerToutPourEnfant();
}
else
{
b = new briqueEffacerToutPourLyceen();
}
On va devoir adapter
notre
logiciel d'algorithmique
deux publics.
Comment faire?
On applique
le patron de
conception
fabrique abstraite .
t
effacer tou
Fabrique
de briques
pour les enfants
effacer tout
Fabrique
de briques
pour les lycens
Bonne solution
b = new BriqueEffacerTout();
FabriqueAbstraite
fabriqueBriques
= new FabriqueEnfant()
fabriqueBriques.getNouvelleBriqueEffacerTout()
Besoins
new Maison(Color.RED,
Color.WHITE, 16, 32, 16)
new Arbre(Color.GREEN,
Color.BROWN, 8, 32, 8)
A faire
Source: wikipedia
Patrons de structure
12
10
8
Column 1
Column 2
Column 3
6
4
2
0
Row 1
ObjetGraphique
getBounds(): Rect
(interface utilise par mon logiciel)
Row 2
Row 3
Row 4
OpenOfficeGraphics
width
height
source: Wikipedia
(+ (* 2 3) 5)
Interprteur
Scheme
11
Patron faade
Source: Patterns in Java, Volume 1: A Catalog of Reusable Design Patterns Illustrated with UML, Second Edition by Mark Grand
Adaptateur
Patron Composite
Objets rcursifs:
Arborescence de fichiers
Expressions
Etc.
Patron Composite
Source: wikibooks
Patron Dcoration
Une fentre peut :
Avec l'hritage
on aurait 2n
classes
diffrentes!
(interface
d'une fentre)
Avec la
dlgation on a
O(n) classes.
(dcorateur abstrait)
(fentre)
(dcorateur concret
comme fentre avec
un fond)
- Comportement inattendu...
new FenetreBordure(new FenetreFond(f))
~ new FenetreFond(new FenetreBordure(f))?
Patrons de comportement
Conversion de donnes
On applique
le patron de
conception
observateur .
Donnes
Ces deux
zones de
l'cran
(observateurs)
coutent les
donnes
(sujets).
Modle-vue-contrleur
utilisateur
contrleur
vue
modle
Fichier
.tex
Fichier
.html
Fichier
.tex
Fichier
.html
Fichier
.html
Fichier
.tex
Fichier
.tex
LaTEX vers
OpenOffice.Writer
Fichier
.odt
Fichier
.tex
Fichier
.html
Fichier
.tex
Emetteur
LaTEX
Emetteur
HTML
Emetteur
OpenOffice.Writer
Nouveau
paragraphe
Nouvelle
page
Nouveau
paragraphe
Nouvelle
page
Gnrateur
LaTEX
Fichier
.tex
Gnrateur
HTML
Fichier
.html
Gnrateur
OpenOffice.Writer
Fichier
.odt
Fichier
.tex
Emetteur
LaTEX
u
ea he
uv
No grap
ra
pa
Gnrateur
HTML
Fichier
.html
On applique
le patron de
conception
Commande.
Problmes
interface gnrique
commande copier
dessin
Memento
Memento: sauvegarde
Memento: Restauration
DocumentElement
getTableOfContents()
getSizeInBytes()
getNumberOfSection()
getNumberOfFigure()
checkSpelling()
checkGrammar()
...
Classes petites
Visitor
Diagramme d'objets
heros.move()
tableau.sort()
BubbleSort?
QuickSort?
HeapSort?
container.doLayout()
Source: http://download.oracle.com/javase/tutorial/uiswing/layout/visual.html
Stratgie
Exemple
:
public void setEtat(EtatDessin nouvelEtat) {
this.monEtat = nouvelEtat;
}
public void mouseUp() {
this.monEtat.mouseUp();
}
:
dessin.setEtat(new EtatCrayon());
}
}
Conclusion
Maintenance
Proprits fonctionnelles!!