Bonjour à tous,
Je débute en aspectJ, et je suis à la base de la base. J'ai utilisé le tutoriel de skebir pour la suite.
J'ai quelque problème pour utiliser un advice.
L'objectif de mon aspect est de vérifier les déplacements des pièces d'échec.
Mais pour le moment, au moment d'un mouvement, je veux juste afficher un dialogue indiquant que l'advice s'exécute.
Mon advice n'est pas appliqué dans mon programme.

Mon aspect
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package uqac.aop.chess.aspect;
 
import uqac.aop.chess.agent.Move;
 
public aspect ValidationDeplacement {
	//POINTCUT
	pointcut checkMove(Move mv): 
		target(mv) && (
			call(boolean uqac.aop.chess.piece.Piece.isMoveLegal(Move))
	);
 
	after(Move mv) : checkMove(mv) {
		System.out.println("POINTCUT");
	}
}
Et voici la méthode sur laquelle il s’exécute :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
public abstract boolean isMoveLegal(Move mv);
Cette méthode de la classe pièce est surcharger dans ma classe correspondant à un pion qui hérite de pièce.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
public class Pawn extends Piece {
 
	public Pawn(int player) {
		super(player);
	}
 
	@Override
	public String toString() {
		return ((this.player == Player.WHITE) ? "P" : "p");
	}
 
	@Override
	public boolean isMoveLegal(Move mv) {
		// TODO Auto-generated method stub
		boolean special = false;
		// player1
		if (player == Player.WHITE) {
			if ((Math.abs(mv.xF - mv.xI) == 0) && (Math.abs(mv.yF - mv.yI) < 3)) {
				special = true;
			}
			return (((mv.yF - mv.yI) == 1) && (Math.abs(mv.xF - mv.xI) <= 1)) || special;
		}
		// player 2
		if ((Math.abs(mv.xF - mv.xI) == 0) && (Math.abs(mv.yF - mv.yI) < 3)) {
			special = true;
		}
		return (((mv.yF - mv.yI) == -1) && (Math.abs(mv.xF - mv.xI) <= 1)) || special;
 
	}
 
}
L'objectif de cet aspect sera de vérifier la légalité de chaque déplacement à terme. Pour le moment, je fais un focus sur le simple fait de faire le pointcut, lors du déplacement d'un pion.

En vous remerciant !
Soccent