Poo2016-17 - copie2 - copie

publicité
Quelques remarques
□
package pile
□
import: import java.util.EmptyStackException;
□
structure de classes: nom de la classe, déclarations de variables et de méthodes
□
public class PileAL<T> implements Pile<T>{…}
□
héritage: implements
□
paramétrage par un type <T> , Pile<Integer>
□
public private
□
constructeur: public PileTabInteger() {}
□
méthodes (fonctions): public Integer empiler(Integer item) {…. }
□
variables
□
déclaration: private ArrayList<T> items;
□
instantiation: new PileTabInteger(100);
□
exception: throw new EmptyStackException();
□
(synchronized)
□
main: public static void main(String[] args) {…}
1
Remarques
□
□
Commentaires /* … */ et //
Définition de classe
■
■
□
une classe contient des méthodes (=fonctions) et des variables
Pas de fonctions ou de variables globales (uniquement dans des
classes ou des instances)
Méthode main:
■
public static void main(String[] arg)
□
□
□
□
■
public
static
Void
String
Point d’entrée du programme: l’interpréteur java exécute le
code de main
POO-IG H. Fauconnier
38
Remarques…
□
□
Classe: définit des méthodes et des variables
(déclaration)
Instance d’une classe (objet)
■
■
■
■
Méthode de classe: fonction associée à (toute la)
classe.
Méthode d’instance: fonction associée à une
instance particulière.
Variable de classe: associée à une classe (globale
et partagée par toutes les instances)
Variable d’instance: associée à un objet (instancié)
POO-IG H. Fauconnier
40
Les classes…
□
System
■
System.out variable (static) de classe
PrintStream
□
■
□
PrintStream contient print (et printf)
System.in variable (static) de classe
InputStream
Scanner
POO-L3
POO-IGH.H.Fauconnier
Fauconnier
58
F) java:
□
La compilation génère un fichier .class en
« bytecode » (langage intermédiaire indépendant de la
plateforme).
□
Le bytecode est interprété par un interpréteur Java JVM
Compilation commande javac
Interprétation commande java
POO-L3
POO-IGH.H.Fauconnier
Fauconnier
30
Langage intermédiaire et Interpréteur…
□
Avantage: indépendance de la
plateforme
■
□
Échange de byte-code (applet)
Inconvénient: efficacité
POO-L3
POO-IGH.H.Fauconnier
Fauconnier
31
Plateforme Java
□
La plateforme java: software au-dessus d’une
plateforme exécutable sur un hardware (exemple
MacOs, linux …)
□
Java VM
□
Java application Programming Interface (Java API):
POO-IG H. Fauconnier
32
Tout un environnement…
□
Java 2 sdk: JRE (java runtime environment + outils de
développements compilateur, debogueurs etc…)
POO-L3
POO-IGH.H.Fauconnier
Fauconnier
33
Chapitre II
Classes et objets (rappels)
(mais pas encore d’héritage)
Préliminaires
□
Compilation: vérifie le typage et génère le
code qui sera exécuté (le fichier .class)
par la machine virtuelle Java
□
Machine virtuelle java exécute le code:
□
(instructions, notions de types et de
références, pc et pile d’exécution et
« frame », tas …)
POO-IG H. Fauconnier
10
espace mémoire:
□
espace mémoire pour un processeur (processeur
similaire pour la machine virtuelle)
4G env
pile
0xffffffff
exécution
• code programme
• données statiques
tas
• à l’exécution: (taille
dynamique)
données statiques
compilation
0
texte
• déterminé à la
compilation: (taille
« fixe »)
0x00000000
POO-IG H. Fauconnier
• pile d’exécution
• zone d’allocation des
variables dans le tas
11
La mémoire
□
emplacement mémoire: adresse
(référence)
allocation:
0xFFFFFFFF
VARIABLE
adresses
data
0x00001234
0x0000000
taille de data
data
suivant les cas,
l’allocation peut
avoir lieu sur la
pile ou dans le
tas
POO-IG H. Fauconnier
12
pile
□
quand une fonction (méthode) est appelée:
□
fonction appelante:
□
empiler les arguments sur la pile
□
empiler l’adresse de retour (adresse de
l’instruction à exécuter au retour)
□
variables locales
□
programme compteur -> l’adresse de la
fonction
POO-IG H. Fauconnier
13
Classes et objets
□
I) Introduction
□
II) Classe: membres et modificateurs
□
III) Champs: modificateurs
□
IV) Vie et mort des objets, Constructeurs
□
V) Méthodes
□
VI) Exemple
classes et objets
POO-IG H. Fauconnier
60
I) Introduction
□
Classe
■
Regrouper des données et des méthodes
□
□
■
□
Classes<->type
Objet (ou instance)
■
Résultat de la création d’un objet
□
□
□
Variables de classe
Méthodes de classe
Variables d’instance
Variables de classe
Toute classe hérite de la classe Object
classes et objets
POO-IG H. Fauconnier
61
II) Classes
□
Membres d ’une classe sont:
■
Champs = données
■
Méthodes = fonctions
■
d’autres classes: classes imbriquées
classes et objets
POO-IG H. Fauconnier
62
Modificateur de classe
□
Précède la déclaration de la classe
■
Annotations
■
public (par défaut package)
■
abstract (incomplète, pas d’instance)
■
final (pas d’extension)
■
strictfp (pour les « réels »)
classes et objets
POO-IG H. Fauconnier
63
III) Champs
□
Modificateurs
■
■
annotations
Contrôle d’accès
□
□
□
□
■
■
■
■
□
□
private
protected
public
package
static (variables de classe)
final (constantes)
transient
volatile
Initialisations
Création par opérateur new
classes et objets
POO-IG H. Fauconnier
64
IV) Vie et mort des objets, constructeurs
□
Création d’une instance: opérateur new
□
Objet mort = plus aucune référence à
cet objet -> garbage collector
■
on peut exécuter du code spécifique quand
un objet est détruit :
protected void finalize() throws Throwable
classes et objets
POO-IG H. Fauconnier
65
Références
□
Une variable est (en général) une référence à un
objet
■
Type primitif: directement une valeur
■
Type référence : une référence à un objet (existant ou
créé par new)
□
null : référence universelle
□
conséquences:
classes et objets
■
dans le passage par valeur un type référence correspond à un
passage par référence
■
‘a == b‘ teste si les a et b référencent le même objet
■
Méthode equals qui peut être redéfinie (défaut this==obj)
POO-IG H. Fauconnier
66
primitif/référence
type primitif
type référence
int i=0;
index
correspondant à i
i
0
taille
d’un int
class A{
int i=5;
A a;
};
A a;
POO-IG H. Fauconnier
index correspondant à a
a
null
taille d’une
référence
21
new:
type référence
class A{
int i=5;
A x;
};
A a = new A();
new A()
5
.i
null .x
index correspondant à a
a
taille d’une
référence
POO-IG H. Fauconnier
tas
22
Exemple
int i=0;
int j=0;
(i==j) // vrai
class A{
int i=5;
A x;
}
classes et objets
i
j
i
0
0
class A{
int i=5;
A x;
}
un objet A
5
null
POO-IG H. Fauconnier
23
A a;
A b;
a
b
a
null
null
null
b
b=new A();
(a==b) // faux
a=b;
(a==b) // vrai
A b=new A();
5
a
null
b
5
5
null
null
a
b
classes et objets
POO-IG H. Fauconnier
5
null
67
Constructeurs
□
Appelés par l’opérateur new pour créer un
objet
■
Peuvent avoir des paramètres
■
Initialisent les objets
■
Constructeur par défaut (si aucun
constructeur n’est défini)
■
this() pour appeler un constructeur dans un
autre constructeur
classes et objets
POO-IG H. Fauconnier
68
Exemple:
public class Astre {
private long idNum;
private String nom = "<pasdenom>";
private Astre orbite = null;
private static long nextId = 0;
/** Creation d’une nouvelle instance of Astre */
private Astre() {
idNum = nextId ++;
}
public Astre(String nom, Astre enOrbite){
this();
this.nom=nom;
orbite=enOrbite;
}
public Astre(String nom){
this(nom,null);
}//…
classes et objets
POO-IG H. Fauconnier
69
Exemples…
□
Copie par le constructeur
public Astre(Astre a){
idNum = a.idNum;
nom=a.nom;
orbite=a.orbite;
}
classes et objets
POO-L3
POO-IGH.H.Fauconnier
Fauconnier
70
Téléchargement