%% nav-debut : généré par gen_navigation.py, ne pas modifier à la main %% > [!nav] > ↩ [[Code et Développement/Développement d'Applications/Modélisation Jeu Vidéo/Modélisation Jeu Vidéo|Accueil · Modélisation Jeu Vidéo]] %% nav-fin %% # 🟧 1. Introduction La **Programmation Orientée Objet (POO)** permet de structurer un programme autour d’**objets** qui représentent des éléments du monde réel. Elle apporte : - une meilleure **organisation** du code - une **représentation naturelle** des systèmes complexes - une **modularité** favorisant la réutilisation - une **maintenance** plus simple - une **évolution** facilitée des applications La POO aide à décomposer un problème en entités autonomes capables d’interagir. ## 🎨 UML et le diagramme de classes **UML (Unified Modeling Language)** est un langage graphique permettant de **modéliser** : - les données (attributs), - les traitements (méthodes), - les relations entre objets, - la structure d’un programme. Dans cette compétence, nous utilisons principalement le **diagramme de classes UML**, qui sert à représenter : - les classes d’un programme - leurs attributs / méthodes - la manière dont elles **collaborent** 🎯 **Objectifs du diagramme de classes :** - Construire un schéma **compréhensible par tous** (enseignants, étudiants, développeurs) - Concevoir la structure d’un programme **avant** d’écrire la moindre ligne de code - Raisonner sur l’architecture **sans les contraintes** du langage de programmation # 🟦 2. Objet : identité, état Un **objet** est une entité autonome possédant : - une **identité** (ce qui le distingue des autres objets) - un **état** (les valeurs de ses attributs) ![[Code et Développement/Développement d'Applications/Modélisation Jeu Vidéo/ressources/Capture d’écran 2025-11-22 à 14.05.16.png]] # 🟩 3. Classe : modèle des objets Lorsque plusieurs objets partagent les mêmes caractéristiques, ils sont regroupés dans une **classe**. Une **classe** est un modèle, un moule permettant de créer des objets ayant : - les mêmes **attributs** - les mêmes **méthodes** (comportements) ![[Code et Développement/Développement d'Applications/Modélisation Jeu Vidéo/ressources/Capture d’écran 2025-11-22 à 14.10.52.png]] Une classe : - porte un **nom** - définit les **attributs** - définit les **méthodes** Les méthodes sont de deux types : - **accesseurs** → permettent de lire l’état (ex. : *deQuellePuissance()*) - **modifieurs** → permettent de modifier l’état (ex. : *accelerer()*, *demarrer()*) > Un objet est une **instance** de la classe. # 🟫 4. Instanciation L’**instanciation** consiste à créer un objet à partir d’une classe. ![[Code et Développement/Développement d'Applications/Modélisation Jeu Vidéo/ressources/Capture d’écran 2025-11-22 à 14.12.58.png]] Exemple : l’objet `maClio` est une instance de la classe *Voiture* et possède ses propres valeurs d’attributs. ![[Code et Développement/Développement d'Applications/Modélisation Jeu Vidéo/ressources/Capture d’écran 2025-11-22 à 14.17.03.png]] Chaque objet issu d’une classe possède son **propre état**, même si tous ont la même structure. # 🟪 5. Relations entre classes Une **association** est un lien entre deux classes. Elle traduit une collaboration, une utilisation ou une dépendance entre objets. ![[Code et Développement/Développement d'Applications/Modélisation Jeu Vidéo/ressources/Capture d’écran 2025-11-22 à 14.21.24.png]] > [!tip] Représentation UML > Une ligne entre deux classes = une **association** ## 🔢 Cardinalités Les **cardinalités** indiquent combien d’objets peuvent être reliés entre eux. - Valeur unique : `1`, `3`, `10` - Intervalle : `1..3`, `2..*`, `1..17` - Symbole `*` = « autant qu’il faut » (équivalent à +∞) Si aucune cardinalité n’est indiquée, la valeur **par défaut est 1**. ![[Code et Développement/Développement d'Applications/Modélisation Jeu Vidéo/ressources/Capture d’écran 2025-11-22 à 14.24.06.png]] > [!tip] Lecture UML > Une *Voiture* appartient à **0 ou 1** *Personne* > Une *Personne* possède **0 à +∞** *Voitures* ## 🧰 Composition & Agrégation La **composition** et l’**agrégation** sont des formes particulières d’association exprimant une relation “contenu / contenant”. ### 🔶 Composition Le contenu **n’existe pas sans** le contenant. ![[Code et Développement/Développement d'Applications/Modélisation Jeu Vidéo/ressources/Capture d’écran 2025-11-22 à 14.26.17.png]] > [!tip] UML > Losange **plein** → *composition* > Si la Voiture disparait, son Chassis disparait aussi. ### 🔷 Agrégation Le contenu peut exister **indépendamment** du contenant. ![[Code et Développement/Développement d'Applications/Modélisation Jeu Vidéo/ressources/Capture d’écran 2025-11-22 à 14.27.46.png]] > [!tip] UML > Losange **vide** → *agrégation* > Une Voiture détruite n’empêche pas les Roues de continuer d’exister. ## 🟦 Classe-association Une association peut aussi porter des informations propres. ![[Code et Développement/Développement d'Applications/Modélisation Jeu Vidéo/ressources/Capture d’écran 2025-11-22 à 14.29.04.png]] > [!tip] UML > Une *classe-association* possède ses propres attributs et méthodes. # 🟧 6. Héritage L’**héritage** permet de construire une classe à partir d’une autre en réutilisant ses attributs et méthodes. ### Intérêts : - **Spécialisation** → enrichir ou modifier le comportement - **Réutilisation** → éviter la duplication de code - **Organisation** → hiérarchiser les concepts Exemples : - Un *VéhiculePrioritaire* est une *Voiture* avec un gyrophare - Une *VoitureElectrique* est une *Voiture* dont le démarrage est différent ![[Code et Développement/Développement d'Applications/Modélisation Jeu Vidéo/ressources/Capture d’écran 2025-11-22 à 14.32.04.png]] > [!tip] UML > Une flèche va de la **sous-classe** vers la **super-classe** L’objet `VehiculePrioritaire` : - hérite des attributs et méthodes de *Voiture* - ajoute ses propres comportements (ex. `allumerGyrophare()`) ![[Code et Développement/Développement d'Applications/Modélisation Jeu Vidéo/ressources/Capture d’écran 2025-11-22 à 14.33.33.png]] On peut dire que : - *VéhiculePrioritaire* **hérite** de *Voiture* - *Voiture* = **classe mère / super-classe** - *VéhiculePrioritaire* = **classe fille / sous-classe** ### Attention aux implications ![[Code et Développement/Développement d'Applications/Modélisation Jeu Vidéo/ressources/Capture d’écran 2025-11-22 à 14.34.30.png]] > [!tip] UML > *Voiture* est la Super-classe > *VéhiculePrioritaire* est la Sous-classe - Tout *VéhiculePrioritaire* **est une** *Voiture* - Mais toute *Voiture* **n’est pas** un *VéhiculePrioritaire* L’héritage permet de : - **généraliser** → créer des classes plus abstraites - **spécialiser** → ajouter des particularités # 🎯 Conclusion Cette partie du cours permet de : - comprendre les fondements de la programmation orientée objet - lire et construire un **diagramme de classes UML complet** - identifier les classes, leurs attributs, leurs méthodes et leurs relations - modéliser un système avant codage %% nav-debut : généré par gen_navigation.py, ne pas modifier à la main %% > [!nav] > ↩ [[Code et Développement/Développement d'Applications/Modélisation Jeu Vidéo/Modélisation Jeu Vidéo|Accueil · Modélisation Jeu Vidéo]] %% nav-fin %% --- 🗓️ Historique Dernière mise à jour : `22 novembre 2025` Rédigé par : [[Julien DUQUENNOY]]