Commit 39db0a9d authored by Matthieu Moy's avatar Matthieu Moy

Instructions pour utiliser JavaFX

parent 4b5ab0e0
Pipeline #5530 failed with stage
in 9 seconds
......@@ -9,26 +9,15 @@
* [lab1-java/README.md](lab1-java/README.md)
## Course 2: Build tools, dependency management, forge
* [02-cm-maven-forge-ic-slides.pdf](02-cm-maven-forge-ic-slides.pdf)
(printable version: [02-cm-maven-forge-ic-handout.pdf](02-cm-maven-forge-ic-handout.pdf))
## Course 2: Build tools, dependency management
## Lab 2:
* [lab2-tools/README.md](lab2-tools/README.md)
## Course 3: Coding style and use-cases
* [03-coding-style-slides.pdf](03-coding-style-slides.pdf)
(printable version: [03-coding-style-handout.pdf](03-coding-style-handout.pdf))
* [04-UML-CU.pdf](04-UML-CU.pdf)
## Tutorial 1: Use-cases and coding style
## Course 3: use-cases
* [tuto1-uc-style/TD_UseCaseFffound_et_style.pdf](tuto1-uc-style/TD_UseCaseFffound_et_style.pdf)
(corrigé : [tuto1-uc-style/TD_UseCaseFffound_et_style_correction.pdf](tuto1-uc-style/TD_UseCaseFffound_et_style_correction.pdf))
## Tutorial 1: use-cases
## Course 4: Agile
......
......@@ -26,11 +26,17 @@ Pour développer en Java durant le TP, vous pouvez choisir d'utiliser :
effectuer la compilation et l'exécution en ligne de commande
(*javac*, *java*)
Vous pouvez travailler au choix sous Linux ou sous Windows.
En cas de problème avec Linux, il peut être nécessaire d'installer
JavaFX explicitement (`sudo apt install openjfx` sous Ubuntu 18.04).
Si votre distribution ne le fournit pas, utilisez le [le fichier
jfxrt.jar](../lib/jfxrt.jar) (disponible dans l'archive Git du cours),
et rajoutez-le dans votre `CLASSPATH`.
Si votre distribution ne le fournit pas, ou bien sur les machines de
Lyon 1 où il n'est pas completement installé, utilisez la bibliothèque
fournie dans le dépôt Git du cours. Nous vous fournissons un script à
sourcer dans votre shell :
source lib/setup-local-jfxrt.sh
Si vous avez installé JavaFX via votre distribution et que Java ne
trouve pas les classes JavaFX, ajoutez explicitement les fichiers JAR
concernés à votre classpath, avec quelque chose comme :
......
......@@ -18,6 +18,11 @@ Ce TP est à réaliser de préférence sous Linux (accès à `mvn` et `git`
en ligne de commande). L’utilisation d’IDE est n’est pas recommandée
pour ce TP.
Sur les machines de Lyon 1, Maven n'est pas installé sous Windows donc
vous ne pourrez travailler que sous Linux. Une fois tout cela mis en
place, vous pourez travailler sous Windows si vous le souhaitez avec
Eclipse et le plugin m2e.
## Démarrage
### Installations
......@@ -246,6 +251,10 @@ Invoquer
mvn compile
```
Si vous avez des erreurs en rapport avec JavaFX (c'est le cas sur les
machines de Lyon 1), lisez la section « Installation manuelle de
JavaFX » en bas de cette page.
à la racine du projet et constater que la construction du projet est
bien déclenchée.
......@@ -592,3 +601,47 @@ fichier `pom.xml`, mais pas les fichiers générés par les IDE (comme
`.project` et `.classpath` pour Eclipse), car ceux-si peuvent être
différents d'un utilisateur à l'autre (par exemple parce qu'ils
contiennent des chemins absolus comme `/home/toto/.m2/...`).
## Installation manuelle de JavaFX
En principe, JavaFX est installé avec Java, et n'est donc pas une
dépendence explicite dans le `pom.xml`. En pratique, malheureusement,
les distributions Linux fournissent souvent Java sans JavaFX. Lorsque
c'est possible, le mieux est d'installer JavaFX en utilisant le
gestionnaire de paquets de sa distribution. Sur les machines de la fac
où vous n'êtes pas root, voici un contournement (malheureusement peu
satisfaisant) :
### Ajout de la dépendance dans pom.xml
Ajoutez JavaFX comme une dépendance dans pom.xml. Vu que JavaFX n'est
pas packagé pour Maven, il y a une syntaxe particulière. Ajoutez dans
la section `<dependencies>` le code suivant :
```xml
<dependency>
<groupId>javafx</groupId>
<artifactId>jfxrt</artifactId>
<version>2.0</version>
<type>jar</type>
<scope>system</scope>
<systemPath>${project.basedir}/../../lib/jfxrt.jar</systemPath>
</dependency>
```
Un fichier `pom.xml` complet incluant cette section est disponible
dans [../lib/pom-jfxrt-hack.xml](../lib/pom-jfxrt-hack.xml).
Vous pouvez maintenant compiler votre projet normalement :
mvn compile
Pour l'exécution, la dépendance que nous avons ajoutée n'est pas
incluse automatiquement dans le `CLASSPATH`, mais on peut demander à
avoir le même `CLASSPATH` à l'exécution qu'à la compilation :
mvn exec:java -Dexec.classpathScope=compile
Notez que cette section présente un hack peu élégant, ce qui est assez
ironique en cours de GL. La solution propre est bien sûr d'installer
proprement JavaFX sur la machine.
......@@ -48,12 +48,45 @@ En d'autres termes, nous vous imposons un modèle MVC.
L’utilisation d’entrées claviers ou souris entraînera des changements
dans le modèle métier en passant par un contrôleur.
Essayez d'appliquer un maximum de patterns vus en cours, et documentez
dans votre rapport lesquels vous avez utilisé.
Appliquez un maximum de patterns et principes vus en cours, et
documentez dans votre rapport lesquels vous avez utilisé.
Ne vous contentez pas de vous dire (ni d'écrire dans votre rapport)
« nous faisons du MVC » ! Il y a bien plus de questions à vous poser,
comme par exemple :
* Comment faire communiquer Modèle, Vue et Contrôleur ? Des appels de
méthodes directement sur les classes ? Un patron
« [Observateur](https://en.wikipedia.org/wiki/Observer_pattern) » ?
Un appel de méthode en passant par une classe abstraite ou une
interface pour faire une inversion de dépendance (le « D » de
[SOLID](https://en.wikipedia.org/wiki/SOLID)) ?
* Comment découper Modèle, Vue et Contrôleur ? Par exemple, mettre
tout le modèle dans une classe violerait le
[SRP](https://en.wikipedia.org/wiki/Single_responsibility_principle),
mais comment le découper correctement ? Comment faire circuler
l'information d'une classe à l'autre
([delegation](https://en.wikipedia.org/wiki/Delegation_pattern) ?
Observateur ? ...) ? L'API exposée au reste du programme doit-elle
refléter la structure de nos classes, ou bien est-ce pertinent
d'utiliser une
[facade](https://en.wikipedia.org/wiki/Facade_pattern) pour en
exposer une plus simple via des
[indirections](https://en.wikipedia.org/wiki/GRASP_(object-oriented_design)#Indirection) ?
* ...
Reprenez les transparents du cours et parcourez la liste des patterns
GRASP, des patterns de création, de structure, des principes SOLID, et
posez-vous la question de l'applicabilité sur votre projet.
Si vous êtes assez à l'aise avec les design patterns, à vous de jouer,
vous êtes libres ! Si vous voulez plus de conseils, voici quelques
éléments pour démarrer : [Mettre en place le pattern MVC](mvc.md)
éléments pour démarrer : [Mettre en place le pattern MVC](mvc.md). Ce
document donne quelques éléments de réponses aux questions ci-dessus,
mais ce ne sont ni les seules questions ni les seules réponses
pertinentes.
### Partie 2 : Vérification de la flexibilité du MVC
......@@ -100,6 +133,11 @@ de voir dans quel ordre vous voulez avancer précisément.
### Partie 3 : Extension
Dans toute cette partie, l'ajout de fonctionnalité est un prétexte
pour se servir de design-patterns. Ajoutez chaque fonctionnalité en
appliquant les principes et patterns vus en cours, et justifiez-le
dans le rapport.
#### Boutons pour contrôler le jeu
On commencera par ajouter des éléments de contrôle au jeu pour le faire
......@@ -156,9 +194,12 @@ Assurez-vous que votre programme respecte toujours le style imposé
#### Ajouter des règles
A vous de jouer pour la suite : vous pouvez ajouter des obstacles, des
pièces bonus à ramasser pour prolonger/augmenter le boost, des
possibilités de tacler les poneys suffisament proches, ...
A vous de jouer pour la suite : vous pouvez ajouter d'autres types de
coureurs que les Poneys (pourquoi pas des crocodiles qui avanceraient
plus doucement mais croqueraient les poneys qui s'aventureraient trop
près d'eux sans courir assez vite ?), des pièces bonus à ramasser pour
prolonger/augmenter le boost, des possibilités de tacler les poneys
suffisament proches, ...
Rendu du TP / projet
--------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment