Cours 2 Poo rappels E java quelques rappels

  • Slides: 55
Download presentation
Cours 2 Poo: rappels

Cours 2 Poo: rappels

E) java: quelques rappels… o o o Un source avec le suffixe. java Une

E) java: quelques rappels… o o o Un source avec le suffixe. java Une classe par fichier source (en principe) même nom pour la classe et le fichier source (sans le suffixe. java) Méthode public static void main(String[]); n main est le point d’entrée o Compilation génère un. class o Exécution en lançant la machine java POO-L 3 H. Fauconnier 2

Plateforme Java o o La compilation génère un. class en bytecode (langage intermédiaire indépendant

Plateforme Java o o La compilation génère un. class en bytecode (langage intermédiaire indépendant de la plateforme). Le bytecode est interprété par un interpréteur Java JVM Compilation javac interprétation java POO-L 3 H. Fauconnier 4

Langage intermédiaire et Interpréteur… o Avantage: indépendance de la plateforme n o Échange de

Langage intermédiaire et Interpréteur… o Avantage: indépendance de la plateforme n o Échange de bytecode (applet) Inconvénient: efficacité POO-L 3 H. Fauconnier 5

Plateforme Java o o o La plateforme java: software au-dessus d’une plateforme exécutable sur

Plateforme Java o o o La plateforme java: software au-dessus d’une plateforme exécutable sur un hardware (exemple Mac. Os, linux …) Java VM Java application Programming Interface (Java API): POO-L 3 H. Fauconnier 6

Tout un environnement… POO-L 3 H. Fauconnier 7

Tout un environnement… POO-L 3 H. Fauconnier 7

Trois exemples de base o o o Une application Une applet Une application avec

Trois exemples de base o o o Une application Une applet Une application avec interface graphique POO-L 3 H. Fauconnier 8

Application: o Fichier Appli. java: /** * Une application basique. . . */ class

Application: o Fichier Appli. java: /** * Une application basique. . . */ class Appli { public static void main(String[] args) { System. out. println("Bienvenue en L 3. . . "); //affichage } } POO-L 3 H. Fauconnier 9

Compiler, exécuter… o o Créer un fichier Appli. java Compilation: n o o Création

Compiler, exécuter… o o Créer un fichier Appli. java Compilation: n o o Création de Appli. class (bytecode) Interpréter le byte code: n o javac Appli. java Appli Attention aux suffixes!!! n (il faut que javac et java soient dans $PATH) Exception in thread "main" java. lang. No. Class. Def. Found. Error: n n Il ne trouve pas le main -> vérifier le nom! Variable CLASSPATH ou option -classpath POO-L 3 H. Fauconnier 10

Remarques o o Commentaires /* … */ et // Définition de classe n n

Remarques o o Commentaires /* … */ et // Définition de classe n n o 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: n public static void main(String[] arg) o o n public static Void String Point d’entrée POO-L 3 H. Fauconnier 11

Remarques o Classe System n n n out est une variable de la classe

Remarques o Classe System n n n out est une variable de la classe System println méthode de System. out est une variable de classe qui fait référence à une instance de la classe Print. Stream qui implémente un flot de sortie. o Cette instance a une méthode println POO-L 3 H. Fauconnier 12

Remarques… o o Classe: définit des méthodes et des variables (déclaration) Instance d’une classe

Remarques… o o Classe: définit des méthodes et des variables (déclaration) Instance d’une classe (objet) n n o 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é) Patience… POO-L 3 H. Fauconnier 13

Applet: o Applet et WEB n n n Client (navigateur) et serveur WEB Le

Applet: o Applet et WEB n n n Client (navigateur) et serveur WEB Le client fait des requêtes html, le serveur répond par des pages html Applet: o o o Le serveur répond par une page contenant des applets Applet: byte code Code exécuté par le client Permet de faire des animations avec interfaces graphiques sur le client. Une des causes du succès de java. POO-L 3 H. Fauconnier 14

Exemple applet o Fichier Mon. Applet. java: /** * Une applet basique. . .

Exemple applet o Fichier Mon. Applet. java: /** * Une applet basique. . . */ import java. applet. Applet; import java. awt. Graphics; public class Mon. Applet extends Applet { public void paint(Graphics g){ g. draw. String( "Bienvenue en en L 3. . . ", 50, 25); } } POO-L 3 H. Fauconnier 15

Remarques: o import et package: n n o Un package est un regroupement de

Remarques: o import et package: n n o Un package est un regroupement de classes. Toute classe est dans un package Package par défaut (sans nom) classpath import java. applet. *; n Importe le package java. applet o o Applet est une classe de ce package, Sans importation il faudrait java. applet. Applet POO-L 3 H. Fauconnier 16

Remarques: o o La classe Applet contient ce qu’il faut pour écrire une applet

Remarques: o o La classe Applet contient ce qu’il faut pour écrire une applet … extends Applet: n La classe définie est une extension de la classe Applet: o o n Elle contient tout ce que contient la classe Applet (et peut redéfinir certaines méthodes (paint)) Patience!! POO-L 3 H. Fauconnier 17

Remarques… o o Une Applet contient les méthodes paint start et init. En redéfinissant

Remarques… o o Une Applet contient les méthodes paint start et init. En redéfinissant paint, l’applet une fois lancée exécutera ce code redéfini. Graphics g argument de paint est un objet qui représente le contexte graphique de l’applet. n n draw. String est une méthode (d’instance) qui affiche une chaîne, 50, 25: affichage à partir de la position (x, y) à partir du point (0, 0) coin en haut à gauche de l’applet. POO-L 3 H. Fauconnier 18

Pour exécuter l’applet o o L’applet doit être exécutée dans un navigateur capable d’interpréter

Pour exécuter l’applet o o L’applet doit être exécutée dans un navigateur capable d’interpréter du bytecode correspondant à des applet. Il faut créer un fichier HTML pour le navigateur. POO-L 3 H. Fauconnier 19

Html pour l’applet o Fichier Bienvenu. html: <HTML> <HEAD> <TITLE> Une petite applet </TITLE>

Html pour l’applet o Fichier Bienvenu. html: <HTML> <HEAD> <TITLE> Une petite applet </TITLE> <BODY> <APPLET CODE='Mon. Applet. class' WIDTH=200 Height=50> </APPLET> </BODY> </HTML> POO-L 3 H. Fauconnier 20

Html o o Structure avec balises: Exemples: n n <HTML> </HTML> url: o o

Html o o Structure avec balises: Exemples: n n <HTML> </HTML> url: o o Ici: <a target="_blank" href="http: //www. liafa. univ-parisdiderot. f/~hf">page de hf</a> <APPLET CODE='Mon. Applet. class' WIDTH=200 Height=50> </APPLET> POO-L 3 H. Fauconnier 21

Exemple interface graphique Fichier Mon. Swing. java: /** * Une application basique. . .

Exemple interface graphique Fichier Mon. Swing. java: /** * Une application basique. . . avec interface graphique */ import javax. swing. *; public class Mon. Swing { private static void creer. Frame() { //Une formule magique. . . JFrame. set. Default. Look. And. Feel. Decorated(true); //Creation d'une Frame JFrame frame = new JFrame("Mon. Swing"); frame. set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); //Afficher un message JLabel label = new JLabel("Bienvenue en L 3. . . "); frame. get. Content. Pane(). add(label); //Afficher la fenêtre frame. pack(); frame. set. Visible(true); } public static void main(String[] args) { creer. Frame(); } } POO-L 3 H. Fauconnier 22

Remarques o o o o Importation de packages Définition d’un conteneur top-level JFrame, implémenté

Remarques o o o o Importation de packages Définition d’un conteneur top-level JFrame, implémenté comme instance de la classe JFrame Affichage de ce conteneur Définition d’un composant JLabel, implémenté comme instance de JLabel Ajout du composant JLabel dans la JFrame Définition du comportement de la Jframe sur un click du bouton de fremeture Une méthode main qui crée la JFrame POO-L 3 H. Fauconnier 23

En plus… o Entrées-sorties POO-L 3 H. Fauconnier 25

En plus… o Entrées-sorties POO-L 3 H. Fauconnier 25

Entrée-sortie public static void main(String[] args) { // sortie avec printf ou double a

Entrée-sortie public static void main(String[] args) { // sortie avec printf ou double a = 5. 6 d ; double b = 2 d ; String mul = "multiplié par" ; String eq="égal"; System. out. printf(Locale. ENGLISH, "%3. 2 f X %3. 2 f = %6. 4 f n", a , b , a*b); System. out. printf(Locale. FRENCH, "%3. 2 f %s %6. 4 f n", a, mul, b, eq, a*b); System. out. format( "Aujourd'hui %1$t. A, %1$te %1$t. B, "+ " il est: %1$t. H h %1$t. M min %1$t. S n", Calendar. get. Instance()); // System. out. flush(); POO-L 3 H. Fauconnier 26

Sortie 5. 60 X 2. 00 = 11. 2000 5, 60 multiplié par 2,

Sortie 5. 60 X 2. 00 = 11. 2000 5, 60 multiplié par 2, 00 égal 11, 2000 Aujourd'hui mardi, 10 octobre, il est: 15 h 31 min 01 POO-L 3 H. Fauconnier 27

Scanner sc = new Scanner(System. in); for(boolean fait=false; fait==false; ){ try { System. out.

Scanner sc = new Scanner(System. in); for(boolean fait=false; fait==false; ){ try { System. out. println("Répondre o ou O: "); String s 1 =sc. next(Pattern. compile("[0 o]")); fait=true; } catch(Input. Mismatch. Exception e) { sc. next(); } } if (sc. has. Next. Int()){ int i= sc. next. Int(); System. out. println("entier lu "+i); } System. out. println("next token : "+sc. next()); sc. close(); POO-L 3 H. Fauconnier 28

Scanner String input = "1 stop 2 stop éléphant gris stop rien"; Scanner s

Scanner String input = "1 stop 2 stop éléphant gris stop rien"; Scanner s = new(Scanner(input). use. Delimiter("\s*stop\s*"); System. out. println(s. next. Int()); System. out. println(s. next()); s. close(); } POO-L 3 H. Fauconnier 29

Sortie o o o next token : o 1 2 éléphant gris rien POO-L

Sortie o o o next token : o 1 2 éléphant gris rien POO-L 3 H. Fauconnier 30

Les classes… o System n System. out variable (static) de classe Print. Stream o

Les classes… o System n System. out variable (static) de classe Print. Stream o n o Print. Stream contient print (et printf) System. in variable (static) de classe Input. Stream Scanner POO-L 3 H. Fauconnier 31

Chapitre II Classes et objets (rappels) (mais pas vraiment d’héritage)

Chapitre II Classes et objets (rappels) (mais pas vraiment d’héritage)

Classes et objets o o o I) Introduction II) Classe: membres et modificateurs III)

Classes et objets o o o 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-L 3 H. Fauconnier 33

I) Introduction o Classe n Regrouper des données et des méthodes o o n

I) Introduction o Classe n Regrouper des données et des méthodes o o n o Classes<->type Objet (ou instance) n Résultat de la création d’un objet o o o 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-L 3 H. Fauconnier 34

II) Classes o Membres d ’une classe sont: n n n Champs = données

II) Classes o Membres d ’une classe sont: n n n Champs = données Méthodes = fonctions Classes imbriquées classes et objets POO-L 3 H. Fauconnier 35

Modificateur de classe o Précède la déclaration de la classe n n n Annotations

Modificateur de classe o Précède la déclaration de la classe n n n Annotations (plus tard…) public (par défaut package) abstract(incomplète, pas d’instance) final(pas d’extension) Strictfp (technique…) classes et objets POO-L 3 H. Fauconnier 36

III) Champs o Modificateurs n n annotations Contrôle d’accès o o n n o

