Vous êtes sur la page 1sur 68

Initiation au langage Java

22/09/23 06:47 PM 1
Le langage Java

 Langage de programmation
 Développé par SUN microsystems en 1995
 Initialement orienté web
 Syntaxe proche du langage C
 C’est un langage interprété et compilé
 C’est un langage orienté-objet

22/09/23 06:47 PM 2
Rappel sur Programmation
Orientée Objet (POO)

22/09/23 06:47 PM 3
Programmation orientée-objet

C’est avant tout une démarche de


conception de programme qui se focalise
sur les objets à développer plutôt que
sur les traitements.

1. Identifier les objets du programme


2. Identifier les données nécessaires à chaque objet (Attributs)
3. Identifier des méthodes de traitement de chaque objet
4. Développer des classes d’objets

22/09/23 06:47 PM 4
Exemple: gestion d’une bibliothèque
Avec une programmation procédurale (ex:
C), on cherchera à écrire des fonctions pour :

• Rechercher un livre d’après son titre, son auteur, …


• Enregistrer le prêt d’un livre
• Enregistrer le retour d’un livre
• Identifier les lecteurs en retard
• Créer un nouveau lecteur
• Enregistrer un nouveau livre
• Afficher la liste des livres empruntés par un lecteur

22/09/23 06:47 PM 5
Exemple: gestion d’une bibliothèque
Avec un langage de programmation orienté-objet,
on définit le contenu des classes d’objets manipulés
:

• La classe Livre qui a un titre, un auteur, un emprunteur et des


méthodes empruntéPar(Lecteur l), rendu(), estEnRetard(),

• La classe Lecteur qui a un nom, une adresse, une liste de livres
empruntés et des méthodes emprunte(Livre l), retourne(Livre
l), …
• D’autres classes telles que DVD, StatutLecteur, Bibliothèque,
CatégorieLivre, Employé, …
22/09/23 06:47 PM 6
Classe

Une classe est un type complexe de données.


On déclare des variables dont le type est une
classe comme pour les types primitifs:
 int monEntier;
 Livre monLivre;
C’est au concepteur de la classe d’écrire toutes
les opérations qui lui sont applicables

En Java, un programme est uniquement


constituée de classes.
22/09/23 06:47 PM 7
Exemple: la classe Livre
class Livre {
String titre;
Données int numero;
Lecteur emprunteur;

String getTitre() {
return titre;
}

Méthodes boolean estEmprunte() {


if (emprunteur == null) return false;
else return true;
}
}

22/09/23 06:47 PM 8
Droits d'accès

Une variable ou une méthode a un type d'accès qui la rend


accessible ou non en fonction de la classe où elle est appelée.

• public, ex: public String getTitre() {…}


La méthode est accessible par toutes les classes.
• private, ex: private String titre;
La variable n'est accessible que dans sa classe.
• protected, ex: protected String nomCategorie;

22/09/23 06:47 PM 9
Exemple: droits d'accès
public class Livre {
private String titre; public class BonExemple {{
public class MauvaisExemple
private int numero;
Lecteur emprunteur; public String getDescription(Livre
public String getDescription(Livre l) { l)
{
String str = l.titre;
public String getTitre() { String str = l.getTitre();
if (l.estEmprunte())
return titre; if (l.estEmprunte())
str = str + "
} emprunte"; str = str + "
emprunte";
else
public boolean estEmprunte() { else
str = str + "libre;
if (emprunteur == null) str = str + "
libre"; return str;
return false; }
else return true; return str;
} }
}
} }

22/09/23 06:47 PM 10
Objet

Un objet est une instance d’une classe:


Livre monLivre = new Livre();

L’objet monLivre a toutes les propriétés


de sa classe. Par exemple :
 monLivre.titre
 monLivre.estEmprunte()

22/09/23 06:47 PM 11
Constructeur

L’instanciation d’une classe en un objet fait appel


à une méthode constructeur qui effectue des
opérations d’initialisation.

• Un constructeur a le même nom que sa classe;


• Un constructeur n’a pas de valeur de retour;
• Il peut exister plusieurs constructeurs (avec des paramètres
d’entrée différents);
• Il faut au moins un constructeur dans une classe pour pouvoir
instancier des objets.

22/09/23 06:47 PM 12
Constructeur Livre

class Livre {

Livre() { …
titre = null; Livre monLivre;
emprunteur = null; monLivre = new Livre();
numero = 0; …
} Livre unLivre;
unLivre = new Livre("Java",123);
Livre(String t, int n) {
titre = t; …
numero = n;
emprunteur = null;
}

}

22/09/23 06:47 PM 13
Méthode main

