Vous êtes sur la page 1sur 6

Correction de l'examen de CAR du 20 novembre 2008

Questions de cours:
Q1:
Rponse attendue: Un mta-modle dcrit la structure que doit respecter un ensemble de modles (modles dit conformes). On peut comparer un mta-modle une grammaire de graphe (les modles sont alors considrs comme des graphes). Plus formellement, un mta-modle est compos de mta-classe qui ont des proprits et des rfrences. Un modle conform un mta-modl est quant lui compos d'lments. Chaque lment de modle a une classe qui lui correspond dans le mta-modle et peut alors porter des valeurs pour les proprits et les rfrences de cette classe (plus celle des super classes) Notation: O si il est fait la moindre mention de relation d'abstraction 100% si il est fait mention de spcification de structure que doit respecter les modles 100% si il est fait mention des rgles formelle dfinissant la conformit (rgles prsentes en cours)

Q2:
Rponse attendue: Les PIM sont des modles de systme informatique mais qui sont indpendant vis vis des plates-formes d'excution. Les PIM sont dont relativement abstrait par rapport la ralisation du systme. On considre souvent que les PIM correspondent aux modles d'analyse et de conception des mthodes de gnie logiciel. En ce sens, les PIM sont utilis pour prenniser une architecture en esprant qu'elle dure plus longtemps que les ralisations sur des plates-formes succssives (exemple du PIM correspondant l'architecture client / serveur). Notation: 50% si il est fait mention de l'indpendance de la plate-forme d'excution. 50% si il est fait mention de l'intrt (prennit) des PIM dans une mthode de gnie logiciel

Q3:
Rponse attendue: En AGG, les lments de modlisation qui sont match par le membre gauche et qui n'apparaissent pas dans le membre droit sont automatiquement supprim du modle. En EMF, il n'est pas possible de supprim un lmnent du modle, il faut supprimer toutes les rfrences qui pointent vers lui et attendre le Garbage Collector de Java. Notation: 50% si explication du mode AGG 50% si explication du mode EMF

Q4

Rponse attendue : Les contraintes de LdP sont formalises en utilisant OCL. Pour une intgration dans un dev Java/EMF, il faut raliser une traduction OCL vers Java/EMF. i.e chaque contrainte OCL est traduite sous forme dun programme Java/EMF permettant sa dtection. Si ltudiant fait rfrence au plugin OCL/EMF, on accepte aussi.

Notation 100% si tout 0 sinon

Problme:
Q1:
Rponse attendue: On veut voir apparaitre la structure arborescente base sur les liens de composition. System | +-Composant (name = CP1) | | | +- AccessPoint (name=A2) (Extern=true) | +- AccessPoint (name=A3) (Extern=true) | +-Composant CP2 | +- AccessPoint (name=A4) (Extern=true) | +-Binding (source=A3) (target=A4)

Notation 100% si l'arbre est correct 0 sinon

Q2:
Rponse attendue:

+source

AccessPoint Binding +target +name : string +extern : boolean +class : string

1 +bindings *

+points

* 1

+parts

Component +name : string

* 1 1 PrimitiveComponent

CompositeComponent

