Conception RUP pour NTIC
Conception RUP pour NTIC
Sommaire
1. La conception ................................................................................... 2
1.1. dixime tape : le diagramme dtat ............................................... 2
1.2. onzime tape : Expliciter les contrats dopration par des diagrammes
de squence boite blanche ........................................................................ 4
1.3. douzime tape : le diagramme de collaboration ................................ 7
1.4. treizime tape : le diagramme de classe de conception ................... 33
1.5. quatorzime tape : le codage ....................................................... 39
2. Le processus unifi .......................................................................... 42
2.1. Notion de lot ( ou de cycle ) .......................................................... 42
2.2. Notion de phases ......................................................................... 42
2.3. Notion ditration ......................................................................... 44
3. conclusion ...................................................................................... 45
1. La conception
1.1. dixime tape : le diagramme dtat
Si, dans l'analyse de notre systme, des classes paraissent complexes, par
exemple si elles sont souvent sollicites dans les diagrammes de squence
bote blanche, il est bon de faire un diagramme d'tat de ces classes: cela
permet d'avoir une vue orthogonale de la classe par rapport ses liens avec
les autres classes. Ainsi, nous regardons le comportement des objets d'une
classe, et leur volution interne au fil des vnements. Cela nous donne le
cycle de vie des objets d'une classe.
Ainsi, ayant peru le fonctionnement des objets d'une classe, il est plus facile
de vrifier que les objets des autres classes respectent bien ce comportement.
Cela amliore notre perception du problme.
Cela implique que les diagrammes d'tat doivent tre confronts aux
diagrammes d'interaction afin de vrifier la cohrence de ces diagrammes.
Quelques rappels:
Un objet peut avoir une activit dans un tat. Par exemple quand la caisse
est en attente d'un client, elle peut faire dfiler un message de bienvenue sur
l'cran client.
Un objet peut avoir des actions qui seront dclenches sur des vnements.
Par exemple sur l'vnement fin de vente, la caisse va afficher le total payer.
Une action est une opration atomique qui ne peut tre interrompue.
Elle est considre comme instantane.
Document Millsime Page
OFPPT @ [Link] novembre 17 2 - 47
Mthode RUP Phase de conception
Elle est gnralement associe une transition.
Une activit est une opration qui dure et qui peut tre interrompue.
Elle est associe un tat.
Elle peut tre continue et interrompue par un vnement.
Elle peut tre finie et dclencher une transition.
nouvel article
im pression en cours
attente paiement
entry : lancer
im pression somm e saisie / afficher monnaie
: catalogue article
: Manager
modifier(cecode, nouveauprix)
modifier( prix )
create(art,1)
si nouvelle
vente
afficher(description,prix)
la quantit
vaut 1
On notera que sur cette reprsentation nous ne voyons pas bien les
associations qui ont t cres. Par contre nous voyons mieux les objets qui
cooprent pour arriver au rsultat. Ces deux reprsentations du contrat sont
assez complmentaires, et mriteraient d'tre prsentes toutes les deux.
dnombrer(q)
ldv = slectionner dernier ldv()
modifquantit(q)
p = getprix()
afficher([Link]*p)
: caisse : vente
: Caissier
finir vente()
set termin(true)
T = calculer Total()
setTotal(T)
afficher Total
cela ncessite de
parcourir toutes les
lignes de vente
payer (s)
payer(s)
create([Link])
afficher([Link])
create()
im prim er()
Ces schmas sont moins prcis que le contrat d'opration sous forme
textuelle. Nous n'y retrouvons pas les associations. Les schmas de
diagramme de squence bote blanche utiliss pour dcrire un contrat
d'opration ( bien que souvent utiliss ) vont introduire des choix de
conception ( qui dclenche les oprations? ). Si ces choix ne sont pas faits le
diagramme induit une erreur d'interprtation. Nous prfrerons donc faire ces
choix de conception dans le diagramme de collaboration, et garder le contrat
d'opration sous forme textuelle.
Modifierprix(code,prix) 1 :Modifierprix(code,prix)
:caisse :catalogue
1.2 : setprix(prix)
art : article
: article
Les objets
Objet
anonyme
Modifierprix(code,prix) 1 :Modifierprix(code,prix)
:caisse :catalogue
Objet
nomm 1.2 : setprix(prix) Multi
objet
art : article
: article
Message
initial issu
du Caisse envoie
diagramme un message
de squence Dabord le
catalogue
catalogue
cherche
larticle
Modifierprix(code,prix) 1 :modifierprix(code,prix)
:caisse :catalogue
Puis il modifie
le prix de
larticle trouv
1.2 : setprix(prix)
art : article
: article
Le message initial est non numrot par convention. Ce message est un des
vnements issu du diagramme de squence bote noire, dont nous avons fait
un contrat dopration.
:catalogue
connat art et
le multiobjet
Modifierprix(code,prix) 1 :Modifierprix(code,prix)
:caisse :catalogue
:caisse
connat
lobjet :catal
ogue 1.1 :art := chercher(code) :article
1.2 : setprix(prix)
art : article
:article
Nous avons vu la forme gnrale des messages. Il peut y avoir quelques formes
particulires de messages, que nous allons lister maintenant.
1.1[x>y] :message()
1
:A :B
: numro condition
m
s
g Document Millsime Page
OFPPT @ [Link] novembre 17 10 - 47
(
)
Mthode RUP Phase de conception
1.1a[x>y] :messageb()
1
:A :B
: condition
Numro
m avec une
s letrre
g
(
)
1.1b[ not x>y] :messagec()
:C
Mme numro
avec une autre
lettre Condition
contraire
Si la condition x>y est vrifie, un message est envoy lobjet :B, sinon un
message est envoy lobjet :C
Ce sont les messages de cration dobjet. Ce sont des messages create, avec
ou sans paramtres, qui creront de nouvelles instances dobjets.
:catalogue Nouvelarticle
1 :Ajouter(desc,prix,code,qt) 1.1 :Create(desc,prix,code,qt)
:Type article
:C
Itration
sur le
mme i
toujours de
1 10
Ce sont des messages itratifs, o plusieurs itrations se suivent. Ici les boucles
sont distinctes.
:C
Itration
sur j
diffrent de
i
Ici nous envoyons successivement dix messages :B, puis dix messages :C.
Il y a deux boucles distinctes.
1 :Create()
Produit frais
1.1 :defDatePremption(today)
Le message trouver n'est pas envoy l'objet :Type art mais au multi objet,
qui se traduira en programmation par une collection ( tableau, vecteur,
hashtable, etc ).
Document Millsime Page
OFPPT @ [Link] novembre 17 13 - 47
Mthode RUP Phase de conception
1: lister()
Pour chaque article du catalogue, nous voulons la
description de l'intitul de l'article.
:catalogue
Cette toile
montre que l'on
s'adresse aux
lments de la
1.1*: s := getDescr() : String * collection
Cette toile
montre une
: article itration sur
tous les
lments
Il nous reste ici imprimer la description obtenue. Pour cela il faut envoyer un
message une classe.
1: lister()
1.2*: imprimer(s)
:catalogue Systeme
: article
:caisse :vente
La classe caisse doit connatre la classe vente pour pouvoir lui parler:" vente ,
oh ma vente! Ajoute-toi un article de ce code.".
1: desc := getdesc(code):String
:caisse :catalogue
Que
Val := Vrifier(art:article): entier
celui-l
Document
Celui-ci c'est le mme Millsime Page
OFPPT @ [Link] novembre 17 15 - 47
Mthode RUP Phase de conception
1: p := getPrix(): entier
Setprix(code,prix)
Rcuprons
une rfrence
sur un objet
2: setprix(prix)
art:article Pour pouvoir
lui envoyer
un message
Ici caisse va chercher une rfrence sur un article, pour pouvoir envoyer un
message cet article. Ici aussi, la connaissance de l'objet est temporaire, mais
elle se fait par une variable locale.
C'est l'utilisation par un objet d'une rfrence globale un objet connu de tous.
Cela peut aussi tre le cas de variables globales dans le cas de certains
langages. Nous comprenons bien que ce type de visibilit sera utilis dans de
rares cas, o un objet est omniprsent pour tous les autres objets, et sera
considr comme le contexte de vie de ces objets.
Le problme est que certaines, rares, classes ayant une instance unique doivent
tre connues de nombreux objets. Il est alors conseill d'utiliser le GOF Pattern
"Singleton".
Supposons qu'une classe ncessite d'en connatre une autre ayant une instance
unique (Par exemple, le magasin, si lon avait une classe magasin), et que les
autres techniques de visibilit soient notoirement malcommodes voici ce que
vous pouvez faire:
1: m =getInstance()
:X Magasin
2: xxx()
Systeme
informatique
vnement
A qui est
envoy ce
message ?
Systme
informatique
:caisse :vente
Qui cre
la ligne de
vente ?
C
C
r
r
e
e
a
:magasin L:lignevente a
t
t
e
C e
?
r ?
e
a
t
La rponse ces questions va influencer normment
e la conception de notre
application. C'est ici que l'on va dfinir concrtement
? la responsabilit des
objets, leur rle. C'est aussi ici que l'on va mettre en place la structure du
logiciel par couches ( entre autre en implmentant les passerelles tanches
entre les couches ).
Les qualits du logiciel qui lui permettront de vivre, d'tre corrig, d'voluer,
de grandir dpendront compltement des choix que l'on va effectuer ici.
Les patterns sont l pour nous aider lors de la conception. C'est un couple
problme solution issu de la pratique des experts.
Nous allons voir les neuf GRASP patterns. Il y a d'autres patterns qui existent
( par exemple GOF ( Gang Of Four ) patterns ) ceux-l sont plus ddis des
solutions des problmes particuliers ( par exemple le modle de traitement
des vnements ( GOF patterns ) qui a inspir le modle java de traitement
des vnements ).
Les GRASP patterns sont des modles gnraux de conception, et doivent tre
considrs par le concepteur objet comme la base de son travail de conception.
Nous allons tudier chacun de ces patterns.
Des classes de faible cohsion font des choses diverses ( classes poubelles
o sont ranges les diffrentes mthodes que l'on ne sait pas classer ), ou tout
simplement font trop de choses.
Ces classes faible cohsion sont difficiles comprendre, rutiliser,
maintenir. Elles sont galement fragiles car soumises aux moindres variations,
elles sont donc instables.
Le programmeur doit toujours avoir ce principe de forte cohsion en tte. Il
ralisera alors des classes qui ont un rle clairement tabli, avec un contour
simple et clair.
3.3) Expert
C'est
l'expert
C'est le catalogue qui possde les descriptions d'article, c'est lui l'expert.
C'est donc lui qui nous fournira le service getdescription.
Ce principe conduit placer les services avec les attributs. Nous pouvons
aussi garder en tte le principe: "celui qui sait, fait".
3.4) Crateur
Quand une instance de classe doit tre cre, il faut se poser la question: "
Quelle classe doit crer cet objet?".
Alors A est la classe cratrice de B. Il arrive souvent que deux classes soient
de bons candidats pour crer une instance. Alors il faut valuer le meilleur
candidat. Cela va dans le sens du faible couplage.
Ici c'est le catalogue qui cre les descriptions d'articles.
3.5) Contrleur
L'vnement entrerunarticle arrive donc sur une des quatre classes: Caisse,
Magasin, Caissier ou AchatHandler.
Les deux premires solutions, que l'on appelle contrleurs de faade sont bien
utilises quand il y a peu d'vnements systme. La quatrime proposition (
contrleur de use case ) est utiliser quand il y a beaucoup d'vnements
grer dans le systme. Il y aura alors autant de contrleurs que de use cases.
Cela permet de mieux matriser chaque use case, tout en ne compliquant pas
notre modle objet.
3.6) Polymorphisme
Quand vous travaillez avec des objets dont les comportements varient lorsque
les objets voluent, ces comportements doivent tre dfinis dans les classes
des objets, et les classes doivent tre hirarchises pour marquer cette
volution.
Document Millsime Page
OFPPT @ [Link] novembre 17 23 - 47
Mthode RUP Phase de conception
Les comportements seront dfinis par des fonctions polymorphes, c'est dire
ayant mme forme ( mme signature ou interface ), mais avec des
comportements mutants.
Ainsi lorsque l'on sollicite un objet de cette hirarchie, il n'est pas besoin de
savoir quelle est la nature exacte de l'objet, il suffit de lui envoyer le message
adquat ( le message polymorphe ), et lui ragira avec son savoir faire propre.
Cela permet de faire voluer plus facilement les logiciels. Un objet mutant (
avec un comportement polymorphe ) est immdiatement pris en compte par
les logiciels utilisant l'objet initial. Un programme ne teste donc pas un objet
pour connatre sa nature et savoir comment l'utiliser: il lui envoie un message
et l'objet sait se comporter. Cela va dans le sens de l'radication de l'instruction
switch ( de JAVA ou de C++).
L'utilisation des diffrents grasp patterns nous conduit quelque fois des
impasses. Par exemple la sauvegarde d'un objet en base de donnes devrait
tre fait par l'objet lui-mme ( expert ) mais alors l'objet est li ( coupl )
son environnement, et doit faire appel un certain nombre d'outils de base de
donnes, il devient donc peu cohrent.
La solution prconise, dans un tel cas, est de crer de toute pice un objet
qui traite la sauvegarde en base de donnes. Notre objet reste alors cohrent,
rutilisable, et un nouvel objet, dit de pure fabrication, s'occupe de la
sauvegarde en base de donnes.
Cette solution n'est employer que dans des cas bien particuliers, car elle
conduit raliser des objets bibliothque de fonctions.
3.8) Indirection
Pour viter le couplage, chaque objet n'a le droit de parler qu' ses proches.
Ainsi, nous limitons les interactions entre les diffrents objets.
Quels sont les objets auxquels un objet le droit de parler?
Lui-mme.
Un objet paramtre de la mthode appele.
Un objet attribut de l'objet lui-mme.
Un objet lment d'une collection attribut de l'objet lui-mme.
Un objet cr par la mthode.
Les autres objets sont considrs comme des inconnus auxquels, nous le
savons depuis la plus tendre enfance, il ne faut pas parler.
1:P:=paiement():Paiement
Total = totalvente():float :Caisse :Vente
2:Total := totalvente():float
Caisse et p:Paiement
paiement
sont coupls
Cette solution implique que l'objet caisse dialogue avec l'objet paiement. Hors
a priori il ne connat pas cet objet paiement. Pour limiter le couplage entre les
objets, il est prfrable d'utiliser la solution suivante:
Ici, la caisse ne sait pas comment la vente rcupre le total. Des modifications
de la structure des objets vente et paiement ainsi que de leurs relations ne
changent rien pour la caisse.
Singleton ;
Monteur ;
Prototype ;
Fabrique abstraite ;
Fabrication.
Tout pattern qui est un Pattern Comportemental est en rapport avec les
interactions des classes et des objets ainsi que la distribution des
responsabilits. On y trouve :
Commande ;
Itrateur ;
Mdiateur ;
Patron de mthode ;
Visiteur ;
Chane de responsabilit ;
Observateur ;
tat ;
Interprte ;
Mmento ;
Stratgie.
Il permettent de composer des classes ou des objets pour former des structures
plus vastes. On y trouve :
Dcorateur ;
Proxy ;
Faade ;
Composite ;
Poids mouche ;
Pont ;
Adaptateur.
Nous allons faire autant de diagrammes de collaboration que nous avons fait
de contrats d'oprations. Pour chaque contrat d'opration nous allons prendre
l'vnement du systme comme message d'attaque de notre diagramme de
collaboration, puis nous allons crer les interactions entre les objets qui, partir
de l, permettent de remplir le service demand. Nous serons vigilant bien
respecter les modles de conception. Il n'est pas un message qui se construise
au hasard. Chaque message envoy d'un objet un autre se justifie par un
pattern de conception ( au moins ) .
Enregistrer
article(code) 2: [1er article] crer(date)
3: ajouter(art)
:Caisse :Vente
3.1:ldv := crer(art)
:Catalogue ldv:lignedevente
:lignedevente
3.1.1: p:=getprix()
3.1.2: desc := getdesc()
1.1 art := chercher(code)
art: article
: Article
1.2:misejour(quantit)
Ldv:lignedevente
1.2.2: total ligne := p*quantit
Liste:lignede
vente
1.2.1: p:=getprix()
art: article
Finirvente() 1: Finirvente()
:Caisse :Vente
Liste:lignede
vente
Payervente(s) 1:Payersomme(s)
:Caisse v:Vente
1.2:afficher(s-total)
:Afficheur
:Paiement
Le ticket
:ticket
doit
connatre
la vente
pour
imprimer
Les classes ticket et vente sont troitement couples. Nous pouvons nous poser
la question de savoir si cette classe ticket a un intrt. Il serait bon de faire
l'impression par la vente ( l'expert ), mais en s'appuyant sur une indirection
(imprimante) comme pour l'affichage. Enfin une analyse de tous les uses cases
mettrait en vidence le besoin d'archiver les ventes, pour pouvoir faire les
statistiques. Nous allons donc proposer une solution plus avance de ce
diagramme de collaboration.
On a ici rajout les notions dhistorisation des ventes (qui dcoule dautres use-
case), ce qui nous permet de faire apparatre la classe magasin (singleton).
Cette classe sera fusionne avec la classe catalogue.
En ce qui concerne laffichage, on a choisi dutiliser un afficheur reli
directement la caisse. Il aurait pu tre judicieux de lier lafficheur la ligne
de vente (pour laffichage des descriptions, prix, quantit et sous-total associs
la ligne de vente) et la vente (pour laffichage du total et de la monnaie
rendre).. Dans ce cas, on aurait pu aussi utiliser le pattern singleton pour
modliser cet afficheur (un objet unique, accessible depuis partout).
1.7*:line := desc+prix+quantit+sstotal
Payervente(s) 1:Payersomme(s)
:Caisse v:Vente
2:historiser(v) 1.2:afficher(s-total)
1.8*: imprimer(line)
1.1: crer(total)
:Magasin
:Paiement
Ventes:vente
Liste:lignede
vente
1.3.1:desc:=getdesc()
1.4.1:prix:=getprix()
Art: article
Tous les dtails sur l'impression du ticket n'y sont pas ( entte, total, somme
rendue ), mais ce schma donne une bonne vue des relations entre les objets.
Document Millsime Page
OFPPT @ [Link] novembre 17 31 - 47
Mthode RUP Phase de conception
Nous allons partir uniquement du use case effectuer un achat, donc des quatre
diagrammes de collaboration du chapitre prcdent. Etape par tape, nous
allons construire le diagramme de classe de conception.
1) Premire tape
Nous allons rfrencer toutes les classes rencontres dans les diagrammes de
collaboration. Nous allons les dessiner dans un diagramme de classes. Nous
allons y ajouter les attributs venant du diagramme de classe d'analyse, et les
mthodes venant du diagramme de collaboration.
Nous ne rfrenons que les classes participant nos diagrammes de
collaboration. Les collections ne sont pas rfrences en tant que telles, cela
n'apporte pas de plus value.
Les messages vers les collections n'ont pas lieu d'tre, les collections
supportant ces messages par dfaut.
Les messages de cration par dfaut ne sont pas rfrencs, s'il n'existe pas
de constructeur par initialisation ( car alors ils existent forcment ).
Les slecteurs et les modifieurs n'ont pas de raison de figurer dans ce schma
pour ne pas le surcharger. En effet dans la majorit des cas, ces messages
existent et sont dvelopps la construction de la classe.
Date : date
Payervente(s:float) Termin : boolen
enregistrerarticle(code : Codebarre) Total : float
dnombrer(quantit : entier) payersomme(s:float)
finirvente() Vente(date:Date)
afficher(total:float) ajouter(art: article)
imprimer(line:text) dnombrerquantit(q:entier)
finirvente()
Magasin Lignevente
Descriptionarticle
2) Deuxime tape
1:payersomme(s)
:Caisse V:Vente
Ici la caisse doit connatre en permanence la vente en cours: nous aurons une
association de type attribut.
Caisse Vente
1 t 1
r .
a
venteencours .
i 0
Document t Millsime Page
OFPPT @ [Link] e novembre 17 34 - 47
Mthode RUP Phase de conception
Cela indique que la classe Caisse a un attribut qui rfrence l'objet vente en
cours. Le nom de rle venteencours donnera, pour une gnration automatique
de code, le nom de l'attribut qui rfrence la vente en cours.
Ajouter(art)
:Caisse
:Ventes
Ici la caisse a une visibilit de type variable locale sur l article ( cela serait
le mme traitement si il avait une visibilit de type paramtre comme pour la
Vente ). Nous ajouterons des dpendances de type relation entre les deux
classes.
Caisse article
Flche
avec des
pointills
Cette association montre que le code des mthodes de Caisse doit manipuler
la classe article. Il sera donc ncessaire, la gnration de code, d'inclure un
accs la classe article dans la classe Caisse ( import java, ou include c++ ).
1:art:=chercherarticle(code)
:Caisse :Catalogue
Ici le magasin est une instance unique pour l'application. Un certain nombre
de classes doivent connatre le magasin. Nous pouvons rsoudre le problme
comme au 1. Mais, si nous ne voulons pas multiplier les rfrences au
magasin, nous pouvons appliquer le pattern Singleton ( Singleton pour instance
unique ).
Cela revient effectivement travailler avec une instance globale, mais fait
proprement, dans des cas rares, et rpertoris. Nous retrouverons la notation
de relation entre les classes, ici pour un accs une variable globale.
Caisse Magasin
$boutic:Magasin
$getInstance()
Document Millsime Page
OFPPT @ [Link] novembre 17 35 - 47
Mthode RUP Phase de conception
(exemple en java)
public static Magasin getInstance()
{
if (boutic == null)
{
boutic = new Magasin();
}
return boutic;
}
Ainsi nous aurons une instance unique du Magasin. Cette instance peut tre
appele partout en utilisant le formalisme suivant:
(exemple en java)
Magasin monbazar = [Link]();
affichet(stt:float) imprimer(line:text)
1 1
possde
possde
0
Vente
.
1 . : date
Date
1
1
ralise
Termin : boolen
1 : float
Total
Caisse
payersomme(s:float)
1 Venteencours 1 Vente(date:Date,c:Caisse)
Se fait sur ajouter(art:article)
Payervente(s:float)
dnombrerquantit(q:entier
enregistrerarticle(code :
)
Codebarre)
Historique * finirvente()
dnombrer(quantit : entier)
finirvente() 1 1
afficher(total:float) effectue
imprimer(line:text)
enregistre
0
.
Paiement .
1
Total : float
1 contient
Paiement(total:floa
Magasin t)
Nom : text
Adresse : Adresse
$boutic:Magasin
historiser(v:vente)
chercherarticle(code:Codebarre): article
$getInstance():Magasin
1
.
Lignevente
1 .
Quantit : entier *
Sstotal : float
rfrence
rfrence
*
getdesc():Text
getprix():Float
Lignevente(art :article)
*
1
catalogu
article
e
Description : text
Prix : rel
Code : codebarre
Quand la vente en cours est cre, il faut lui associer la caisse sur
laquelle s'effectue la vente. Nous avons fait le choix que la vente ne
connaisse que la caisse, plutt que de connatre chacun de ses lments
( afficheur, imprimante, )
La caisse joue un double rle: celui d'interface pour le use case effectuer
un achat, et l'indirection vers les composants physiques de la caisse. Si
la caisse devient trop complexe, il vaut mieux couper la classe en deux,
d'un cot l'interface du use case, et de l'autre ct l'interface vers les
composants de la caisse elle-mme. Nous ne l'avons pas fait dans le
cadre de cet exercice.
Quand entre deux classes, il existe dj une association
( ), il n'est pas utile d'y rajouter une relation
( ). Cela n'apporte rien, sinon du bruit.
Ici, nous n'avons pas rajout les indicateurs de visibilit ( public +, priv
-,), tant bien entendu que les mthodes sont publiques, et les
attributs sont privs. Les fonctions d'accs aux attributs sont sous-
entendues.
Les noms de rle mis sur certaines associations donnent le nom de
l'attribut dans la classe concerne. Les associations sont
unidirectionnelles et donne le sens de la visibilit. Le diagramme nous
montre que la classe Caisse a un attribut qui s'appelle venteencours qui
rfrence la vente en cours. De mme la classe Magasin a un attribut qui
s'appelle catalogue et qui est une collection darticles ( c'est la cardinalit
qui nous montre que dans ce cas c'est une collection ).
Les trois relations prsentes sont des trois types possibles ( global, paramtre
et local )
class Caisse
{
private Catalogue cat ;
private Vente v ;
public void enregistrerarticle(int code)
{
Article art=[Link](code) ;
if (v==null)
{
v=new Vente() ;
}
[Link](art) ;
}
public void finvente()
{
[Link]() ;
}
.
}
class Catalogue
{
private Hashtable articles=new Hashtable() ; ;
class Vente
{
private boolean ventetermine = false ;
private Vector lignes = new Vector() ;
public void ajouter(Article art)
{
[Link](new Ldv(art)) ;
}
public void finvente()
{
ventetermine= true ;
}
public float total()
Document Millsime Page
OFPPT @ [Link] novembre 17 39 - 47
Mthode RUP Phase de conception
{
float total=0 ;
Enumeration e=[Link]() ;
while ([Link]())
{
total+=((Ldv)[Link]()).soustotal();
}
return total;
}
.
}
class Ldv
{
private int qte ;
private Article art ;
.
public Ldv(Article a)
{
[Link]=a ;
}
public void soustotal()
{
return qte*[Link]() ;
}
public denombrer(int newqte)
{
setqte(newqte) ;
}
.
}
class Article
{
private int code=0 ;
private float prix=0 ;
private String desc= ;
public Article(int code, float prix, String desc)
{
[Link]=code ;
[Link]=prix;
[Link]=desc;
}
public int getcode()
{
return code;
}
public int getprix()
{
return prix;
Document Millsime Page
OFPPT @ [Link] novembre 17 40 - 47
Mthode RUP Phase de conception
}
public int getdesc()
{
return desc;
}
.
}
Nous allons donc mettre en 3 dimensions le processus que nous avons tudi.
Nous classerons les uses cases par leur pondration ( risque + importance ).
Puis nous donnerons une logique ce classement. Cela peut nous amener
ne vrifier quune faisabilit pour un use case particulier, ou traiter une partie
des exigences dun use case dans un premier lot, et les autres dans un lot
suivant.
Ce dcoupage sera valid par le client, et nous donnera les diffrentes livraisons
qui seront faites au client.
Nous allons voir en quoi consiste chaque phase, puis nous verrons que chaque
phase est constitue dune ou plusieurs itrations.
Chacune des phases dcrites, peut tre effectue en plusieurs itrations. Par
exemple dans la phase de conception, les itrations peuvent tre trs brves
( de lordre de la demi journe, jusqu deux jours ), et consiste
implmenter une classe par exemple.
Dans la phase dlaboration, une itration pourra par exemple traiter dun
risque particulier.
Sources de rfrence