Une classe exécutable dispose d'une méthode:


public static void main(String[ ] args)

La méthode main est la première exécutée au début du programme

public class Enregistrement {


public static void main(String[ ] args) {
Lecteur l = new Lecteur("Youssef");
l.inscrit();
}
}

22/09/23 06:47 PM 14
Syntaxe du langage

22/09/23 06:47 PM 15
Types primitifs
Même types
Plus deux nouveaux types :
qu'en C: • boolean
• int • byte
• float
Plus la classe :
• double • String
• short

• long
Déclaration :
• int monEntier;
• char • String chaine;
• void • boolean test;

22/09/23 06:47 PM 16
Structures de contrôle

Instruction conditionnelle

if <condition> {bloc_si_vrai} else {bloc_si_faux}

Exemple :

if ( emprunteur.getStatut() = = "employe") {
unLivre.setDateRetour(30);
} else {
unLivre.setDateRetour(15);
}

22/09/23 06:47 PM 17
Structures de contrôle

Instruction itérative

while <condition> {bloc}

Exemple :

while ( i < biblio.nbLivres() ) {


Livre l = biblio.getLivre(i);
l.setDisponible(true);
i++;
}

22/09/23 06:47 PM 18
Structures de contrôle

Instruction itérative

for (<init>; <condition>; <increment>) {bloc}

Exemple :

for (int i = 0; i < biblio.nbLivres(); i++ ) {


Livre l = biblio.getLivre(i);
l.setDisponible(true);
}

22/09/23 06:47 PM 19
Structures de contrôle

Instruction de choix multiple


switch (<variable>) { Exemple :
case <val1>: <bloc1>
case <val2>: <bloc2> switch (l.getCategorie()) {
… case 1: l.setDuree(15);
default: <bloc> break;
} case 2: l.setDuree(20);
break;
default: l.setDuree(30);
}

22/09/23 06:47 PM 20
Environnement Java

22/09/23 06:47 PM 21
Packages
Un package regroupe des classes et des sous-
packages sous un thème précis. Exemple :
 Le package java contient des classes de base du
langage.
 Le package java.net contient des classe pour la
programmation réseau.

Pour créer un package, vous devez préciser son nom au début


d'une classe.
package bibliotheque;

public class Livre {…


}
22/09/23 06:47 PM 22
Recommandations de développement

 Le code source d'une classe doit être enregistré


dans un fichier de même nom que la classe. Ex:
Livre.java
 Toutes les classes d'un package doivent être dans
un répertoire de même nom que le package. Ex:
C:\MesProgs\src\exemples\bibliotheque\Livre.java
 En général, chaque nom de classe commence par
une majuscule.

22/09/23 06:47 PM 23
Import

Pour utiliser une classe d'un autre


package, il faut l'importer.
package exemples.bibliotheque;

import java.util.*;
/* import java.util.Vector; marche aussi */

public class Livre {


Vector liste;

}

22/09/23 06:47 PM 24
Langage interprété ?

Code source

Compilateur

Bytecode

Interpréteur

Code machine

Système d'exploitation

22/09/23 06:47 PM 25
Compilation

Le code source est compilé par l'instruction javac


javac Livre.java
Deux options sont nécessaires pour
• Enregistrer le bytecode dans autre un répertoire
javac –d <répertoire> <code source>
• Compiler si des classes d'autres packages sont utilisées
javac –classpath <répertoires> <code source>

Exemple :
javac –d C:\MesProgs\classes -classpath C:\MesProgs\src Livre.java

22/09/23 06:47 PM 26
Exécution

Une classe exécutable se lance avec l'instruction java suivie de


son nom complet (avec son package).
java exemples.bibliotheque.Livre
Une options est nécessaire si des classes d'autres packages sont
utilisées:
java –classpath <répertoires> <classe exécutable>

Exemple :
java -classpath C:\MesProgs\classes exemples.bibliotheque.Livre

22/09/23 06:47 PM 27
Documentation

Une documentation HTML peut être générée pour décrire des


packages par l'instruction javadoc
• l'option –d existe aussi pour spécifier un répertoire de
destination

javadoc –d C:\MesProgs\doc exemples

Les fichiers sources doivent être correctement commentés pour


créer une véritable documentation.

22/09/23 06:47 PM 28
Tags de documentation

 @author pour afficher les noms des


auteurs de la classe
 @param pour décrire les paramètres
d'entrée d'une méthode
 @return pour décrire la valeur de retour
d'une méthode
 @see pour créer un lien vers d'autres
classes

22/09/23 06:47 PM 29
Application Programming Interface
(API)

22/09/23 06:47 PM 30
Application Programming Interface

