Programmation Orientée Objet

publicité
Programmation Orientée Objet
Introduction à Java
Frédéric Mallet
http://deptinfo.unice.fr/~fmallet/
2012‐2013
F. Mallet ‐ POO
1
Programmation Orientée Objet
Organisation du cours
Volume Horaire
 12*1h30 de cours
 12*1h30 de TD machine
Evaluation
 Contrôle 1 (mi‐parcours) : 35%
 Contrôle 2 (fin du semestre) : 35%
 Note de TD : 30%
2012‐2013
F. Mallet ‐ POO
2
Programmation Orientée Objet
Bibliographie et webographie
« Programmer en Java », C. Delannoy, Eyrolles 2012
« Pensez en java », B. Eckel, http://pensezenjava.free.fr/
Tutoriel Oracle, http://docs.oracle.com/javase/tutorial/
API Java Standard Edition 7, http://docs.oracle.com/javase/7/docs/api/
« Informatique Industrielle et Java », F. Mallet et F. Boéri, Dunod 2003
2012‐2013
F. Mallet ‐ POO
3
Programmation Orientée Objet
Plan du cours
Les bases
Polymorphisme: héritage et interfaces
Exceptions
Collections
Généricité
Interface graphique (Swing)
Entrées‐sorties
Compléments sur le langage
2012‐2013
F. Mallet ‐ POO
4
Programmation Orientée Objet
Les bases
Objectifs
 Définir la programmation orientée objet
• Historique
• Avantages
 Notions essentielles
 Environnement de développement
2012‐2013
F. Mallet ‐ POO
5
Programmation Orientée Objet
La programmation impérative
Programmation
 concevoir (algorithme) et réaliser (programme) pour une exécution automatique
Algorithme
 Impératif: succession d’ordres
• Pour calculer le maximum, je parcours les éléments un à un et je les compare à l’élément supposé maximum
 Déclaratif
• max(T) = { m | t  T, t  m }
2012-2013
F. Mallet - POO
6
Programmation Orientée Objet
Exemple de la factorielle
 Impératif
 Déclaratif
 Itératif
 Fonctionnel / Applicatif
long factorielle(int n) {
long res = 1;
for(int i = 2; i<n; i++) {
res = res * i;
}
return res;
}
 Récursif
