Date de première publication : 2013/01/08
Cette page est la première d'une série d'exercices complémentaires au cours de Java SE. Les excercices sont là pour vous aider et ne seront pas vus, sauf question de votre part en cours/TP.
Ces exercices sont réalisables dès le troisième cours (voire le deuxième).
Quelques classes...
Classe Point
classe simple, constructeurs et instanciation, attributs d'instance et attributs de classe
- Créer un classe
Point
avec deux attributs (entiers ou réels, je vous laisse choisir)x
ety
. - Doter la classe d'une méthode
toString()
qui renvoie une chaîne de caractères et qui donne le nom de la classe ainsi que les valeurs des attributs. - Instancier un objet et appeler la méthode
toString()
, que se passe-til ? - Ajouter des méthodes
get
etset
pour chaque attribut. Vérifier leur fonctionnement. - Doter la classe d'un constructeur qui permet d'initialiser les attributs, instancier un objet avec ce constructeur.
- Essayer d'instancier un objet avec un constructeur sans argument, que se passe-til ?
- Enfin, ajouter le constructeur sans argument avec le moins de duplication de code possible.
- Ajouter un attribut de classe qui permet de compter le nombre d'instances de
Point
, ajouter ce qu'il faut pour le comptage et l'éventuelle consultation de ce nombre, validez votre code.
Classe Arc
composition, exception
- Créer une classe
Arc
qui possède deux attributs de typePoint
que l'on appeleraorigine
etdestination
. - Doter la classe d'une méthode <
toString()
qui renvoie le nom de la classe et l'origine/destination - Doter la classe d'un constructeur sans argument et avec argument avec le minimum de duplication de code
- Ajouter les méthodes
get
etset
pour les attributs déjà définis.
Manipulation de conteneurs et utilisation de la documentation
On va maintenant s'intéresser à une classe Polygone
qui sera constituée d'un ensemble de Point
Tableau
Je vous laisse choisir si le tableau est de taille fixe ou si vous voulez prendre en compte le redimensionnement.
Il n'existe pas d'opérateur/fonction pour demander une zone mémoire plus grande que celle que l'on a déjà demandée (comme le realloc()
du C)
- Doter la classe d'un atribut points qui sera un tableau de
Point
- Proposer une méthode
ajouter()
qui permettra d'ajouter une point à la liste de points - Proposer une méthode
enlever()
qui enlèvera le dernier point du tableau
Si vous l'avez vu en cours, vous pouvez ajouter une exception lorsque l'on essaie d'enlever un point et que le tableau est vide, ou si le tableau est de taille fixe et que la taille maximale est atteinte. Pour information, une allocation mémoire impossible lève une exception.
Conteneur dédié
Le java a été conçu à l'origine avec un équivalent de la bibliothèque standard du C++. C'est ce qui est appelé, entre autres, les collections en Java (c'est le thème que vous pouvez choisir dans les tutoriaux). Nous allons maintenant voir quelques classes qui peuvent faire l'affaire pour gérer l'ensemble de points sans utiliser un tableau. Quelques exemples sont également donnés dans la deuxième partie du support de cours.
Depuis la version 1.5 de Java, tous les conteneurs sont en fait génériques (templates) : l'utilisation est très similaire à celle de C++ donc vous ne devriez pas être perturbés même si nous n'avons pas fait de cours de généricité spécifique à Java.
- Vector : c'est un incontournable même si certains lui préfèrent l'
- ArrayList : tous deux repésentent un tableau dynamique.
- LinkedList : une implémentation de liste chaînée
Vous pouvez remarquer que toutes ces classes ont au moins un anêtre en commun :-)
Vector<Point> points = new Vector<Point>();