L'API (Application Programming Interface) désigne un


ensemble de classes génériques utilisables par un développeur
Java.

L'API du SDK 1.4 a été étendue de manière incrémentale


depuis la version 1.02 du JDK.

Le code source des classes est disponible.

22/09/23 06:47 PM 31
Packages java, javax et org

L'API du SDK 1.4 est découpée en packages qui regroupent


les classes par thème.

Au plus haut niveau :


 le package java contient des classes couramment utilisées
 le package javax contient des extensions plus spécialisées
 le package org contient des extensions proposées par
d'autres organisations (comme l'Object Management Group)

22/09/23 06:47 PM 32
Quelques packages

 java.lang : classes de base du langage


 java.util : classes utilitaires
 java.io : classes de gestion des entrées/sorties
 java.net : classes pour la programmation
réseau
 java.awt : classes graphiques
 javax.swing : autres classes graphiques

22/09/23 06:47 PM 33
Classe java.lang.String

Représente une chaîne de caractères


 Constructeurs:
 String s = new String();
 String s = new String("hello");
 Quelques méthodes:
 int length();
 char charAt(int pos);
 boolean equals(Object o);
 int indexOf(char c);
 String substring(int debut, int fin);

22/09/23 06:47 PM 34
Classe java.util.Vector

Représente un ensemble ordonné d'éléments


 Constructeur :
 Vector v = new Vector();
 Quelques méthodes:
 int size();
 boolean isEmpty();
 boolean contains(Object o);
 Object elementAt(int pos);
 void setElementAt(Object o, int pos);
 void addElement(Object o);

22/09/23 06:47 PM 35
Classe java.lang.Math

 Pas de constructeur
 Uniquement des méthodes et variables static:
 Math.PI, Math.E
 double cos(double a);
 double sqrt(double a);
 double pow(double a, double b);
 int round(float a);
 int max(int a, int b);

