SlideShare une entreprise Scribd logo
1  sur  63
Cours programmation-
orientée objet en Java
Licence d’informatique
Hugues Fauconnier
hf@liafa.jussieu.fr
POO-L3 H. Fauconnier 2
Plan du cours
 Introduction:
 programmation objet pourquoi? Comment? Un exemple en Java
 Classes et objets (révision)
 Méthodes et variables, constructeurs, contrôle d’accès, constructeurs
 Héritage: liaison dynamique et typage
 Extension de classe, méthode et héritage, variables et héritage, constructeurs et héritage
 Héritage: compléments
 classes abstraites et interfaces, classes internes et emboîtées, classe Object, clonage,
 Exceptions
 Exceptions, assertions
 Divers
 Enumeration, tableaux, conversions, noms
 Généricité
 Généralités, types génériques imbriqués, types paramètres bornés, méthodes génériques
 Types de données
 String et expressions régulières, Collections, Conteneurs, itérations
 Entrées-sorties
 Introduction à Swing
 Threads
 Compléments
 Reflections, annotations, documentation…
Le site du cours: http://www.liafa.jussieu.fr/~hf/verif/ens/an09-10/poo/L3.POO.html
POO-L3 H. Fauconnier 3
Bibliographie
 De nombreux livres sur java (attention
java >= 1.5)
 En ligne:
 http://mindview.net/Books/TIJ4
 Thinking in Java, 4th edition Bruce Eckel
 http://java.sun.com/docs/index.html
 Livre conseillé:
 The Java Programming language fourth
edition AW Ken Arnold, James Gosling,
David Holmes
Chapitre I
Introduction
POO-L3 H. Fauconnier 5
A) Généralités
 Problème du logiciel:
 Taille
 Coût : développement et maintenance
 Fiabilité
 Solutions :
 Modularité
 Réutiliser le logiciel
 Certification
 Comment?
POO-L3 H. Fauconnier 6
Typage…
 Histoire:
 Fonctions et procédures (60 Fortran)
 Typage des données (70) Pascal Algol
 Modules: données + fonctions regroupées
(80) ada
 Programmation objet: classes, objets et
héritage
POO-L3 H. Fauconnier 7
B) Principes de base de la POO
 Objet et classe:
 Classe = définitions pour des données
(variables) + fonctions (méthodes) agissant
sur ces données
 Objet = élément d’une classe (instance)
avec un état
 (une méthode ou une variable peut être
 de classe = commune à la classe ou
 d’instance = dépendant de l’instance
)
POO-L3 H. Fauconnier 8
Principes de bases (suite)
 Encapsulation et séparation de la
spécification et de l’implémentation
 Séparer l’implémentation de la spécification.
 Ne doit être visible de l’extérieur que ce qui est
nécessaire, les détails d’implémentation sont « cachés »
 Héritage:
 Une classe peut hériter des propriétés d’une
autre classe: un classe peut être une extension
d’une autre classe.
POO-L3 H. Fauconnier 9
Principes de bases de la POO
 Mais surtout notion de polymorphisme:
 Si une classe A est une extension d’une classe B:
 A doit pouvoir redéfinir certaines méthodes (disons f())
 Un objet a de classe A doit pouvoir être considéré
comme un objet de classe B
 On doit donc accepter :
 B b;
 b=a; (a a toutes les propriétés d’un B)
 b.f()
 Doit appeler la méthode redéfinie dans A!
 C’est le transtypage
 (exemple: méthode paint des interfaces graphiques)
POO-L3 H. Fauconnier 10
Principes de bases
 Polymorphisme:
 Ici l’association entre le nom ‘f()’ et le code (code
de A ou code de B) a lieu dynamiquement (=à
l’exécution)
Liaison dynamique
 On peut aussi vouloir « paramétrer » une classe
(ou une méthode) par une autre classe.
Exemple: Pile d’entiers
Dans ce cas aussi un nom peut correspondre à
plusieurs codes, mais ici l’association peut avoir
lieu de façon statique (au moment de la
compilation)
POO-L3 H. Fauconnier 11
C) Comment assurer la
réutilisation du logiciel?
 Type abstrait de données
 définir le type par ses propriétés (spécification)
 Interface, spécification et implémentation
 Une interface et une spécification (=les
propriétés à assurer) pour définir un type
 Une (ou plusieurs) implémentation du type
abstrait de données
 Ces implémentations doivent vérifier la spécification
POO-L3 H. Fauconnier 12
Comment assurer la réutilisation
du logiciel?
 Pour l’utilisateur du type abstrait de
données
 Accès uniquement à l’interface (pas
d’accès à l’implémentation)
 Utilisation des propriétés du type abstrait
telles que définies dans la spécification.
 (L’utilisateur est lui-même un type abstrait
avec une interface et une spécification)
POO-L3 H. Fauconnier 13
Comment assurer la réutilisation
du logiciel?
 Mais en utilisant un type abstrait
l’utilisateur n'en connaît pas
l’implémentation
 il sait uniquement que la spécification du
type abstrait est supposée être vérifiée
par l'implémentation.
 Pour la réalisation concrète, une
implémentation particulière est choisie
 Il y a naturellement polymorphisme
