Académique Documents
Professionnel Documents
Culture Documents
et
programmation orientée objet
Ye-Qiong SONG
Ye-Qiong.Song@univ-lorraine.fr
2x1h de CM, 1h de TD et 3h de TP
• Introduction à Java
• Programmation orientée objet en Java
– Modélisation objet et programmation objet (notions de classe,
méthode et objet)
– héritage,
– protection de données,
– classes abstraite
– interface (design pattern)
3
Java et JVM
Java est né dans un café: Bill Joy, James Gosling
• Java est un langage objet (basé sur C++), développé par
Sun Microsystems en 1995. Un environnement de
programmation orienté objets adapté à la distribution
d'applications sur Internet et s'intégrant au Web
• L’introduction de JVM (Java Virtual Machine) assure la
portabilité du code (exécutable sur Windows, MacOS, Unix,
… sans réécriture ni recompilation), mais au prix d’une
exécution plus lente car interprété
• JDK (Java Development Kit) ou SDK téléchargeable sur le
site d’Oracle (prenez Java standard edition Java SE):
– pour compiler: javac monprog.java è monprog.class
– pour exécuter: java monprog (sans extension)
• Autres Environnements de Développement Intégré (IDE):
Netbeans, Eclipse,
cours d’algo. et prog. …
par Y.Q. Song Informatique 1 4
Autres intérêts de java
• Java et Internet
– Java a d'abord été utilisé pour animer les pages Web
– Le « World Wide Web » passe d'un « simple » instrument de
publication passive à un réseau pleinement client-serveur (avec
notions de servlet et applet)
• Avec Java, un programme précompilé stocké sur le serveur, associé à
une page spécifique, est téléchargé automatiquement sur le client
lorsqu'un browser Web lit cette page, permettant ainsi au browser doté
d'un interpréteur Java (JVM) de l'exécuter
• En cliquant sur telle icône ou en chargeant telle page HTML,
l'utilisateur voit s'activer sur son browser un dessin animé ou une mise
à jour en temps réel d'une courbe de données
• Java et interfaces graphiques
– interfaces graphiques des applications développées en Java sont
hautement performantes grâce au support du multithreading et
bibliothèque de « classes »
5
Les langages les plus utilisés
https://www.codeur.com/blog/top-
langages-de-programmation/
6
Java
• 4 éléments :
– un langage de programmation
– une machine virtuelle JVM ou interpréteur (JRE:
Java Runtime Envirionment)
– un ensemble d'outils JDK (Java Development
Kit: Javac, jdb, javadoc, …), Prenez Java SE
(Standard Edition), au lieu de J2EE (Entreprise
Edition), pour votre apprentissage
– un ensemble de classes standards dans des
API
7
Principales propriétés de Java (extrait de P. Itey)
8
Autres propriétés importantes (extrait de P. Itey)
• mufti-tâches (thread)
• sûr
– fortement typé
– nombreuses vérifications au chargement des classes et
durant leur exécution
• adapté à Internet
– chargement de classes en cours d’exécution (par le
réseau : applet ou RMI)
– distribution des traitements entre plusieurs machines
(sockets, RMI, Corba)
9
Eclipse pour faciliter vos
développements en java
• Notion de projet java (‘Java project’)
• Chaque projet java contient au moins deux sous-
répertoires: src et bin (invisible depuis ‘project
explorer’)
• Les programmes sont dans des fichiers nommés
« class »
• Les classes sont regroupées dans de « packages » (si
vous ne mettez rien, le package sera « default »)
• Eclipse est un EDI (Environnement de Développement
Intégré, IDE en anglais) qui fournit beaucoup
d’assistances !
Cf. démo pour la prise en main cycle_rentree (jeu plus moins) 10
Auto-apprentissage
• Vous savez déjà programmer en Python
• Vous avez aussi pratiqué la programmation
Objet en Python.
• La première étape consistera à vous
familiariser avec la syntaxe du langage Java
(très similaire à celle du C)
– Suivre le cours en ligne sur openclassrooms
(Partie1 et Partie2)
https://openclassrooms.com/fr/courses/6173501-apprenez-a-programmer-en-java
15
Partie 2:
Programmation orienté objet en java
16
Une classe d’objets en java
• Attributs
• Constructeur(s)
• Méthodes
– get() et set() publique si attributs privés
– Les autres méthodes
– Redéfinition de toString() ou méthode
d’affichage de l’objet
17
Un exemple de la programmation
orientée objet
• Nous prenons l’exemple de la classe
« Polynome » déjà vu en Python en S5
• Différentes façons de programmer
– Un programme structuré avec des méthodes statiques
– Une programmation orientée objet
• Définir l’objet: ses attributs et ses méthodes
• Décrire les méthodes
18
public class polynome_Fonction { //programme structuré en fonctions
public static void main(String[] args) {
double [] coef;
double resultat;
int n=Lecture.lireEntier("saisir le degré du polynôme: ");
coef = new double[n+1];
for (int i=0; i<coef.length; i++)
coef[i]=Lecture.lireEntier("saisir le coef de x^"+i+": ");
double x=Lecture.lireFlottantDouble("saisir la valeur de x : ");
System.out.println("résultat est = "+horner(coef,x));
}
public static double horner(double [] coefficient, double x){
//méthode de HORNER
int n=coefficient.length-1;
double Px=coefficient[n];
for(int i = n-1; i >= 0; i--){
Px = Px*x+coefficient[i];
}
return Px;
}
} cours d’algo. et prog. par Y.Q. Song Informatique 1 19
Objet polynôme
• Modélisation de l’objet « Polynôme »
– Attributs: degré, les coefficients (degré+1)
– Méthodes: créer (par constructeurs), afficher
(peut se faire via la redéfinition de toString()),
évaluer, additionner, multiplier, dériver, …
• Implémentation en Java
– Une classe « polynome »
– Une classe principale avec « main() » pour
manipuler les polynômes
20
public class Polynome_obj {//programme objet
int deg;
double [] coef;
public Polynome_obj(){// constructeur par défaut
deg=Lecture.lireEntier("saisir le degré du polynôme: ");
coef = new double[deg+1];
for (int i=0; i<coef.length; i++)
coef[i]=Lecture.lireEntier("saisir le coef de x^"+i+": ");
}
public double horner(double x){//méthode de HORNER
double resultat=coef[deg];
for(int i = deg-1; i >= 0; i--){
resultat = resultat*x+coef[i];
}
return resultat;
}
} d’algo. et prog. par Y.Q. Song
cours Informatique 1 21
Utilisation de la classe
« Polynome_obj »
22
Objet polynôme
• Si on veux ajouter d’autres méthodes?
– Afficher un polynôme
• Par une chaîne de caractères. E.g. coef(3, 0, 1, 4)
3*X^3+0*X^2+1*X^1+4 ou 3*X^3+X^1+4
et si coef(3, 0, -1, 4)?
– Additionner deux polynômes
n m
P( X ) = å pi X i Q( X ) = å qi X j
i =0 j =0
min( n , m ) n m
P( X ) + Q( X ) = å
k =0
( pk + q k ) X +
k
å
i = min( n , m ) +1
pi X +
i
å
j = min( n , m ) +1
qj X j
Pas Informatique
d’effet si 1 m ou n < min(m,n)+1
23
Méthode afficher() ou redéfinir toString()
24
Mais de préférence redéfinir toString()
25
public Polynome_obj additionner(Polynome_obj P){
int maxdeg = (P.deg >= this.deg ? P.deg : this.deg);
int mindeg = (P.deg <= this.deg ? P.deg : this.deg);
Ou Math.max()
Polynome_obj R = new Polynome_obj(maxdeg);
for(int i = 0; i <= mindeg; i++) et Math.min()
R.coef[i] = P.coef[i] + this.coef[i];
for(int i = mindeg+1; i <= P.deg; i++)
R.coef[i] = P.coef[i];
for(int i = mindeg+1; i <= this.deg; i++)
R.coef[i] = this.coef[i];
return R;
}
Besoin d’un constructeur avec degré comme paramètre et sans la saisie des coef !
28
Méthodes et variables statiques et non
statiques
• Une méthode déclarée static peut être utilisée sans
référence à un objet particulier è méthode de classe
• Une méthode statique n’a pas directement accès aux
variables non statiques
• Une méthode non statique est toujours utilisée en
référence à un objet
Appel d’une méthode statique:
NomDeClasse.nomDeMethode()
void affiche_x() {
System.out.println("s.x = " + this.x);
}
void affiche_y() {
System.out.println("s.y = " + this.y);
}
static void affiche2_x() {
System.out.println("s.x = " + x);
}
// static void affiche2_y() { variable y non-statique
// System.out.println("s.y = " + y); ne peut pas être
// } référencé depuis un
static void affiche3_y(Paire s) {
contexte statique
System.out.println("s.y = " + s.y);
} d’algo. et prog. par Y.Q. Song
cours Informatique 1 30
}
Méthodes et variables statiques et non
statique
public class TesterPaire {
public static void main(String[] args) {
Paire s = new Paire();
Paire t = new Paire();
t.x = 2;
t.y = 3;
System.out.println("t.x = " + t.x + ", t.y = " + t.y); //1
System.out.println("s.x = " + s.x + ", s.y = " + s.y); //2
s.affiche_x(); //3
t.x = 2, t.y = 3
s.affiche_y(); //4
s.x = 2, s.y = 0
Paire.affiche2_x(); //5
s.x = 2
s.affiche2_x(); //6
s.y = 0
Paire.affiche3_y(s); //7
s.x = 2
}
s.x = 2
} cours d’algo. et prog. par Y.Q. Song Informatique 1 31
s.y = 0
L’héritage
• L’héritage permet la réutilisation des
fonctionnalités d’une classe, tout en apportant
certaines variations, spécifiques de l’objet héritant
• Exemple: une classe « Forme » qui définit un
ensemble de comportements propres à toute
forme géométrique
– Ces comportements peuvent être réutilisés par la classe
« Cercle ». Cette réutilisation est effectuée sans avoir à
modifier les instructions de la classe « Forme »
– Possibilité d’ajouter d’autres comportements spécifiques
des objets « Cercle ». Ces nouveaux comportements
sont valides uniquement pour la classe « Cercle » et
non pour la classe « Forme »
32
Modélisation UML:
association entre
classes
l'ObjetA a un ObjetC
34
public class ObjetA{
protected ObjetC obj = new ObjetC();
protected ObjetD[] objD = new ObjetD[10]; public class ObjetC{
public ObjetC getObject(){ }
return obj;
}
public ObjectD[] getObjectD(){
return objD;
}
}
} }
35
import utilensemjava.*;
public class Forme {
protected int x, y; Protected permet l’accès
private int couleur ; //0-255 par la sous-classe
public Forme() {
x = Lecture.lireEntier ("Position en x : ");
y = Lecture.lireEntier ("Position en y : ");
couleur = Lecture.lireEntier ("Couleur : ");
}
public Forme(int nx, int ny) {
x = nx; y = ny; couleur = 0;
}
public Forme(int nx, int ny, int nc) {
x = nx; y = ny; couleur = nc;
}
public void afficher() { //ou redéfinition de toString()
System.out.println("Position en " + x + ", " + y);
System.out.println("Couleur : " + couleur);
}
public void déplacer(int nx, int ny) {
x = nx;
y = ny;
}cours d’algo. et prog. par Y.Q. Song Informatique 1 36
} // Fin de la classe Forme
import utilensemjava.*;
public class Cercle extends Forme {
private int r ;
Private final static int TailleEcran=600;
public Cercle() { Constructeur de
System.out.print ("Rayon : " ); la classe héritée
r = rayonVérifié();
}
public Cercle(int xx, int yy) { Constructeur de
super(xx, yy); la classe héritée
r = rayonVérifié();
}
private int rayonVérifié() {
// cf. transparents déjà présentés }
private int rayonVérifié(int tmp) {
// cf. transparents déjà présentés }
public void afficher() { Deux formes différentes dans
super.afficher(); • classe Forme
System.out.println("Rayon : " + r);
} • classe Cercle
public double périmètre() {
return 2*Math.PI*r;
è polymorphisme
}
public void agrandir(int nr) {
r = rayonVérifié(r + nr);
}
cours d’algo. et prog. par Y.Q. Song Informatique 1 37
} // Fin de la classe Cercle
Protection des données
Modificateur Classe Paquet Sous-classe extérieur
(package)
38
Classes abstraites: un exemple
Forme
Ellipse Rectangle
39
Un exemple: Classe Forme
abstract class Forme {
abstract double perimetre(); //methode abstraite
abstract double surface(); //methode abstraite
void decritEtalement() {
double lePerimetre = perimetre();
if (surface() >= lePerimetre*lePerimetre/16)
System.out.println(this + " s'etale plus qu'un carre");
else System.out.println(this + " s'etale moins qu'un carre");
}
}
42
Un exemple: sous-classe Rectangle
class Rectangle extends Forme{
private int longueur, largeur;
Rectangle(int longueur, int largeur) {
this.longueur = longueur;
this.largeur = largeur;
}
double perimetre() {
return 2*(longueur + largeur);
}
double surface() {
return longueur*largeur;
}
public String toString() {
return (" Le rectangle de longueur " + longueur + " et de largeur " +
largeur);
}
} cours d’algo. et prog. par Y.Q. Song Informatique 1 43
Un exemple: EssaiFormes
class EssaiFormes {
public static void main(String[ ] arg) {
(new Ellipse(2, 1)).decritEtalement();
(new Ellipse(4, 1)).decritEtalement();
(new Rectangle(2, 1)).decritEtalement();
}
}
44
Interface: Un exemple
Interface (à ne pas confondre avec interface graphique): Définit le
prototype (ou design pattern – patron de conception) d’une classe
- méthodes abstractes: l’en-tête de la méthode
Interface: Tracable
________________________
classe: Cercle classe: Carre
- DIM_MAX
- dessine(java.awt.Graphics g)
45
CercleGraphique CarreGraphique
Un exemple
Fichier Tracable.java: interface Tracable {
static final int DIM_MAX = 500;
void dessiner(java.awt.Graphics g);
}
46
Un exemple
class CercleGraphique extends Cercle implements Tracable {
// x et y : coordonnees du centre du cercle
int x, y;
// couleur : la couleur du cercle
java.awt.Color couleur;
CercleGraphique(int rayon, int x, int y, java.awt.Color couleur) {
super(rayon);
this.x = x;
this.y = y;
this.couleur = couleur;
}
public void dessiner(java.awt.Graphics g) {
if (rayon < DIM_MAX) {
g.setColor(couleur);
g.drawOval(x - rayon, y - rayon, 2*rayon, 2*rayon);
}
}
} cours d’algo. et prog. par Y.Q. Song Informatique 1 47
Un exemple
class Carre {
int cote;
Carre(int cote) {
this.cote = cote;
}
int surface() {
return cote * cote;
}
}
48
import java.awt.*;
Un exemple
class CarreGraphique extends Carre implements Tracable {
int x, y; //coordonnees du centre
Color couleur = Color.black; // couleur par défaut du carre
CarreGraphique(int cote, int x, int y) {
super(cote);
this.x = x;
this.y = y;
}
CarreGraphique(int cote, int x, int y, Color couleur) {
this(cote, x, y);
this.couleur = couleur;
}
public void dessiner(Graphics g) {
if (cote < DIM_MAX) {
g.setColor(couleur);
g.drawRect(x - cote/2, y - cote/2, cote, cote);
}
}
} d’algo. et prog. par Y.Q. Song
cours Informatique 1 49
Un exemple: EssaiTracable.java
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JPanel;
import javax.swing.JFrame;
EssaiTracable() {
setPreferredSize(new Dimension(200, 200));
desFormes[0] = new CercleGraphique(75, 100, 100, Color.black);
desFormes[1] = new CercleGraphique(10, 65, 75, Color.blue);
desFormes[2] = new CercleGraphique(10, 135, 75, Color.blue);
desFormes[3] = new CarreGraphique(10, 100, 110, Color.magenta);
desFormes[4] = new CarreGraphique(15, 100, 150, Color.red);
} //à
cours suivre
d’algo. et prog. par Y.Q. Song Informatique 1 50
Un exemple: EssaiTracable.java
// suite et fin
protected void paintComponent(Graphics g) {
super.paintComponent(g);
for (int i = 0;i < desFormes.length;i++) desFormes[i].dessiner(g);
}
51
Résumé des concepts fondamentaux
53