Cahier des Charges – Robot Simulation
System
1. Objectif du Projet
Créer une application Python orientée objet qui simule différents types de robots dans un
environnement virtuel. Chaque robot doit avoir des comportements généraux (comme se
déplacer), mais aussi des comportements spécifiques (nettoyage, livraison, sécurité). Ce
projet doit démontrer clairement les trois principes majeurs de la POO : Encapsulation,
Héritage, Polymorphisme.
2. Architecture générale
L'application doit suivre une structure modulaire et propre :
robot_sim/
├── main.py ← Point d'entrée du programme (menu CLI)
├── robot.py ← Classe de base Robot
├── cleaning_robot.py ← Sous-classe : CleaningRobot
├── delivery_robot.py ← Sous-classe : DeliveryRobot
├── security_robot.py ← Sous-classe : SecurityRobot
├── utils.py ← (Optionnel) Fonctions d’aide (ex: log)
├── README.md
3. Spécifications Techniques
3.1 Classe Robot (classe de base)
Attributs :
- name (str)
- _battery_level (int privé, 0–100)
- _location (tuple privé (x, y))
Méthodes :
- move(x, y) : déplace le robot
- charge() : recharge la batterie
- status() : affiche la position + batterie (peut être redéfinie)
- Getters/setters pour la batterie et la position
Encapsulation via _battery_level et _location
3.2 Sous-classes (héritent de Robot)
✅ CleaningRobot
- Méthode : clean() → consomme 10% batterie
- Redéfinit status() → affiche "mode nettoyage"
✅ DeliveryRobot
- Attribut : cargo (booléen ou str)
- Méthode : deliver() → livre le colis, consomme 15%
- Redéfinit status()
✅ SecurityRobot
- Méthode : patrol() → imprime une zone
- Méthode : scan_area() → simule des capteurs
- Redéfinit status()
3.3 Fichier main.py (Interface utilisateur)
- Liste de robots créés (Cleaning, Delivery, Security)
- Menu texte :
- Afficher le statut de chaque robot
- Déplacer un robot
- Utiliser son action spéciale (clean, deliver, etc.)
- Recharger le robot
- Quitter
Polymorphisme : faire robot.status() sur tous les types dans une boucle
4. Contraintes
- Utiliser POO (pas de programmation procédurale)
- Chaque classe dans un fichier séparé
- Fichiers bien nommés, propres, indentés
- Git : commits réguliers, version finale poussée sur GitHub
- Bonus : ajouter des logs ou sauvegarde dans un fichier JSON
5. Évaluation (Auto ou par autrui)
| Critère | Attendu |
|--------------------------|----------------------------------|
| Encapsulation | Attributs privés, méthodes d’accès |
| Héritage | Classe Robot + sous-classes |
| Polymorphisme | status() redéfini + utilisé en boucle |
| Structure modulaire | Un fichier par classe |
| Fonctionnalité CLI | Menu interactif dans main.py |
| Code clair et commenté | Oui |
| Git/GitHub | Repo avec commits significatifs |
6. Exemple de Résultat attendu
[1] CleaningBot | Battery: 80% | Location: (3, 4)
[2] DeliveryBot | Delivered cargo | Battery: 60% | Location: (0, 0)
[3] SecurityBot | Patroling sector 7 | Battery: 75%