1. Classes
1.1 Définitions
- Classe : représentation “abstraite” d’une chose, d’une idée, …
- Objet : un exemplaire particulier = une instance de la classe.
- Attributs et Méthodes : propriétés et fonctionnalités d’une classe
- Membres d’une classe : englobe les attributs et les méthodes d’une classe
- Constructeur : méthode spéciale permettant de décrire comment instancier un objet
- Destructeur : méthode spéciale qui décrit comment détruire l’objet, c’est à dire libérer les ressources allouées à l’objet (ex : mémoire, accès fichier, …).
- Remarques : Il est possible d’avoir plusieurs constructeurs mais il ne peut y avoir qu’un seul destructeur. En Java, pas besoin d’écrire un destructeur ⇒ un processus dit ramasse-miette (garbage collector) s’occupe de détruire proprement les objets inutiles.
- Déclaration : donner le nom + les attributs + les entêtes de méthodes
- Définition : le code contenu des méthodes
- Factory : Dans une classe le constructeur sera en privé et une méthode
factory
s’occupera de l’appel au constructeur.
1.2 Déclaration et définition d’une classe
- En Java, on déclare une classe et on la définit dans un même fichier.
- En C++, en général, on met la déclaration dans un fichier d’inclusion
.h
et la définition dans un fichier .cpp
- Quand on déclare un membre, on doit définir ses droits d’accès.
- La POO définit 3 droits basiques
public
: membre public d’une classe peut être directement manipulé par n’importe quel objet d’une autre classe.
- 💡 Eviter au maximum le mot clé
public
et utiliser des setters et des getters.
protected
: membre uniquement accessible directement par les objets de la même classe ou bien d’une sous-classe.
- ⚠️
protected
n’a pas vraiment ce comportement en Java, à cause des packages.
private
: membre uniquement accessible par les objets de la même classe.
-
⚠️ il n’y a pas de concept privé pour un objet, deux objets de la même classe peuvent accéder aux attributs private
de l’un et de l’autre.
Class A {
public int i;
protected double d;
private boolean b;
public fun(){
b = true; // OK
A a = new A();
a.i = 10; // OK
a.d = 1.0; // OK
a.b = false; // OK
}
}
Class B {
public fun(){
A a = new A(),
a.i = 10; // OK
a.d = 1.0; // OK aussi car Java :) (different avec package)
a.b = false // ERROR COMPIL
}
}
1.3 Instanciation
L’instanciation se fait toujours via un constructeur, soit en l’appelant directement (avec new
), soit en appelant une méthode (dite factory
) qui va appeler le constructeur.
En gros, l’instanciation consiste en :
- allouer de la mémoire pour stocker les valeurs des attributs + des infos pour gérer l’objet.
- exécuter les instructions du constructeur
- retourner l’adresse de la zone mémoire allouée