Vous êtes sur la page 1sur 67

Programmation Objet Avancée:

Langage JAVA

Année Universitaire : 2022-2023

Cours de Programmation Orientée Objet 0


Plan du Cours
Chapitre 1 : Introduction générale
Chapitre 2 : Les classes et les objets
Chapitre 3 : Les tableaux et les chaînes de caractères
Chapitre 4 : L'héritage et le polymorphisme
Chapitre 5 : Les classes abstraites et les interfaces
Chapitre 6 : Les exceptions

1
Chapitre 1 :

Introduction Générale
1. Fondements de base

3
1.1. La programmation classique
Principe:
Programmes = Algorithmes + Structures de données

Avantages & Inconvénients:


☺Contribution au progrès de la qualité des logiciels.
☻ Difficulté de Maintenance,
☻ Pas de réutilisabilité,
☻ Absence de protection de données
4
1.2. Principe de la P.O.O.

Représentation des composants du système


d’information étudié(réels ou conceptuels) par des entités
appelées "objets" grâce à l'abstraction.

Les concepts de base sont : encapsulation, objet,


classe et héritage.

Programme = ensemble d’objets communiquant

5
Classe : un modèle d’objets (type de données et
traitements)
Classe = Attributs Membres + Méthodes Membres
Objet : instance de classe, ayant ses propres valeurs de
données.

Encapsulation :
rassembler les données et les traitements au sein d'une
structure unique (entité)
autoriser l'accès aux données par les méthodes proposés.

Héritage :
définir une nouvelle classe à partir d’une classe existante.
La classe dérivée comporte les même propriétés de la classe de
base, auxquelles s’ajoutent des propriétés (méthodes et/ou
attributs) spécifiques.
6
☺ Avantages :
Intégrité et protection des données contenues
dans les entités de regroupement.
⇨ grâce à l’encapsulation

Facilité de réutilisation et d’extension des


applications.
Facilité de maintenance
⇨ grâce à l’héritage

7
2. Le langage JAVA

8
2.1. Présentation générale de JAVA
JAVA : langage de programmation orientée objet pure,

Développé par Sun Microsystems

Première version commercialisée en 1995.

S’inspire principalement des langages de programmation


suivants : C/C++ (syntaxe très proche), SmallTalK (tout
objet) et ADA (paquetage).

9
Objectif Principal :

Proposition d’un langage de programmation indépendant


de la machine exécutant le code.

⇨ Langage portable

10
Pour développer en JAVA, il suffit d’installer le SDK
(Software Development Kit) correspondant .
⇨ Java Development Kit – JDK
SDK : ensemble d’outils et de bib de routines permettant
de développer des programmes pour un environnement
particulier

Le code peut être écrit dans un fichier bloc note

Pour plus de commodité, on peut utiliser des éditeurs tels


que : Eclipse, Blue J, NetBeans, etc.

11
Site officiel :
http://www.oracle.com/technetwork/java/javase/downloads/in
dex.html

12
Exécution d'un programme JAVA :
Nécessité d’une machine virtuelle Java (MVJ)
Cette machine virtuelle va interpréter le code
compilé, code généré à partir des fichiers .java (et
donc des sources du programme).

La MVJ : un programme écrit pour chaque plate-


forme particulière (Sun, Solaris, Mac, Windows
NT, …) et qui connaît le ByteCode JAVA

ByteCode : un langage machine dédié à la


Machine Virtuelle JAVA. 13
Machine
Virtuelle Java
(1) (2)
Code Source Byte-code (JVM Sun,
(Fichiers .java) (Fichiers .class) (2) : Interprétation JVM Mac,
etc.)
(1) : Compilation

(3) Exécution

14
Portabilité : avantage majeur du langage JAVA
Une fois le programme écrit en java, il fonctionnera
sur une grande variété de plateformes sans nécessiter
des modifications du code.
Seule la machine virtuelle qui interprète les fichiers
compilés subit des modifications.

Exemple: un utilisateur de Linux ne téléchargera pas


la même machine virtuelle qu'un utilisateur de
Windows, seulement le code concocté par le ou les
programmeur(s) donnera la même chose sur les deux
systèmes.
15
Différence entre langage interprété et langage
compilé ?
un programme en langage interprété n'est pas exécuté
directement par la machine;
⇒ Il est exécuté par un autre programme
appelé interprète installé sur la machine (PHP,
javascript, perl, etc.)

