Classes et Objets
Apprenez les concepts fondamentaux de la programmation orientée objet en Java
Introduction
La programmation orientée objet (POO) est un paradigme de programmation basé sur le concept d'objets. En Java, tout est objet (sauf les types primitifs). Comprendre les classes et les objets est essentiel pour maîtriser Java.
Qu'est-ce qu'une classe ?
Une classe est un modèle ou un plan qui définit les propriétés (attributs) et les comportements (méthodes) d'un objet. C'est comme un moule qui permet de créer des objets.
Syntaxe d'une classe
public class Personne {
// Attributs (variables d'instance)
private String nom;
private int age;
// Constructeur
public Personne(String nom, int age) {
this.nom = nom;
this.age = age;
}
// Méthodes
public void sePresenter() {
System.out.println("Je m'appelle " + nom + " et j'ai " + age + " ans.");
}
// Getters et setters
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Qu'est-ce qu'un objet ?
Un objet est une instance d'une classe. C'est une entité concrète créée à partir du modèle défini par la classe. Chaque objet possède son propre état (valeurs des attributs).
Création d'objets
public class Main {
public static void main(String[] args) {
// Création d'objets
Personne personne1 = new Personne("Alice", 25);
Personne personne2 = new Personne("Bob", 30);
// Utilisation des objets
personne1.sePresenter(); // Affiche : Je m'appelle Alice et j'ai 25 ans.
personne2.sePresenter(); // Affiche : Je m'appelle Bob et j'ai 30 ans.
// Modification d'un objet
personne1.setAge(26);
System.out.println(personne1.getNom() + " a maintenant " + personne1.getAge() + " ans.");
}
}
Les composants d'une classe
1. Les attributs
Les attributs (ou variables d'instance) représentent l'état d'un objet. Ils sont généralement
déclarés en private pour respecter l'encapsulation.
private String nom;
private int age;
private String email;
2. Le constructeur
Le constructeur est une méthode spéciale appelée lors de la création d'un objet. Il initialise les attributs de l'objet.
// Constructeur par défaut
public Personne() {
this.nom = "Inconnu";
this.age = 0;
}
// Constructeur avec paramètres
public Personne(String nom, int age) {
this.nom = nom;
this.age = age;
}
3. Les méthodes
Les méthodes définissent les comportements d'un objet. Elles permettent d'interagir avec l'objet et de modifier son état.
public void sePresenter() {
System.out.println("Je m'appelle " + nom + " et j'ai " + age + " ans.");
}
public void vieillir() {
this.age++;
}
Encapsulation
L'encapsulation est un principe fondamental de la POO qui consiste à cacher les détails d'implémentation d'une classe. On utilise les modificateurs d'accès pour contrôler la visibilité des attributs et des méthodes.
| Modificateur | Classe | Package | Sous-classe | Tous |
|---|---|---|---|---|
private |
✓ | ✗ | ✗ | ✗ |
| (default) | ✓ | ✓ | ✗ | ✗ |
protected |
✓ | ✓ | ✓ | ✗ |
public |
✓ | ✓ | ✓ | ✓ |
Le mot-clé this
Le mot-clé this fait référence à l'instance courante de la classe.
Il est utile pour :
- Différencier les attributs des paramètres ayant le même nom
- Appeler un constructeur depuis un autre constructeur
- Passer l'instance courante en paramètre
public class Personne {
private String nom;
public Personne(String nom) {
this.nom = nom; // this.nom = attribut, nom = paramètre
}
public Personne(String nom, int age) {
this(nom); // Appel du constructeur précédent
this.age = age;
}
}
Méthodes statiques
Les méthodes statiques appartiennent à la classe elle-même, pas à une instance particulière. Elles sont appelées directement sur la classe.
public class Calculatrice {
public static int additionner(int a, int b) {
return a + b;
}
}
// Utilisation
int resultat = Calculatrice.additionner(5, 3); // Pas besoin de créer un objet
💡 Bonne pratique : Utilisez toujours l'encapsulation en déclarant vos attributs en
privateet en fournissant des getters/setters publics pour y accéder. Cela permet de contrôler l'accès aux données et de maintenir la cohérence de l'objet.
Exemple complet
public class CompteBancaire {
private String numeroCom pte;
private double solde;
private String titulaire;
public CompteBancaire(String numeroCompte, String titulaire) {
this.numeroCompte = numeroCompte;
this.titulaire = titulaire;
this.solde = 0.0;
}
public void deposer(double montant) {
if (montant > 0) {
solde += montant;
System.out.println("Dépôt de " + montant + "€ effectué.");
}
}
public boolean retirer(double montant) {
if (montant > 0 && montant <= solde) {
solde -= montant;
System.out.println("Retrait de " + montant + "€ effectué.");
return true;
}
System.out.println("Retrait impossible.");
return false;
}
public double getSolde() {
return solde;
}
public void afficherInfos() {
System.out.println("Compte : " + numeroCompte);
System.out.println("Titulaire : " + titulaire);
System.out.println("Solde : " + solde + "€");
}
}