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