un programme en langage compilé est traduit en


instructions lisibles par la machine (code natif) et peut
être exécuté indépendamment de tout autre programme
(c, c++, ADA, etc.)
16
2.2. Application et applet
Un programme JAVA est soit :

Une application simple

Une Applet : une application JAVA qui s'exécute au sein


d'une page HTML dans un navigateur
Voir aussi une Servlet : Server-side applet
Les servlets s’exécutent du côté serveur

17
2.3. Le JDK (JAVA Development Kit)
javac : compilateur de sources java (convertit le code source
fichier.java en fichier .class (contenant le bytecode Java) )
java : interpréteur de byte code
jar : l'archiveur, qui met sous forme d'un paquetage
unique l'ensemble des fichiers class en un fichier JAR,
appletviewer : interpréteur d'applet
javadoc : générateur de documentation (i.e., HTML) (génère
automatiquement de la documentation à partir des commentaires du code source)

jdb : débogueur
jre : java runtime environment : environnement
d’exécution Java
18
2.4. Exécution d’une application JAVA
Ecriture du code source JAVA :
Code sous forme de Fichier texte écrit selon la syntaxe
du langage et ayant l’extension ".java".

Compilation :
Les sources JAVA doivent être compilées afin de générer
le ByteCode. Les fichiers générés ont l'extension ".class".

Interprétation :
L’interprétation du Bytecode est faite par la MVJ

19
2.5.Structure générale d’une
application JAVA
Une application JAVA possède un point d'entrée unique
qui est la méthode (ou fonction) "main()" de prototype :

public static void main (String [ ] args)

Tout fichier source doit porter le nom de la classe


publique qu'il contient avec l'extension ".java"

20
Exemple : Bonjour.java

public class Bonjour


{
// déclaration des attributs
………
// définition des méthodes
………
public static void main (String [] args)
{
// déclaration des variables locales
System.out.println("Bonjour");
}
}
21
2.6. Exemple d’outils de développement
Environnements de développement :
NetBeans
Eclipse
JBuilder
Visual J++
Kawa

22
2.7. Quelques références
Livres :
Le livre de Java premier langage, Anne Tasso, Eyrolles, 2016
Programmer en JAVA, Claude DELANNOY, éditions
Eyrolles, 2002
Comment programmer en JAVA, H.M. DEITEL & P.J.
DEITEL, éditions Prentice Hall, 1999

Sites Web :
http://www.oracle.com/technetwork/java/index.html
www.javaworld.com : Info sur Java
www.gamelan.com : applications, applets, packages, ...
www.blackdown.com : Java pour linux

23
Plan du Cours
Chapitre 1 : Introduction générale
Chapitre 2 : Les classes et les objets
Chapitre 3 : Les tableaux et les chaînes de caractères
Chapitre 4 : L'héritage et le polymorphisme
Chapitre 5 : Les classes abstraites et les interfaces
Chapitre 6 : Les exceptions

24
Chapitre 2 :

Les classes et les objets


1. Définition des classes
Une classe : un modèle de définition pour les objets
ayant les mêmes propriétés => type

Il existe des contrôles d'utilisation d'une classe et des


contrôles d’accès aux propriétés.

26
2. Organisation des classes en packages
Un package est considéré comme une bibliothèque de
classes. Il permet de regrouper un certain nombre de
classes

Les packages sont organisés hiérarchiquement à la


manière des répertoires : sous-packages, des sous-sous-
packages…

On peut créer des packages, ajouter des classes dans un


package existant
Le répertoire contenant vos classes simule un package
27
3. Syntaxe de classe

[private/public] [abstract/final] class NomClasse


[extends NomSuperClasse]
[implements NomInterface1, Interface2, …,
InterfaceN]
{
// déclaration des attributs
// déclaration des méthodes
}

28
private / public : deux modificateurs d'accès précisant la
possibilité d'utilisation de la classe :

private indique que l'utilisation de la classe est


réservée aux classes du même package
public donne la possibilité d'utiliser la classe à toutes
les autres classes

Remarque : par défaut, le modificateur est private

29
abstract / final : deux qualificateurs en relation avec le
concept d'héritage (voir chapitre 4)
extends : annonce l'héritage de la classe
NomSuperClasse (voir chapitre 4)
implements : annonce l'implémentation d'une ou
plusieurs interfaces pour a classe (voir chapitre 5)