III) Champs o Modificateurs n n annotations Contrôle d’accès o o n n o o private protected public package static (variables de classe) final (constantes) transient Volatile Initialisations Création par opérateur new classes et objets POO-L 3 H. Fauconnier 37

IV) Vie et mort des objets, constructeurs o o Création d’une instance: opérateur new

IV) Vie et mort des objets, constructeurs o o Création d’une instance: opérateur new Objet mort = plus aucune référence à cet objet -> garbage collector n on peut exécuter du code spécifique quand un objet est détruit : protected void finalize() throws Throwable classes et objets POO-L 3 H. Fauconnier 38

Références o Une variable est (en général) une référence à un objet n n

Références o Une variable est (en général) une référence à un objet n n Type primitif: directement une valeur Type référence : une référence à un objet (existant ou créé par new) o o null : référence universelle conséquences: n n n 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-L 3 H. Fauconnier 39

Exemple int i=0; int j=0; (i==j) // vrai class A{ int i=0; } A

Exemple int i=0; int j=0; (i==j) // vrai class A{ int i=0; } A a; A b=new A(); a=b; (a==b) // vrai b=new A(); (a==b) // faux classes et objets POO-L 3 H. Fauconnier 40

Constructeurs o Appelés par l’opérateur new pour créer un objet n n Peuvent avoir