POO-L3 H. Fauconnier 14
Notion de contrat (Eiffel)
 Un client et un vendeur
 Un contrat lie le vendeur et le client (spécification)
 Le client ne peut utiliser l’objet que par son
interface
 La réalisation de l’objet est cachée au client
 Le contrat est conditionné par l’utilisation correcte
de l’objet (pré-condition)
 Sous réserve de la pré-condition le vendeur s’engage
à ce que l’objet vérifie sa spécification (post-
condition)
 Le vendeur peut déléguer: l’objet délégué doit
vérifier au moins le contrat (héritage)
POO-L3 H. Fauconnier 15
D) Un exemple…
 Pile abstraite et diverses
implémentations
POO-L3 H. Fauconnier 16
Type abstrait de données
NOM
pile[X]
FONCTIONS
vide : pile[X] -> Boolean
nouvelle : -> pile[X]
empiler : X x pile[X] -> pile[X]
dépiler : pile[X] -> X x pile[X]
PRECONDITIONS
dépiler(s: pile[X]) <=> (not vide(s))
AXIOMES
forall x in X, s in pile[X]
vide(nouvelle())
not vide(empiler(x,s))
dépiler(empiler(x,s))=(x,s)
POO-L3 H. Fauconnier 17
Remarques
 Le type est paramétré par un autre
type
 Les axiomes correspondent aux pré
conditions
 Il n’y pas de représentation
 Il faudrait vérifier que cette définition
caractérise bien un pile au sens usuel du
terme (c’est possible)
POO-L3 H. Fauconnier 18
Pile abstraite en java
package pile;
abstract class Pile <T>{
abstract public T empiler(T v);
abstract public T dépiler();
abstract public Boolean estVide();
}
POO-L3 H. Fauconnier 19
Divers
 package: regroupement de diverses
classes
 abstract: signifie qu’il n’y a pas
d’implémentation
 public: accessible de l’extérieur
 La classe est paramétrée par un type
(java 1.5)
POO-L3 H. Fauconnier 20
Implémentations
 On va implémenter la pile:
 avec un objet de classe Vector (classe
définie dans java.util.package) en fait
il s’agit d’un ListArray
 Avec un objet de classe LinkedList
 Avec Integer pour obtenir une pile de
Integer
POO-L3 H. Fauconnier 21
Une implémentation
package pile;
import java.util.EmptyStackException;
import java.util.Vector;
public class MaPile<T> extends Pile<T>{
private Vector<T> items;
// Vector devrait être remplacé par ArrayList
public MaPile() {
items =new Vector<T>(10);
}
public Boolean estVide(){
return items.size()==0;
}
public T empiler(T item){
items.addElement(item);
return item;
}
//…
POO-L3 H. Fauconnier 22
Suite
//…
public synchronized T dépiler(){
int len = items.size();
T item = null;
if (len == 0)
throw new EmptyStackException();
item = items.elementAt(len - 1);
items.removeElementAt(len - 1);
return item;
}
}
POO-L3 H. Fauconnier 23
Autre implémentation avec listes
package pile;
import java.util.LinkedList;
public class SaPile<T> extends Pile<T> {
private LinkedList<T> items;
public SaPile(){
items = new LinkedList<T>();
}
public Boolean estVide(){
return items.isEmpty();
}
public T empiler(T item){
items.addFirst(item);
return item;
}
public T dépiler(){
return items.removeFirst();
}
}
POO-L3 H. Fauconnier 24
Une pile de Integer
public class PileInteger extends Pile<Integer>{
private Integer[] items;
private int top=0;
private int max=100;
public PileInteger(){
items = new Integer[max];
}
public Integer empiler(Integer item){
if (this.estPleine())
throw new EmptyStackException();
items[top++] = item;
return item;
}
//…
POO-L3 H. Fauconnier 25
Suite…
public synchronized Integer dépiler(){
Integer item = null;
if (this.estVide())
throw new EmptyStackException();
item = items[--top];
return item;
}
public Boolean estVide(){
return (top == 0);
}
public boolean estPleine(){
return (top == max -1);
}
protected void finalize() throws Throwable {
items = null; super.finalize();
}
}
POO-L3 H. Fauconnier 26
Comment utiliser ces classes?
 Le but est de pouvoir écrire du code
utilisant la classe Pile abstraite
 Au moment de l’exécution, bien sûr, ce
code s’appliquera à un objet concret
(qui a une implémentation)
 Mais ce code doit s’appliquer à toute
implémentation de Pile
POO-L3 H. Fauconnier 27
Un main
package pile;
public class Main {
public static void vider(Pile p){
while(!p.estVide()){
System.out.println(p.dépiler());
}
}
public static void main(String[] args) {
MaPile<Integer> p1= new MaPile<Integer>();
for(int i=0;i<10;i++)
p1.empiler(i);
vider(p1);
SaPile<String> p2= new SaPile<String>();
p2.empiler("un");
p2.empiler("deux");
p2.empiler("trois");
vider(p2);
}
}
POO-L3 H. Fauconnier 28
E) java: quelques rappels…
 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[]);
 main est le point d’entrée
 Compilation génère un .class
 Exécution en lançant la machine java