22/09/23 06:47 PM 36
Attributs d'instance ou de classe
Une variable ou méthode appartient à une
instance sauf si elle est static auquel cas elle
appartient à la classe.
Attribut d'instance Attribut de classe
public String getTitre() … Class Integer {…
s'appelle sur un objet static int MAX_VALUE…}
s'appelle sur une classe
Livre monLivre = newLivre();
monLivre.getTitre();
int val = Integer.MAX_VALUE;
Livre.getTitre();

22/09/23 06:47 PM 37
La relation d'héritage

22/09/23 06:47 PM 38
Introduction

Premier niveau d'abstraction :


 Distinction entre instance et classe
•La propriété d'héritage permet de généraliser plusieurs classes
pour manipuler des entités à un plus haut niveau d'abstraction.
•Par exemple, des classes Voiture, Camion, Moto peuvent
être généralisées en une classe Véhicule.

Avantages :
 Effectuer un même traitement sur des objets de classes
différentes;
 Éviter la redondance de structure.
22/09/23 06:47 PM 39
Introduction

Concrètement, l'héritage consiste à factoriser des attributs


communs à plusieurs classes.

Lecteur Employé
String nom; String nom;
String prenom; String prenom;
String adresse; String adresse;
Statut statut;
Livre[] emprunts;

22/09/23 06:47 PM 40
Introduction

Personne
String nom;
String prenom;
String adresse;

Lecteur Employé
Statut statut;
Livre[] emprunts;

Les classes Lecteur et Employé héritent de la classe Personne

22/09/23 06:47 PM 41
Héritage des données

Si la classe CompteEpargne hérite de la


Compte classe Compte, les données de Compte
double solde; seront encapsulées dans CompteEpargne.
Client proprietaire;
Les instances de Compte ont les données :
 solde
 propriétaire
Les instances de CompteEpargne ont les
CompteEpargne données :
 solde
double txInteret;  propriétaire
 txInteret
22/09/23 06:47 PM 42
Héritage des méthodes

Les méthodes de la classe Compte sont


Compte
encapsulées dans la classe CompteEpargne.
double solde;
Client proprietaire; Les instances de Compte peuvent invoquer
void passer(Ordre) les méthodes :
double consulter()
 void passer(Ordre)
 double consulter()
Les instances de CompteEpargne peuvent
CompteEpargne invoquer les méthodes :
double txInteret;  void passer(Ordre)
double ajoutInteret()  double consulter()
 double ajoutInteret()

22/09/23 06:47 PM 43
Héritage des méthodes

public class Compte {



public void passer(Ordre o) {
if (o.debiteur = = this) {
solde = solde – o.montant;
} else {
solde = solde + o.montant;
}
}
Problème: si…la classe CompteEpargne doit calculer des intérêts
}
temporaires après chaque Ordre, la méthode passer(Ordre) de
Compte n'est pas valide.
 Heritage impossible ? Modification de Compte ?

22/09/23 06:47 PM 44
Surcharge de méthodes

La surcharge est la pratique consistant à écrire


Compte
dans une classe B, héritant d'une classe A, une
double solde; méthode qui existe dans la classe A.
Client proprietaire;
void passer(Ordre) Pour qu'une méthode de B surcharge une méthode de
double consulter() A, il faut que leurs signatures soient exactement
identiques (nom, type des paramètres d'entrée, type
de retour).

Les instances de CompteEpargne peuvent invoquer les


CompteEpargne méthodes :
double txInteret;  consulter() de la classe Compte
double ajoutInteret()  ajoutInteret() et passer(Ordre) de la classe
void passer(Ordre) CompteEpargne

22/09/23 06:47 PM 45
Exemple de surcharge

public class CompteEpargne extends Compte {



public void passer(Ordre o) {
int periode = calculerPeriode();
float interets = (solde * txInteret) * (periode/365);
interetsTemporaires = interetsTemporaires + interets;
super.passer(o);
}
public CompteEpargne(float sol, Client prop) {
super(sol,prop);
}
}

22/09/23 06:47 PM 46
Polymorphisme

Le polymorphisme est la faculté d'effectuer un traitement


différent pour l'appel d'un même symbole.
 Le traitement dépend du receveur
Exemple :
 Tous les objets instances de la classe Compte ou d'une sous-
classe de Compte ont une méthode passer(Ordre).
 L'appel à la méthode passer(Ordre) effectue un traitement
dépendant de la classe de l'objet par lequel elle est invoquée.

Il n'est parfois pas important de connaître la nature précise du


traitement.
22/09/23 06:47 PM 47
Polymorphisme

Les comptes débiteur et créditeur d'un objet Ordre peuvent être


des objets de la classe Compte ou d'une sous-classe de Compte
(CompteEpargne, CompteCheque, …)
public void passerListe(Ordre[ ] o) {
for (int i = 0; i < o.length; i++) {
Compte deb = o.debiteur;
Compte cre = o.crediteur;
deb.passer(o);
cre.passer(o);
}
}

22/09/23 06:47 PM 48
L'héritage est transitif

Compte La classe CompteEpargne


classe Compte encapsule
CompteEpargneBloque
CompteChèque encapsule ::
La encapsule :
double solde; solde,
solde,
encapsule
 propriétaire, txInteret
: propriétaire
Client proprietaire;  passer(Ordre)
passer(Ordre)
solde, proprietaire,
[de
[de txInteret,
[deCompte]
CompteEpargne]
Compte]
void passer(Ordre) retirer(double)
double ajoutInteret()
duree
 void passer(Ordre) [de
CompteEpargneBloque]
CompteCheque CompteEpargne  double ajoutInteret()

retirer(double) double txInteret;


double ajoutInteret()
void passer(Ordre) CompteEpargneBloque

Date duree;
void passer(Ordre)

22/09/23 06:47 PM 49
Interfaces & classes abstraites

22/09/23 06:47 PM 50
Héritage multiple

Certains langages de programmation orienté-objet autorisent une


classe à hériter de plusieurs classes.

Rectangle Losange
String description() { String description() {
return "4 angles droit"; return "4 côtés égaux";
} }

Carre

Si description() n'est pas surchargée quelle méthode doit être appelée pour les
objets de la classe Carré ?

22/09/23 06:47 PM 51
Héritage multiple

Les langages OO proposent des solutions diverses à ce problème :


 Tout conflit provoque une erreur de compilation (AGL,
certains compilateurs C++);
 Une priorité d'héritage est définie
 La résolution des conflits est aléatoire (certains compilateurs
C++).
Le problème de l'héritage multiple concerne les traitements et
non les signatures de méthode. Le langage Java :
 interdit l'héritage multiple;
 propose d'utiliser des interfaces pour simuler l'héritage
multiple.

22/09/23 06:47 PM 52
Interfaces

Une interface déclare les méthodes que certaines classes


doivent obligatoirement implémenter.
Une interface :
ne contient aucune donnée;
contient des signatures de méthodes;
n'associe aucune implémentation à ses méthodes.
Si une classe implémente une interface, elle doit contenir les
méthodes décrites dans l'interface en y associant un traitement.
une classe peut implémenter plusieurs interfaces;
une interface ne peut pas être instanciée;
une interface peut hériter d'une autre interface.
22/09/23 06:47 PM 53
Exemple d'interface

Personne
String nom;
String adresse;

Employé Client
double salaire; Compte compte;
double getSalaire() {…} Compte getCompte() {…}

Si un employé peut ou non être aussi un client, comment faire ?

22/09/23 06:47 PM 54
Exemple d'interface

Client Personne
String nom;
Compte renvoieCompte();
String adresse;

ClientExterne Employé
Compte compte; double salaire;
Compte getCompte() {…} double getSalaire() {…}

ClientInterne
Compte compte;
Compte getCompte() {…}

22/09/23 06:47 PM 55
Exemple d'interface

public interface Client {


public Compte renvoieCompte();
}

public class ClientExterne extends Personne implements Client {


private Compte compte;

public Compte renvoieCompte() {


return compte;
}
}

22/09/23 06:47 PM 56
Niveaux d'abstraction des objets

Pas de données Données

Classe Interface Classe


Pas de méthodes
Classe abstraite Classe abstraite

Classe Classe
Traitements des méthodes
Classe abstraite Classe abstraite
Interface
Signatures des méthodes Classe abstraite Classe ?
abstraite

22/09/23 06:47 PM 57
Classes abstraites

Une classe abstraite est une classe dont certaines méthodes ne


sont pas implémentées.
 Une classe abstraite ne peut pas être instanciée;
 Une classe abstraite peut hériter d'une classe (abstraite ou
non)
 Une classe abstraite peut implémenter plusieurs interfaces