Constructeurs o Appelés par l’opérateur new pour créer un objet n n Peuvent avoir des paramètres (avec surcharge) Initialisent les objets Constructeur par défaut (si aucun constructeur n’est défini) Constructeur de copie classes et objets POO-L 3 H. Fauconnier 41

Exemple: public class Astre { private long id. Num; private String nom = "<pasdenom>";

Exemple: public class Astre { private long id. Num; private String nom = "<pasdenom>"; private Astre orbite = null; private static long next. Id = 0; /** Creation d’une nouvelle instance of Astre */ private Astre() { id. Num = next. Id ++; } public Astre(String nom, Astre en. Orbite){ this(); this. nom=nom; orbite=en. Orbite; } public Astre(String nom){ this(nom, null); }//… classes et objets POO-L 3 H. Fauconnier 42

Exemples… o Copie public Astre(Astre a){ id. Num = a. id. Num; nom=a. nom;

Exemples… o Copie public Astre(Astre a){ id. Num = a. id. Num; nom=a. nom; orbite=a. orbite; } classes et objets POO-L 3 H. Fauconnier 43

Statique - dynamique o o Statique <-> à la compilation Dynamique <-> à l’exécution

Statique - dynamique o o Statique <-> à la compilation Dynamique <-> à l’exécution Le type d’une variable est déterminé à la compilation (déclaration et portée) Avec la possibilité de l’héritage une variable peut être une référence sur un objet d’un autre type que le type de sa déclaration classes et objets POO-L 3 H. Fauconnier 44

Static o o o Une variable (une méthode) déclarée static est une variable (méthode)

Static o o o Une variable (une méthode) déclarée static est une variable (méthode) de classe: elle est associée à la classe (pas à une instance particulière). Statique parce qu’elle peut être créée au moment de la compilation (pas de new()). Statique -> les initialisations doivent avoir lieu à la compilation. classes et objets POO-L 3 H. Fauconnier 45

Initialisations private static long next. Id = 0; o Bloc d’initialisation private static long

Initialisations private static long next. Id = 0; o Bloc d’initialisation private static long netx. Id = 0; { id. Num = next. Id++; } classes et objets POO-L 3 H. Fauconnier 46

Initialisation static public class Puissancedeux { static int[] tab = new int[12]; static{ tab[0]=1;

Initialisation static public class Puissancedeux { static int[] tab = new int[12]; static{ tab[0]=1; for(int i=0; i< tab. length-1; i++) tab[i+1]= suivant(tab[i]); } static int suivant(int i){ return i*2; } } classes et objets POO-L 3 H. Fauconnier 47

V) Méthodes o Modificateurs: n n n n Annotations Contrôle d’accès (comme pour les

V) Méthodes o Modificateurs: n n n n Annotations Contrôle d’accès (comme pour les variables) abstract static n’a pas accès aux variables d’instances final ne peut pas être remplacée synchronized native (utilisation de fonctions « native » ) strictfp classes et objets POO-L 3 H. Fauconnier 48

Passage par valeur public class Param. Par. Val { public static void par. Val(int

Passage par valeur public class Param. Par. Val { public static void par. Val(int i){ i=0; System. out. println("dans par. Val i="+i); } } //… int i =100; System. out. println("Avant i="+i); Param. Par. Val. par. Val(i); System. out. println("Avant i="+i); -------- Avant i=100 dans par. Val i=0 Avant i=100 classes et objets POO-L 3 H. Fauconnier 49

Mais… o Comme les variables sont de références (sauf les types primitifs)… public static

Mais… o Comme les variables sont de références (sauf les types primitifs)… public static void bidon(Astre a){ a=new Astre("bidon", null); System. out. println("bidon a="+a); } public static void bidonbis(Astre a){ a. set. Nom("bidon"); a. set. Orbite(null); System. out. println("bidonbis a="+a); } classes et objets POO-L 3 H. Fauconnier 50

Méthodes… Contrôler l’accès: //… o public void set. Nom(String n){ nom=n; } public void

Méthodes… Contrôler l’accès: //… o public void set. Nom(String n){ nom=n; } public void set. Orbite(Astre a){ orbite=a; } public String get. Nom(){ return nom; } public Astre get. Orbite(){ return orbite; } classes et objets POO-L 3 H. Fauconnier 51

Méthodes, remplacement… public String to. String(){ String st=id. Num + "("+nom+")"; if (orbite !=

Méthodes, remplacement… public String to. String(){ String st=id. Num + "("+nom+")"; if (orbite != null) st += "en orbite "+ orbite; return st; } Remplace la méthode to. String de la classe Object classes et objets POO-L 3 H. Fauconnier 52

Nombre variable d’arguments… public static void affiche(String. . . list){ for(int i=0; i<list. length;

Nombre variable d’arguments… public static void affiche(String. . . list){ for(int i=0; i<list. length; i++) System. out. print(list[i]+" "); } //… affiche("un", "deux", "trois"); classes et objets POO-L 3 H. Fauconnier 53

Méthodes main public static void main(String[] args) { for(int j =0; j<args. length; j++){

Méthodes main public static void main(String[] args) { for(int j =0; j<args. length; j++){ System. out. print(args[j] + " "); } } Le main est le point d’accès et peut avoir des arguments: classes et objets POO-L 3 H. Fauconnier 54

VI) exemple: Les astres… package exempleclasses; /** * * @author sans */ public class

VI) exemple: Les astres… package exempleclasses; /** * * @author sans */ public class Astre { private long id. Num; private String nom = "<pasdenom>"; private Astre orbite = null; private static long next. Id = 0; /** Creates a new instance of Astre */ private Astre() { id. Num = next. Id ++; } o classes et objets POO-L 3 H. Fauconnier 55

Suite public Astre(String nom, Astre en. Orbite){ this(); this. nom=nom; orbite=en. Orbite; } public

Suite public Astre(String nom, Astre en. Orbite){ this(); this. nom=nom; orbite=en. Orbite; } public Astre(String nom){ this(nom, null); } public Astre(Astre a){ id. Num = a. id. Num; nom=a. nom; orbite=a. orbite; }//… classes et objets POO-L 3 H. Fauconnier 56

public void set. Nom(String n){ nom=n; } public void set. Orbite(Astre a){ orbite=a; }

public void set. Nom(String n){ nom=n; } public void set. Orbite(Astre a){ orbite=a; } public String get. Nom(){ return nom; } public Astre get. Orbite(){ return orbite; } public String to. String(){ String st=id. Num + "("+nom+")"; if (orbite != null) st += "en orbite "+ orbite; return st; } } classes et objets POO-L 3 H. Fauconnier 57