POO-L3 H. Fauconnier 29
Généralités…
 Un peu plus qu’un langage de programmation:
 “gratuit”!
 Indépendant de la plateforme
 Langage interprété et byte code
 Portable
 Syntaxe à la C
 Orienté objet (classes héritage)
 Nombreuses bibliothèques
 Pas de pointeurs! (ou que des pointeurs!)
 Ramasse-miettes
 Multi-thread
 Distribué (WEB) applet, servlet etc…
 url: http://java.sun.com
 http://java.sun.com/docs/books/tutorial/index.html
POO-L3 H. Fauconnier 30
Plateforme Java
 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-L3 H. Fauconnier 31
Langage intermédiaire et
Interpréteur…
 Avantage: indépendance de la
plateforme
 Échange de byte-code (applet)
 Inconvénient: efficacité
POO-L3 H. Fauconnier 32
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-L3 H. Fauconnier 33
Tout un environnement…
 Java 2 sdk: JRE (java runtime environment + outils
de développements compilateur, debogueurs etc…)
POO-L3 H. Fauconnier 34
Trois exemples de base
 Une application
 Une applet
 Une application avec interface
graphique
POO-L3 H. Fauconnier 35
Application:
 Fichier Appli.java:
/**
* Une application basique...
*/
class Appli {
public static void main(String[] args) {
System.out.println("Bienvenue en L3...");
//affichage
}
}
POO-L3 H. Fauconnier 36
Compiler, exécuter…
 Créer un fichier Appli.java
 Compilation:
 javac Appli.java
 Création de Appli.class (bytecode)
 Interpréter le byte code:
 java Appli
 Attention aux suffixes!!!
 (il faut que javac et java soient dans $PATH)
Exception in thread "main" java.lang.NoClassDefFoundError:
 Il ne trouve pas le main -> vérifier le nom!
 Variable CLASSPATH ou option -classpath
POO-L3 H. Fauconnier 37
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
POO-L3 H. Fauconnier 38
Remarques
 Classe System
 out est une variable de la classe System
 println méthode de System.out
 out est une variable de classe qui fait
référence à une instance de la classe
PrintStream qui implémente un flot de
sortie.
 Cette instance a une méthode println
POO-L3 H. Fauconnier 39
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é)
 Patience…
POO-L3 H. Fauconnier 40
Applet:
 Applet et WEB
 Client (navigateur) et serveur WEB
 Le client fait des requêtes html, le serveur
répond par des pages html
 Applet:
 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-L3 H. Fauconnier 41
Exemple applet
 Fichier MonApplet.java:
/**
* Une applet basique...
*/
import java.applet.Applet;
import java.awt.Graphics;
public class MonApplet extends Applet {
public void paint(Graphics g){
g.drawString("Bienvenue en en L3...", 50,25);
}
}
POO-L3 H. Fauconnier 42
Remarques:
 import et package:
 Un package est un regroupement de classes.
 Toute classe est dans un package
 Package par défaut (sans nom)
 classpath
 import java.applet.*;
 Importe le package java.applet
 Applet est une classe de ce package,
 Sans importation il faudrait java.applet.Applet
POO-L3 H. Fauconnier 43
Remarques:
 La classe Applet contient ce qu’il faut
pour écrire une applet
 … extends Applet:
 La classe définie est une extension de la
classe Applet:
 Elle contient tout ce que contient la classe
Applet
 (et peut redéfinir certaines méthodes (paint))
 Patience!!
POO-L3 H. Fauconnier 44
Remarques…
 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.
 drawString 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-L3 H. Fauconnier 45
Pour exécuter l’applet
 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-L3 H. Fauconnier 46
Html pour l’applet
 Fichier Bienvenu.html:
<HTML>
<HEAD>
<TITLE> Une petite applet </TITLE>
<BODY>
<APPLET CODE='MonApplet.class' WIDTH=200
Height=50>
</APPLET>
</BODY>
</HTML>
POO-L3 H. Fauconnier 47
Html
 Structure avec balises:
 Exemples:
 <HTML> </HTML>
 url:
 <a target="_blank"
href="http://www.liafa.jussieu.f/~hf">page de hf</a>
 Ici:
<APPLET CODE='MonApplet.class' WIDTH=200 Height=50>
</APPLET>
POO-L3 H. Fauconnier 48
Exemple interface graphique
Fichier MonSwing.java:
/**
* Une application basique... avec interface graphique
*/
import javax.swing.*;
public class MonSwing {
private static void creerFrame() {
//Une formule magique...
JFrame.setDefaultLookAndFeelDecorated(true);
//Creation d'une Frame
JFrame frame = new JFrame("MonSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Afficher un message
JLabel label = new JLabel("Bienvenue en L3...");
frame.getContentPane().add(label);
//Afficher la fenêtre
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
creerFrame();
}
}
POO-L3 H. Fauconnier 49
Remarques
 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-L3 H. Fauconnier 50
Pour finir…
 Java 1.5 et 6 annotations, types
méthodes paramétrés par des types
 Très nombreux packages
 Nombreux outils de développement
(gratuits)
 eclipse, netbeans..
POO-L3 H. Fauconnier 51
En plus…
POO-L3 H. Fauconnier 52
Entrée-sortie
public static void main(String[] args) {
// sortie avec printf ou
double a = 5.6d ;
double b = 2d ;
String mul = "multiplié par" ;
String eq="égal";
System.out.printf(Locale.ENGLISH,
"%3.2f X %3.2f = %6.4f n", a ,b , a*b);
System.out.printf(Locale.FRENCH,
"%3.2f %s %3.2f %s %6.4f n", a, mul,b eq,a*b);
System.out.format(
"Aujourd'hui %1$tA, %1$te %1$tB,"+
" il est: %1$tH h %1$tM min %1$tS n",
Calendar.getInstance());
// System.out.flush();
POO-L3 H. Fauconnier 53
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-L3 H. Fauconnier 54
Scanner
Scanner sc = new Scanner(System.in);
for(boolean fait=false; fait==false;){
try {
System.out.println("Répondre o ou O:");
String s1 =sc.next(Pattern.compile("[0o]"));
fait=true;
} catch(InputMismatchException e) {
sc.next();
}
}
if (sc.hasNextInt()){
int i= sc.nextInt();
System.out.println("entier lu "+i);
}
System.out.println("next token :"+sc.next());
sc.close();
POO-L3 H. Fauconnier 55
Scanner
if (sc.hasNextInt()){
int i= sc.nextInt();
System.out.println("entier lu "+i);
}
System.out.println("next token :"+sc.next()); sc.close();
String input = "1 stop 2 stop éléphant gris stop rien";
Scanner s = new(Scanner(input).useDelimiter("s*stops*");
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.next());
System.out.println(s.next());
s.close();
}
POO-L3 H. Fauconnier 56
Sortie
 next token :o
 1
 2
 éléphant gris
 rien
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 H. Fauconnier 57
Chapitre II
Classes et objets
(rappels)
(mais pas d’héritage)
classes et objets POO-L3 H. Fauconnier 59
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-L3 H. Fauconnier 60
I) Introduction
 Classe
 Regrouper des données et des méthodes
 Variables de classe
 Méthodes de classe
 Classes<->type
 Objet (ou instance)
 Résultat de la création d’un objet
 Variables d’instance
 Variables de classe
 Toute classe hérite de la classe Object
classes et objets POO-L3 H. Fauconnier 61
II) Classes
 Membres d ’une classe sont:
 Champs = données
 Méthodes = fonctions
 Classes imbriquées
classes et objets POO-L3 H. Fauconnier 62
Modificateur de classe
 Précède la déclaration de la classe
 Annotations (plus tard…)
 public (par défaut package)
 abstract(incomplète, pas d’instance)
 final(pas d’extension)
 Strictfp (technique…)
classes et objets POO-L3 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

Contenu connexe

Similaire à cours1.ppt

Java-3eme partie.pptx
Java-3eme partie.pptxJava-3eme partie.pptx
Java-3eme partie.pptxHassanAbdel
 
Java cours n° 2 - classe-objet-constructeur
Java   cours n° 2 - classe-objet-constructeurJava   cours n° 2 - classe-objet-constructeur
Java cours n° 2 - classe-objet-constructeurAbdelwahab Naji
 
Partie 8: Objets et Classes — Programmation orientée objet en C++
Partie 8: Objets et Classes — Programmation orientée objet en C++Partie 8: Objets et Classes — Programmation orientée objet en C++
Partie 8: Objets et Classes — Programmation orientée objet en C++Fabio Hernandez
 
Chapitre 5 classes abstraites et interfaces
Chapitre 5  classes abstraites et interfacesChapitre 5  classes abstraites et interfaces
Chapitre 5 classes abstraites et interfacesAmir Souissi
 
Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objetAmir Souissi
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneMicrosoft
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonAbdoulaye Dieng
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHPjulien pauli
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008Khalil Lechheb
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008Khalil Lechheb
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07haythem_2015
 
De java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDe java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDidier Plaindoux
 
intro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPintro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPfrwebhelp
 
Introspection reflection
Introspection reflectionIntrospection reflection
Introspection reflectionEric Toguem
 

Similaire à cours1.ppt (20)

Java-3eme partie.pptx
Java-3eme partie.pptxJava-3eme partie.pptx
Java-3eme partie.pptx
 
Java cours n° 2 - classe-objet-constructeur
Java   cours n° 2 - classe-objet-constructeurJava   cours n° 2 - classe-objet-constructeur
Java cours n° 2 - classe-objet-constructeur
 
Partie 8: Objets et Classes — Programmation orientée objet en C++
Partie 8: Objets et Classes — Programmation orientée objet en C++Partie 8: Objets et Classes — Programmation orientée objet en C++
Partie 8: Objets et Classes — Programmation orientée objet en C++
 
Polymorphisme
PolymorphismePolymorphisme
Polymorphisme
 
Chapitre 5 classes abstraites et interfaces
Chapitre 5  classes abstraites et interfacesChapitre 5  classes abstraites et interfaces
Chapitre 5 classes abstraites et interfaces
 
Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objet
 
POO-chapitre3.pptx
POO-chapitre3.pptxPOO-chapitre3.pptx
POO-chapitre3.pptx
 