long factorielle(int n) {
if(n==0) return 1;
return n*factorielle(n-1);
}
2012-2013
(factorielle (n) (fac n 1))
(fac (n acc)
((zero? n) acc)
(fac (- n 1) (* n acc))
 Logique
factoriel(0,1):!.
factoriel(N,T):N1 is N-1,
factoriel(N1,T1),
T is T1*N.
F. Mallet - POO
7
Programmation Orientée Objet
La Programmation Orientée‐Objet
La POO guide la conception par
 Un ensemble de concepts
• abstraction, modularité, encapsulation, polymorphisme
 Des langages et des outils qui supportent ces concepts
• Classification vs. prototype
• Héritage (multiple)
• Typage : fort/faible, explicite/inféré
Ses forces (supposées)
 Reflète plus finement les objets du monde réel
• Du code (plus) facile à maintenir
• Plus stable : un changement s’applique à un sous‐système facile à identifié et isolé du reste du système
2012-2013
F. Mallet - POO
8
Programmation Orientée Objet
Système de gestion d’un lycée
Objets
 Personne
 Etudiant, enseignant, principal, secrétaire
 Diplôme
 Année, matière, parcours
 Bulletin
 Notes
 Coefficients
2012-2013
Fonctions
 Calculer la moyenne
 Calculer les taux d’encadrement
 Calculer le nombre de redoublants
 Calculer le taux de réussite au baccalauréat
F. Mallet - POO
9
Programmation Orientée Objet
Historique
 Simula 61‐67 : Dahl et Nygaard
 Smalltalk 72 : A. Kay
 C++ 81‐86 : Stroustrup
 Eiffel 85 : B. Meyer
 Java 94‐95 : J. Gosling/Sun
 Ruby 95 : Y. "Matz" Matsumoto  C# 2000 : Microsoft
http://www.simula.no
http://www.smalltalk.org
http://www.eiffel.com
http://java.sun.com
http://www.ruby‐lang.org
http://www.learn‐c‐sharp.com
 Turing Award 2001 à Dahl et Nygaard
 'for their role in the invention of OOP, the most widely used
programming model today'. 2012-2013
F. Mallet - POO
10
Programmation Orientée Objet
Les bases
Objectifs
 Définir la programmation orientée objet
 Notions essentielles
• Type, Classe/Objet, instanciation
• Variable, Référence
• Champ/attribut, méthode
 Environnement de développement
2012‐2013
F. Mallet ‐ POO
11
Programmation Orientée Objet
Types de données (1/2)
Les objets Java représentent
 Les objets du système modélisé
•
•
•
•
2012-2013
Une personne (nom, prénom, date de naissance…)
Des formes géométriques (triangle, cercle, …)
Des portes logiques (et, ou, inverseur, mux, …)
Des bases de données et fichiers (images, texte, son, vidéo…)
F. Mallet - POO
12
Programmation Orientée Objet
Types de données (2/2)
Le type encode les données
 Domaine de valeurs
 Opérations autorisées (arithmétiques, booléennes…)
On distingue
 Types primitifs (caractères, entiers, réels, booléens)
 Types composés
• Image = ensemble de pixels de couleur
• Couleur = Rouge + Vert + Bleu
2012-2013
F. Mallet - POO
13
Programmation Orientée Objet
Valeurs numériques
Chiffres numériques : BInary digiT = BIT
 Signaux électriques encodés = valeurs logiques
 Binaire: 2 valeurs logiques (0 et 1)
Ensembles finis: encodés sur plusieurs BITs
 1 octet = 8 bits (28 = 256 valeurs logiques)  1 mot = 32 bits (232 valeurs logiques)
Ensembles infinis ?
 Entiers naturels, nombres réels, …
2012-2013
F. Mallet - POO
14
Programmation Orientée Objet
Type primitif boolean
Domaine de valeurs: vrai ou faux

{true, false}
Opérations autorisées
 Affectation
 Comparaison
 Opérations booléennes
=
==, !=
&&, ||, !
Exemples


2012-2013
boolean estVisible = true;
if (estVisible) …
F. Mallet - POO
15
Programmation Orientée Objet
Type primitif char
Domaine de valeurs: Unicode 16 bits
 Code ASCII (7 bits: 128 caractères)
 Code ANSI (8 bits, ISO‐latin‐1, ISO‐8859‐1)
Opérations autorisées
 Affectation
 Comparaison
=
==, !=
Exemples


2012-2013
char c = 'c';
// code ASCII 99
c = '\u00e9';
// code unicode 00e9 => é
F. Mallet - POO
16
Programmation Orientée Objet
Nombres entiers relatifs 
 Domaine de valeurs




8 bits
16 bits
32 bits
64 bits
byte
short
int
long
[‐128,127]
[‐32768, 32767]
[‐231, 231‐1]
[‐263, 263‐1]
0l
 Opérations autorisées




Affectation
Comparaison
Opérations arithmétiques
Opérations binaires
=
==, !=
+, -, *, /, %
(int, long)
&, |, ~, <<, >>
(int, long)
 Division entière: 23 = 3 * 7 + 2
 /
 %
 23 / 0 2012-2013
quotient de la division entière
reste de la division entière
Erreur !
F. Mallet - POO
23/7 → 3
23%7 → 2
17
Programmation Orientée Objet
Nombres approchés 
 Domaine de valeurs
 32 bits
 64 bits
float
double
??
??
12.5f
-12.5, 1e-23
 Opérations autorisées




Affectation
Comparaison
Opérations arithmétiques
Opérations binaires
=
==, !=
+, -, *, /
&, |, ~, <<, >>
 Particularités
 Division approchée: 23.0 / 0 → +∞
2012-2013
F. Mallet - POO
18
Programmation Orientée Objet
Nombres approchés – IEEE 754
Codage sur 32 bits => 232 valeurs
 Complément à 2 (int)  Virgule flottante (float) 2012-2013
[‐231, 231‐1]
[‐2128, 2128]
Signe
Exposant
Mantisse
S
E=]0,255[
M
S
0
1
0
1
0
0
0
255
255
255
>0
0
0
>0
0
0
F. Mallet - POO
Nombre représenté
(-1)Sx2E-127x(1,M)2
(-1)Sx2-126x(0,M)2
+0
-0
NaN
+

Not a Number !
19
Programmation Orientée Objet
Variable
Case de la mémoire
 Nom (identifiant): cercle, nom2, _1, …
 Type : primitif ou composé
 Valeur : dans le domaine défini par le type
• Change au cours du programme (#constante)
Déclaration
Initialisation
Utilisation
int premiere;
premiere = 12;
premiere = premiere + 1;
Obligatoire: initialisation avant utilisation !
2012-2013
F. Mallet - POO
20
Programmation Orientée Objet
Affectation =
Pour donner/forcer une valeur à une variable
 <variable> = <expression>;
Asymétrique
 L’expression est évaluée
 puis la variable est affectée à (prend comme valeur) la valeur calculée
Exemples
 premiere = 12 + 6 / 5 * 5;
 premiere = premiere * 2 + 1;
 premiere = Math.max(12, premiere);
2012-2013
F. Mallet - POO
21
Programmation Orientée Objet
Affectations combinées +=
Incrémente une variable
 <variable> += <expression>;
Attention
 Surchargé pour tous les types numériques
• byte, short, int, long, float, double
 Différent d’une addition
• byte b = 127;
• b = b + b;
b += b
Variantes
 -=, *=, /=, <<=, >>=, &=, |=
 b++, ++b
2012-2013
F. Mallet - POO
22
Programmation Orientée Objet
Classe = Type composé
 Types primitifs normalisés par le langage
 boolean, char, byte, short, int, long, float, double
 Composition => champs/propriétés (nom + type)




Couleur : rouge (8 bits) + vert (8 bits) + bleu (8 bits)
Image : ensemble de points de couleur
Nom : séquence/chaîne de caractères
Date : ?
 Compromis espace mémoire/temps de calcul
 Couleur : RGB vs. YUV
 Nombre complexe: ou
2012-2013
c = re + i.im
c = z.ei.θ
F. Mallet - POO
23
Programmation Orientée Objet
Classe: encodage
 Couleur
 Complexe
class CouleurRGB {
byte rouge;
byte vert;
byte bleu;
}
class ComplexeCartesien {
double reelle;
double imaginaire;
}
class CouleurYUV {
byte luminance;
byte chrominanceRouge;
byte chrominanceBleue;
}
class ComplexePolaire {
double module;
double argument;
}
2012-2013
F. Mallet - POO
24
Programmation Orientée Objet
Objet = instance d’une classe
Type Classe
→
→
valeurs
objets
Complexe c1; // référence
c1 = new Complexe(1, -1);
c1
2012-2013
→
→
variables
références
Complexe c2; // référence
c2 = new Complexe(2, 0);
c2
F. Mallet - POO
25
Programmation Orientée Objet
Méthode = opération sur les objets
Norme d’un complexe
class ComplexePolaire {
double module;
double argument;
class ComplexeCartesien {
double re;
double im;
double norme () {
return re*re+im*im;
}
double norme() {
return module*module;
}
double argument () {
return Math.atan2(im, re);
}
double argument() {
return argument;
}
}
2012-2013
}
F. Mallet - POO
26
Programmation Orientée Objet
Notation pointée
Pour accéder aux membres d’un objet
 Membre = champs + méthodes
Exemple
 Complexe c1 = new Complexe();
 c1.reelle désigne le champ reelle de c1
 c1.norme() désigne la méthode norme de c1
2012-2013
F. Mallet - POO
27
Programmation Orientée Objet
Méthodes et paramètres
Données supplémentaires
 Le calcul de la norme nécessite seulement la valeur de ‘reelle’ et de ‘imaginaire’
 Certaines méthodes nécessitent des paramètres
• Signature
int addition(int x, int y);
• Corps
int addition(int x, int y) {
return x + y ;
}
2012-2013
F. Mallet - POO
28
Programmation Orientée Objet
Classe Moyenne
class
/**
int
/**
int
Moyenne { // bloc de déclaration de classe
Somme des notes obtenues */
notes = 0 ;
Nombre de notes obtenues */
nombreDeNotes = 0 ;
/** Ajoute une note à la moyenne
* @param note nouvelle note obtenue */
void ajouteNote (int note) {
notes += note;
nombreDeNotes += 1;
}
/** @return moyenne des notes */
double calculMoyenne() {
return ((double)notes) / nombreDeNotes ;
}
}
2012-2013
F. Mallet - POO
29
Programmation Orientée Objet
Classe String
Classe qui représente une séquence de caractères
 Classe spéciale (utilisation très fréquente)
• Pas besoin d’utiliser new pour créer des instances
String str = "Un example!";
• Les objets sont immutables (on ne peut pas les modifier)
L’expression "rou"+"ge" fait intervenir 3 objets différents
 Concaténation
int x = 20, y = 40;
"Je place " + x + " euros."
x + y + " euros sont placés."
"Je place " + x + y
2012‐2013
F. Mallet ‐ POO
"Je place 20 euros."
"60 euros sont placés."
"Je place 2040"
30
Programmation Orientée Objet
Vocabulaire
12
1
2012-2013
F. Mallet - POO
31
Programmation Orientée Objet
Les bases
Objectifs
 Définir la programmation orientée objet
 Notions essentielles
 Environnement de développement
• Java Development Kit (JDK)
• Compilation, interprétation, machine virtuelle
• Méthode main
2012‐2013
F. Mallet ‐ POO
32
Programmation Orientée Objet
Compilateur
L’ordinateur (son processeur) ne comprend pas le code Java (code source)
Un interpréteur interprète directement le code source (langage interprété)
Le compilateur traduit (compile) le code source
 Vers du code binaire natif (langage compilé)
• Spécifique à un processeur donné
• Spécifique au système d’exploitation utilisé
 Vers un langage neutre (ex: bytecode)
• Ce langage neutre est alors interprété par la machine virtuelle java
(Java Virtual Machine ‐ JVM) 2012‐2013
F. Mallet ‐ POO
33
Programmation Orientée Objet
Processus de compilation en Java
Fichier source
Test.java
Compilation
(JDK)
javac Test.java
interprétation
bytecode
java Test
Test.class
API
JRE
Write once, Run everywhere
OS
Processeur
2012‐2013
F. Mallet ‐ POO
JRE 7.0
Windows, Mac, Linux
Intel, AMD, ARM
34
Programmation Orientée Objet
Méthode main – java Test
Test.java:
Moyenne.java:
class Moyenne {
int notes = 0 ;
int nombreDeNotes = 0 ;
Moyenne e = new Moyenne();
void ajouteNote (int note) {
notes += note;
nombreDeNotes += 1;
}
e.ajouterNote(8);
e.ajouterNote(18);
e.ajouterNote(12);
double m = e.calculMoyenne();
double calculMoyenne() {
return ((double)notes) /
nombreDeNotes ;
}
}
2012‐2013
F. Mallet ‐ POO
35
Programmation Orientée Objet
Méthode main – java Test
Test.java:
Moyenne.java:
class Test {
class Moyenne {
int notes = 0 ;
static public void main(String[] args)
int {nombreDeNotes = 0 ;
Moyenne e = new Moyenne();
void ajouteNote (int note) {
e.ajouterNote(8);
notes += note;
e.ajouterNote(18);
nombreDeNotes += 1;
e.ajouterNote(12);
}
double m = e.calculMoyenne();
double calculMoyenne() {
return ((double)notes) /
System.out.println("Moyenne="+m);
nombreDeNotes ;
}
}
}
}
2012‐2013
F. Mallet ‐ POO
36
Programmation Orientée Objet
Méthode main – java Test
Test.java:
class Test {
static public void main(String[] args) {
Moyenne e = new Moyenne();
e.ajouterNote(8);
e.ajouterNote(18);
e.ajouterNote(12);
double m = e.calculMoyenne();
System.out.println("Moyenne="+m);
}
}
2012‐2013
F. Mallet ‐ POO
> dir
214 Moyenne.java
229 Test.java
> javac Test.java
> dir
411 Moyenne.class
214 Moyenne.java
744 Test.class
229 Test.java
> java Test
Moyenne=12.666666666666666
37
Programmation Orientée Objet
Processus de compilation en Java
Fichier source
Test.java
Compilation
(JDK)
javac Test.java
interprétation
bytecode
appletviewer Test
Test.class
API
JRE
JRE 7.0
Write once, Run everywhere
Navigateur
Mozilla, IE, Opera
OS
Processeur
2012‐2013
F. Mallet ‐ POO
38
Programmation Orientée Objet
appletviewer Test.html
Test.java:
Moyenne.java:
public class Test extends Applet {
class Moyenne {
int notes = 0 ;
int nombreDeNotes = 0 ;
public void paint(Graphics g) {
Moyenne e = new Moyenne();
void ajouteNote (int note) {
notes += note;
nombreDeNotes += 1;
}
e.ajouterNote(8);
e.ajouterNote(18);
e.ajouterNote(12);
double m = e.calculMoyenne();
double calculMoyenne() {
return ((double)notes) /
nombreDeNotes ;
}
g.drawString("Moyenne="+m, 10, 10);
}
}
}
2012‐2013
F. Mallet ‐ POO
39
Programmation Orientée Objet
appletviewer Test.html
Test.java:
Test.html:
public class Test extends Applet {
<object width="200" height="100">
<param name="code"
value="Test.class">
</object>
public void paint(Graphics g) {
Moyenne e = new Moyenne();
e.ajouterNote(8);
e.ajouterNote(18);
e.ajouterNote(12);
double m = e.calculMoyenne();
g.drawString("Moyenne="+m, 10, 10);
}
}
2012‐2013
F. Mallet ‐ POO
40
Programmation Orientée Objet
appletviewer Test.html
Test.java:
Test.html:
public class Test extends Applet {
<object width="200" height="100">
<param name="code"
value="Test.class">
</object>
public void paint(Graphics g) {
Moyenne e = new Moyenne();
e.ajouterNote(8);
e.ajouterNote(18);
e.ajouterNote(12);
double m = e.calculMoyenne();
g.drawString("Moyenne="+m, 10, 10);
}
}
2012‐2013
F. Mallet ‐ POO
> javac Test.java
> dir
411 Moyenne.class
214 Moyenne.java
702 Test.class
92 Test.html
271 Test.java
> appletviewer Test.html
41
Téléchargement