Devoir de programmation objet
DEUG MIAS 2

Marc Champesme
Marc.Champesme@lipn.univ-paris13.fr
Departement d’Informatique
Institut Galilée

27 avril 2003
Tous les devoirs doivent être remis à votre chargé de TD (en main propre ou dans son casier), au plus tard une semaine avant le début des partiels de juin 2003. Tout devoir rendu après cette date sera considéré comme non fait.

1 Objectif du devoir

Le but est de mettre en pratique les concepts de la programmation orientée objet et plus particulièrement :

2 Présentation du sujet

Il s’agit d’apporter des améliorations à un logiciel de jeu de cartes de type “réussite”, tel que ceux fournit en standard avec certains systèmes d’exploitation. Pour réduire la quantité de travail nécessaire, le code source en JAVA d’un logiciel “Jeu du solitaire” vous est fourni (disponible prochainement dans votre dossier partagé). Ce logiciel est le travail rendu par un étudiant de DEUG MIAS 2 en 2002. La version qui est mise à votre disposition est en fait une version légèrement adaptée de ce travail, la principale modification apportée étant une traduction des assertions en JML. En particulier, cette version fonctionne correctement avec les assertions activées.

Cependant, cette version du logiciel possède un certain nombre de défauts :

3 Travail demandé

Le devoir doit être réalisé individuellement : chaque étudiant devra rendre sa propre version du logiciel sur laquelle il sera évalué. Le travail à réaliser consiste à :

Corrections à apporter au logiciel

Vous devrez revoir la structuration du code entre les différentes classes afin de permettre une utilisation simple et directe de certaines classes pour d’autre jeux de cartes. Cette structuration devra utiliser l’héritage de manière privilégiée.

Afin de rendre la gestion de l’interface indépendante de la gestion du jeu, les caractéristiques (attributs ou méthodes) liées à l’affichage doivent être placées dans des classes distinctes de celles assurant le fonctionnement du jeu. Par exemple, dans la classe PileCartes, les attributs x et y, ainsi que les méthodes les utilisant doivent être définies dans des classes distinctes (i.e. en dehors de la classe PileCartes).

4 Evaluation

Compte tenu de l’objectif fixé, ce n’est pas la richesse en fonctionnalité, mais plutôt la qualité de la réalisation qui sera évaluée.

La qualité de la réalisation sera évaluée selon les critères suivant :

5 Documents à rendre par chaque étudiant

Chaque étudiant rend une disquette et un rapport sur papier contenant :

6 Standards de programmation

Commentaires
Les commentaires doivent être rédigés en respectant les règles suivantes :
Choix des identificateurs
Tous les identificateurs doivent être francisés. Les seules exceptions admises sont les préfixes get et set pour les méthodes servant à consulter ou modifier un champ particulier : par exemple, il est admit que l’identificateur de méthode setCenter soit traduit (de manière incomplète) en setCentre.
Assertions
Vous devez définir un invariant pour chaque classe et chaque méthode doit posséder une pré-condition et une post-condition, lorsque cela est possible et justifié.

Vous devez vous efforcer d’écrire les assertions en JML de façon à ce qu’elles puissent être activées à l’exécution. Cependant certaines assertions ne peuvent être décrites de manière satisfaisante en JML, dans ce cas, les assertions pourront être écrites en français.

Visibilité / masquage d’information
Toutes les classes et les méthodes doivent être déclarées public et tous les attributs doivent être déclarés private. Il est néanmoins admis que les attributs static final (i.e. les constantes) soient déclarés public.

Toute exception à cette règle devra être clairement justifiée dans les commentaires.

Variables de classe
L’usage de variables de classes devra être réservé à des cas exceptionnels (par exemple variables final).

A La réussite “Klondike”

L’aire de jeu se compose des quatre cellules de destination, de 7 colonnes de cartes et du jeu de cartes. En début de partie, le jeu est en partie distribué dans les 7 colonnes de manière à ce que seule la carte au bas de chaque colonne soit visible.

A.1 But du jeu

A.2 Déplacements

Pour déplacer une carte, cliquez dessus, puis sur l’endroit où vous voulez la placer. Plusieurs types de déplacements sont autorisés :

B La réussite “de l’horloge”

L’aire de jeu se compose de douze cellules de destination disposées en forme d’horloge - chaque cellule représentant une heure de l’horloge - et de 8 colonnes de cartes.


pict
FIG. 1: Configuration du jeu en début de partie.

B.1 Début de partie

En début de partie (cf. figure 1), chaque cellule de destination contient une carte dont la valeur est fixée en fonction de sa position dans l’horloge :


Position Carte


1 heure 10 de cœur
2 heures Valet de pique
3 heures Dame de carreau
4 heures Roi de trèfle
5 heures 2 de cœur
6 heures 3 de pique
7 heures 4 de carreau
8 heures 5 de trèfle
9 heures 6 de cœur
10 heures7 de pique
11 heures8 de carreau
12 heures9 de trèfle


Le reste du jeu est complètement distribué dans les 8 colonnes de manière à ce que toutes les cartes soient visibles.

B.2 Fin de partie

En fin de partie (cf. figure 2), chaque cellule de destination contient une carte dont le rang correspond à sa position dans l’horloge :


Position Carte


1 heure As de cœur
2 heures 2 de pique
3 heures 3 de carreau
4 heures 4 de trèfle
5 heures 5 de cœur
6 heures 6 de pique
7 heures 7 de carreau
8 heures 8 de trèfle
9 heures 9 de cœur
10 heures10 de pique
11 heuresValet de carreau
12 heuresDame de trèfle


Les 8 colonnes sont vides.


pict
FIG. 2: Configuration du jeu en fin de partie.

B.3 Déplacements

Plusieurs types de déplacements sont autorisés :