Sujet du projet
Cette page concerne le projet du cours IN201 pour l'année 2015/2016.
Le sujet du projet se trouve ici.
La liste des équipes se trouve ici.
Modèles pour les rapports
Pour écrire vos rapports, vous utiliserez les modèles suivants :
- classe
article
pour LaTeX. Voici un fichier exemple au format tex. Le fichier PDF produit est ici. - pour OpenOffice, on utilisera le fichier PDF précédent comme modèle.
Premier rapport : rapport d'analyse et de conception
Quelques commentaires
La partie analyse de ce premier rapport a pour but de voir si vous avez bien compris le sujet en vous plaçant du point de vue d'un utilisateur de l'application. Il ne s'agit pas ici de trouver une solution au problème posé. Il permet de plus de vous présenter deux nouveaux diagrammes UML : les diagrammes de cas d'utilisation et les diagrammes de séquence (que nous avons aperçus lors de la séance sur les associations).
Vous devez également répartir le travail entre les différents binômes de votre équipe (cf. sujet du projet).
Dans une seconde partie, le rapport doit vous permettre de proposer une solution au problème posé. Pour cela, vous allez devoir concevoir un diagramme de classe présentant les différentes classes et interfaces de votre application et les relations les liant.
Il se peut que vous ayiez besoin de notions qui seront vues plus tard dans le cours. En ce qui concerne les interfaces graphiques, une structuration en paquetages vous permet de considérer un paquetage qui contiendra toutes les classes nécessaires à la construction de l'interface graphique et de ne pas développer plus ce point.
Les diagrammes de séquence demandés dans cette partie du rapport sont différents des diagrammes du premier rapport d'analyse : ils ne concernent pas les interactions entre l'utilisateur et le système, mais les appels de méthodes entre les objets de vos classes. Il ne s'agit pas d'en faire pour chaque scénario possible, mais vous devez en produire quelques-uns qui doivent permettre de mieux comprendre les interactions entre les objets que vous allez utiliser. Ils sont donc à « réserver » pour les interactions les plus complexes qui vont exister à l'intérieur de votre application.
Tutoriel ArgoUML
Si vous souhaitez utiliser ArgoUML, vous trouverez un petit tutoriel ici qui vous présentera comment créer un diagramme de classes et générer le code Java correspondant.
Documents à rendre
Ce rapport est à déposer pour le 19 novembre 2015 23h00 sur le dépôt de votre équipe.
Vous déposerez également à la même date dans le dépôt SVN correspondant à votre équipe les squelettes documentés des classes Java à développer ainsi que les éventuelles classes de test que vous pouvez déjà fournir.
On rappelle que le dépôt associé à l'équipe tNUM rattachée à la PC GPE
est https://eduforge.isae.fr/repos/IN201/GPE/tNUM
.
Implantation
Utiliser BufferedImage
Pour stocker les images, je vous ai conseillé un objet de type
java.awt.BufferedImage
qui permet d'obtenir une image que l'on peut
modifier. En particulier, cette classe possède une méthode setRGB(int
i, int j, int RGB)
qui permet de positionner la couleur du pixel de
coordonnées (i,j). Reste à savoir comment calculer la couleur à passer
en paramètre...
Avec le modèle par défaut, la couleur du pixel est représentée par quatre entiers dont les valeurs sont comprises entre 0 et 255 (donc sur 1 octet chacune) représentant respectivement les « valeurs » sur le canal Alpha (transparence), puis Rouge, Vert et Bleu. Ces quatre couleurs sont stockées sous la forme d'un seul entier que l'on décompose ainsi :
- le premier octet de l'entier représente la valeur du canal alpha
- le deuxième octet de l'entier représente la valeur de la couleur Rouge
- le troisième octet de l'entier représente la valeur de la couleur Vert
- le quatrième octet de l'entier représente la valeur de la couleur Bleu
Comment faire alors pour construire l'entier correspondant à la
couleur (128, 56, 200) par exemple ? Il faut utiliser l'opérateur de
décalage de bits <<
qui permet de décaler un entier d'un certain
nombre de bits à gauche. Pour notre couleur (128, 56, 200), on doit
construire un entier de 3 octets de la façon suivante :
- 200 représente la couleur Bleu, comme elle doit apparaître sur le dernier octet de l'entier, on ne la décale pas
- 56 représente la couleur Vert, elle doit apparaître sur le deuxième
octet de l'entier, donc on la décale de 8 bits (un octet = 8 bits)
par
56 << 8
- 128 représente la couleur Rouge, elle doit apparaître sur le
premier octet de l'entier, donc on la décale de 16 bits par
128 << 16
- on ajoute ensuite la valeur du canal alpha, par exemple 255, donc
on la décale de 24 bits par
255 << 24
On obtient donc l'entier correspondant à (128, 56, 200) avec un canal
alpha de 255 par (255 << 24 + 128 << 16) + (56 << 8) + 200
.
Pour récupérer les valeurs, il suffit de décaler dans l'autre sens et d'appliquer un masque pour ne récupérer que les octets intéressants.
Vous trouverez ici un petit programme Java qui travaille avec une image (vous pouvez utiliser celle-là).
Écrire un programme permettant de gérer des options via la ligne de commande
Il vous est demandé de permettre à l'utilisateur de choisir facilement
entre une utilisation de votre application via une interface graphique
ou via la ligne de commande. Pour faire cela, il faut récupérer des
arguments sur cette ligne de commande. Dans la méthode main
d'une
classe applicative, on peut récupérer ce que l'utilisateur a écrit
lors de l'appel à la JVM dans l'argument args
de type String[]
de la
méthode.
Par exemple, si on exécute java MonApp blabla coucou
alors args[0]
vaut "blabla"
et args[1]
vaut "coucou"
. Je vous propose ici un petit
programme qui permet d'utiliser les arguments de la ligne de commande
pour déterminer si l'utilisateur veut utiliser l'interface graphique
ou pas et d'afficher éventuellement une aide pour l'utilisation de
l'application.
Si vous voulez transformer les chaînes de caractères ainsi récupérées
en nombre, il faut utiliser les méthodes statiques des classes
Integer
, Double
etc. comme parseInt
, parseDouble
etc. Attention dans
ce cas aux exceptions qui peuvent être levées si la chaîne de
caractères ne correspond pas au type attendu (par exemple si on essaye
de transformer "blabla"
en entier).
Vous trouverez un exemple ici. J'utilise la syntaxe classique des applications Unix. Quelques exemples d'appels :
java MyApp -h java MyApp blabla coucou --help java MyApp -gui java MyApp -cli
Attention, je ne vérifie pas ici que l'on ne met pas les deux options en même temps etc. À vous de modifier cette classe pour l'adapter à votre application.
Vous pouvez également utiliser des bibliothèques plus évoluées permettant de créer des applications en ligne de commande comme :
- JCommander (http://jcommander.org/)
- Apache Commons CLI (http://commons.apache.org/cli/)
Je suis perdu, j'ai mal à la tête et j'ai envie de passer mon ordinateur (ou C. Garion) par la fenêtre
N'hésitez pas à contacter votre PC(wo)man (qui peut être occupé(e) et ne pas répondre immédiatement) ou C. Garion pour plus d'explications. Il faut dans ce cas envoyer un mail clair avec des explications sur ce qui ne fonctionnent pas (dans quel cas les erreurs se produisent-elles par exemple).