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