IHM2
IHM2
IHM2
Pr A. Majda
2017 - 2018
DÉROULEMENT DU COURS
Initiation au Langage Java
Introduction
Outils de développement
Données, Types et Operateurs
Les structures alternatives et répétitives
Les tableaux de données et chaines de caractères
Les instructions d’écriture et de lecture
Une classe est un ensemble de données et de fonctions regroupées dans une même entité
pour former un type d’objets donné.
Pour accéder à une classe il faut en déclarer une instance de classe ou objet.
Instancier une classe consiste à créer un objet sur son modèle.
Entre classe et objet il y a, en quelque sorte, le même rapport qu'entre type et variable.
3
LES CLASSES ET OBJETS
Le concept de classe
Exemple : Classe Personne
Personne
Nom de la prenom : chaine
classe nom : chaine
age : entier
Attributs
- identifie()
- initialise(chaine, chaine, entier)
Méthodes
4
LES CLASSES ET OBJETS
Les objets
8
LES CLASSES ET OBJETS
Nom de l’objet, la
référence ou Relation d’instanciation :
l’instance instanceof
p1
- prenom = "Aaaa"
- nom = "Bbbb"
- age = 30
p1
1. Personne p1; null
p1
objet
Programme de test
// import Personne;
import java.io.*;
public class Test1{
public static void main(String arg[]){
Personne p1=new Personne ();
p1.initialise ("Aaaa","Bbbb",30);
System.out.print("p1=");
p1.identifie();
}
}
Résultat
p1= Aaaa , Bbbb , 30 12
LES CLASSES ET OBJETS
Remarques
1- la variable p1 contient une référence (adresse ) sur l'objet
instancié.
2- L'opérateur new est un opérateur de haute priorité qui permet d’:
instancier des objets
appeler une méthode particulière de cet objet : le contructeur.
13
LES CLASSES ET OBJETS
Partie « statique »
Ne varie pas d’une instance de classe à une autre
Permet d’activer l’objet
Partie « dynamique »
Varie d’une instance de classe à une autre
Varie durant la vie d’un objet
14
LES CLASSES ET OBJETS
15
LES CLASSES ET OBJETS
Objet temporaire
C’est un objet
créé par un constructeur
N’est pas référencé
construit pour les besoins d'évaluation de l'expression puis abandonné.
18
LES CLASSES ET OBJETS
Destruction et ramasse-miettes
La destruction des objets se fait de manière implicite
Le ramasse-miettes ou Garbage Collector se met en route
Automatiquement :
Si plus aucune variable ne référence l’objet
Si le bloc dans lequel il était défini se termine
Si l’objet a été affecté à "null"
Manuellement :
Sur demande explicite du programmeur " System.gc() "
Un pseudo-destructeur « protected void finalize() » peut être défini
explicitement par le programmeur. Il est appelé juste avant la libération de la
mémoire par la machine virtuelle, mais on ne sait pas quand.
19
LES CLASSES ET OBJETS
20
LES CLASSES ET OBJETS
En général
les données d'une classe sont déclarées privées alors que ses méthodes sont
déclarées publiques.
21
LES CLASSES ET OBJETS
Les données (attributs) doivent être protégés et accessibles pour l’extérieur par des
accesseurs 22
LES CLASSES ET OBJETS
Autres modificateurs
abstract la classe ne pourra pas être instanciée: ses méthodes ne sont pas
implémentées
23
LES CLASSES ET OBJETS
Cette initialisation ne s'applique pas aux variables locales des méthodes de la classe.
Les valeurs par défaut lors de l'initialisation automatique des variables d'instances
sont :
Type Valeur par défaut
Boolean false
byte, short, int, long 0
float, double 0.0
char \u000 (null Character)
class null
25
LES CLASSES ET OBJETS
Les méthodes
Les méthodes sont des fonctions qui implémentent les traitements de la classe.
Syntaxe de déclaration :
modificateurs type_val_retour nom_méthode ( arg1, ... ) {
... // définition des variables locales et du bloc d'instructions }
Syntaxe d’appel :
Nom_objet.nom_méthode ( par1, ... )
Exemples
int add(int a, int b) { return a + b; }
Si la méthode retourne un tableau
27
LES CLASSES ET OBJETS
Exemple : Surcharge
public class Voiture { public class Test1 {
private int puissance; public static void main (String[] argv) {
private double vitesse; // Déclaration puis création de v1
Voiture v1 = new Voiture();
private boolean estDemarree;
// Accélération 1 avec un double
… v1.accelere(123.5);
public void accelere(double vitesse) { // Accélération 2 avec un entier
if (estDemarree) { v1.accelere(124);
this.vitesse = this.vitesse + vitesse; }
} }
}
public void accelere(int vitesse) {
if (estDemaree) {
this.vitesse = this.vitesse +(double)vitesse;
}
}
... }
28
LES CLASSES ET OBJETS
Les constructeurs
Un constructeur est une méthode qui porte le nom de la classe et qui est appelée lors
de la création de l'objet.
Initialiser l'objet
C'est une méthode qui :
peut accepter des arguments
ne rend aucun résultat.
Son prototype n’est précédé d'aucun type (même pas void).
Forme générale :
n_classe objet;
objet=new n_classe(arg1,arg2, ... argn);
ou
n_classe objet =new n_classe(arg1,arg2, ... argn); 29
LES CLASSES ET OBJETS
32
LES CLASSES ET OBJETS
Programme de test
// import Personne;
import java.io.*;
public class Test1{
public static void main(String arg[]){
Personne p1=new Personne("Aaaa","Bbbb",30);
System.out.print("p1="); p1.identifie();
Personne p2=new Personne(p1);
System.out.print("p2="); p2.identifie();
}
}
33
LES CLASSES ET OBJETS
34
LES CLASSES ET OBJETS
Les objets
Leur référence est recopiée et non pas les attributs
Leur modification dans la méthode entraîne celle de l’original !!!
36
LES CLASSES ET OBJETS
Exemple : type simple
public class param2{
private static void changeString(String S){
S="Mardi";
System.out.println(" Dans la methode S="+S); }
private static void changeInt(int a){
a=21;
System.out.println(" Dans la methode a="+a); }
public static void main(String[] arg){
String S="Lundi";
changeString(S);
System.out.println(" Dans main S="+S);
int jour=20;
changeInt(jour);
System.out.println(" Dans main jour="+jour); }
37
}
LES CLASSES ET OBJETS
Exemple : type objet
// import Personne;
public class test1{
public static void main(String arg[]){
Personne p1=new Personne("Jjjj","Dddd",30);
System.out.print("avant methode 1: "); p1.identifie();
modifie1(p1);
System.out.print("après methode 1 : "); p1.identifie();
System.out.print("avant methode 2: "); p1.identifie();
modifie2(p1);
System.out.print("après methode 2 : "); p1.identifie();
} // main
private static void modifie1(Personne P){
P.initialise("Ssss","Vvvv",52);
System.out.print("dans methode1 :"); P.identifie(); } // modifie1
Accesseurs et Mutateurs
// accesseurs = getters
public String getPrenom(){ return prenom; }
public String getNom(){ return nom;}
public int getAge(){ return age;}
//modificateurs = setters
public void setPrenom(String P){ this.prenom=P;}
public void setNom(String N){ this.nom=N; }
public void setAge(int age){ this.age=age; }
}
41
LES CLASSES ET OBJETS
Programme de test2
public class Test1{
public static void main(String[] arg){
Personne P=new Personne("Cccc","Dddd",20);
System.out.println("P=("+P.getPrenom()+","+P.getNom()+","+P.getAge()+")");
P.setAge(24);
System.out.println("P=("+P.getPrenom()+","+P.getNom()+","+P.getAge()+")");
}
}
Résultats :
P=(Cccc,Dddd,20)
P=(Cccc,Dddd,24)
42
LES CLASSES ET OBJETS
Les méthodes et attributs de classe
Attributs :
Il peut être utile de définir pour une classe des attributs indépendamment des instances :
nombre d’objets créées
Utilisation des Variables de classe comparables aux " variables globales"
Exemple : private static long nbPersonnes; // nombre de Personnes créées
Méthodes :
Ce sont des méthodes qui ne s'intéressent pas à un objet particulier
Utiles pour des calculs intermédiaires internes à une classe
Utiles également pour retourner la valeur d'une variable de classe en visibilité private
Elles sont définies comme les méthodes d'instances, mais avec le mot clé static
Exemple : public static long getNbPersonnes(){
return nbPersonnes; }
43
LES CLASSES ET OBJETS
La classe Personne devient la suivante :
public class Personne{
// attribut de classe
private static long nbPersonnes=0;
// attributs d'objets
…
// constructeur
public Personne(String P, String N, int age){
this.prenom=P;
this.nom=N;
this.age=age;
nbPersonnes++;
}
// méthodes
…
// méthode de classe
public static long getNbPersonnes(){
44
return nbPersonnes; } } // class
LES CLASSES ET OBJETS
45
LES CLASSES ET OBJETS
Les tableaux d’objets en Java
Un objet est une donnée comme une autre : Plusieurs objets peuvent être rassemblés
dans un tableau
// import Personne;
public class test1{
public static void main(String arg[]){
Personne[] amis= new Personne[3];
System.out.println("----------------");
amis[0]=new Personne("Aaaa","Bbbb",30);
amis[1]=new Personne("Cccc","Dddd",52);
amis[2]=new Personne("Eeee","Ffff",66);
int i;
for(i=0;i<amis.length;i++)
amis[i].identifie();
} 46
}
L'HÉRITAGE
Définition
Technique offerte par les langages de programmation orientée objet pour
construire une classe à partir d’une autre classe (ou plusieurs) en partageant
ses attributs et opérations
Intérêts
Spécialisation, enrichissement : une nouvelle classe réutilise les attributs et
les opérations d’une classe en y ajoutant des attributs et/ou des opérations
particulières à la nouvelle classe
Redéfinition : une nouvelle classe redéfinit les attributs et opérations d’une
classe de manière à en changer le sens et/ou le comportement pour le cas
particulier défini par la nouvelle classe
Réutilisation : évite de réécrire du code existant et parfois on ne possède pas
les sources de la classe à hériter
47
L'HÉRITAGE
Héritage et Java
Utilisation du mot-clé extends après le nom de la classe
Une classe ne peut hériter que d’une seule autre classe
Exemple :
class Enseignant extends Personne{
…}
N.B. : Dans certains autres langages (ex : C++) possibilité d’héritage multiple
Exemple :
class Chef_dep extends Enseignant{
…}
48
L'HÉRITAGE
Exemple
Classe Enseignant hérite des propriétés de la classe Personne,
on écrira : public class Enseignant extends Personne
Personne est appelée la classe mère (super classe)
Enseignant la classe fille (ou dérivée, sous classe)
Exemple (suite)
public class Personne{
private String prenom;
private String nom;
private int age;
La classe Enseignant n'a pas de méthode identité mais sa classe mère en a une.
Cette fonction devient par héritage une méthode publique de la classe Enseignant .
Généralisation et Spécialisation
La généralisation exprime une relation « est-un » entre une classe et sa super-classe
Personne
Raffinement
Abstraction
Super-classe
Enseignant
Sous-classe
L’héritage permet
de généraliser dans le sens abstraction
de spécialiser dans le sens raffinement
52
L'HÉRITAGE
Remarques
53
L'HÉRITAGE
Surcharge et redéfinition
Surcharge : possibilité de définir des méthodes possédant le même nom mais dont les
arguments (paramètres et valeur de retour) diffèrent
Redéfinition : lorsque la sous-classe définit une méthode dont le nom, les paramètres
et le type de retour sont identiques
54
L'HÉRITAGE
Exemple
Dans l'exemple précédent :
On a uniquement l’identité de la partie Personne de l'Enseignant
manque de certaines informations propres à la classe Enseignant (la section).
En général
etc…
L'héritage permet donc de redéfinir dans la classe fille des méthodes de même nom
dans la classe mère
Adapter la classe fille à ses propres besoins.
56
L'HÉRITAGE
Programme de test
Si on considère le même exemple que précédemment :
// import Personne;
// import Enseignant;
public class test1{
public static void main(String arg[]){
Enseignant E= new Enseignant("Jjjj","Dddd",30,27);
System.out.println(E.identite()); }
}
Résultats obtenus :
Enseignant(Personne(Jjjj,Dddd,30),27)
57
L'HÉRITAGE
58
L'HÉRITAGE
Exemple
Soit le programme suivant :
// import Personne;
// import Enseignant;
public class test1{
public static void main(String arg[]){
Enseignant e= new Enseignant("Llll","Dddd",56,61);
affiche(e);
Personne p= new Personne("Jjjj","Dddd",30);
affiche(p); }
public static void affiche(Object obj){
System.out.println(obj.toString()); }
}
Méthode définie
Les résultats obtenus sont les suivants : dans la classe
Enseignant@1ee789 Object
Personne@1ee770 59
L'HÉRITAGE
Procédure
Il cherche une méthode toString() dans la hiérarchie des classes menant à la classe
Enseignant en commençant par la dernière :
1. dans la classe Enseignant, il ne trouve pas de méthode toString()
2. dans la classe mère Personne, il ne trouve pas de méthode toString()
3. dans la classe mère Object, il trouve la méthode toString() et l'exécute
60
L'HÉRITAGE
Remarque
On peut redéfinir la méthode toString de la classe mère Object pour les classes
Personne et Enseignant.
public class Personne{
...
public String toString(){
return "Personne("+prenom+","+nom+","+age+")"; }
... }
class Enseignant extends Personne{
private int section;
…
public String toString(){
return "Enseignant("+super.toString()+","+section+")"; }
61
}
PAQUETAGES (PACKAGES)
API
Paquetages
Interfaces Classes
Attributs Méthodes
62
PAQUETAGES (PACKAGES)
Exemples de paquetages
Un paquetage est donc un groupe de classes associées à une fonctionnalité
java.io : lecture et écriture
java.lang : rassemble les classes de base Java (Object, String, System, …)
java.util : rassemble les classes utilitaires (Collections, Date, …)
…
L’utilisation des paquetages permet de regrouper les classes afin d’organiser
des libraires de classes Java
63
PAQUETAGES (PACKAGES)
Les paquetages : Utilisation des classes
Lorsque, dans un programme, il y a une référence à une classe, le compilateur la
recherche dans le paquetage par défaut (java.lang)
Pour les autres, il est nécessaire de fournir explicitement l’information pour savoir où se
trouve la classe :
Utilisation d’import (classe ou paquetage)
ou Nom du paquetage avec le nom de la classe
Exemples
import mesclasses.Point;
import java.lang.String; // Ne sert à rien puisque par défaut
import java.io.ObjectOutput;
import mesclasses.*;
import java.lang.*; // Ne sert à rien puisque par défaut
import java.io.*;
java.io.ObjectOuput toto = new java.io.ObjectOuput(...) 64
PAQUETAGES (PACKAGES)
Exemple package
mesclasses;
C1.java
C2.java
I1.java
65
PAQUETAGES (PACKAGES)
java
String.java
66
PAQUETAGES (PACKAGES)
Création de paquetages sous Eclipse
package mesclasses;
// une interface I1
public interface I1{
int ajouter(int i,int j);
int soustraire(int i,int j);} 67
PAQUETAGES (PACKAGES)
Paquetages
import java.util.zip.*; différents
import java.util.*;
public class Essai {
...
public Essai() {
Date d = new Date(...);
ZipFile z = new ZipFile(...);
...
}
...
} 68
CLASSES INTERNES
L’utilisation d’une classe interne est souhaitable lorsque la classe n'a d'utilité que dans la
classe qui la contient.
69
CLASSES INTERNES
70
CLASSES INTERNES
// main
public static void main(String arg[]){
Test t1= new Test("a100","velo",1000);
System.out.println("art="+t1.getArticle());
System.out.println("art="+t1.toString());
}
} // fin classe Test
71
CLASSES ABSTRAITES
Intérêts
On ne connaît pas toujours le comportement par défaut d’une opération commune à
plusieurs sous-classes
Exemple : aire d’une forme géométrique. On sait que toutes les formes géométriques
ont une aire, mais la formule est différente d’une forme à l’autre
Solution : on peut déclarer la méthode « abstraite » dans la classe mère et ne
pas lui donner d’implantation par défaut
Méthode abstraite et conséquences : 3 règles à retenir
1- Si une seule des méthodes d’une classe est abstraite, alors la classe devient aussi
abstraite
2- On ne peut pas instancier une classe abstraite car au moins une de ses méthodes n’a
pas d’implémentation
3- Toutes les classes filles héritant de la classe mère abstraite doivent implémenter
toutes ses méthodes abstraites ou sinon elles sont aussi abstraites
72
CLASSES ABSTRAITES
import java.math.*;
public class Cercle extends Forme { public class Rectangle extends Forme {
… …
public float aire(int x, int y){ public float aire(int l, int h){
return (float)Math.PI*x*y; return l*h;
} }
…} …}
Programme de test
public class test {
public static void main(String[] args) {
…
Cercle c1=new Cercle(1,1,25);
System.out.println("L'aire est "+c1.aire(25, 25));
…
Forme f1=new forme(); // Erreur
}
}
75
Notion d’interface
Une interface est un modèle pour une classe
Quand toutes les méthodes d’une classe sont abstraites et il n’y a aucun attribut on
aboutit à la notion d’interface
Elle définit la signature des méthodes qui doivent être implémentées dans les classes
qui respectent ce modèle (Ce contrat)
Toute classe qui implémente l’interface doit implémenter toutes les méthodes définies
par l’interface
Tout objet instance d’une classe qui implémente l’interface peut être déclaré comme
étant du type de cette interface
Les interfaces pourront se dériver 76
INTERFACES
Mise en œuvre d’une interface
Mise en œuvre d’une interface
La définition d’une interface se présente comme celle d’une classe. On y utilise
simplement le mot clé interface à la place de class
public interface NomInterface {
...}
Lorsqu’on définit une classe, on peut préciser qu’elle implémente une ou plusieurs
interfaces donnée(s) en utilisant une fois le mot clé implements
public class NomClasses implements Interface1, Interface2, ... {
...}
Si une classe hérite d’une autre classe elle peut également implémenter une ou plusieurs
interfaces
public class NomClasses extends SuperClasse implements Interface1, ... {
...}
77
INTERFACES
Mise en œuvre d’une interface
78
INTERFACES
Mise en œuvre d’une interface
Toute classe qui implémente l’interface doit implémenter toutes les méthodes définies par
l’interface
Exemple
// une interface I1
public interface I1{
int ajouter(int i,int j);
int soustraire(int i,int j);}
79
INTERFACES
Mise en œuvre d’une interface
Tout objet instance d’une classe qui implémente l’interface peut être déclaré comme étant
du type de cette interface
Exemple :
public class Test{
…
public static void main(String[] arg){
// création d’un objet C
C1 c= new C1();
…
}//main I1 c= new C1();
}//classe test
80
INTERFACES
Mise en œuvre d’une interface
81
INTERFACES
Mise en œuvre d’une interface
Toute classe qui implémente l’interface doit implémenter toutes les méthodes définies par
l’interface
Exemple
// interface I2
public interface I2 extends I1 {
int multiplier( int i, int j);
}
82
INTERFACES
Programme de test : Importance des interfaces
public class Test{
private static void calculer(int i, int j, I1 in){
System.out.println(in.ajouter(i,j));
System.out.println(in.soustraire(i,j));}
public static void main(String[] arg){
// création de deux objets C1 et C2 Ex : Calcul de la remise pour
les produits dans un magasin
C1 c1= new C1(); Dépends :
• quantité dans le stock
C2 c2= new C2(); • Durée de vie
// appels de la fonction statique calculer • Produit d’import / terroirs
calculer(4,3,c1);
calculer(14,13,c2);
}//main }//classe Test
84
EXCEPTIONS
Mécanisme de traitement
85
EXCEPTIONS
86
EXCEPTIONS
Exemple : Attraper l’exception
import java.io.*;
public class Prog1{
public static void main(String[] args){
int[] tab=new int[] {0,1,2,3}; // déclaration & initialisation
for (int i=0; i<tab.length; i++)
System.out.println("tab[" + i + "]=" + tab[i]);
// génération d'une exception
try{ tab[100]=6;
}catch (Exception e){
System.err.println("L'erreur suivante s'est produite : " + e);
} //try-catch
} //main
} //classe
87
EXCEPTIONS
Throwable
Erreur non récupérable. Erreur que l’on peut traiter
« Plantage » de l’application puisque récupérable
Error Exception
ArithmeticException Exceper 88
EXCEPTIONS
Exemple 1
public class test
{ public static void main(String[] args)throws Exception
{
int i = 3; int j = 0;
try {
System.out.println("i/j="+calcul(i,j));
} catch (Exception e) {
System.out.println("Erreur : Division par zero");
throw e;
…
} Unreachable Code
}
static int calcul (int a, int b){
return a/b;
}
}
92
EXCEPTIONS
Exemple 2
import java.io.*;
public class TestErreur {
public static void main(java.lang.String[] args) {
int s=0;
try {
s=lireInt();
}
catch (IOException e) {
System.out.println(" Erreur de lecture ");
}
System.out.println(" L’entier est "+s);
}
static int lireInt()throws IOException{
BufferedReader br=new BufferedReader(new
InputStreamReader(System.in)) ;
String s=br.readLine();
return Integer.parseInt(s);
}
} 93
EXCEPTIONS
Exception
- message : String
+ Exception()
+ Exception(String) Constructeur avec ou sans
+ getMessage() : String argument
+ printStackTrace()
+…
ExcePer
Exception : finally
Bloc finally : c’est une instruction optionnelle qui peut servir de « nettoyage ».
Elle est exécutée quelle que soit le résultat du bloc try (c’est-à-dire qu’il ait
déclenché une exception ou non)
Intérêt double :
Rassembler dans un seul bloc un ensemble d’instructions qui autrement
auraient du être dupliquées
Effectuer des traitements après le bloc try, même si une exception a été
levée et non attrapée par les blocs catch
96
EXCEPTIONS
Exception : finally
…
{…
try {
s=lireInt();
}
catch (IOException e) {
System.out.println("Erreur de lecture"+e.getMessage());
}
catch (ExcePer e){
System.out.println(" Erreur : "+e.getMessage());
}
finally{System.out.println(" Fin du programme ");
System.exit(0); }
…
97
EXCEPTIONS
98