Vous êtes sur la page 1sur 3

Exercice 2 (1,5 pts)

Définissez les points de coupures suivants (pointcut) :

1) tout endroit où on fait appel à une méthode dont son nom commence par "log",
qui prend un premier argument de type Video (les autres arguments peuvent être de
types différents et même varier en nombre d'arguments) et qui lève une exception de
type media.UnknownFeatures.

2) lors de l'exécution de toute méthode d'un objet de type Artifact, dont son nom
(nom de la méthode) commence par "zip", son type de retour est "float", et n'est pas
public.

Exercice 3 (4,25 pts)


Soit l'extrait du code JAVA suivant.

public class Artifact {


Compression cp;
Emailer email;
... }

public class Video extends Artifact{


...
ZippedVideo zip(){
tr.logSize(id,this.size());
// traitement de compression de VIDEO
// que vous reprenez si nécessaire
// sous forme de ce commentaire
...
compressionRate = ...; // vous reprenez si
//nécessaire cette ligne comme elle est
tr.logSize(id,compressionRate);
} }

public class Photo extends Artifact {


...
ZippedPhoto zip(){
tr.logSize(id,this.size());
// traitement de compression de PHOTO
// que vous reprenez si nécessaire
// sous forme de ce commentaire
...
compressionRate = ...; // vous reprenez si nécessaire
// cette ligne comme elle est
tr.logSize(id,compressionRate);
} }

public class Document extends Artifact {


...
ZippedDocument zip(){
// traitement de compression de DOCUMENT
// que vous reprenez si nécessaire
// sous forme de ce commentaire
} }

On remarque un traitement similaire dans les corps des méthodes zip des classes Video et Photo.

Définissez un aspect (pointcut et advice) pour extraire et séparer ce traitement commun du code
de la compression elle même. Vous indiquez aussi les modifications que vous devez apporter au
code, pour chacune des classes concernées, si nécessaire. Pour cet exercice, n'utilisez pas le
"advice" around.
Exercice 4 (6,75 pts)
Soit l'extrait du code JAVA suivant.

public class Artifact {


Compression cp;
Emailer email;
...
}

public class Video extends Artifact {


...
sendVideo(Destination dest){
this.processForSubmission();
if (this.size() <= Utility.sizeMax){
email.downSize();
email.sendVideo(this, dest)
} else {
cp.execute(this);
email.upSize();
email.sendVideo(this, dest);
}
}
}
public class Photo extends Artifact {
...
sendPhoto(Destination dest){
this.processForSubmission();
if (this.size() <= Utility.sizeMax){
email.downSize();
email.sendPhoto(this, dest)
} else {
cp.execute(this);
email.upSize();
email.sendPhoto(this,dest);
}
}
}

public class Document extends Artifact {


...
sendDocument(Destination dest){
this.processForSubmission();
email.sendPhoto(this, dest)
}

On remarque un traitement similaire autour des appelles des méthodes d'envoi de l'objet email,
quand ces appelles sont faits à partir des classes Video et Photo.

Définissez un aspect (pointcut et advice) pour extraire et séparer ce traitement commun. Vous
indiquez aussi les modifications que vous devez apporter au code (pour chacune des classes
concernées).

Vous aimerez peut-être aussi