📚 10 TD + 10 TP - Programmation Événementielle et IHM II
🎓 TRAVAUX DIRIGÉS (TD)
TD 1 : Concepts Fondamentaux de la POO
Durée : 2h | Niveau : Débutant
-
Expliquez les quatre piliers de la programmation orientée objet (POO) : encapsulation, héritage, polymorphisme et abstraction.
-
Donnez un exemple concret pour chacun des piliers avec du code C#.
-
Qu’est-ce qu’une classe ? Qu’est-ce qu’un objet ? Quelle est la différence ?
-
Expliquez le concept d’encapsulation et pourquoi c’est important pour la sécurité des données.
-
Comparez les modificateurs d’accès en C# (public, private, protected, internal) et expliquez leur utilité.
TD 2 : Héritage et Polymorphisme
Durée : 2h | Niveau : Intermédiaire
-
Expliquez la différence entre héritage simple et héritage multiple. Pourquoi C# n’autorise-t-il pas l’héritage multiple de classes ?
-
Qu’est-ce qu’une interface ? Donnez un exemple d’interface et expliquez comment l’implémenter dans une classe.
-
Expliquez le polymorphisme. Donnez un exemple avec des méthodes virtuelles (virtual) et des méthodes surchargées (override).
-
Qu’est-ce qu’une classe abstraite ? Quand l’utiliser plutôt qu’une interface ?
-
Écrivez une hiérarchie de classes pour un système de gestion d’employés (Employe, Manager, Directeur) avec héritage et polymorphisme.
TD 3 : Patterns de Conception - Singleton et Factory
Durée : 2h | Niveau : Avancé
-
Qu’est-ce qu’un pattern de conception ? Donnez 3 exemples de patterns et leur utilité.
-
Expliquez le pattern Singleton. Quand l’utiliser ? Donnez un exemple d’implémentation en C#.
-
Expliquez le pattern Factory. Comment l’utiliser pour créer des objets de manière flexible ?
-
Expliquez le pattern Observer. Donnez un exemple oĂą ce pattern serait utile.
-
Comparez les patterns Strategy et Decorator. Quand utiliser l’un ou l’autre ?
TD 4 : Principes SOLID
Durée : 2h | Niveau : Avancé
-
Énumérez et expliquez les 5 principes SOLID.
-
Donnez un exemple de violation du principe Single Responsibility et proposez une correction.
-
Expliquez le principe Open/Closed avec un exemple concret.
-
Qu’est-ce que le principe Liskov Substitution ? Donnez un exemple de violation et sa correction.
-
Expliquez le principe Dependency Inversion. Comment l’appliquer dans une application C# ?
TD 5 : Gestion des Exceptions
Durée : 2h | Niveau : Intermédiaire
-
Expliquez la différence entre une exception et une erreur en C#.
-
Qu’est-ce qu’un bloc try-catch-finally ? Expliquez le rôle de chaque partie.
-
Donnez 5 exemples d’exceptions courantes en C# et expliquez quand elles se produisent.
-
Comment créer une exception personnalisée en C# ?
-
Expliquez le concept de “throwing exceptions” et quand l’utiliser.
TD 6 : Conception d’Interfaces Utilisateur (UI/UX)
Durée : 2h | Niveau : Intermédiaire
-
Qu’est-ce que le wireframing ? Donnez les étapes pour créer un wireframe professionnel.
-
Expliquez les principes de base du design UI/UX (hiérarchie visuelle, feedback utilisateur, accessibilité).
-
Qu’est-ce que la responsivité ? Pourquoi est-elle importante dans le design web et desktop ?
-
Expliquez les normes WCAG pour l’accessibilité. Donnez 3 exemples de bonnes pratiques.
-
Comparez WPF et WinForms. Quand utiliser l’un ou l’autre ?
TD 7 : Architecture et Patterns d’Application
Durée : 2h | Niveau : Avancé
-
Qu’est-ce que l’architecture MVC (Model-View-Controller) ? Expliquez chaque composant.
-
Qu’est-ce que l’architecture MVVM (Model-View-ViewModel) ? Quand l’utiliser ?
-
Expliquez la séparation des responsabilités dans une application. Pourquoi est-ce important ?
-
Qu’est-ce qu’une couche métier (Business Logic Layer) ? Donnez un exemple.
-
Comparez une architecture monolithique et une architecture microservices.
TD 8 : Bases de Données et ADO.NET
Durée : 2h | Niveau : Intermédiaire
-
Expliquez les deux modèles ADO.NET : Connected Model et Disconnected Model.
-
Qu’est-ce qu’une injection SQL ? Comment la prévenir en utilisant les paramètres ADO.NET ?
-
Expliquez le concept de transaction en base de données. Donnez un exemple avec ACID.
-
Qu’est-ce qu’une clé étrangère ? Pourquoi est-ce important pour l’intégrité des données ?
-
Écrivez une requête SQL pour créer une table Produits avec les colonnes : id, nom, prix, quantité, date_ajout.
TD 9 : Déploiement et Distribution
Durée : 2h | Niveau : Avancé
-
Qu’est-ce que ClickOnce ? Quels sont ses avantages et inconvénients ?
-
Expliquez le Semantic Versioning (Major.Minor.Patch). Donnez des exemples.
-
Qu’est-ce qu’un installateur MSI ? Comment le créer avec WiX Toolset ?
-
Expliquez les stratégies de migration : Big Bang, Progressive et Parallèle.
-
Qu’est-ce que le CI/CD (Continuous Integration/Continuous Deployment) ? Pourquoi est-ce important ?
TD 10 : Étude de Cas - Conception d’un Système Complet
Durée : 2h | Niveau : Avancé
-
Vous devez concevoir un système de commerce électronique. Proposez une architecture complète avec :
- Modèles de données (Produits, Catégories, Commandes, Clients)
- Hiérarchie de classes avec héritage
- Interfaces pour les méthodes de paiement
- Gestion des erreurs
-
Identifiez les patterns de conception qui pourraient être utilisés.
-
Proposez une séparation des responsabilités (couches métier, données, présentation).
-
Expliquez comment gérer les promotions qui s’appliquent à certains produits.
-
Décrivez comment vous testeriez cette application.
đź’» TRAVAUX PRATIQUES (TP)
TP 1 : Création de Classes et Objets en C#
Durée : 3h | Niveau : Débutant
Objectif : Créer une hiérarchie de classes pour un système de gestion de véhicules
Tâches :
-
Créez une classe
Vehiculeavec les propriétés :- Marque (string)
- Modèle (string)
- Année (int)
- Couleur (string)
-
Ajoutez des méthodes :
Demarrer(): affiche “Le véhicule démarre”Arreter(): affiche “Le véhicule s’arrête”AfficherInfos(): affiche toutes les informations du véhicule
-
Créez une classe
Voiturequi hérite deVehiculeavec :- Propriété supplémentaire :
NombrePortes(int) - Méthode
OuvrirCoffre(): affiche “Le coffre s’ouvre”
- Propriété supplémentaire :
-
Créez une classe
Motoqui hérite deVehiculeavec :- Propriété supplémentaire :
TypeGuidon(string) - Méthode
FaireWheeling(): affiche “La moto fait un wheelie”
- Propriété supplémentaire :
-
Dans le programme principal :
- Créez une instance de Voiture et une instance de Moto
- Appelez toutes les méthodes
- Affichez les informations
-
Testez votre code et documentez-le.
TP 2 : Encapsulation et Propriétés
Durée : 3h | Niveau : Intermédiaire
Objectif : Implémenter l’encapsulation pour un système de gestion de comptes bancaires
Tâches :
-
Créez une classe
CompteBancaireavec :- Champ privé
solde(decimal) - Propriété
Titulaire(string) avec validation - Propriété
Solde(decimal) en lecture seule
- Champ privé
-
Implémentez les méthodes :
Deposer(decimal montant): ajoute au solde avec validationRetirer(decimal montant): retire du solde avec vérification de solde suffisantAfficherSolde(): affiche le solde actuel
-
Ajoutez une gestion des erreurs :
- Levez une exception si le montant est négatif
- Levez une exception si le solde est insuffisant pour un retrait
-
Créez un programme de test qui :
- Crée un compte bancaire
- Effectue plusieurs dépôts et retraits
- Gère les erreurs avec try-catch
- Affiche le solde final
-
Testez tous les cas d’utilisation (montants valides, invalides, solde insuffisant).
TP 3 : Interfaces et Polymorphisme
Durée : 3h | Niveau : Intermédiaire
Objectif : Créer un système de paiement flexible avec interfaces
Tâches :
-
Créez une interface
IMethodePaiementavec la méthode :Payer(decimal montant) : bool
-
Créez des classes implémentant l’interface :
PaiementCarte: simule un paiement par cartePaiementVirement: simule un virement bancairePaiementPayPal: simule un paiement PayPal
-
Chaque classe doit :
- Valider le montant
- Afficher un message de confirmation
- Retourner true si succès, false sinon
-
Créez une classe
Commandequi :- Accepte une
IMethodePaiement - Traite le paiement via la méthode polymorphe
- Gère les erreurs
- Accepte une
-
Dans le programme principal :
- Créez plusieurs commandes avec différentes méthodes de paiement
- Testez le polymorphisme
-
Testez et documentez votre code.
TP 4 : Patterns de Conception - Singleton
Durée : 3h | Niveau : Avancé
Objectif : Implémenter le pattern Singleton pour un gestionnaire de configuration
Tâches :
-
Créez une classe
ConfigurationApp(Singleton) qui :- Stocke les paramètres de l’application (nom, version, langue)
- Assure qu’une seule instance existe
- Fournit des méthodes pour lire/modifier la configuration
-
Implémentez le Singleton avec :
- Constructeur privé
- Propriété statique
Instance - Lazy initialization
-
Créez des méthodes :
ObtenirValeur(string cle) : stringDefinirValeur(string cle, string valeur)AfficherConfiguration()
-
Dans le programme principal :
- Accédez à l’instance unique depuis plusieurs endroits
- Vérifiez que c’est la même instance
- Modifiez la configuration et vérifiez les changements
-
Testez que le Singleton fonctionne correctement.
TP 5 : Gestion des Exceptions
Durée : 3h | Niveau : Intermédiaire
Objectif : Créer une application robuste avec gestion complète des exceptions
Tâches :
-
Créez une classe
GestionnaireUtilisateursqui :- Charge les utilisateurs depuis un fichier
- Valide les données utilisateur
- Gère les erreurs de fichier
-
Implémentez une exception personnalisée :
UtilisateurInvalideException
-
Créez des méthodes qui lèvent des exceptions :
ChargerUtilisateurs(string cheminFichier): FileNotFoundExceptionAjouterUtilisateur(string nom, string email): UtilisateurInvalideExceptionSupprimerUtilisateur(int id): ArgumentException
-
Dans le programme principal :
- Utilisez try-catch-finally
- Gérez les différents types d’exceptions
- Affichez des messages d’erreur clairs
- Loggez les erreurs dans un fichier
-
Testez tous les scénarios d’erreur.
TP 6 : Architecture MVC - Application de Gestion de Tâches
Durée : 4h | Niveau : Avancé
Objectif : Implémenter une application console suivant le pattern MVC
Tâches :
-
Créez le Model :
- Classe
Tacheavec propriétés : id, titre, description, statut, dateCreation - Classe
ListeTachespour gérer une collection de tâches
- Classe
-
Créez le View :
- Classe
AffichageTachespour afficher les tâches - Méthodes pour afficher la liste, les détails, les messages
- Classe
-
Créez le Controller :
- Classe
ControllerTachespour gérer la logique - Méthodes :
AjouterTache(),SupprimerTache(),ModifierTache(),AfficherTaches()
- Classe
-
Implémentez les fonctionnalités :
- Ajouter une tâche
- Modifier une tâche
- Supprimer une tâche
- Marquer comme complétée
- Afficher toutes les tâches
-
Créez un menu interactif pour l’utilisateur.
-
Testez l’application complète.
TP 7 : Application WPF - Interface Graphique
Durée : 4h | Niveau : Avancé
Objectif : Créer une application WPF pour gérer une liste de contacts
Tâches :
-
Créez le modèle
Contactavec :- Propriétés : id, nom, email, telephone, adresse
- Implémentez INotifyPropertyChanged pour la liaison de données
-
Créez l’interface WPF avec :
- ListBox pour afficher les contacts
- TextBox pour les informations du contact
- Boutons : Ajouter, Modifier, Supprimer, Effacer
-
Implémentez le ViewModel (MVVM) :
ContactViewModelavec ObservableCollection- Commandes pour les actions (RelayCommand)
- Propriétés pour la liaison de données
-
Ajoutez des styles et des templates :
- Style personnalisé pour les boutons
- Template pour afficher les contacts
-
Implémentez les fonctionnalités :
- Ajouter un contact
- Modifier un contact sélectionné
- Supprimer un contact
- Validation des données
-
Testez l’application et vérifiez la liaison de données.
TP 8 : Base de Données avec ADO.NET
Durée : 4h | Niveau : Avancé
Objectif : Créer une application CRUD complète avec SQL Server
Tâches :
-
Créez une base de données
GestionProduitsavec les tables :- Produits (id, nom, prix, quantite, dateAjout)
- Categories (id, nom, description)
- Relation entre les deux tables
-
Créez une classe
ConnexionBD:- Gère la connexion à la base de données
- Utilise ADO.NET avec SqlConnection et SqlCommand
- Implémente le pattern Singleton
-
Créez une classe
RepositoryProduits:- Méthode
AjouterProduit(Produit produit) - Méthode
ObtenirTousProduits() : List<Produit> - Méthode
ModifierProduit(Produit produit) - Méthode
SupprimerProduit(int id) - Méthode
RechercherProduit(string nom) : List<Produit>
- Méthode
-
Utilisez les paramètres ADO.NET pour éviter les injections SQL.
-
Implémentez la gestion des transactions pour les opérations critiques.
-
Créez une application console pour tester les opérations CRUD.
-
Testez tous les cas d’utilisation.
TP 9 : Déploiement avec ClickOnce
Durée : 3h | Niveau : Avancé
Objectif : Déployer une application WPF via ClickOnce
Tâches :
-
Préparez l’application WPF du TP 7 pour le déploiement :
- Vérifiez que le code est optimisé
- Configurez les paramètres de l’application
- Créez un fichier de configuration
-
Configurez ClickOnce :
- Ouvrez les propriétés du projet
- Onglet “Publier”
- Configurez l’emplacement de publication
- Définissez les paramètres de mise à jour
-
Créez un certificat de signature (optionnel pour test).
-
Publiez l’application :
- Générez les fichiers de déploiement
- Créez un raccourci d’installation
-
Testez l’installation :
- Installez l’application sur une autre machine
- Vérifiez que toutes les fonctionnalités fonctionnent
- Testez la mise Ă jour automatique
-
Documentez le processus de déploiement.
TP 10 : Projet Complet - Application de Gestion de Bibliothèque
Durée : 6h | Niveau : Avancé
Objectif : Créer une application complète intégrant tous les concepts
Tâches :
-
Architecture :
- Modèles : Livre, Auteur, Emprunt, Utilisateur
- Interfaces pour les opérations CRUD
- Repository pattern pour l’accès aux données
-
Base de Données :
- Créez les tables nécessaires
- Définissez les relations
- Implémentez les contraintes d’intégrité
-
Logique Métier :
- Gestion des emprunts (date limite, pénalités)
- Calcul des frais de retard
- Vérification de la disponibilité des livres
-
Interface Utilisateur (WPF ou Console) :
- Affichage des livres disponibles
- Gestion des emprunts
- Historique des emprunts
- Gestion des utilisateurs
-
Gestion des Erreurs :
- Exceptions personnalisées
- Validation des données
- Logging
-
Tests :
- Testez toutes les fonctionnalités
- Vérifiez la gestion des erreurs
- Testez les cas limites
-
Documentation :
- Diagramme UML
- Documentation du code
- Manuel utilisateur
-
Présentation :
- Démonstration de l’application
- Explication de l’architecture
- Réponses aux questions
📋 Critères d’Évaluation
Pour les TD :
- ✅ Compréhension des concepts POO
- ✅ Clarté des explications
- âś… Exemples de code pertinents
- ✅ Réponses complètes et détaillées
Pour les TP :
- ✅ Fonctionnalité complète
- ✅ Code bien structuré et commenté
- âś… Respect des principes SOLID et patterns
- ✅ Gestion appropriée des erreurs
- ✅ Tests effectués
- ✅ Documentation adéquate
🎯 Ressources Supplémentaires
- đź“– Microsoft Docs - C#
- đź“– Design Patterns - Gang of Four
- đź“– SOLID Principles
- đź“– Clean Code - Robert C. Martin
- đź“– Refactoring - Martin Fowler
- 🎥 Pluralsight - WPF Courses
- 🎥 Microsoft Learn - ADO.NET
🏆 Compétences Acquises
À l’issue de ce cours, vous serez capable de :
✅ Concevoir des architectures logicielles robustes et maintenables ✅ Implémenter les principes SOLID et les patterns de conception ✅ Créer des interfaces utilisateur professionnelles (WPF) ✅ Gérer les bases de données avec ADO.NET ✅ Gérer les exceptions et les erreurs de manière appropriée ✅ Déployer des applications professionnelles ✅ Tester et déboguer des applications complexes ✅ Collaborer efficacement dans une équipe de développement
Bon courage pour vos travaux ! 🚀
PrĂŞt Ă passer Ă la suite ?
Vous avez terminé cette leçon sur 📚 10 TD + 10 TP - Programmation Événementielle et IHM II. Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.