Passer au contenu principal
eLearner.app
Module 2 · Leçon 1 sur 23/14 dans le cours~12 min
Leçons du module (1/2)

Classes et Objets

Java est un langage centré sur la Programmation Orientée Objet (POO). En POO, nous modélisons le monde réel en utilisant des objets. Un objet possède un état (les données) et des comportements (les actions).

Classes et Objets

  • Classe : C'est un modèle (ou blueprint) qui définit les caractéristiques et le comportement d'un type d'objet.
  • Objet : C'est une instance concrète créée à partir d'une classe.

Par exemple, si Car est la classe, votre voiture dans le garage est l'objet réel.

Champs d'Instance et Constructeurs

Les données à l'intérieur d'une classe sont appelées champs d'instance (ou attributs). Pour initialiser l'état d'un objet au moment de sa création, on utilise un méthode spéciale appelée constructeur.

Un constructeur a le même nom que la classe et n'a pas de type de retour (pas même void).

Code
class Dog {
    // Campi istanza
    String name;
    int age;

    // Costruttore
    public Dog(String name, int age) {
        this.name = name; // 'this' fa riferimento al campo dell'oggetto corrente
        this.age = age;
    }
}

Créer un Objet avec new

Pour créer un objet en mémoire, nous utilisons le mot-clé new suivi du constructeur de la classe :

Code
public class Main {
    public static void main(String[] args) {
        // Creazione di un oggetto Dog
        Dog myDog = new Dog("Fido", 3);

        // Accesso ai campi
        System.out.println(myDog.name + " ha " + myDog.age + " anni.");
    }
}

La Référence this

Le mot-clé this en Java fait référence à l'objet actuel sur lequel est exécuté le constructeur ou une méthode. Il est utilisé principalement pour éviter les ambiguïtés lorsque les paramètres du constructeur ont le même nom que les champs d'instance de l'objet (masquage de variables) :

Code
class User {
    String username;

    public User(String username) {
        this.username = username; // this.username è il campo istanza, username è il parametro
    }
}

Allocation de Mémoire : Stack vs Heap

Comprendre comment Java alloue la mémoire est fondamental :

  1. Stack (Pile) : C'est une zone de mémoire rapide et organisée où sont stockées les variables primitives et les références aux objets (adresses mémoire) locales à l'intérieur des méthodes.
  2. Heap (Tas) : C'est une zone de mémoire plus grande et dynamique où sont alloués les objets réels (avec le mot-clé new).

Lorsque nous déclarons Dog myDog = new Dog("Fido", 3); :

  • La référence myDog est créée dans le Stack.
  • L'objet réel Dog avec ses données est créé dans le Heap.
  • La variable myDog pointe vers l'emplacement de l'objet dans le Heap.

À vous de jouer

Exercice#java.m2.l1.e1
Tentatives : 0Chargement…

Complétez la classe Person en ajoutant le champ name et un constructeur approprié. Ensuite, dans la méthode main, créez un objet Person nommé p avec le nom Alice.

Chargement de l'éditeur…
Afficher l'indice

Écrivez `String name;` dans la classe, déclarez le constructeur `public Person(String name) { this.name = name; }` et instanciez avec `new Person('Alice')`.

Solution disponible après 3 tentatives

Exercice#java.m2.l1.e2
Tentatives : 0Chargement…

Créez une classe Book avec les champs title (String) et pages (int), un constructeur complet, et instanciez dans la méthode main un livre nommé b avec le titre Moby Dick et 600 pages.

Chargement de l'éditeur…
Afficher l'indice

Pensez à définir les deux champs dans Book, à les mapper dans le constructeur en utilisant `this.title = title;` et `this.pages = pages;`, et à utiliser `new Book('Moby Dick', 600)`.

Solution disponible après 3 tentatives

Exercice#java.m2.l1.e3
Tentatives : 0Chargement…

Créez une classe Product avec les champs name (String) et price (double), et un constructeur qui initialise les deux champs. Dans la méthode main, créez un objet Product nommé p avec le nom Laptop et le prix 999.99.

Chargement de l'éditeur…
Afficher l'indice

Déclarez les champs `String name;` et `double price;` dans Product, affectez-les dans le constructeur avec `this.name = name;` et `this.price = price;`, puis créez l'objet dans la méthode main.

Solution disponible après 3 tentatives