XB-Java.ppt
XB-Java.pptXB-Java.ppt
XB-Java.ppt
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en Python
 
2006 2007-heritage-en-c++
2006 2007-heritage-en-c++2006 2007-heritage-en-c++
2006 2007-heritage-en-c++
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07
 
De java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDe java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvements
 
intro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPintro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APP
 
Ch09
Ch09Ch09
Ch09
 
Playing With PHP 5.3
Playing With PHP 5.3Playing With PHP 5.3
Playing With PHP 5.3
 
Introspection reflection
Introspection reflectionIntrospection reflection
Introspection reflection
 

Dernier

systeme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertsysteme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertChristianMbip
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...Faga1939
 
Guide Final de rédaction de mémoire de fin d'étude
Guide Final de rédaction de mémoire de fin d'étudeGuide Final de rédaction de mémoire de fin d'étude
Guide Final de rédaction de mémoire de fin d'étudeBenamraneMarwa
 
presentation l'interactionnisme symbolique finale.pptx
presentation l'interactionnisme symbolique  finale.pptxpresentation l'interactionnisme symbolique  finale.pptx
presentation l'interactionnisme symbolique finale.pptxMalikaIdseaid1
 
Formation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipFormation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipM2i Formation
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptxTxaruka
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne FontaineTxaruka
 
Présentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxPrésentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxpopzair
 
Cours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxCours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxlamourfrantz
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.Franck Apolis
 
MaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptMaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptssusercbaa22
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptxSAID MASHATE
 
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxApproche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxssusercbaa22
 

Dernier (15)

systeme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertsysteme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expert
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
 
Guide Final de rédaction de mémoire de fin d'étude
Guide Final de rédaction de mémoire de fin d'étudeGuide Final de rédaction de mémoire de fin d'étude
Guide Final de rédaction de mémoire de fin d'étude
 
presentation l'interactionnisme symbolique finale.pptx
presentation l'interactionnisme symbolique  finale.pptxpresentation l'interactionnisme symbolique  finale.pptx
presentation l'interactionnisme symbolique finale.pptx
 
Formation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipFormation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadership
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptx
 
Evaluación Alumnos de Ecole Victor Hugo
Evaluación Alumnos de Ecole  Victor HugoEvaluación Alumnos de Ecole  Victor Hugo
Evaluación Alumnos de Ecole Victor Hugo
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne Fontaine
 
Présentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxPrésentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptx
 
Cours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxCours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptx
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.
 
Pâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie PelletierPâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie Pelletier
 
MaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptMaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.ppt
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
 
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxApproche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
 