Notation: 100% si la structure suivante est respecte (les concepts Composite et Primitif sont l et le primitif ne peut pas tre compos d'autres composant ni de bindings) ! pas de sanction si le composite ne peut pas contenir de composite mais que des composants (le sujet est ambigue)

Q3:
Rponse attentdue: Composite (name = CC1) | + AccessPoint (name=A1) (Externe=false) | +-Composant (name = CP1) | +- AccessPoint (name=A2) (Extern=true) | +- AccessPoint (name=A3) (Extern=true) | +-Composant CP2 | +- AccessPoint (name=A4) (Extern=true) | +-Binding (source=A1) (target=A2) +-Binding (source=A3) (target=A4)

Notation: idem Q1

Q4:
Correction: Les rgles ne sont pas trs clairement identifies dans l'nonc, il est naturel de les spcifier:

R1 : Un binding appartenant un composite peut se faire entre deux AccessPoint externe de composant contenus dans le composant R2 : Un binding appartenant un composite peut se faire entre un AccessPoint interne du composite et un AccessPoint extern d'un composant contenu dans le composant composite On considre que owner() est donn et permet de rcuprer le composant qui possde l'access point Au pire on parcourt tous les composants en cherchant celui qui contient l'acess point. public boolean R1(Binding b , CompositeComponent cont) { return b.getTarget().extern && b.getSource().extern && cont.getBindings().contains(b) && cont.getParts().contains(b.getSource().owner()) && cont.getParts().contains(b.getTarget.owner()); } public boolean R2(Binding b , CompositeComponent cont) { return b.getTarget().extern && !b.getSource().extern&& cont.getBindings().contains(b) && b.getSource().owner()==cont && cont.getParts().contains(b.getTarget.owner()); } public boolean R(Binding b , CompositeComponent cont) { return R1(b,cont) || R1(b,cont); } Ensuite il suffit de parcourir les binding d'un composant (on peut mme le faire de manire rcursie) public boolean validBindings(CompositeComponent c) { boolean valid = true; for (Binding b: c.getBindings() ) { if !R(b,c) valid = false; } } Notation: De 10% 40% par rgles 20% pour le bon emploi de EMF

Q5:
Correction: Commentaire: cette question est volontairement trs lourde. Il faut bien comprendre qu'il s'agit de parcourir le graphe mais de faon plutt habile. Voici le principe de l'algo 1) Gnrer une liste de composant afin de faciliter le parcours du graphe 2) Parcourir cette liste pour construire les lignes correspondant aux Composants et aux AccessPoint des composants (genAccessPoint) 4) Reparcourir cette liste pour instancier leur contenu (genContent) 5) start public void genAccessPoint(Component c) { write(Component+c.getName()+= fac.createComponent(); if (c instanceof CompositeComponent) write(true) else write(false); Boolean hasAccess = false; for (AccesPoint p : c.getPoints()) {

if (!hasAccess) {write(new AccessPointDescriptor[]{); hasAccess=true;} write(new AccessPointDescriptor(\""+p.getName()+"\",p.getExtern()+,\"+p.getName()+\") ); } if (has Access) write(}); write();); } public void genContent(CompositeComponent c) { for (Component sub : c.parts()) { write(c.getName()+.addSubComponent(+sub.getName()+);); } for (Binding bin : c.bindings()) { Component ownerSource = c.getSource().getOwner(); Component ownerCible = c.getCible().getOwner(); write(c.getName()+.addBinding(); write(ownerSource.getName()+getAccessPoints()[+
ownerSource.getPoints().indexOf(c.getSource()+],);

write(ownerCible.getName()+getAccessPoints()[+
ownerCible.getPoints().indexOf(c.getCible()+]););

} }

Notation: De 10% 40% par mthode de gnration (on doit retrouver les dclarations des composants et la construction de leur contenu 20% pour lalgo gnral

Q5(bis):
Correction: Un mta-modle prsentant une squence dactions dadaptation. 2 mta-classes suffisent (la mta-classe Adaptation et la mta-classe Action). La mta-classe Action doit contenir une proprit permettant de prciser quelle action dadaptation (start, stop, )

Notation: 100% si le mta-modle permet de modliser des adaptations qui sont des scripts appelant les actions dadaptation. 40% si il est fait mention dactions dadaptation mais quil manque lordre

Q6:
Correction: Cette question ne devrait pas poser de problme. Par contre le code dpend entirement du mtamodle de la question Q5bis.

Notation: 50% par rgles.

Q7:
Correction: Ce mta-modle doit contenir une nouvelle mta-classe reprsentant le systme complet. Cette mta-classe a une rfrence vers la mta-classe system (mutliplicit max 1) et une rfrence vers la mta-classe Adaptation (multiplicit max *).

Notation: 100% si la nouvelle classe avec les 2 rfrences.

Q8:
Correction: Il faudrait spcifier la notion de contexte dadapation (sorte de prcondition ou dinvariant ladaptation). Ensuite vrifier que la prcondition ou linvariant dune adaptation nest pas interdite par une autre adaptation.

Notation: 100% si prcision de contraintes dapplication des adaptations.