(sans être obligée d'implémenter leurs méthodes)
 Une classe peut hériter d'une seule classe (abstraite ou non)
 Si une classe hérite d'une classe abstraite, elle doit
implémenter toutes ses méthodes abstraites (sans traitement)
ou être elle aussi abstraite.

22/09/23 06:47 PM 58
Exemple de classe abstraite

Salarie
double salaire;
double getSalaire() {
return salaire;
}
verserSalaire();

ClientInterne Employe
Compte compte; verserSalaire() {
Compte getCompte() {…} envoyerCheque(salaire);
verserSalaire() { }
compte.credite(salaire);
}

22/09/23 06:47 PM 59
Exemple de classe abstraite

public abstract class Salarie {


protected float salaire;

public float renvoieSalaire {


return salaire;
}
public abstract void verserSalaire();
}

public class ClientInterne extends Salarie {


Compte compte;

public void verserSalaire() {


compte.credite(salaire);
}
}

22/09/23 06:47 PM 60
Gestion des exceptions

22/09/23 06:47 PM 61
Notion d'exception

En Java, les erreurs se produisent lors d'une


exécution sous la forme d'exceptions.
Une exception :
 est un objet, instance d'une classe d'exception
 provoque la sortie d'une méthode
 correspond à un type d'erreur
 contient des informations sur cette erreur

22/09/23 06:47 PM 62
Classes d'exceptions

Une classe d'exception hérite de java.lang.Throwable.


Elle correspond à un type d'erreur et encapsule des informations
relatives à l'erreur qui s'est produite.
La méthode public String getMessage() renvoie une chaîne de
caractères décrivant l'exception.
 IndexOutOfBoundsException
 NullPointerException
 NumberFormatException
 ClassCastException

22/09/23 06:47 PM 63
Déclaration des exceptions possibles

Chaque méthode doit déclarer dans sa signature les


exceptions qu'elle peut émettre.
La liste des exceptions possible est indiquée à la fin de
la signature par throws suivi des classes d'exceptions
concernées.
public static int parseInt(String s) throws NumberFormatException
{

}

22/09/23 06:47 PM 64
Émission et création d'exceptions

Lorsqu'une erreur est détectée dans une méthode, il faut :


1. Créer un objet d'une classe d'exception
2. Émettre l'exception

int getValue(int pos) throws IndexOutOfBoundsException {


if (pos > tab.length)
throw new IndexOutOfBoundsException("trop grand");
else return tab[pos];
}

22/09/23 06:47 PM 65
Traitement des exceptions

Si une méthode peut émettre une exception (ou appelle


une autre méthode qui peut en émettre une) il faut :

 soit propager l'exception (la méthode doit l'avoir


déclarée);
 soit intercepter et traiter l'exception.

22/09/23 06:47 PM 66
Propagation d'exceptions

public int ajouter(int a, String str) throws NumberFormatException


int b = Integer.parseInt(str);
a = a + b;
return a;
}

22/09/23 06:47 PM 67
Interception d'exceptions

public int ajouter(int a, String str) {


try {
int b = Integer.parseInt(str);
a = a + b;
} catch (NumberFormatException e) {
System.out.println(e.getMessage());
}
return a;
}

22/09/23 06:47 PM 68

Vous aimerez peut-être aussi