Remarque: Il ne peut y avoir qu'une seule classe


publique par fichier

30
3.1.Déclaration des attributs

[private/public/protected][static] [final]
type_attribut nom_attribut [= valeur];

31
private/ public / protected : des modificateurs d'accès à
l'attribut à partir d'autres classes :

private : l'accès est réservé aux méthodes de la


même classe
public : accès à toutes les méthodes des autres
classes
protected : accès limités aux méthodes de la même
classe, des classes dérivées et des classes du même
package
Remarque : par défaut, l’accès est dit friendly, il
correspond à un accès privé au package (et non
privé à la classe)
32
static : attribut commun à tous les objets de la
classe. Il s'agit d'un attribut de classe

final : attribut constant

33
3.2.Déclaration des méthodes

[private/public/protected]
[static][final/abstract] type_de_retour nom_méthode (liste paramètres )
{
// déclaration des variables locales;
[type_de_retour var_résultat;]

// instructions de la méthode
[return var_résultat;]
}

34
[private, public et protected] : des modificateurs d'accès
autorisant l'appel aux méthodes de la classe

static : précise que l'exécution de la méthode n'est pas liée aux


instances de la classe (il s'agit d'une méthode de classe)

abstract : la méthode ne comporte pas de code. Par conséquent


toute la classe devient abstraite (voir chapitre 5)

final : la méthode ne pourra pas être redéfinie dans une classe


dérivée (voir chapitre 5)

35
Passage de paramètres

1er Cas d’arguments de type primitif (de base) : par


valeur ;

2ème Cas d’arguments de type classe/tableaux: par