cours1.ppt

  • 1. Cours programmation- orientée objet en Java Licence d’informatique Hugues Fauconnier hf@liafa.jussieu.fr
  • 2. POO-L3 H. Fauconnier 2 Plan du cours  Introduction:  programmation objet pourquoi? Comment? Un exemple en Java  Classes et objets (révision)  Méthodes et variables, constructeurs, contrôle d’accès, constructeurs  Héritage: liaison dynamique et typage  Extension de classe, méthode et héritage, variables et héritage, constructeurs et héritage  Héritage: compléments  classes abstraites et interfaces, classes internes et emboîtées, classe Object, clonage,  Exceptions  Exceptions, assertions  Divers  Enumeration, tableaux, conversions, noms  Généricité  Généralités, types génériques imbriqués, types paramètres bornés, méthodes génériques  Types de données  String et expressions régulières, Collections, Conteneurs, itérations  Entrées-sorties  Introduction à Swing  Threads  Compléments  Reflections, annotations, documentation… Le site du cours: http://www.liafa.jussieu.fr/~hf/verif/ens/an09-10/poo/L3.POO.html
  • 3. POO-L3 H. Fauconnier 3 Bibliographie  De nombreux livres sur java (attention java >= 1.5)  En ligne:  http://mindview.net/Books/TIJ4  Thinking in Java, 4th edition Bruce Eckel  http://java.sun.com/docs/index.html  Livre conseillé:  The Java Programming language fourth edition AW Ken Arnold, James Gosling, David Holmes
  • 5. POO-L3 H. Fauconnier 5 A) Généralités  Problème du logiciel:  Taille  Coût : développement et maintenance  Fiabilité  Solutions :  Modularité  Réutiliser le logiciel  Certification  Comment?
  • 6. POO-L3 H. Fauconnier 6 Typage…  Histoire:  Fonctions et procédures (60 Fortran)  Typage des données (70) Pascal Algol  Modules: données + fonctions regroupées (80) ada  Programmation objet: classes, objets et héritage
  • 7. POO-L3 H. Fauconnier 7 B) Principes de base de la POO  Objet et classe:  Classe = définitions pour des données (variables) + fonctions (méthodes) agissant sur ces données  Objet = élément d’une classe (instance) avec un état  (une méthode ou une variable peut être  de classe = commune à la classe ou  d’instance = dépendant de l’instance )
  • 8. POO-L3 H. Fauconnier 8 Principes de bases (suite)  Encapsulation et séparation de la spécification et de l’implémentation  Séparer l’implémentation de la spécification.  Ne doit être visible de l’extérieur que ce qui est nécessaire, les détails d’implémentation sont « cachés »  Héritage:  Une classe peut hériter des propriétés d’une autre classe: un classe peut être une extension d’une autre classe.
  • 9. POO-L3 H. Fauconnier 9 Principes de bases de la POO  Mais surtout notion de polymorphisme:  Si une classe A est une extension d’une classe B:  A doit pouvoir redéfinir certaines méthodes (disons f())  Un objet a de classe A doit pouvoir être considéré comme un objet de classe B  On doit donc accepter :  B b;  b=a; (a a toutes les propriétés d’un B)  b.f()  Doit appeler la méthode redéfinie dans A!  C’est le transtypage  (exemple: méthode paint des interfaces graphiques)
  • 10. POO-L3 H. Fauconnier 10 Principes de bases  Polymorphisme:  Ici l’association entre le nom ‘f()’ et le code (code de A ou code de B) a lieu dynamiquement (=à l’exécution) Liaison dynamique  On peut aussi vouloir « paramétrer » une classe (ou une méthode) par une autre classe. Exemple: Pile d’entiers Dans ce cas aussi un nom peut correspondre à plusieurs codes, mais ici l’association peut avoir lieu de façon statique (au moment de la compilation)
  • 11. POO-L3 H. Fauconnier 11 C) Comment assurer la réutilisation du logiciel?  Type abstrait de données  définir le type par ses propriétés (spécification)  Interface, spécification et implémentation  Une interface et une spécification (=les propriétés à assurer) pour définir un type  Une (ou plusieurs) implémentation du type abstrait de données  Ces implémentations doivent vérifier la spécification
  • 12. POO-L3 H. Fauconnier 12 Comment assurer la réutilisation du logiciel?  Pour l’utilisateur du type abstrait de données  Accès uniquement à l’interface (pas d’accès à l’implémentation)  Utilisation des propriétés du type abstrait telles que définies dans la spécification.  (L’utilisateur est lui-même un type abstrait avec une interface et une spécification)
  • 13. POO-L3 H. Fauconnier 13 Comment assurer la réutilisation du logiciel?  Mais en utilisant un type abstrait l’utilisateur n'en connaît pas l’implémentation  il sait uniquement que la spécification du type abstrait est supposée être vérifiée par l'implémentation.  Pour la réalisation concrète, une implémentation particulière est choisie  Il y a naturellement polymorphisme
  • 14. POO-L3 H. Fauconnier 14 Notion de contrat (Eiffel)  Un client et un vendeur  Un contrat lie le vendeur et le client (spécification)  Le client ne peut utiliser l’objet que par son interface  La réalisation de l’objet est cachée au client  Le contrat est conditionné par l’utilisation correcte de l’objet (pré-condition)  Sous réserve de la pré-condition le vendeur s’engage à ce que l’objet vérifie sa spécification (post- condition)  Le vendeur peut déléguer: l’objet délégué doit vérifier au moins le contrat (héritage)
  • 15. POO-L3 H. Fauconnier 15 D) Un exemple…  Pile abstraite et diverses implémentations
  • 16. POO-L3 H. Fauconnier 16 Type abstrait de données NOM pile[X] FONCTIONS vide : pile[X] -> Boolean nouvelle : -> pile[X] empiler : X x pile[X] -> pile[X] dépiler : pile[X] -> X x pile[X] PRECONDITIONS dépiler(s: pile[X]) <=> (not vide(s)) AXIOMES forall x in X, s in pile[X] vide(nouvelle()) not vide(empiler(x,s)) dépiler(empiler(x,s))=(x,s)
  • 17. POO-L3 H. Fauconnier 17 Remarques  Le type est paramétré par un autre type  Les axiomes correspondent aux pré conditions  Il n’y pas de représentation  Il faudrait vérifier que cette définition caractérise bien un pile au sens usuel du terme (c’est possible)
  • 18. POO-L3 H. Fauconnier 18 Pile abstraite en java package pile; abstract class Pile <T>{ abstract public T empiler(T v); abstract public T dépiler(); abstract public Boolean estVide(); }
  • 19. POO-L3 H. Fauconnier 19 Divers  package: regroupement de diverses classes  abstract: signifie qu’il n’y a pas d’implémentation  public: accessible de l’extérieur  La classe est paramétrée par un type (java 1.5)
  • 20. POO-L3 H. Fauconnier 20 Implémentations  On va implémenter la pile:  avec un objet de classe Vector (classe définie dans java.util.package) en fait il s’agit d’un ListArray  Avec un objet de classe LinkedList  Avec Integer pour obtenir une pile de Integer
  • 21. POO-L3 H. Fauconnier 21 Une implémentation package pile; import java.util.EmptyStackException; import java.util.Vector; public class MaPile<T> extends Pile<T>{ private Vector<T> items; // Vector devrait être remplacé par ArrayList public MaPile() { items =new Vector<T>(10); } public Boolean estVide(){ return items.size()==0; } public T empiler(T item){ items.addElement(item); return item; } //…
  • 22. POO-L3 H. Fauconnier 22 Suite //… public synchronized T dépiler(){ int len = items.size(); T item = null; if (len == 0) throw new EmptyStackException(); item = items.elementAt(len - 1); items.removeElementAt(len - 1); return item; } }
  • 23. POO-L3 H. Fauconnier 23 Autre implémentation avec listes package pile; import java.util.LinkedList; public class SaPile<T> extends Pile<T> { private LinkedList<T> items; public SaPile(){ items = new LinkedList<T>(); } public Boolean estVide(){ return items.isEmpty(); } public T empiler(T item){ items.addFirst(item); return item; } public T dépiler(){ return items.removeFirst(); } }
  • 24. POO-L3 H. Fauconnier 24 Une pile de Integer public class PileInteger extends Pile<Integer>{ private Integer[] items; private int top=0; private int max=100; public PileInteger(){ items = new Integer[max]; } public Integer empiler(Integer item){ if (this.estPleine()) throw new EmptyStackException(); items[top++] = item; return item; } //…
  • 25. POO-L3 H. Fauconnier 25 Suite… public synchronized Integer dépiler(){ Integer item = null; if (this.estVide()) throw new EmptyStackException(); item = items[--top]; return item; } public Boolean estVide(){ return (top == 0); } public boolean estPleine(){ return (top == max -1); } protected void finalize() throws Throwable { items = null; super.finalize(); } }
  • 26. POO-L3 H. Fauconnier 26 Comment utiliser ces classes?  Le but est de pouvoir écrire du code utilisant la classe Pile abstraite  Au moment de l’exécution, bien sûr, ce code s’appliquera à un objet concret (qui a une implémentation)  Mais ce code doit s’appliquer à toute implémentation de Pile
  • 27. POO-L3 H. Fauconnier 27 Un main package pile; public class Main { public static void vider(Pile p){ while(!p.estVide()){ System.out.println(p.dépiler()); } } public static void main(String[] args) { MaPile<Integer> p1= new MaPile<Integer>(); for(int i=0;i<10;i++) p1.empiler(i); vider(p1); SaPile<String> p2= new SaPile<String>(); p2.empiler("un"); p2.empiler("deux"); p2.empiler("trois"); vider(p2); } }
  • 28. POO-L3 H. Fauconnier 28 E) java: quelques rappels…  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[]);  main est le point d’entrée  Compilation génère un .class  Exécution en lançant la machine java
  • 29. POO-L3 H. Fauconnier 29 Généralités…  Un peu plus qu’un langage de programmation:  “gratuit”!  Indépendant de la plateforme  Langage interprété et byte code  Portable  Syntaxe à la C  Orienté objet (classes héritage)  Nombreuses bibliothèques  Pas de pointeurs! (ou que des pointeurs!)  Ramasse-miettes  Multi-thread  Distribué (WEB) applet, servlet etc…  url: http://java.sun.com  http://java.sun.com/docs/books/tutorial/index.html
  • 30. POO-L3 H. Fauconnier 30 Plateforme Java  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
  • 31. POO-L3 H. Fauconnier 31 Langage intermédiaire et Interpréteur…  Avantage: indépendance de la plateforme  Échange de byte-code (applet)  Inconvénient: efficacité
  • 32. POO-L3 H. Fauconnier 32 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):
  • 33. POO-L3 H. Fauconnier 33 Tout un environnement…  Java 2 sdk: JRE (java runtime environment + outils de développements compilateur, debogueurs etc…)
  • 34. POO-L3 H. Fauconnier 34 Trois exemples de base  Une application  Une applet  Une application avec interface graphique
  • 35. POO-L3 H. Fauconnier 35 Application:  Fichier Appli.java: /** * Une application basique... */ class Appli { public static void main(String[] args) { System.out.println("Bienvenue en L3..."); //affichage } }
  • 36. POO-L3 H. Fauconnier 36 Compiler, exécuter…  Créer un fichier Appli.java  Compilation:  javac Appli.java  Création de Appli.class (bytecode)  Interpréter le byte code:  java Appli  Attention aux suffixes!!!  (il faut que javac et java soient dans $PATH) Exception in thread "main" java.lang.NoClassDefFoundError:  Il ne trouve pas le main -> vérifier le nom!  Variable CLASSPATH ou option -classpath
  • 37. POO-L3 H. Fauconnier 37 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
  • 38. POO-L3 H. Fauconnier 38 Remarques  Classe System  out est une variable de la classe System  println méthode de System.out  out est une variable de classe qui fait référence à une instance de la classe PrintStream qui implémente un flot de sortie.  Cette instance a une méthode println
  • 39. POO-L3 H. Fauconnier 39 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é)  Patience…
  • 40. POO-L3 H. Fauconnier 40 Applet:  Applet et WEB  Client (navigateur) et serveur WEB  Le client fait des requêtes html, le serveur répond par des pages html  Applet:  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.
  • 41. POO-L3 H. Fauconnier 41 Exemple applet  Fichier MonApplet.java: /** * Une applet basique... */ import java.applet.Applet; import java.awt.Graphics; public class MonApplet extends Applet { public void paint(Graphics g){ g.drawString("Bienvenue en en L3...", 50,25); } }
  • 42. POO-L3 H. Fauconnier 42 Remarques:  import et package:  Un package est un regroupement de classes.  Toute classe est dans un package  Package par défaut (sans nom)  classpath  import java.applet.*;  Importe le package java.applet  Applet est une classe de ce package,  Sans importation il faudrait java.applet.Applet
  • 43. POO-L3 H. Fauconnier 43 Remarques:  La classe Applet contient ce qu’il faut pour écrire une applet  … extends Applet:  La classe définie est une extension de la classe Applet:  Elle contient tout ce que contient la classe Applet  (et peut redéfinir certaines méthodes (paint))  Patience!!
  • 44. POO-L3 H. Fauconnier 44 Remarques…  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.  drawString 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.
  • 45. POO-L3 H. Fauconnier 45 Pour exécuter l’applet  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.
  • 46. POO-L3 H. Fauconnier 46 Html pour l’applet  Fichier Bienvenu.html: <HTML> <HEAD> <TITLE> Une petite applet </TITLE> <BODY> <APPLET CODE='MonApplet.class' WIDTH=200 Height=50> </APPLET> </BODY> </HTML>
  • 47. POO-L3 H. Fauconnier 47 Html  Structure avec balises:  Exemples:  <HTML> </HTML>  url:  <a target="_blank" href="http://www.liafa.jussieu.f/~hf">page de hf</a>  Ici: <APPLET CODE='MonApplet.class' WIDTH=200 Height=50> </APPLET>
  • 48. POO-L3 H. Fauconnier 48 Exemple interface graphique Fichier MonSwing.java: /** * Une application basique... avec interface graphique */ import javax.swing.*; public class MonSwing { private static void creerFrame() { //Une formule magique... JFrame.setDefaultLookAndFeelDecorated(true); //Creation d'une Frame JFrame frame = new JFrame("MonSwing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Afficher un message JLabel label = new JLabel("Bienvenue en L3..."); frame.getContentPane().add(label); //Afficher la fenêtre frame.pack(); frame.setVisible(true); } public static void main(String[] args) { creerFrame(); } }
  • 49. POO-L3 H. Fauconnier 49 Remarques  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
  • 50. POO-L3 H. Fauconnier 50 Pour finir…  Java 1.5 et 6 annotations, types méthodes paramétrés par des types  Très nombreux packages  Nombreux outils de développement (gratuits)  eclipse, netbeans..
  • 51. POO-L3 H. Fauconnier 51 En plus…
  • 52. POO-L3 H. Fauconnier 52 Entrée-sortie public static void main(String[] args) { // sortie avec printf ou double a = 5.6d ; double b = 2d ; String mul = "multiplié par" ; String eq="égal"; System.out.printf(Locale.ENGLISH, "%3.2f X %3.2f = %6.4f n", a ,b , a*b); System.out.printf(Locale.FRENCH, "%3.2f %s %3.2f %s %6.4f n", a, mul,b eq,a*b); System.out.format( "Aujourd'hui %1$tA, %1$te %1$tB,"+ " il est: %1$tH h %1$tM min %1$tS n", Calendar.getInstance()); // System.out.flush();
  • 53. POO-L3 H. Fauconnier 53 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
  • 54. POO-L3 H. Fauconnier 54 Scanner Scanner sc = new Scanner(System.in); for(boolean fait=false; fait==false;){ try { System.out.println("Répondre o ou O:"); String s1 =sc.next(Pattern.compile("[0o]")); fait=true; } catch(InputMismatchException e) { sc.next(); } } if (sc.hasNextInt()){ int i= sc.nextInt(); System.out.println("entier lu "+i); } System.out.println("next token :"+sc.next()); sc.close();
  • 55. POO-L3 H. Fauconnier 55 Scanner if (sc.hasNextInt()){ int i= sc.nextInt(); System.out.println("entier lu "+i); } System.out.println("next token :"+sc.next()); sc.close(); String input = "1 stop 2 stop éléphant gris stop rien"; Scanner s = new(Scanner(input).useDelimiter("s*stops*"); System.out.println(s.nextInt()); System.out.println(s.nextInt()); System.out.println(s.next()); System.out.println(s.next()); s.close(); }
  • 56. POO-L3 H. Fauconnier 56 Sortie  next token :o  1  2  éléphant gris  rien
  • 57. 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 H. Fauconnier 57
  • 58. Chapitre II Classes et objets (rappels) (mais pas d’héritage)
  • 59. classes et objets POO-L3 H. Fauconnier 59 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
  • 60. classes et objets POO-L3 H. Fauconnier 60 I) Introduction  Classe  Regrouper des données et des méthodes  Variables de classe  Méthodes de classe  Classes<->type  Objet (ou instance)  Résultat de la création d’un objet  Variables d’instance  Variables de classe  Toute classe hérite de la classe Object
  • 61. classes et objets POO-L3 H. Fauconnier 61 II) Classes  Membres d ’une classe sont:  Champs = données  Méthodes = fonctions  Classes imbriquées
  • 62. classes et objets POO-L3 H. Fauconnier 62 Modificateur de classe  Précède la déclaration de la classe  Annotations (plus tard…)  public (par défaut package)  abstract(incomplète, pas d’instance)  final(pas d’extension)  Strictfp (technique…)
  • 63. classes et objets POO-L3 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