Attributs
Un attribut (appelé aussi champ, propriété ou variable membre) est une donnée appartenant à une classe, et donc à chacun de ses objets.
L'attribut représente l'état interne d'un objet.
Exemples d'attributs :
- nom
- âge
- solde
- couleur
- état
- vitesse
Attributs et état de l'objet
L'état d'un objet est défini par l'ensemble des valeurs de ses attributs à un instant donné.
- solde = 0 → état initial
- solde = 500 → état après dépôt
Deux objets de la même classe peuvent avoir des états différents.
Attributs vs variables locales
| Attribut | Variable locale |
|---|---|
| Appartient à l'objet | Appartient à une méthode |
| Durée de vie = objet | Durée de vie = méthode |
| Accessible via this | Accessible directement |
| Représente l'état | Représente un calcul temporaire |
Déclaration des attributs
Exemple générique :
Chaque instance de Utilisateur possède sa propre copie des attributs.
Attributs d'instance vs attributs de classe
Attributs d'instance
- Un attribut par objet
- Entrepose l'état individuel
Attributs de classe (statique)
- Partagés par toutes les instances
- Déclarés avec static
Il n'existe qu'une seule valeur de tauxInteret.
Visibilité des attributs
Modificateurs d'accès :
| Modificateur | Description |
|---|---|
| private | Accessible uniquement dans la classe |
| protected | Classe + sous-classes |
| public | Accessible partout |
Bonne pratique : les attributs doivent presque toujours être private.
Encapsulation et attributs
L'encapsulation consiste à cacher les attributs et à contrôler leur accès.
L'objet reste cohérent.
Getters et setters
Rôle :
- Lire un attribut → getter
- Modifier un attribut → setter
Un setter n'est pas obligatoire : certains attributs sont en lecture seulement.
Attributs immuables
Un attribut peut être immuable (non modifiable après initialisation).
- Défini dans le constructeur
- Sécurise l'état de l'objet
Initialisation des attributs
Valeurs par défaut
| Type | Valeur |
|---|---|
| int | 0 |
| double | 0.0 |
| boolean | false |
| objet | null |
Initialisation via constructeur
Attributs calculés
Un attribut peut être dérivé d'autres attributs.
Il n'est pas entreposé, mais calculé à la demande.
Attributs et héritage
Les sous-classes héritent des attributs non privés.
Masquage d'attributs (à éviter)
- Ambigu
- Source d'erreurs
- Préférer les méthodes
Attributs et polymorphisme
Contrairement aux méthodes, les attributs ne sont pas polymorphes.
- Animal a = new Chien();
- Méthodes → dynamique
- Attributs → statiques
Toujours accéder aux attributs via des méthodes.
Attributs et composition
- L'attribut référence un autre objet
- Structure le modèle métier
Attributs et UML
Notation UML :
- + nom : String
- - age : int
- # solde : double
| Symbole | Signification |
|---|---|
| + | public |
| - | private |
| # | protected |
Bonnes pratiques
- Attributs privés
- Nom clair et métier
- Éviter les setters inutiles
- Préférer méthodes métier
- Limiter les attributs publics
- Favoriser l'immuabilité
Exemple complet
Attributs et SOLID
- S : une responsabilité → attributs cohérents
- O : éviter l'exposition directe
- L : cohérence dans les sous-classes
- I : pas d'attributs inutiles
- D : dépendre d'abstractions
Conclusion
Les attributs représentent la mémoire et l'état des objets.
Bien conçus, ils rendent les objets robustes, cohérents et maintenables.
En POO, on ne manipule pas des données brutes, mais des états protégés par des comportements.