Académique Documents
Professionnel Documents
Culture Documents
POO JAVA
RAPPORT DE
SYNTHESE
LPABD 2022/2023
Table des matières
1) Classes ................................................................................................................................... 2
1.3. Méthodes........................................................................................................................... 3
3) Les constructeurs................................................................................................................... 6
4) Tableaux................................................................................................................................. 9
5) L'héritage ............................................................................................................................. 11
6) Polymorphism ...................................................................................................................... 12
7) L’abstraction ........................................................................................................................ 13
8) Interface .............................................................................................................................. 16
Une classe est un type structuré de données. Elle de modéliser et décrire un ensemble des objets qui
ont des propriétés et des comportements communs. Un programme Java utilise certaines classes prédéfinies
dans la bibliothèque Java. Ces classes sont rassemblées par catégorie (packages), ces derniers doivent être
spécifiés avant leur utilisation par l’instruction import sauf pour le package java.lang qui est utilisé par défaut
et il contient les définitions des classes les plus usuelles.
/*
*/
1.2. Attributs
La classe contient des attributs appelés aussi champs ou données membres, définissent l’état interne
d’un objet. Ilsqui peuvent être soient des variables (ou des constantes) de type primitifs (booléen, caractère,
entier, réel). Ces variable ne sont pas obligatoirement initialisées auquel cas elle prennent la valeur false pour
les booléen et 0 pour les autres types. Soient des références vers d'autres objets (une référence n'est pas un
objet mais elle permet de manipuler l'objet référencé). L’objet référencé est mémorisé dans une zone de
mémoire spéciale appelée TAS gérée par la machine Java. De plus, la référence n’est pas initialisée (sauf
initialisation explicite) et prend la valeur null (pour un attribut) et ne référence aucun objet. Ces attributs
correspondent aux propriétés de l'objet et doivent être déclarés avant d’être utilisés..
Syntaxe :
Exemple :
class NomClasse {
1.3. Méthodes
La classe contient aussi des méthodes appelées aussi fonctions membres ou comportement
définissent l’ensemble d’opérations applicables à l’objet (les objets sont manipulés avec les appels de ces
méthodes). Une méthode est soit : Une fonction ou une procédure : Une fonction est un sous-programme
retournant une valeur, une procédure n'en retourne pas. Fonctions et procédures peuvent avoir des
paramètres composés de données de type primitif et/ou de références d'objets. Lors de la définition, ces
paramètres sont appelés paramètres formels. Soit un constructeur avec ou sans paramètres : Un
constructeur est une méthode spéciale portant le nom de la classe et ayant pour but d'initialiser (on dit
construire) l'objet. Le constructeur est appelé lors de l'instanciation de l'objet. Le constructeur utilisé est
déterminé par le nombre et les types de ces paramètres précisés lors de l'instanciation de l'objet. Si une
classe ne définit aucun constructeur, un constructeur par défaut (constructeur sans paramètre) est
automatiquement défini. Dans le cas contraire, le constructeur par défaut n’est pas défini (sauf définition
explicite).
Syntaxe :
typeRetour : c’est le type de la valeur qui sera retournée par la méthode après son appel. Si la
méthode ne fournit aucun résultat, alors typeRetour est remplacé par le mot clé void. Dans le cas où
la méthode retourne une valeur, la valeur retournée par la fonction doit être spécifiée dans le corps
de la méthode par l’instruction de retour:
return expression;
ou
Syntaxe de déclaration:
idObjet1, idObjet2, … : désignent les noms des variables de type '' NomClasse '' qui sont des variables
pour référencer un objet de type cette classe. Aucun objet n’est créé, ils sont seulement déclarés,
ils vallent ''null'' et ne peuvent être utilisés. Après la déclaration d’un objet, il faut réserver un
emplacement mémoire pour stocker l’état interne de l’objet correspondant. La création doit être
demandée explicitement dans le programme en faisant appel à l’opérateur « new » qui permet
de réserver de la place mémoire pour stocker l’objet et initialiser les attributs.
Syntaxe :
nomClasse idObjet;
Les deux expressions peuvent être remplacées par : NomClasse idObjet = new NomClasse();
Exemple:
La création d’un objet entraîne toujours une initialisation par défaut de tous les attributs de l’objet.
Cette garanti d’initialisation par défaut ne s’applique pas aux variables locales (variables déclarée dans un
bloc: par exemple les variables locales d’une méthode).
Une fois l’objet est créé, on peut accéder à ses attributs (données membres) en indiquant le nom de
l’objet suivi par un point, suivi par le nom de l’attribut comme suit :
nomObjet.nomAttibut
- L’appel d’une méthode pour un objet se réalise en indiquant le nom de l’objet suivi d’un point, suivi
du nom de la méthode et de sa liste d’arguments:
nomObjet.nomMethode(listeArguments).
class Classe1 {
double x;
boolean b;
void init(double x1, boolean b1){
x = x1;
b = b1;
}
}
class Classe1App {
public static void main (String args[]) {
// crée un objet de référence obj (crée un objet : obj)
Classe1 obj = new Classe1();
3) Les constructeurs
3.1. Définition
Le constructeur est une méthode particulière qui permet de créer (instancier) les objets. Il porte le
même nom que la classe et n’a pas de type retour. Il peut contenir des instructions à exécuter pendant la
création des objets, en particulier, il contient des instructions pour l’initialisation des attributs. Par
conséquent la création de l’objet et son initialisation peuvent être unifiées. Quand une classe possède un
constructeur, Java l’appel automatiquement à toute création d’objet avant qu’il ne puisse être utilisé. Chaque
classe peut avoir un ou plusieurs constructeurs qui servent à créer les instances et initialiser leurs états. Pour
créer une instance d’une classe, on utilise l’opérateur new avec l’un des constructeurs de la classe.
Exemple :
L’instruction Point pA=new Point(1,1); appelle le constructeur Point() définie dans la classe Point
pour créer l’objet pA. L’exécution du code du constructeur Point() permet d’initialiser les attributs de l’objet
pA.
public NomClasse(NomClasse);
1) Initialisation par défaut : les champs d’un objet sont toujours initialisés par défaut. Boolean
(False) ; char (caractère de code nul) ; int, byte, short, int long (0) ; float, double (0.f ou 0.)
et class (Null)
2) Initialisation explicite des champs d’un objet : Un attribut peut être initialisé explicitement
pendant sa déclaration. Par exemple :
On peut aussi initialiser les attributs lors de l’exécution des instructions du corps du constructeur.
4) Tableaux
Déclaration :
La déclaration d’une référence à un tableau précise le type des éléments du tableau. Elle s’effectue
par l’une des syntaxes suivantes :
int [] a, tab1, b; // a, tabNotes et b sont tous des références à des tableaux de type int.
En java la taille des tableaux n’est pas fixée à la déclaration. Elle est fixée quand l’objet tableau sera
effectivement créé snon cela provoque une erreur à la compilation
Création :
int [] tab; // déclaration que « tab » est une référence à un tableau d’entiers
/**
* création effective de l’objet tableau et fixation de sa taille Dans cet
* exemple on a créé un tableau de 5 éléments de type int.
*/
tab = new int[5];
Déclaration et création :
int tab[] = new int[8]; // crée un tableau, nommé tab, de type int et de taille 8
int e1=tab[4] ; // accès au 5éme élément du tableau tab (élément d’indice 4)
/**
* tentative d’accès hors bornes, en effet les indices du tableau sont compris entre 0
* et 7. L’exécution produit le message ArrayIndexOutOfBoundsException
*/
int e2 = tab[8];
5) L'héritage
L’héritage est un concept important de la programmation orientée objet (POO). C’est le mécanisme
en java par lequel une classe est autorisée à hériter des fonctionnalités (champs et méthodes) d’une autre
classe.
Terminologie importante :
Exemple :
Dans l’exemple ci-dessous, la classe Student(sous-classe) hérite des attributs et des méthodes de la
classe Person(superclasse):
class Person {
// Créer un objet st
st.getName();
Sortie:
My name is Alex
Alex Java
6) Polymorphism
Le polymorphisme est la capacité d’un objet à prendre plusieurs formes. L’utilisation la plus courante
du polymorphisme dans la POO se produit lorsqu’une référence de classe mère est utilisée pour faire
référence à un objet de classe fille.
L’héritage nous permet d’hériter des attributs et des méthodes d’une autre classe. Le
polymorphisme utilise ces méthodes pour effectuer différentes tâches. Cela nous permet d’effectuer une
seule action de différentes manières.
Par exemple, pensez à une superclasse appelée Animal qui a une méthode appelée cri(). Les sous-
classes d’animaux peuvent être des vaches, des chats, des chiens, des oiseaux, et ils ont également leur
propre implémentation d’un cri (la vache meugle et le chat miaule, etc.) :
class Animal {
public void cri() {
System.out.println("Le cri d'animaux");
}
}
Nous pouvons maintenant créer des objets Chat et Chien et appeler la méthode cri() sur les deux:
Sortie:
Le cri d'animaux
meow, meow
ouah, ouah
7) L’abstraction
L’abstraction est l’un des concepts clés dans les langages de programmation orientée objet (POO).
Son objectif principal est de gérer la complexité en masquant les détails inutiles à l’utilisateur. Cela permet à
l’utilisateur d’implémenter une logique plus complexe sans comprendre ni même penser à toute la
complexité cachée.
// Méthodes abstraites
abstract double surface();
public abstract String toString();
// Méthode concrète
public String getColeur() {
return coleur;
}
}
La classe « Cercle » hérite toutes les propriétés de la classe mére « Forme », mais doit fournir sa
propre implémentation pour la méthode surface() et toString(). Dans ce cas, nous multiplions la valeur de π
par le carré de son rayon, et on défini un message spécifique dans la classe Cercle avec la méthode toString().
@Override
double surface() {
return Math.PI * Math.pow(rayon, 2);
}
@Override
public String toString() {
return "La couleur de la cercle est " + super.coleur +
" et la surface est : " + surface();
}
}
double longueur;
double largeur;
@Override
double surface() {
return longueur * largeur;
}
@Override
public String toString() {
return "La couleur de la rectangle est " + super.coleur + " et la surface est : " + surface();
}
}
Voici une classe de test qui contient la méthode main() pour tester tous les parties de notre
programme:
System.out.println(f1.toString());
System.out.println(f2.toString());
}
}
7.3. Conclusion
L’abstraction est un concept général que vous pouvez trouver dans le monde réel ainsi que dans les
langages POO. Tous les objets du monde réel, comme votre voiture, ou votre maison, masquant les détails
internes fournissent une abstraction.
Ces abstractions facilitent beaucoup la gestion de la complexité en les divisant en petites parties.
Dans le meilleur des cas, vous pouvez les utiliser sans comprendre comment ils fournissent les
fonctionnalités. Et cela vous aide à diviser la complexité de votre logiciel en parties contrôlable.
8) Interface
Comme une classe, une interface peut avoir des méthodes et des variables, mais les méthodes
déclarées dans une interface sont par défaut abstraites (uniquement la signature de méthode, pas de corps).
8.1. Différence entre une interface et une classe:
• Une interface peut contenir un nombre illimité de méthodes.
• Vous ne pouvez pas instancier une interface.
• Une interface ne contient aucun constructeur.
• Toutes les méthodes d’une interface sont abstraites.
• Une interface ne peut pas contenir des champs. Les seuls champs pouvant apparaître dans une
interface doivent être déclarés à la fois static et final.
• Une interface n’est pas héritée par une classe, elle est implémentée par une classe.
• Une interface peut étendre plusieurs interfaces.
Exemple :
interface MyInterface {
public void a(); // méthode d'interface (n'a pas de corps)
public void b();
public void c();
}
Pour accéder aux méthodes dans l’interface, l’interface doit être implémentée par une autre classe
avec le mot-clé « implements ». Le corps de la méthode dans l’interface est fourni par la classe qui
implémente cette interface :
class ClassMain {
public static void main(String[] args) {
MaClasse obj = new MaClasse();
obj.a();
obj.b();
obj.c();
}
}
Sortie:
La méthode a.
La méthode b.
La méthode c.
8.2. Interfaces multiples
Pour implémenter plusieurs interfaces, séparez-les par une virgule :
interface Interface1 {
public void methode1();
}
interface Interface2 {
public void methode2();
}
class ClassMain {
public static void main(String[] args) {
MaClasse obj = new MaClasse();
obj.methode1();
obj.methode2();
}
}