# 🟧 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) ![[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) ![[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. ![[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. ![[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. ![[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**. ![[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. ![[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. ![[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. ![[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 ![[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()`) ![[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 ![[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 # đŸ—“ïž Historique > DerniĂšre mise Ă  jour : 22 novembre 2025 > RĂ©digĂ© par : [[Julien DUQUENNOY]]