0% ont trouvé ce document utile (0 vote)
191 vues62 pages

Introduction à la POO en Java

Ce document présente une introduction à la programmation orientée objet avec Java. Il aborde des concepts clés comme les classes, objets, état, comportement, héritage et polymorphisme. Le plan détaille les différents sujets qui seront traités au cours comme les interfaces graphiques, les collections génériques et les design patterns.

Transféré par

Matthieu Maunier
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
191 vues62 pages

Introduction à la POO en Java

Ce document présente une introduction à la programmation orientée objet avec Java. Il aborde des concepts clés comme les classes, objets, état, comportement, héritage et polymorphisme. Le plan détaille les différents sujets qui seront traités au cours comme les interfaces graphiques, les collections génériques et les design patterns.

Transféré par

Matthieu Maunier
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

NFP121, Cnam/Paris

Cours 1

jean-michel Douin, douin au cnam point fr


version : 1 Octobre 2012

Notes de cours

1
NFP121
Plan + Plan prévisionnel

• Introduction à la POO, rappels ?


• Une Classe, aspects impératifs du langage, Exceptions
• Plusieurs classes, Interfaces, Types et Classes, Design Pattern
• Programmation évènementielle
• Interfaces graphiques
• Généricité et Collections
• Design Patterns, structures récursives
• Introspection et réflexivité en Java
• Entrées/Sorties,
• Sérialisation, XML, persistance
• Injection de dépendance
• Programmation Concurrente
• Introduction à la programmation réseau
+• Programmation par Contrat : Java/JML
• Validation des programmes: ESC/Java
• UML2 et le langage OCL
• Méthodes de développement et langage UML
• …

2
NFP121
Plan de l’unité, NFP121 Programmation avancée

• L3 en Licence d’Informatique générale

• Des Cours , des Exercices dirigés, des devoirs hebdomadaires

• Cours 1h30 à 2h + 0h30 à 1h Présentation devoirs

• ED 1h30 centrés sur la réponse aux devoirs et compléments

• Un agenda pour les devoirs


• Un forum d’entraides
• JNEWS un outil d’aide à la réponse attendue
– Le site [Link]

3
NFP121
Horaires et lieux

• Horaires et lieux
– Cours le mardi 18h15/~20h
à l'ENSAM. Amphi Manet, 155 boulevard de l'Hôpital − 75 013
- Compléments ~20h-~21h30

– Séances d'exercices dirigés, en accès libre, les lundis,


au Collège Evariste Galois, 15 rue Montgolfier 75003 ( établissement contigu
au Cnam, 2 rue conté)
Salle 1.11
– Pour le moment deux séances
lundi 18h30 - 20h et 20h - 21h30

– Surveillez [Link]

4
NFP121
Sommaire du cours 1

• Introduction

– Présentation des concepts de l'orienté Objet,

– Java un langage OO : Les objectifs des concepteurs,

• Outil de développement
– BlueJ (>2.5.0) + JDK1.6+

• [Link]

• [Link]

5
NFP121
Principale bibliographie utilisée pour ces notes

• [Grand00]
– Patterns in Java le volume 1
[Link]
• [head First]
– Head first : [Link]
• [DP05]
– L’extension « Design Pattern » de BlueJ : [Link]
– Ou bien en [Link]
• [Liskov]
– Program Development in Java,
Abstraction, Specification, and Object-Oriented Design, [Link] avec J. Guttag
Addison Wesley 2000. ISBN 0-201-65768-6

• [divers]
– Certains diagrammes UML : [Link]
– informations générales [Link]

6
NFP121
Concepts de l'orienté objet

. Un historique …

• Classe et objet (instance d ’une classe)


• État d'un objet et données d ’instance
• Comportement d'un objet et méthodes
– liaison dynamique

• Héritage
• Polymorphisme
– d’inclusion

7
NFP121
Un historique

• Algorithm + Data Structures = Program


– Titre d’un ouvrage de [Link] (Pascal, Modula-2, Oberon)

A+d=P langage de type pascal, années 70

A+D=P langage modulaire, Ada, modula-2, années 80