référence (référence d'objet) ;

Surcharge de méthodes : au sein d'une même classe,


plusieurs méthodes peuvent porter le même nom en ayant
une liste de paramètres différente (type, ordre et nombre
d'arguments)
36
Exemple :
class Etudiant // par défaut elle est privée au package
{
private int matricule;
private String nom;
private int niveau;
public String couleur_chemise;

public void nouvNiveau(int n)


{niveau = n;}
public void changerCouleur (String c)
{couleur_chemise = c;}
}

37
3.3. Constructeurs
Définition : méthode appelée lors de la création d’objets. Il porte le
même nom que celui de la classe
Rôle : initialiser les attributs de l'objet

Remarque :
En cas d’absence d’un constructeur implémenté, JAVA offre un
constructeur par défaut qui initialise les attributs de l'objet par des
valeurs par défaut (0 pour int, null pour les références aux objets,
…)
Le constructeur est toujours public et ne possède pas de type
(même pas void).

38
class Etudiant
{ private int matricule;
private String nom;
private int niveau;
public String couleur_chemise;

public Etudiant() //constructeur 1


{matricule = 12; nom= "Daniel"; niveau=1;couleur_chemise=
"bleue"; }

public Etudiant(int m) //constructeur 2


{matricule = m; nom= " Daniel"; niveau=1;couleur_chemise=
"bleue"; }

public Etudiant(int m,String n) //constructeur 3


{matricule = m; nom= n; niveau=1;couleur_chemise= "bleue"; }
39
public Etudiant(int m,String n, int niv ) //constructeur 4
{matricule = m; nom= n; niveau=niv; couleur_chemise= "bleue" ; }

public Etudiant(int m,String n, int niv, String c) //constructeur 5


{matricule = m; nom= n; niveau=niv, couleur_chemise=c; }

public void nouvNiveau(int niv)


{niveau = niv;}

public void changerCouleur (String c)


{couleur_chemise = c;}
}
40
3.4. Finaliseur
Définition: méthode qui exécute certaines tâches avant la
destruction d'un objet. => finalize

Son prototype est alors le suivant :


protected void finalize()

L'exécution du finaliseur se fait automatiquement par le ramasse


miettes (Garbage Collector GC).

En JAVA, le finaliseur est optionnel. S'il est décrit, il est unique :.

41
class Etudiant
{ private static int nbEtudiant = 0;
private int matricule;
private String nom;
private int niveau;
public String couleur_chemise;

public Etudiant()
{matricule = 12; nom= "Daniel"; niveau=1; couleur_chemise= "bleue";
nbEtudiant ++;}

public Etudiant(int m)
{matricule = m; nom="Patricia"; niveau=2; couleur_chemise= "bleue";
nbEtudiant++;}

42
public Etudiant(int m,String n)
{matricule = m; nom= n; niveau=2;couleur_chemise= "bleue";
nbEtudiant++; }

public Etudiant(int m,String n,couleur_chemise c)


{matricule = m; nom= n; niveau=1; couleur_chemise=c;
nbEtudiant++; }

protected void finalize()


{ nbEtudiant--; }
}

43
4.L’instanciation des objets
4.1. Référence d'un objet
Références d'objets : variables de type classe désignant des
objets à la manière des pointeurs en C (sans manipulation directe
d'adresse).

La référence qui ne pointe sur aucun objet contient la valeur


"null".

Il est possible d'avoir plusieurs références pour désigner un


même objet.

Opérateurs sur les références d'objets : new, =, ==, != (tester si


deux références désignent un même objet) et instanceof.
44
4.2.Instanciation
La création d'un objet se fait à l'aide de l'opérateur new
qui se charge de :

Appeler le constructeur de l'objet adéquat pour


initialiser les attributs.
Allouer l'espace mémoire nécessaire pour stocker les
attributs de l'objet en cours de construction

Retourner une référence sur l'objet créé

45
Un objet qui n'est référencé par aucune référence est détruit par
le ramasseur-miettes (Garbage Collector) qui s'exécute en
permanence.

Exemple :
public class TestEtudiant
{
public static void main(String [ ] args)
{
Etudiant e1;
e1 = new Etudiant(); // e1 une référence sur un objet

Etudiant e2 = new Etudiant(34,"ali",2,"kaki");


//e2 une référence sur un objet Etudiant
}
}
46
5. Manipulation d’un objet
5.1. Aperçu sur les droits d’accès aux
membres d’un objet

La création d’un objet dépend des restrictions d'utilisation de la


classe à instancier (private/public)

La manipulation des membres d'un objet créé suit les restrictions


d'accès de ces membres précisées dans la classe
(private/public/protected)

47
5.2.Manipulation des attributs

Deux types d’attributs :

Attribut d’objet : déclaré sans le mot réservé static. Une copie


de cet attribut existe dans chaque objet.

Attribut de classe : déclaré avec le mot réservé static. S’il y a


eu une instanciation, une seule copie de cet attribut est
partagée par toutes les instances.

48
Les attributs d’objet : désignés selon la syntaxe suivante :
nomObjet.nomAttribut

Les attributs de classe : désignés selon la syntaxe suivante :


nomClasse.nomAttribut

49
class Etudiant
{ //déclaration des attributs membres
private static int nbEtudiant = 0; // attribut statique
private int matricule;
private String nom;
private int niveau;
//déclaration des méthodes membres
public Etudiant()
{matricule = 12; nom= "Daniel"; niveau=1; couleur_chemise=
"bleue"; nbEtudiant ++; }
public Etudiant(int m)
{matricule = m; nom= "Rami"; niveau=2; couleur_chemise=
"bleue"; nbEtudiant++;
}
50
} //fin de classe
5.3.Invocation des méthodes

Deux types de méthodes :

Méthode d’objet : déclarée sans le mot réservé static. Une


copie de cette méthode est associée à chaque objet.
L’exécution d’une telle méthode se fait toujours pour un objet
déterminé.

Méthode de classe : déclarée avec le mot réservé static.


L’exécution d’une telle méthode ne dépend pas des objets de
la classe.

51
Les méthodes d’objets : désignées selon la syntaxe suivante :
nomObjet.nomMéthode( ….. )

Les méthodes de classe : désignées selon la syntaxe suivante : «


nomClasse.nomMéthode(….. )

52
6. Référence sur l'objet courant ″this″″
this : une référence sur l'objet courant

Utilité de la référence this :

Cas 1: une variable locale (ou un paramètre) cache, en portant


le même nom, un attribut de la classe.

Cas 2 : Absence de référence pour l’objet en cours.

53
Exemple :

class Etudiant
{ private int matricule;
public String couleur_chemise;


public Etudiant (int matricule, String couleur_chemise)
//paramètres portant le même nom que les attributs
{
this.matricule = matricule;
this.couleur_chemise = couleur_chemise;
}

}

54
7. Détermination de la nature d'un objet

L'opérateur instanceof permet de tester si l'objet référencé est


une instance d'une classe donnée (ou d'une de ses sous-classes
voir chapitre 5).

Exemple :

if (e1 instanceof Etudiant)
// expression évaluée à vrai ou faux

55
8. Objets Membres
Les attributs d’objets peuvent être :
Simples
Des objets composés de plusieurs attributs

56
Création et instanciation d’attributs de type objets

Si l‘attribut est un objet déjà créé, il suffit d'effectuer une


affectation des références pour réaliser le lien à travers un
passage de paramètre dans une méthode;

Si l’attribut n’est pas encore créé, l'opérateur new doit être


utilisé pour sa création au niveau de l'instruction d'appel du
constructeur.

57
class Stage
{ //déclaration des attributs
private String sujet;
private String nom_entreprise;
private String duree;
//Implémentation des méthodes
public Stage(String sj, String ne, String d)
{sujet = sj; nom_entreprise = ne; duree= d}

public void changerSujet (String nsj)


{sujet = nsj;}

public void afficher ()


{System.out.println ("Sujet de stage:" + sujet + "Entreprise : "
+ nom_entreprise + " Durée : " + duree );
}
} 58
class Etudiant
{
private Stage st; //attribut objet de la classe stage
private int matricule;
public String couleur_chemise;

public Etudiant()
{ matricule =12; nom= "Sam"; niveau=1; couleur_chemise = "bleue";
st = new Stage ("Sujet 1", "EDF", "1 mois");}
// Création et initialisation d’attribut

public Etudiant(int m,String n, int niv, String c, Stage s)


{ matricule = m; nom= n; niveau=niv; couleur_chemise=c; st=s; }
//Initialisation par //affectation

59
public void changerStage (Stage nst)
{ st = nst;} //réinitialisation par simple affectation

public void changerSujetStage (String nsj)


{ st.changerSujet (nsj);}
//invocation d’une méthode propre à la classe stage
}

} //Fin de classe

