Premiers pas
On rappelle qu'il est préférable en Java que chaque classe soit définie dans un
fichier qui lui est propre. Le nom du fichier doit être le nom de la classe qu'il
contient, auquel on ajoute le suffixe .java. Les noms de classes doivent être
constitués de mots acollés avec la première lettre en majuscule.
Exercice n° 2
Exercice n° 3 (Tableaux)
Exercice n° 4
Écrire une programme qui prend une liste d'entiers sur la ligne de commande, les
recopie dans un tableau d'entiers, trie le tableau puis finalement affiche le contenu
du tableau.
Exercice n° 7
Exercice n° 8
Classes et objets
On considère des rectangles dans le plan. Dans un premier temps, on suppose pour
simplifier que les côtés des rectangles sont parallèles aux axes. Un rectangle est
donc complètement déterminé par le point en bas et à gauche et par ses dimensions
horizontale et verticale.
Exercice n° 1 (Rectangle)
Définir une classe Rectangle permettant de manipuler de tels objets. Définir trois
constructeurs prenant respectivement en paramètre 2 points, 1 points et 2 longueurs
ou 4 longueurs.
Exercice n° 2
Écrire une méthode surface qui calcule la surface du rectangle. Écrire une
méthode translate qui déplace un rectangle en déplaçant le point en bas et à
gauche. Que se passe-t-il si plusieurs rectangles partagent le même point.
Exercice n° 3
Écrire une méthode contains qui teste si un point donné (en paramètre) est à
l'intérieur du rectangle. Écrire une autre méthode contains qui teste si un rectangle
donné est à l'intérieur du rectangle.
Exercice n° 4
Exercice n° 5
Exercice n° 6
Écrire une méthode hull qui calcule le rectangle englobant d'un ensemble de
rectangles. Cette méthode prend en paramètre un tableau de rectangles et retourne
le plus petit rectangle qui contient tous les rectangles du tableau.
On considère qu'un dessin est constitué d'un ensemble de rectangles.
Exercice n° 7 (Dessins)
Définir une classe Dessin. Chaque objet de cette classe contient un tableau de
rectangles dont la taille est fixée à la construction de l'objet. Au départ, un dessin ne
contient aucun rectangle. Écrire une méthode add qui permet d'ajouter un rectangle
à un dessin.
Exercice n° 8
Écrire des méthodes surface et translate pour la classe Dessin. La surface d'un
dessin est la somme des surfaces de ses rectangles même si ceux-ci se superposent.
Translater un dessin consiste à translater chacun de ses rectangle.
Exercice n° 9
Ajouter à la classe Dessin une méthode hull qui calcule le rectangle englobant des
rectangles du dessin. Afin de pouvoir calculer de manière incrémentale ce rectangle
englobant, ajouter un attribut hullRect à la classe Dessin et modifier les méthodes
pour qu'elles prennent en compte cet attribut.
Exercice n° 1
Exercice n° 2
Définir une méthode rotate dans l'esprit de la méthode translate.
Exercice n° 3
Exercice n° 4
Pour chacun des appels de méthode ci-dessous, dire s'il va être compilé
correctement et auquel cas, quelle méthode est appelée effectivement à l'exécution
?
Point p = new Point(1,2);
Rectangle r = new Rectangle(p, 2, 3);
Rectangle t = new SlantedRectangle(p, 2, 3);
SlantedRectangle s = new SlantedRectangle(p, 2, 3);
System.out.println(r.surface());
r.rotate(2);
System.out.println(r.contains(p));
System.out.println(t.surface());
t.rotate(2);
System.out.println(t.contains(p));
System.out.println(s.surface());
s.rotate(2);
System.out.println(s.contains(p));
Exercice n° 5
Est-ce que la classe Dessin définie précédemment peut contenir des rectangle
inclinés ? Est-ce que les méthodes surface, contains et hull de la
classe Dessin fonctionnent encore correctement ?
Exercice n° 6
Définir une méthode String toString() dans la classe Rectangle ? Est-ce en fait
une définition ou une redéfinition ? Est-il nécessaire de la redéfinir dans la
classe SlantedRectangle ?
Exercice n° 7
Exercice n° 8
a.f(a);
a.f(ab);
a.f(b);
ab.f(a);
ab.f(ab);
ab.f(b);
b.f(a);
b.f(ab);
b.f(b);
Exercice n° 9
Exercice n° 10
Exercice n° 11
Exercice n° 12
Exercice n° 13
System.out.println(c.ch);
System.out.println(c.getCh());
System.out.println(cd.ch);
System.out.println(cd.getCh());
System.out.println(d.ch);
System.out.println(d.getCh());
Programmation orientée objet
Licence 2 d'informatique --- Feuille n° 4
Exercice n° 1
Définir une classe Disque avec des constructeurs appropriés ainsi que des
méthodes translate, surface et contains.
Aux séances précédentes avait été définie une classe Dessin qui permettait de
regrouper des rectangles.
Exercice n° 2
Quelle est la bonne méthode pour avoir des dessins capables de regrouper à la fois
des rectangles et des disques. On pourra utiliser une interface Figure.
Exercice n° 3
2 Expressions arithmétiques
On considère maintenant des expressions arithmétiques formées à partir de
constantes réelles (nombres flottants) et utilisant les quatre opérations arithmétiques
usuelles (addition, soustraction, multiplication et division). Un telle expression est
par exemple 3 + (4.7 + 2.3) * 5 .
Ces expressions arithmétiques sont représentés par des arbres binaires. Les nœuds
internes de l'arbre contiennent les opérateurs alors que Les feuilles de l'arbre
contiennent les constantes. Les fils gauche et droit d'un nœud interne représentent
les deux sous-expressions gauche et droite. L'expression 3 + (4.7 + 2.3) * 5 par
l'arbre de la figure ci-dessous.
FIG 1. L'arbre de l'expression 3 + (4.7 + 2.3) * 5
Exercice n° 4
Définir une interface ArithExpr qui déclare les fonctionnalités d'une expression
arithmétique. La seule fonctionnalité requise est de pouvoir être évaluée. Déclarer
en conséquence une méthode eval du bon type.
Pour représenter l'expression, on va créer des objets pour chacun des nœuds. Ces
objets vont bien sûr être des instances de classes différentes suivant qu'il s'agisse de
nœuds internes ou de feuilles.
Exercice n° 5
Définir une classe Constant pour représenter les constantes des expressions.
Exercice n° 6
Exercice n° 7
Exercice n° 8
Que faut-il ajouter pour que les expressions arithmétiques puissent contenir des
variables comme dans l'expression 3 * x + 7 ? Comment définir la
méthode eval pour une variable ?
Parseurs
Exercice n° 9
Exercice n° 10
Exercice n° 11 (difficile)
Exceptions
Exercice n° 1
Écrire une fonction qui recherche un objet dans un tableau. Si l'objet est trouvé, la
fonction retourne la première position où se trouve l'objet. Sinon la fonction lève
une exception NoSuchElementException.
Exercice n° 2
Écrire une fonction qui recherche un objet dans une liste. Si l'objet est trouvé, la
fonction retourne la première cellule où se trouve l'objet. Sinon la fonction lève une
exception NoSuchElementException. On pourra utiliser une exception lorsque l'objet
est trouvé.
Exercice n° 3
Écrire une fonction qui prend un tableau de chaînes en paramètre et qui retourne la
valeur entière de la première chaîne qui peut-être lue comme un entier par la
méthode parseInt. Si aucune chaîne ne peut être lue comme un entier, la fonction
lève une exception NumberFormatException.
Exercice n° 4
Flots
Exercice n° 1
Écrire un programme Java qui effectue la copie d'un fichier. Ce programme prend
sur la ligne de commande le nom du fichier source et le nom du fichier destination.
Exercice n° 2
Exercice n° 3
Écrire un programme Java qui écrit dans un fichier un tableau et une liste puis relit
ces objets.
Exercice n° 4
Écrire un programme qui supprime dans un fichier les blancs en fin de ligne.
Exercice n° 5
Collections
Exercice n° 1
Écrire un programme Java qui indexe les lignes d'un fichier. Pour chaque ligne
différente, le programme mémorise le nombre d'occurrences de cette ligne dans le
fichier.
Exercice n° 2
Reprendre l'exercice précédent en indexant les mots au lieu d'indexer les lignes.
Exercice n° 3
Écrire un programme Java qui trie les lignes d'un fichier par ordre lexicographique.
Exercice n° 4
Exercice n° 5
Implémenter l'interface List des collections Java sur les listes programmées à une
séance précédente. On implémentera en particulier l'itérateur à l'aide d'une classe
interne.