a+D=P langage Orienté Objet années 90, simula67…

8
NFP121
A+d=P
• surface ( triangle t ) =
• surface ( carré c) =
• surface ( polygone_régulier p) =
• ....
• perimetre ( triangle t ) =
• perimetre ( carré c) =
• perimetre ( polygone_régulier p) =
• .…

• usage : import de la librairie de calcul puis

carré unCarré; // une variable de type carré

y = surface ( unCarré)
9
NFP121
A+D=P
• type carré = structure
• longueurDuCote
• fin_structure;
• >>>-------------------------------------------------------<<<

• surface ( carré c ) =
• perimetre ( carré c ) =
• ………… ( carré c ) =

• usage : import du module carré puis

carré unCarré; // une variable de type carré

y = surface ( unCarré)

10
NFP121
a+D=P
• classe Carré =
• longueurDuCote …

• surface ( ) =
• perimetre ( ) =
• ………… () =
• fin_classe;

• usage : import de la classe carré puis

– carré unCarré; // une instance de la classe Carré

• y = unCarré.surface ( )

11
NFP121
Classe et objet (instance d ’une classe)

class Carré{

Carré

12
NFP121
État d'un objet et données d ’instance

class Carré{
int longueurDuCoté;

longueurDuCoté == 100

longueurDuCoté == 15

longueurDuCoté == 15

longueurDuCoté == 10

13
NFP121
État d'un objet et données d ’instance

class Carré{
int longueurDuCoté;
Couleur couleur;

longueurDuCoté == 100
couleur==vert

longueurDuCoté == 15
couleur==bleu

longueurDuCoté == 15
Couleur==noir

longueurDuCoté == 10
couleur==rouge

14
NFP121
Classe et Encapsulation

class Carré{
private int longueurDuCoté;
private Couleur couleur;

• contrat avec le client


– interface publique, une documentation, le nom des méthodes
– implémentation privée
• Les données d’instances sont privées

15
NFP121
Classe et Encapsulation

class Carré{
private int longueurDuCoté;
private Couleur couleur;

/* par convention d’écriture */


public Couleur getCouleur(){ ….;}
public void setCouleur(Couleur couleur){ …..;}

/* accesseur et mutateur */
/* getter and setter */

16
NFP121
Classe et Encapsulation
class Carré{
private int longueurDuCoté;
private
private Couleur couleur;

// publiques
public couleur getCouleur( …){}
public void setCouleur (…){}

public couleur getCouleur( …){}


Carré public void setCouleur (…){}

???

17
NFP121
Héritage

• Les carrés sont des polygones réguliers


• On le savait déjà …

– Les carrés héritent des propriétés des polygones réguliers

PolygoneRégulier

Carré

– un polygone régulier pourrait être un carré

18
NFP121
Héritage et classification

• Définir une nouvelle classe en ajoutant de nouvelles


fonctionnalités à une classe existante
– ajout de nouvelles fonctions
– ajout de nouvelles données
– redéfinition de certaines propriétés héritées (masquage)

• Une approche de la classification en langage naturel


• Les carrés sont des polygones réguliers (ce serait l ’idéal...)

PolygoneRégulier

Carré

19
NFP121
La classe PolygoneRegulier

class PolygoneRégulier{
private int longueurDuCoté;
private
private Couleur couleur;

/* accesseurs et mutateurs */
/* getter and setter */

/* opérations */
public int surface(){ ….}

20
NFP121
La classe Carré est vide…

class Carré extends PolygoneRégulier{

Carré c … int s = [Link]();  surface est héritée

21
NFP121
Héritage, Les Carrés sont des polygones réguliers

PolygoneRégulier
surface();
Carré
p

• PolygoneRégulier p … int s1 = [Link]();


• Carré c … int s = [Link]();  surface est héritée

22
NFP121
Héritage et redéfinition (masquage)

PolygoneRégulier
surface();

Carré
surface();
p

• PolygoneRégulier p … int s1 = [Link]();

• Carré c … int s = [Link]();


23
NFP121
La classe Carré, le retour

class Carré extends PolygoneRégulier{


private int longueurDuCoté;
private Couleur couleur;

public int surface(){ ….}

Carré c … int s = [Link]();  surface est redéfinie

24
NFP121
Comportement d'un objet et méthodes

PolygoneRégulier Carré
surface();
surface();

• PolygoneRégulier p = c;

• [Link](); ??? surface(); ou surface(); ???

25
NFP121
Liaison dynamique

• PolygoneRégulier p = c;
• [Link](); ??? surface(); ou surface(); ???

• Hypothèses
1) La classe Carré hérite de la classe PolygoneRégulier
2) La méthode surface est redéfinie dans la classe Carré

• PolygoneRégulier p = c;
– p doit se comporter comme un Carré

PolygoneRégulier p1 = … un pentagone ;
• p = p1 Possible ??? [Link]() ???

26
NFP121
Démonstration

• BlueJ
– [Link]

– Outil avec tests unitaires intégrés

27
NFP121
Démonstration, discussion

• Tests unitaires en vert

28
NFP121
Les carrés sont des polygones, attention

Carré

PolygoneRégulier

• Un extrait du cahier des charges


– Les carrés sont verts
– Les polygones réguliers sont rouges

29
NFP121
Les carrés sont des polygones, attention

Carré

• ? Couleur d’un PolygoneRegulier de 4 côtés ?


– Discussion :
• Serait-ce une incohérence du cahier des charges ?
• Ou bien un polygone régulier de 4 côtés ne devrait-il pas muter en
carré ?
• …
30
NFP121
La plupart des langages à Objets, y compris Java…

PolygoneRégulier
couleur();
Carré
couleur();
c

• Alors en java

• Un PolygoneRégulier de 4 côtés est rouge


• Un Carré est vert
– …

31
NFP121
La suite

• Discussion

• Polymorphisme de plus près

• Liaison dynamique
– récréation

32
NFP121
Polymorphisme : définitions

• Polymorphisme ad'hoc
– Surcharge( overloading),
– plusieurs implémentations d'une méthode en fonction des types de paramètres
souhaités, le choix de la méthode est résolu statiquement dès la compilation

• Polymorphisme d'inclusion
– Redéfinition, masquage (overridding),
– est fondé sur la relation d'ordre partiel entre les types, relation induite par l'héritage. si
le type B est inférieur selon cette relation au type A alors on peut passer un objet de
type B à une méthode qui attend un paramètre de type A, le choix de la méthode est
résolu dynamiquement en fonction du type de l'objet receveur

• Polymorphisme paramétrique ou généricité,


– consiste à définir un modèle de procédure, ensuite incarné ou instancié avec différents
types, ce choix est résolu statiquement

– extrait de M Baudouin-Lafon. La Programmation Orientée Objet. ed. Armand Colin

33
NFP121
Polymorphisme ad'hoc

• 3+2 3.0 + 2.5 "bon" + "jour"

• [Link](5); [Link](5.5); [Link]("bonjour");

– le choix de la méthode est résolu statiquement à la compilation

– print(int) print(double) print(String)

34
NFP121
Polymorphisme d'inclusion

• A a = new A(); a.p(); Classe A


• B b = new B(); b.p(); méthode p()
• a = new B(); a.p();
hérite

Classe B
void m(A a){ méthode p()
a.p();
}
m(new B());
m(new A());

– B hérite de A, B est inférieur selon cette relation au type A


– le choix de la méthode est résolu dynamiquement en fonction du type
de l'objet receveur

35
NFP121
Polymorphisme paramétrique

• Une liste homogène

• class Liste<T>{
void add(T t) …
void remove(T t) …

}

Liste<Integer> li = new Liste<Integer>();


[Link](new Integer(4));

Liste<A> la = new Liste<A>();


[Link](new A());
[Link](new B()); // B hérite de A

– incarné ou instancié avec différents types, ce choix est résolu statiquement


36
NFP121
Affectation polymorphe
• Création d'instances
– Carre c1 = new Carre(100);
– Carre c2 = new Carre(10);
– PolygoneRegulier p1 = new PolygoneRegulier(4,100);

• Affectation
– c1 = c2; // synonymie : c1 est un autre nom pour c2
// c1 et c2 désignent le même carré de longueur 10

• Affectation polymorphe
– p1 = c1;

• Affectation et changement de classe


– c1 = (Carre) p1; // Hum, Hum ... Hasardeux, levée d’exception possible

• if (p1 instanceof Carre) c1 = (Carre)p1; // mieux, beaucoup mieux …

37
NFP121
Liaison dynamique

• Sélection de la méthode en fonction de l'objet receveur


• déclaré / constaté à l'exécution

• PolygoneRegulier p1 = new PolygoneRegulier(5,100);


// p1 déclarée PolygoneRegulier
• Carre c1 = new Carre(100);

• int s = [Link](); // p1 constatée PolygoneRegulier

• p1 = c1; // affectation polymorphe

• s = [Link](); // p1 constatée Carre

• Note importante : la recherche de la méthode s'effectue uniquement dans l'ensemble des


méthodes masquées associé à la classe dérivée
– Rappel : Dans une classe dérivée, la méthode est masquée seulement si elle possède exactement la même signature

38
NFP121
Selon Liskov cf. Sidebar2.4, page 27

• The apparent type of a variable is the type understood by the


compiler from information available in declarations. The
actual type of an Object is its real type -> the type it receives
when it is created.

Ces notes de cours utilisent


• type déclaré pour apparent type et
• type constaté pour actual type

39
NFP121
Java un langage à Objets

• Sommaire

– Généralités

– Démonstration

– Une classe
• Tests unitaires

40
NFP121
Java : les objectifs

• « Simple »
– syntaxe " C «

• « sûr »
– pas de pointeurs, vérification du code à l ’exécution et des accès réseau et/ou fichiers

• Orienté Objet
– (et seulement !), pas de variables ni de fonctions globales, types primitifs et objet

• Robuste
– ramasse miettes, fortement typé, gestion des exceptions

• Indépendant d ’une architecture


– Portabilité assurée par la présence d ’un interpréteur de bytecode sur chaque machine

• Environnement riche
– Classes pour l ’accès Internet
– classes standard complètes
– fonctions graphiques évoluées

• Technologie « Transversale »

41
NFP121
Simple : syntaxe apparentée C,C++

public class Num{

public static int max( int x, int y){


int max = y;
if(x > y){
max = x;
}
return max;
}
}

Fichier [Link]

Note : C# apparenté Java


42
NFP121
Sûr par l ’absence de pointeurs (accessibles au programmeur)

• Deux types : primitif ou Object (et tous ses dérivés)

• primitif :
– int x = 1;
– int y = 2; z 3
– int z = 3; y 2
x 1
• Object
– Object o = new Object(); Données
– Object o1 = new Object(); pour o1
o1
– Object o1 = o; o Données
pour o
43
NFP121
Sûr par l ’absence de pointeurs, attention à la sémantique du =

• Deux types : primitif ou Object (et tous ses dérivés)

• primitif :
– int x = 1;
– int y = 2;
z 1
– int z = 3;
y 2
– z = x; x 1

Données
• Object pour o1
– Object o = new Object();
– Object o1 = new Object(); o1
o Données
– o1 = o;
pour o
44
NFP121
Robuste

• Ramasse miettes ou gestionnaire de la mémoire


– Contrairement à l’allocation des objets, leur dé-allocation n’est pas à
la charge du programmeur
• Ces dé-allocations interviennent selon la stratégie du gestionnaire

• Fortement typé
– Pas d’erreur à l’exécution due à une erreur de type
– Mais un changement de type hasardeux est toujours possible…

• Généricité
– Vérification statique, à la compilation, du bon « typage »

• Exceptions
– Mécanisme de traitements des erreurs,
– Une application ne devrait pas s’arrêter à la suite d’une erreur,
• (ou toutes les erreurs possibles devraient être prises en compte …)

45
NFP121
Portable
public class Num {

Le source Java …
[Link]
}

1) compilation

1100 1010 1111 1110 1011 1010 1011 1110


• fichier compilé
Le 0000 0011 0001 1101 …………………...
[Link]

Lecture locale ou distante du fichier

jvm jvm jvm

sun mac pc
2) interprétation
/ exécution

Sun Mac pc

solaris MacOS Windows

46
NFP121
Environnement (très) riche
• [Link]
• [Link]
• [Link]
• [Link]
• [Link]
• [Link]
• [Link]
• [Link]
• [Link]
• [Link]
• [Link]
• [Link]
• [Link]
• [Link]
• [Link]
• [Link]

• Liste des principaux paquetages de la plate-forme JDK 1.2


soit environ 1500 classes !!! Et bien d ’autres A.P.I. JSDK, JINI, ...
• le JDK1.3/1850 classes,
• Le JDK1.5 ou j2SE5.0 3260 classes
• Le J2SE 1.6 …. 47
NFP121
Technologie « Transversale »

Source : [Link] 48
NFP121
Pause … enfin presque

• Quelques « rappels » de Syntaxe


– En direct

• Démonstration
– BlueJ

• Présentation de JNEWS
– Un outil d’aide à la réponse attendue développé au Cnam

49
NFP121
Un exemple en Java : la classe Carre

public class Carre extends PolygoneRegulier{

private int longueurDuCote;

public void initialiser(int longueur){


longueurDuCote = longueur;
}

public int surface(){


return longueurDuCote * longueurDuCote;
}

public int perimetre(){


return 4*longueurDuCote;
}

// un usage de cette classe


Carre unCarre = new Carre(); 100
[Link](100); unCarre
int y = [Link](); 50
NFP121
Liskov suite [Sidebar2.4,page 27]

• Hiérarchie
• Java supports type hierarchy, in which one type can be the
supertype of other types, which are its subtypes. A
subtype ’s objects have all the methods defined by the
supertype.

• Object la racine de toute classe


• All objects type are subtypes of Object, which is the top of the
type hierarchy. Object defines a number of methods,
including equals and toString. Every object is guaranteed to
have these methods.

51
NFP121
Démonstration

• Outil Bluej
– La classe Carré
– Instances inspectées

• Tests Unitaires
– La Classe CarréTest
• Ou la mise en place d’assertions pertinentes

• En assurant ainsi des tests de non régression,


– « vérifier » que le système ne se dégrade pas à chaque modification…

• Augmenter le taux de confiance envers le code de cette classe …


– Très informel, et comment obtenir des tests pertinents ?

• Tests Unitaires « référents » : Outil JNEWS


– Java New Evaluation Web System
52
NFP121
Demo : Bluej

• Instances et leur inspection

53
NFP121
Demo : Bluej + tests unitaires

• Test unitaires depuis BlueJ ou en source

54
NFP121
Tests unitaires : outil junit intégré
• [Link]
• [Link]
• Un exemple :
public class CarreTest extends [Link]{

public void testDuPerimetre(){


Carre c = new Carre();
[Link](10);
assertEquals(" périmètre incorrect ???" ,40, [Link]());
}
}

55
NFP121
Assertions

assertEquals(attendu, effectif);
assertEquals(" un commentaire ???" ,attendu, effectif);

assertSame(" un commentaire ???" ,attendu, effectif);


assertTrue(" un commentaire ???" ,expression booléenne);
assertFalse(" un commentaire ???" , expression booléenne);
assertNotNull(" un commentaire ???" , une référence);

Le commentaire est affiché lorsque l’assertion échoue

56
NFP121
JNEWS contient des Tests unitaires distants

• Tests unitaires distants et référents (ce qui est attendu…)

internet 57
NFP121
JNEWS : outil Submitter… intégré

• Un clic suffit

58
NFP121
Demonstration : JNEWS une réponse : Bravo!!

59
NFP121
JNEWS au Cnam

– Une aide à la réponse attendue

– +

– Outils en ligne comme PMD , findbugs , checkstyle,…

– +

– Remise planifiée d’un rapport de TP et des sources correctement


documentées

• [Link]

60
NFP121
Conclusion

61
NFP121
Annexe

• c.f. [Link]

62
NFP121

Vous aimerez peut-être aussi