◆ Devoir de Programmation Java | ESSIE OKO JOSUÉ FRANCKY | 2026
✦ QUESTIONS DU DEVOIR ✦
Question 1 — Langages Compilé et Interprété
Expliquez la différence entre un langage compilé et un langage interprété. Donnez des exemples
pour chaque type. Précisez également dans quelle catégorie se situe Java et justifiez votre réponse.
Question 2 — Mots Clés Java
Donnez la signification des mots clés Java figurant dans le tableau de la page 11 du cours. Pour
chaque mot clé, précisez aussi son utilisation typique accompagnée d'un exemple court.
Question 3 — Conversion des Types (Casting)
Expliquez comment fonctionne la conversion de types (casting) en Java. Distinguez la conversion
implicite (widening) et la conversion explicite (narrowing). Illustrez avec des exemples de code et
signalez les risques potentiels.
Question 4 — Programme Java : Menu Restaurant
Écrivez un programme Java complet qui :
◆ Affiche le menu d'un restaurant avec les prix
◆ Permet au client de choisir un ou plusieurs plats / boissons
◆ Calcule le total de la commande
◆ Applique une réduction de 2% sur le montant total
◆ Affiche un ticket de caisse avec le détail et le total à payer
✦ RÉPONSES ✦
◆ Question 1 — Langage Compilé vs Interprété
1.1 Langage Compilé
Un langage compilé est intégralement traduit en code machine natif avant son exécution, via un
programme appelé compilateur. Le fichier exécutable produit fonctionne directement sur la machine
cible sans nécessiter le code source original.
Caractéristiques essentielles :
◆ Traduction complète avant toute exécution
◆ Génération d'un fichier exécutable autonome
◆ Performances élevées grâce à l'optimisation à la compilation
◆ Dépendance à la plateforme (OS / architecture matérielle)
◆ Détection des erreurs de syntaxe avant l'exécution
Exemples : C, C++, Rust, Go, Pascal
1.2 Langage Interprété
Un langage interprété est traduit et exécuté instruction par instruction à la volée par un programme
appelé interpréteur. Il n'existe aucun fichier exécutable précompilé : le code source est lu et exécuté
en temps réel.
Caractéristiques essentielles :
◆ Traduction et exécution simultanées (ligne par ligne)
◆ Aucune compilation préalable requise
◆ Exécution généralement plus lente qu'un compilé
◆ Grande portabilité si l'interpréteur est disponible
◆ Erreurs détectées uniquement à l'exécution (runtime)
Exemples : Python, JavaScript, PHP, Ruby, Bash
Page 1 ◆ Devoir sur Table — Programmation Java
◆ Devoir de Programmation Java | ESSIE OKO JOSUÉ FRANCKY | 2026
1.3 Le cas particulier de Java
Java adopte une approche hybride : le code source (.java) est compilé en bytecode (.class) par javac,
puis ce bytecode est interprété — ou compilé Just-In-Time (JIT) — par la JVM (Java Virtual
Machine). Cela confère à Java à la fois portabilité (« Write Once, Run Anywhere ») et des
performances satisfaisantes.
1.4 Tableau Comparatif
Critère Compilé Interprété
Vitesse d'exécution Rapide (déjà traduit en binaire natif) Plus lent (traduit à la volée)
Portabilité Dépend de l'OS et de l'architecture Portable si interpréteur présent
Détection des erreurs À la compilation (avant exécution) À l'exécution (runtime)
Fichier de sortie Exécutable natif (.exe, .out…) Code source direct (.py, .js…)
Exemples C, C++, Rust, Go Python, JavaScript, PHP
Cas de Java Compilé en bytecode (.class) Interprété / JIT par la JVM
◆ Question 2 — Mots Clés Java
Les mots clés Java sont des identifiants réservés par le langage. Ils ne peuvent jamais être utilisés
comme noms de variables, méthodes ou classes. Voici leur signification et leur usage :
Mot Clé Signification & Usage
int Type primitif entier sur 32 bits. Plage : -2 147 483 648 à 2 147 483 647. Ex :
int age = 25;
double Nombre décimal double précision (64 bits). Ex : double pi = 3.14159;
float Nombre décimal simple précision (32 bits). Suffixe f requis. Ex : float t =
36.6f;
char Caractère Unicode sur 16 bits. Ex : char lettre = 'A';
boolean Valeur logique true ou false uniquement. Ex : boolean actif = true;
String Classe représentant une chaîne de caractères immuable. Ex : String nom =
"Java";
void Indique qu'une méthode ne retourne aucune valeur. Ex : void afficher() { }
static Appartient à la classe, partagé par toutes les instances. Ex : static int
compteur;
public Modificateur d'accès : visible depuis n'importe quelle classe ou package.
private Modificateur d'accès : visible uniquement dans la classe déclarante.
protected Modificateur d'accès : visible dans la classe, ses sous-classes et le même
package.
class Déclare une classe, modèle de création d'objets. Ex : class Voiture { }
new Crée une nouvelle instance d'une classe. Ex : Scanner sc = new
Scanner([Link]);
if / else Structure conditionnelle : exécute un bloc si une condition est vraie, sinon
l'autre.
for Boucle avec initialisation, condition et incrément. Ex : for(int i=0; i<10; i+
+)
while Boucle répétant tant qu'une condition est vraie. Ex : while(continuer) { }
return Termine une méthode et retourne une valeur. Ex : return total;
Page 2 ◆ Devoir sur Table — Programmation Java
◆ Devoir de Programmation Java | ESSIE OKO JOSUÉ FRANCKY | 2026
Mot Clé Signification & Usage
[Link] Méthode d'affichage dans la console avec saut de ligne automatique.
n
Scanner Classe pour lire des saisies au clavier ou depuis un fichier.
this Référence à l'instance courante de la classe. Lève les ambiguïtés.
extends Permet à une classe d'hériter d'une autre (héritage simple).
implements Indique qu'une classe implémente une ou plusieurs interfaces.
interface Déclare un contrat : ensemble de méthodes abstraites à implémenter.
abstract Classe ou méthode incomplète, à compléter dans une sous-classe.
final Empêche modification : constante, méthode non-surchargeable, classe non-
héritable.
null Absence de référence d'objet. Ex : String s = null;
try / catch Gestion des exceptions : tente un bloc et capture les erreurs éventuelles.
throw / throws Déclenche une exception manuellement ou déclare qu'une méthode peut
en lancer.
◆ Question 3 — Conversion des Types (Casting)
En Java, le casting permet de transformer une valeur d'un type primitif vers un autre. Il existe deux
formes : la conversion implicite (widening) et la conversion explicite (narrowing).
3.1 Conversion Implicite — Widening
Java convertit automatiquement un type de faible capacité vers un type de plus grande capacité,
sans perte de données. Aucune syntaxe spéciale n'est requise.
int a = 100;
long b = a; // int -> long (automatique)
double c = a; // int -> double (automatique)
// Résultat : b = 100L, c = 100.0
float f = 3.14f;
double d = f; // float -> double (automatique)
Ordre de conversion implicite :
Type Ordre de conversion Remarque
Entiers byte → short → int → long Aucune perte de données
Décimaux float → double Précision augmentée
Mixte int → float → double Légère imprécision possible
3.2 Conversion Explicite — Narrowing
Lors de la conversion d'un type large vers un type plus étroit, Java exige une syntaxe explicite
(cast). Cette opération peut entraîner une perte de données par troncature ou dépassement de
capacité.
double x = 9.99;
int y = (int) x; // Cast explicite : troncature -> y = 9
long grand = 9_000_000_000L;
int petit = (int) grand; // Dépassement possible !
double prix = 1500.75;
int prixEntier = (int) prix; // prixEntier = 1500
Risques à connaître :
◆ Troncature de la partie décimale (double → int)
◆ Dépassement de capacité si la valeur excède les limites du type cible
◆ Perte de précision lors de la conversion long → float
Page 3 ◆ Devoir sur Table — Programmation Java
◆ Devoir de Programmation Java | ESSIE OKO JOSUÉ FRANCKY | 2026
3.3 Conversion String ↔ Types Primitifs
Java fournit des méthodes utilitaires pour convertir entre String et types primitifs, indispensables
lors de la lecture de saisies utilisateur :
String s = "42";
int n = [Link](s); // String -> int
double d = [Link](s); // String -> double
int val = 100;
String str = [Link](val); // int -> String
String str2 = [Link](val); // alternative
◆ Question 4 — Programme Java : Menu Restaurant
Application console complète : affichage du menu, saisie des choix, calcul du total, réduction de 2%
et génération du ticket de caisse.
4.1 Code Source Complet
import [Link];
public class Restaurant {
public static void main(String[] args) {
Scanner sc = new Scanner([Link]);
double total = 0;
boolean continuer = true;
double[] prix = {0, 5000, 3500, 4000, 2500, 1000, 500};
String[] noms = {"", "Poulet braisé", "Riz sauce arachide",
"Spaghetti bolognaise", "Salade composée",
"Jus de fruit", "Eau minérale"};
// ─── Affichage du menu ───────────────────────────────
[Link]("===========================================");
[Link](" BIENVENUE AU RESTAURANT JAVA ");
[Link]("===========================================");
[Link](" 1. Poulet braisé 5 000 FCFA ");
[Link](" 2. Riz sauce arachide 3 500 FCFA ");
[Link](" 3. Spaghetti bolognaise 4 000 FCFA ");
[Link](" 4. Salade composée 2 500 FCFA ");
[Link](" 5. Jus de fruit 1 000 FCFA ");
[Link](" 6. Eau minérale 500 FCFA ");
[Link](" 0. Terminer la commande ");
[Link]("===========================================");
// ─── Boucle de saisie ────────────────────────────────
while (continuer) {
[Link]("Votre choix (0 pour terminer) : ");
int choix = [Link]();
if (choix == 0) {
continuer = false;
} else if (choix >= 1 && choix <= 6) {
total += prix[choix];
[Link](" >> %s ajouté. Sous-total : %.2f FCFA%n",
noms[choix], total);
} else {
[Link](" Choix invalide, veuillez réessayer.");
}
}
// ─── Calcul de la réduction ──────────────────────────
double reduction = total * 0.02;
double totalAPayer = total - reduction;
// ─── Ticket de caisse ────────────────────────────────
[Link]();
[Link]("===========================================");
[Link](" TICKET DE CAISSE ");
[Link]("===========================================");
[Link](" Total brut : %10.2f FCFA%n", total);
[Link](" Réduction (2%%) : %10.2f FCFA%n", reduction);
[Link](" -----------------------------------------");
[Link](" TOTAL À PAYER : %10.2f FCFA%n", totalAPayer);
[Link]("===========================================");
[Link](" Merci et à bientôt ! Bon appétit ! ");
[Link]("===========================================");
[Link]();
}
}
Page 4 ◆ Devoir sur Table — Programmation Java
◆ Devoir de Programmation Java | ESSIE OKO JOSUÉ FRANCKY | 2026
4.2 Exemple de Sortie Console
===========================================
BIENVENUE AU RESTAURANT JAVA
===========================================
1. Poulet braisé 5 000 FCFA
...
===========================================
Votre choix (0 pour terminer) : 1
>> Poulet braisé ajouté. Sous-total : 5000.00 FCFA
Votre choix (0 pour terminer) : 5
>> Jus de fruit ajouté. Sous-total : 6000.00 FCFA
Votre choix (0 pour terminer) : 0
===========================================
TICKET DE CAISSE
===========================================
Total brut : 6000.00 FCFA
Réduction (2%) : 120.00 FCFA
-----------------------------------------
TOTAL À PAYER : 5880.00 FCFA
===========================================
Merci et à bientôt ! Bon appétit !
===========================================
4.3 Explication du Code
◆ Scanner : lit les saisies clavier via [Link]
◆ Tableaux prix[] / noms[] : associent chaque index de menu à son prix et son libellé
◆ while(continuer) : répète la saisie jusqu'à l'entrée de 0
◆ total += prix[choix] : accumule les montants choix par choix
◆ Réduction 2% : calculée via total * 0.02, soustraite pour obtenir le total à payer
◆ [Link]() : affichage formaté avec 2 décimales pour les montants
◆ [Link]() : libère les ressources en fin de programme
4.4 Améliorations Possibles
◆ Gestion des quantités : commander plusieurs exemplaires d'un même plat
◆ Gestion des exceptions : try/catch pour les saisies non numériques (InputMismatchException)
◆ Persistance : sauvegarder les commandes dans un fichier .txt ou une base de données
◆ Horodatage : afficher la date et l'heure via LocalDateTime
◆ Interface graphique : utiliser JavaFX ou Swing pour une UI visuelle
◆ TVA et fidélité : intégrer des taux de TVA et des systèmes de points fidélité
Page 5 ◆ Devoir sur Table — Programmation Java