60
public class Exemple // Hypothèse : les 3 classes dans un même package
{
public static void main(String [ ] arg)
{ Etudiant e1, e2, e3;
Stage st1;

st1 = new Stage ("Sujet1", " EDF" , "1mois");

e1 = new Etudiant (); // 1er constructeur


e2 = new Etudiant (12, "Sam", 1, "Bleue", st1) ; // 2ème constructeur
e3 = new Etudiant (45,“Ali", 2, "Bleue",new Stage ("Sujet 2", " PTT" ,
"2mois")); // 3ème constructeur

e3.changerStage(st1); // l’ancien Stage est remplacé par st1


e3.changerSujetStage(“Sujet 3");
}
} 61
9. Quelques conventions utiles
Les prototypes des méthodes de lecture/modification des attributs
suivent une convention particulière :
Le prototype d’une méthode qui retourne la valeur d’un
attribut :
public type_attribut getAttribut()
Le prototype d’une méthode qui modifie la valeur d’un attribut :
public void setAttribut (type_attribut valeur)

Utilité de ces méthodes : quand l’attribut en question n’est pas


public. D’où le modificateur d’accès à ces méthodes public

62
class Etudiant
{
private int matricule;

public int getMatricule() {return matricule;}

public void setMatricule(int m) {matricule = m;}


}

class Exemple
{ public static void main (String arg[])
{
Etudiant e = new Etudiant();
e.setMatricule(99);
System.out.println(″matricule =″+e.getMatricule());
}
} 63
Généralement, on décrit dans chaque classe une méthode
ayant le prototype suivant :
public String toString()

Utilité : retourner une description (totale ou partielle) sous forme


d’une chaîne de caractères d’un objet

L’utilité de toString() s’accroît lorsque les attributs ne sont pas


publics

La description retournée peut être utilisée comme paramètre à


une autre méthode, stockée dans une certaine structure tel qu’un
tableau ou affichée

64
class Etudiant
{
private int matricule;
public String nom;

public String toString()
{
String s;
s=″La matricule de l’étudiant est :″+matricule+″ Son nom est :″
+ nom;
return s;
}
}

65
class Exemple
{
public static void main(String []arg)
{
String s ;
Etudiant e = new Etudiant ();
e.setMatricule(114);
e.setNom(″Ali″);
s = e.toString();
System.out.println(s); //on peut s’en passer d’utiliser s
}
}

66

Vous aimerez peut-être aussi