# đ§ 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]]