Pr - PowerPoint PPT Presentation

1 / 351
About This Presentation
Title:

Pr

Description:

Pr sentation du cours de Conception et de Programmation Orient e Objet - Java Philippe Canalda Master 1 PSM Montb liard Conception et Programmation ... – PowerPoint PPT presentation

Number of Views:158
Avg rating:3.0/5.0
Slides: 352
Provided by: PhilippeC156
Category:

less

Transcript and Presenter's Notes

Title: Pr


1
Présentation du cours de Conception et de
Programmation Orientée Objet - Java
  • Philippe Canalda
  • Master 1 PSM Montbéliard Conception et
    Programmation Avancée MultiMédia
  • UFR STGI / LiFC FRE CNRS 2661
  • Philippe.Canalda_at_univ-fcomte.fr
  • http//psm.pu-pm.univ-fcomte.fr/pcanalda
  • Octobre 2007

2
En préambule
  • Organisation
  • En groupe de 4 au sein de votre groupe de TP
  • Nomination du 1er groupe prenant les notes dans
    ce cours et chargé de délivrer
  • À la fin de la journée, un cr
  • À la fin de la semaine une version
    corrigée/étenduematériel utilisé tous les
    matériaux de ce cours src présentation, codes
    src, corrections dexercices, etc.intégration du
    travail dautrui

3
1ère intervention CM prises de notes X Y
  • Organisation de lenseignement
  • 1ère illustration dune application intégrant une
    caméra, un mur décran, un service (architecture
    serveur ou C/S)
  • qui détermine les groupes détudiants de 4
    éléments (complétion à moins) au sein des
    sous-groupes A, B et C
  • Affichage des visages à inter changer afin de
    placer le sous-groupe formé aux places de la
    salle où se trouvent assis tous les sous-groupes
    déjà formés.
  • Déroulement de lalgorithme de tri par insertion
    et constitution des groupes détudiant
  • Présentation ltoralegt des applications multimédia
    et les challenges des nouveaux services prise
    en compte des handicaps, des nouveaux usages
    (mobilité intérieur ou extérieur), des réseaux de
    capteurs
  • Présentation du projet, contraintes,
    fonctionnalités, méthode, diagramme de GANT

4
1ère intervention TD
  • 1er jet cdc du projet inspiré de FrozenBubble
  • Présentation succinct de tous les projets au sein
    du TD
  • 1er jet conception avec exposé des RI
    (Représentations Informatiques) nécessaires,
    1ères fonctionnalités

5
1ère intervention TP prise de notes
  • TP1 X' Y'
  • TP2 S. X''Y''
  • Conception et réalisation des principales
    fonctions de votre projet (au 2
    fonctionnalités)?
  • Calcule des boules qui sont en contact dune
    boule initiale

6
Plan
  • Présentation de ce qui vous attend
  • Bibliographie
  • Programmation objet
  • Le langage Java
  • Algorithmique 1 (rappel) et 2
  • ...

7
Plan
  • ...
  • Notions dUML les 7 (sur 12) diagrammes de
    conception et de développement
  • Les classes fondamentales
  • La programmation concurrente
  • Les flots
  • Les composants awt de java
  • Introduction à Swing
  • Réseau
  • JDBC
  • Java Xml

8
Bibliographie
  • Livre de référence
  • Hortsmann et Cornell, Au coeur de Java 1 et 2,
    CampusPress.
  • Gilles Roussel, Etienne Duris, Java et Internet
    concepts et programmation, Vuibert 2002
  • Transparents de Marie-Pierre Béal, et Jean
    Berstel.

9
Bibliographie
  • Autres ouvrages sur Java
  • Patrick Niemeyer, Joshua Peck (Traduction de Eric
    Dumas), Java par la Pratique, O'Reilly
    International Thomson, 1996.
  • Matthew Robinson and Pavel Vorobiev, Swing,
    Manning Publications Co., december 1999.
  • Sur les design Pattern
  • Erich Gamma, Richard Helm, Ralph Johnsons, John
    Vlissides, Design Patterns, Addison-Wesley, 1995.
    Traduction française chez Vuibert (1999).

10
Bibliographie
  • Sur lUML
  • Michael Blaha James Rumbaugh, Modélisation et
    Conception orientées objet avec UML2, 2ème
    édition, Pearson Education,2005.
  • Craig Larman, UML2 et les Design Patterns, 3ème
    édition, Pearson Education, 2005.
  • Martin Fowler, UML 2.0, Campus Press, 2004.

11
Bibliographie
  • Site Web
  • http//java.sun.com Site officiel Java (JDK et
    doc.)?
  • http//www.javaworld.com Info sur Java
  • http//www.developer.com/java/ applications,
    applets, packages, ...
  • http//java.developpez.com/
  • http//www.jars.com idem
  • http//www.blackdown.com Java pour linux
  • ...

12
Travail demandéContrôle de Connaissances
  • Sur 6 semaines
  • Un projet inspiré de FrozenBubble
  • En TP, puis à la maison
  • Une participation/évaluation prises de notes
  • En CM
  • TD
  • Et TP
  • Lexamen final de 1ère et de 2ème session

13
1- Programmation objet
  • 1. Styles de programmation
  • 2. Avantages du style objet
  • 3. Un exemple
  • 4. Héritage et composition
  • 5. Exemple disques et anneaux

14
1.1 Styles de programmation
  • Style applicatif
  • Fondé sur lévaluation dexpressions, où le
    résultat ne dépend que de la valeur des arguments
    (et non de létat de la mémoire)
  • Donne des programmes courts faciles à comprendre
  • Usage intensif de la récursivité
  • Langage typique Lisp, Caml

15
1.1 Styles de programmation
  • Style impératif
  • Fondé sur lexécution d instructions modifiant
    l état de la mémoire
  • Utilise une structure de contrôle et des
    structures de données
  • Usage intensif de l itération
  • Langage typique Ada, C, Pascal, Fortran, Cobol

16
1.1 Styles de programmation
  • Style objet
  • Un programme est vu comme une communauté de
    composants autonomes (objets) disposant de ses
    ressources et de ses moyens dinteraction
  • Utilise des classes pour décrire les structures
    et leur comportement
  • Usage intensif de léchange de messages
    (métaphore)?
  • Langage typique Simula, Smalltalk, C, Java,
    Ocaml

17
1.2 Avantages du style objet
  • Facilite la programmation modulaire
  • La conception par classe conduit à des composants
    réutilisables
  • Un composant offre des services et en utilise
    d autres
  • Il  expose  ses services à travers une
    interface
  • Il cache les détails d implémentations
    (encapsulation ou data-hiding)?
  • Tout ceci le rend ré-u-ti-li-sa-ble

18
1.2 Avantages du style objet
  • Facilite l abstraction
  • Labstraction sépare la définition de son
    implémentation
  • L abstraction extrait un modèle commun à
    plusieurs composants
  • Le modèle commun est partagé par le mécanisme
    d héritage
  • L abstraction est véhiculée par une méthodologie
    qui conduit à la réutilisabilité

19
1.2 Avantages du style objet
  • Facilite la spécialisation
  • La spécialisation traite des cas particuliers
  • Le mécanisme de dérivation rend les cas
    particuliers transparents

20
1.3 Un exemple
  • class Point
  • private int x
  • private int y
  • public Point (int x, int y)
  • this.x x this.y y
  • public int getX()
  • return x // équivalent à  return this.x 
  • public int getY()
  • return y
  • public int setX(int x)
  • return this.x x
  • ...

21
1.3 Un exemple
  • class Point
  • private int x private int y
  • public Point (int x, int y)
  • public int getX() public int getY()
  • public int setX(int x)
  • public int setY(int y)
  • return this.y y
  • public void deplace(int dx, int dy)
  • this.x dx
  • this.y dy
  • public String toString()
  • return (thix.x , this.y)
  • ...

22
1.3 Un exemple
  • class Point
  • private int x private int y
  • public Point (int x, int y)
  • public int getX() public int getY()
  • public int setX(int x)
  • public int setY(int y)
  • public void deplace(int dx, int dy)
  • public String toString()
  • public static void main(String args)
  • Point a new Point(3,5) // déclare l objet a
    et instancie ses a.setY(6) // a (3, 6)
    coordonnées
  • a.deplace(1,1) // a (4,7)?
  • System.out.println(a)

23
1.4 Héritage et composition
  • Par la composition, une classe utilise un autre
    service
  • Un composant est souvent un attribut de la classe
    utilisatrice
  • L exécution de certaines tâches est déléguée au
    composant le plus apte
  • Le composant a la responsabilité de la bonne
    exécution
  • Facilite la séparation des tâches en modules
    spécialisés

24
1.5 Exemple disques et anneaux
  • class Disque
  • protected Point centre // composition
  • protected int rayon
  • public Disque(int x, int y, int rayon)
  • this.centrenew Point(x,y) // identique à
    super(x,y)?
  • this.rayon rayon
  • public String toString()
  • return this.centre.toString() ,   rayon
  • public void deplace(int dx, int dy)
  • this.centre.deplace(dx, dy) // délégation

25
1.5 Exemple disques et anneaux
  • class Anneau extends Disque // dérivation
  • private int rayonInterne // composition
  • public Anneau(int x, int y, int rayon, int
    rayonInterne)
  • super(x,y,rayon) // identique à
    this.Disque(x,y)?
  • this.rayonInterne rayonInterne
  • public String toString()
  • return super.toString()  ,  
    rayonInterne

26
  • Ici cours 2

27
2.1 Premier exemple
  • Le fichier TestHelloWorld.java
  • Class TestHelloWorld
  • public static void main(String args)
  • System.out.println( Bonjour! )
  • La compilation javac TestHelloWorld.java
  • crée le fichier TestHelloWorld.class
  • L exécution java TestHelloWorld
  • Donne le résultat Bonjour !
  • Il est usuel de donner une initiale majuscule aux
    classes, et une initiale minuscule aux attributs
    et aux méthodes
  • Le nom du fichier qui contient le code source est
    en général le nom de la classe suffixé par .java

28
2.1 Deuxième exemple
  • import java.awt.Frame
  • import java.awt.Graphics
  • import java.awt.Color
  • / \
  • Classe affichant une fenêtre de nom  Hello
    World  contenant  Bonjour
  • _at_author Canalda
  • _at_version 1.0
  • \ /
  • public class TestHelloWorld extends Frame
  • /
  • Constructeur
  • /
  • public TestHelloWorld()
  • super( Hello World ! )
  • setSize(200,100)
  • show()

29
2.1 Deuxième exemple
  • public class TestHelloWorld extends Frame
  • / Méthode de dessin de la fenêtre
  • _at_params graphics contexte d affichage
  • /
  • public void paint(Graphics graphics)
  • graphics.setColor(Color.black)
  • graphics.drawString( Bonjour , 65, 60)
  • / Méthode principale
  • _at_param args arguments de la ligne de commande
  • /
  • public static void main(String args)
  • new TestHelloWorld()

30
2.1 Deuxième exemple
  • Création d e la documentation html
  • javadoc TestHelloworld
  • visualisation avec un navigateur, comme Netscape
  • ls
  • TestHelloWorld.class
  • TestHelloWorld.html
  • HelloWorld.java
  • Questions Donnez la liste complète des fichiers
    créés, capturez la fenêtre du navigateur et
    affichez la documentation html du 2ème exemple
    traité

31
2.1 Créer une documentation HTML
  • Il s agit de créer une documentation et non
    d établir les spécifications des classes.
  • _at_author il peut y avoir plusieurs auteurs
  • _at_see pour créer un lien sur une autre
    documentation Java
  • _at_param pour indiquer les paramètres d une
    méthode
  • _at_return pour indiquer la valeur de retour
    d une fonction
  • _at_exception pour indiquer quelle exception est
    levée
  • _at_version pour indiquer le numéro de version du
    code
  • _at_since pour indiquer le numéro de version
    initiale
  • _at_deprecated indique une méthode ou membre qui
    ne devrait plus être utilisée. Crée un warning
    lors de la compilation.
  • - exemple
  • /
  • _at_deprecated Utiliser plutôt afficher
  • _at_see afficher()?
  • /

32
2.1 Un exemple
  • /
  • Classe permettant de manipuler des matrices
  • _at_author Canalda
  • _at_author Fino
  • _at_version 1.0
  • /
  • public class Matrice
  • private int n
  • private int m
  • / Premier constructeur. Cree une matrice nulle
    de taille donnee en parametre.
  • _at_param n un entier pour la taille
  • _at_see MatriceMatrice(int, int)?
  • /
  • ...

33
2.1 Un exemple
  • public class Matrice
  • private int n
  • private int m
  • / Premier constructeur. Cree une matrice nulle
    de taille donnee en parametre.
  • _at_param n un entier pour la taille
  • _at_see MatriceMatrice(int, int)?
  • /
  • public Matrice(int n)
  • this.nn
  • this.mnew int nn
  • / Deuxieme constructeur. Cree une matrice dont
    la taille et le contenu sont donnes en
    parametre.
  • _at_param n un entier pour la taille
  • _at_param x un entier pour le contenu de chaque
    case
  • _at_see MatriceMatrice(int)?
  • /

34
2.1 Un exemple
  • public class Matrice
  • private int n
  • private int m
  • / Deuxieme constructeur. Cree une matrice dont
    la taille et le contenu sont donnes en
    parametre.
  • _at_param n un entier pour la taille
  • _at_param x un entier pour le contenu de chaque
    case
  • _at_see MatriceMatrice(int)?
  • /
  • public Matrice(int n, int x)
  • this.nn
  • this.mnew intnn
  • for(int i0 iltn i)?
  • for(int j0 jltn j)
  • this.mijx

35
  • Fin 2ème coursprises de notes
  • TD prises de notes
  • Td1
  • Td2
  • TP prises de notes
  • A
  • B
  • C

36
2.1 Un exemple
  • public class Matrice
  • private int n
  • private int m
  • / Methode de transposition de matrice
  • /
  • public void transposer()
  • for(int i0 iltn i)?
  • for(int ji1 jltn j)
  • int tthis.mij this.mijthis.mji
  • this.mjit
  • / Methode daffichage d une matrice
  • /

37
2.1 Un exemple
  • public class Matrice
  • private int n
  • private int m
  • / Methode d affichage d une matrice
  • /
  • public String toString()
  • StringBuffer sb new StringBuffer()
  • for(int i0 iltn i)?
  • for(int j0 jltn j)
  • sb.append(mij)
  • sb.append(  )
  • sb.append(  \n)
  • return sb.toString()
  • / Methode principale /

38
2.1 Un exemple
  • public class Matrice
  • private int n
  • private int m
  • / Methode principale
  • _at_param args arguments de la ligne de
    commande
  • /
  • public static void main(String args)
  • Matrice a new Matrice(3,12)
  • System.out.print(a)
  • Matrice b new Matrice(3)
  • System.out.print(b)
  • Question Générez la documentation HTML et
    visualisez-la au moyen de votre navigateur
    préféré.

39
  • Cours 3

40
2.1 Fractales
  • Principe objets définis récursivement.
  • Exemple la courbe du dragon de Heighway, qui
    est donnée par l applette suivante
  • import java.awt.
  • import java.applet.
  • public class Dragon extends Applet
  • public void paint(Graphics g)
  • g.setColor(Color.red)
  • drawDragon(g,20,100,100,200,200)
  • private void drawDragon(Graphics g, int n, int
    x, int y, int z, int t)
  • int u,v
  • if (n1)?
  • g.drawLine(x, y, z, t)
  • else
  • u (x z t - y) / 2
  • v (y t - z x) / 2
  • drawDragon(g, n-1, x, y, u, v)
  • drawDragon(g, n-1, z, t, u, v)

41
2.1 Exécution d une applette
  • On crée un fichier DessinDragon.html contenant
  • ltHTMLgt
  • ltHEADgt
  • ltTITLEgt Courbe du dragon lt/TITLEgt
  • lt/HEADgt
  • ltBODYgt
  • ltAPPLET CODE Dragon.class  WIDTH400
    HEIGHT400gt lt/APPLETgt
  • lt/BODYgt
  • lt/HTMLgt
  • On ouvre ensuite ce fichier sous Netscape ou bien
    directement par
  • appletviewer DessinDragon.html

42
2.1 Le dragon documenté
  • import java.awt.
  • import java.applet.
  • public class Dragon extends Applet
  • /
  • Methode de dessin du dragon.
  • lt/BRgt
  • On obtient le dessin suivant
  • lt/BRgt
  • ltAPPLETgt CODE Dragon.class  WIDTH300
    HEIGHT300gt lt/APPLETgt
  • /
  • public void paint(Graphics g)
  • g.setColor(Color.red)
  • drawDragon(g,20,100,100,200,200)
  • private void drawDragon(Graphics g, int n, int
    x, int y, int z, int t)
  • int u,v
  • if (n1)?
  • g.drawLine(x, y, z, t)
  • else

43
2.2 Le langage Java
  • Java est dérivé de Kawa. Créé en 1995, la version
    actuelle est la 1.5
  • Java
  • est fortement typé
  • est orienté objet
  • est compilé-interprété
  • intègre des threads ou processus légers
  • est sans héritage multiple MAIS avec
    implémentation multiple dinterfaces
  • offre DORENAVANT de la généricité à la manière
    des templates de C (classes paramétrées)?
  • Compilation - Interprétation
  • Source compilé en langage intermédiaire (byte
    code) indépendant de la machine cible
  • Byte code interprété par une machine virtuelle
    Java dépendant de la plate-forme

44
  • Notes élaborées par David et Dhaya
  • 1h30

45
2.2 Le langage Java
  • Avantages
  • L exécution peut se faire en différé et/ou
    ailleurs, par téléchargement
  • Plus de mille classes prédéfinies qui
    encapsulent des mécanismes de base
  • structures de données vecteurs, listes,
    ensembles ordonnés, arbres, tables de hachage,
    grands nombres
  • outils de communication, comme les url,
    client-serveur
  • facilités audiovisuelles, pour images et son
  • des composants d interface graphique
  • traitements de fichiers
  • accès à des bases de données

46
2.3 Structure d 1 programme
  • class HelloWorld
  • public static void main(String args)
  • System.out.println( Hello World ! )
  • Programme Java constitué d un ensemble de
    classes
  • groupées en paquetage (packages)?
  • réparties en fichier
  • chaque classe compilée est dans son propre
    fichier (un fichier dont le nom est le nom de la
    classe suffixée par .class)?
  • Un fichier source java comporte
  • des directives d importation commeimport
    java.io.
  • des déclarations de classes

47
  • Une classe est composée de
  • déclaration de variables (attributs) // appelées
    parfois variables de classe
  • définition de fonctions (méthodes)?
  • déclaration d autres classes (nested classes)?
  • les membres sont
  • des membres de classe (static)
  • des membres d objet (ou d instance)?
  • Une classe a 3 rôles
  • 1- de typage, en déclarant de nouveaux types
  • 2- d implémentation, en définissant la structure
    et le comportement d objet
  • 3- de moule pour la création de leurs instances
  • Une méthode se compose
  • des déclarations de variables locales
  • d instructions
  • Les types des paramètres et le type de retour
    constituent la signature de la méthode.
  • Static int pgcd(int a, int b) 

48
  • Point d  entrée Une fonction spéciale est
    appelée à l exécution .
  • Elle s appelle toujours main et a toujours la
    même signature
  • public static void main(String args)
  • Toute méthode, toute donnée fait partie d une
    classe (pas de variables globales). L appel se
    fait par
  • déréférencement d une classe ou d un objet
    d une classe, de la façon suivante
  • Méthodes ou données de classe par le nom de la
    classe.Math.cos() Math.PI
  • Méthodes ou données d un objet par le nom de
    l objet.Pile Pint x2p.push(x)
  • L objet courant est nommé this et peut-être
    sous-entendu s il ny a pas d ambiguïté de
    visibilité.public void setX(int x)
    this.xx
  • La classe courante peut-être sous-entendue pour
    des méthodes statiques.System.out.println()avec
    out, un membre statique de la classe System, et
    également un objet de la classe PrintStreamavec
    println, une méthode d objet de la classe
    PrintStream.

49
2.4 Expressions, types, variables
  • Toute expression a une valeur et un type. Les
    valeurs sont
  • les valeurs de base
  • les références, à des tableaux ou à des objets
  • Un objet ne peut être manipulé en Java, que par
    une référence.
  • Une variable est le nom d un emplacement mémoire
    qui peut contenir une valeur. Le type de la
    variable décrit la
  • nature des valeurs de la variable.
  • Si le type est un type de base, la valeur est de
    ce type.
  • Si le type est une classe, la valeur est une
    référence à un objet de cette classe, ou d une
    classe dérivée.
  • Exemple Point p
  • déclare une variable de type Point, susceptible
    de contenir une référence à un objet de cette
    classe.
  • Pnew Point(4,6)
  • L évaluation de l expression new Point(4,6)
    retourne une référence à un objet de la classe
    Point. Cette référence est affectée à p.

50
Passage de paramètres
  • Toujours par valeur, ou bien par référence
    implicite.
  • Exemple soit la méthode
  • static int plus(int a, int b)
  • return ab
  • A l appel de la méthode, par exemple int
    cplus(a1,7), les paramètres sont évalués, des
    variables formelles (locales à la
    méthode-fonction) sont initialisées avec les
    valeurs des paramètres-expressions réels. Des
    occurrences des paramètres formels sont ainsi
    remplacées par des variables locales
    correspondantes.
  • Par exemple,
  • int aLocala1
  • int bLocal7
  • int résultataLocalbLocal
  • Attention ! Les objets ou tableaux sont manipulés
    par des références. Un passage par valeur d une
    référence est donc comme un passage par
    référence. Si la valeur-référence ne sera pas
    modifiée, les valeurs membres de l objet
    référencé peuvent, elles, être modifiées et cela
    impacte le programme appelant.
  • Exemple
  • static void incrementer(Point a) a.x a.y
  • Après l appel de incrementer(b), les coordonnées
    du point b sont incrémentées.

51
  • Fin cm-td n4
  • Prise de note PAG

52
2.5 Types de base (primitifs)?
  • A noter
  • Les caractères sont codés sur 2 octets en
    unicode.
  • Les types sont indépendants du compilateur et de
    la plate-forme.
  • Tous les types numériques sont signés sauf les
    caractères.
  • Un booléen n est pas un nombre
  • Les opérations sur les entiers se font modulo et
    sans erreur byte b 127b 1 // b -128

53
  • Une variable se déclare en donnant d abord son
    type.
  • int i, j 5
  • float re, im
  • boolean termine
  • static int numero
  • static final int N 12
  • A noter
  • Une variable peut-être initialisée
  • Une variable static est un membre de classe.
  • Une variable final est une constante.
  • Tout attribut de classe est initialisé par
    défaut, à 0 pour les variables numériques, à
    false pour les booléennes, à null pour les
    références.
  • Dans une méthode, une variable doit être déclarée
    avant utilisation. Elle n est pas initialisée
    par défaut.
  • Dans la définition d une classe, un attribut
    peut-être déclaré après son utilisation.

54
Expressions
  • Comme en C ou C
  • radians (degres/180) Math.PI // conversion de
    degrés en radians
  •  Bonjour    Monde  // string
  • (i ! 0) (i 2 0) // boolean, entier non
    null paire
  • x x 1
  • i i --j j--
  • j 2 // j j2
  • j j // j j j
  • max (a gt b) ? a b
  • (x 2 1)? 3x1 x/2

55
Tableaux
  • C est un objet particulier. L accès se fait par
    référence et la création par new. Un tableau
  • se déclare,
  • se construit (s alloue et s initialise)?
  • et s utilise.
  • L identificateur de type tableau se déclare par
  • int a // vecteur d entiers
  • double m // matrice de doubles
  • -gt La déclaration des tableaux comme en C ou C
    est acceptée
  • int a double m
  • Construction d un tableau par new
  • a new intn
  • m new double np // n lignes, p colonnes
  • Utilisation traditionnelle
  • int i, j
  • mijx // ligne i, colonne j
  • for(i 0 i lt a.length i)?

56
  • Fin CM-4 poursuite TD
  • Objectifs TD
  • 2 fonctionnalités de vos mini-projets
  • Sortie automatique du labyrinthe
  • Modélisation diagramme de classe qui intègre
    cette fonctionnalités ainsi que celles qui sont
    sous-jascente à cette fonctionnalité
  • Labyrinthe ll.sortieAutomatique(...)
  • pivoter(droite, ...), pivoter(gauche), avancer,
    sortie?
  • ...
  • Placement de ces fonctionnalités
  • Réalisation/traduction en langage Java
  • réalisation d'une interface Frame à-la-manière
    de HelloWorld, et d'une interface APPLET
    à-la-manière de FractaleDragon

57
  • Utilisation traditionnelle
  • int i, j 45
  • mijx // ligne i, colonne j
  • int a new intj
  • for(i 0 i lt a.length i)?
  • System.out.print( ai )
  • Tout tableau a un attribut length qui donne sa
    taille à la création.
  • Distinguer
  • la déclaration, qui concerne la variable dont le
    contenu sera une référence sur un tableau,
  • de la construction, qui crée l espace mémoire du
    tableau et retourne une référence sur cet espace
    mémoire de ce tableau.
  • On peut fusionner déclaration et construction par
    initialisation énumérative
  • String jours Lundi, Mardi, Mercredi,
    Jeudi, Vendredi, Samedi, Dimanche
  • Les instructions suivantes provoquent toujours
    une exception de la classe ArrayIndexOutOfBoundsEx
    ception
  • aa.length,
  • a-1

58
Exercice prise en main du langage
  • Syntaxe
  • i) Ecrire 2 façons de déclarer et dinitialiser 1
    tableau contenant les 10 premiers entiers
  • ii) Ecriture du programme qui manipulera a et b
    et qui affichera leurs contenus.

59
Exercice prise en main du langage
  • i) public class Test
  • public static void main(String args)int
    a1,2,3,4,5,6,7,8,9,10int bnew
    int10for(int i0 i lt b.lengthi)
    bii1

60
Exercice prise en main du langage
  • ibis) // autre manière plus capilo-tractéePublic
    class Test
  • Public static void main(String args)int
    a1,2,3,4,5,6,7,8,9,10int bnew
    int10for(int i0 i lt b.length)
    bii

61
Exercice prise en main du langage
  • ii) // Dans Test.javapublic class Test
    Public static void main(String args)
    int a1,2,3,4,5,6,7,8,9,10
    int bnew int10
    for (int i0 i lt b.length)
    bii
    / laffichage dans
    le cas ou a et b sont de la même
    taille / for (int
    i0 ilta.lengthi)
    System.out.println(a i ai
    )

62
Exercice prise en main du langage
  • ii-bis) // Dans Test.javapublic class Test
    Public static void main(String args)
    int a1,2,3,4,5,6,7,8,9,10
    int bnew int10
    for (int i0 i lt b.length)
    bii
    / laffichage
    dans le cas ou a et b ne sont pas forcément de la
    même taille /
    for (int i0 ilt (a.lengthltb.length?b
    .lengtha.length)i)
    if (ilta.length)System.out.println(ai)
    if (iltb.length)System.out.p
    rintln(bi)

63
Exercice surcharge
  • Modifier la classe Array, de façon à ce que lon
    affiche le contenu d1 tableau t simplement par
    lappel de System.out.println(t)

64
Exercice surcharge
  • public class Array // tout un
    ensemble dattr privés exemple la collection
    des éléments // si Array anew
    Array(type, taille) // jy accède par
    ai public int length
    // contient la taille de linstance de ce
    tableau public
    Array(Object o, int taille)
    this.collectionnew o.classname taille
    // il faut faire un eval de la
    commande précédente,
  • // seulement un éval
    dune commande nest pas triviale à réaliser en
    java (plus aisé en javascript, actionScript,
    // ou tout autre langage
    interprété) public String
    toString() StringBuffer sb
    new StringBuffer() for
    (int i0 iltthis.lengthi)
    sb.append(this.collectioni.toString())

    return sb.toString()

65
Rmq - Exercice surcharge
  • Comment réaliser la surcharge ?
  • Par des design pattern qui réalisent
    lintrospection et la modification dynamique des
    classes et composants des classes (attr ou
    primitives)
  • Dansla version Tigre du langage, et tigre désigne
    la prochaine version du langage Java, il y aura
    la généricité et les macros.Ce nest pas
    hasardeux de retrouver ces 2 évolutions majeures
    au sein dune même version. En fait la macro
    permet de réaliser leval(nouvelle expression).
    Ce faisant on réalise alors la généricité.
    Généricité étant le concept auquel nous nous
    sommes attaqués au travers de lexercice ARRay
    précédent )

66
Matrices
  • Les tableaux sont dynamiques dans toutes les
    dimensions (la mémoire peut -être allouée
    dynamiquement ).
  • /
  • Classe permettant de manipuler des matrices
  • _at_author Canalda
  • _at_version 1.0
  • /
  • public class Matrice
  • private intm
  • /
  • Creation d une matrice nulle dont la taille
    est donnee en parametre.
  • _at_param n taille de la matrice
  • _at_see MatriceMatrice(int,int)?
  • /
  • public Matrice(int n)
  • this.m new intnn // de façon
    equivalente this(n,0)?

67
  • /
  • Creation d une matrice dont la taille et le
    contenu sont donnes en parametre.
  • _at_param n taille de la matrice
  • _at_param x valeur de chaque coefficient
  • _at_see MatriceMatrice(int)?
  • /
  • public Matrice(int n, int x)
  • this.m new intnn
  • for(int i0 iltn i)?
  • for(int j0 jltn j)?
  • this.mijx
  • /
  • Transposition de matrice
  • /
  • void Transposer()
  • int n m.length
  • for(int i0 iltn i)
  • for(int ji1 jltn j)

68
  • /
  • Affichage d une matrice.
  • /
  • public String toString()
  • int n m.length
  • StringBuffer sb new StringBuffer()
  • for(int i0 iltn i)
  • for(int j0 jltn j)?
  • sb.append(mij   )
  • sb.append( \n )
  • return sb.toString
  • /
  • Methode principale
  • _at_param args arguments de la ligne de
    commande
  • /
  • public static void main(String args)
  • Matrice a new Matrice(3,12)

On obtient java Matrice12 12 12 12 12 12 12
12 12 0 0 0 0 0 0 0 0 0
69
Instructions
  • Affectation, instructions conditionnelles,
    aiguillages, itérations usuelles.
  • Affectation
  • x 1 y x x1
  • Instructions conditionnelles
  • if (C) S
  • if (C) S else T
  • Itérations
  • while (C) S
  • do S while (C)
  • for(ECG) S
  • Une instruction break fait sortir du bloc où
    elle se trouve.

70
  • Traitement par cas
  • switch(C)
  • case  
  • nEspaces break
  • case 0 case 1 case 2 case 3 case
    4 case 5 case 6 case 7 case 8 case
    9
  • nChiffres break
  • default
  • nAutres
  • Blocs à étiquettes
  • un while (...)
  • deux for()
  • trois while ()
  • if () continue un // reprend
    while extérieur

71
  • Mathieu Brousse à pris les notes du CM5

72
  • Question Dans le cas d1 for intégrant un
    continue, y-a-til reprise à litération courante
    ou bien à litération suivante ?
  • Ecrire un petit programme qui vous permet de le
    vérifier
  • Attention, il pourrait y avoir des risques de
    boucles infinies ?

73
Méthodes
  • Chaque classe contient une suite non emboîtée de
    méthodes. Mais si on ne peut pas définir des
    méthodes à l intérieur de méthodes, on pourra
    définir des classes à lintérieur des classes.
  • static int next(int n)
  • if (n 2 1) // n est impair
  • return 3n 1
  • // n est pair
  • return n/2
  • static int pgcd(int a, int b)
  • return (b 0) ? A pgcd(b, ab)
  • Une méthode qui ne retourne pas de valeur a pour
    type de retour le type void.

74
Surcharge
  • On distingue
  • Profil le nom la suite des types des
    arguments
  • Signature le type de retour le profil
  • Signature complète signature la visibilité
    (private, protected, public ou rien).
  • Signature étendue signature complète les
    exceptions
  • Un même identificateur peut désigner des méthodes
    différentes pour autant que leurs profils soient
    distincts.
  • static int fact(int n, int p)
  • if (n 0) // condition d arrêt du prg
    récursif
  • return p
  • else // mot clef facultatif
  • return fact(n-1, np)
  • static int fact(int n)
  • return fact(n,1)

75
Visibilité des attributs et méthodes
  • Les membres (attributs ou méthodes) d une classe
    ont une visibilité définie par défaut et ont des
    modificateurs de visibilité
  • public
  • protected
  • private
  • Par défaut, une classe a ses données ou méthodes
    accessibles dans le répertoire, plus précisément
    dans le paquetage (cf. loin).
  • Un attribut (donnée ou méthode)
  • public est accessible dans tout code où la classe
    est accessible.
  • protected est accessible dans le code des classes
    du même paquetage et dans les classes dérivées de
    la classe.
  • Private n est accessible que dans le code de la
    classe.
  • La méthode main doit être accessible de la
    machine virtuelle, elle doit donc être public.

76
Constructeurs
  • Les objets sont instanciés au moyen de
    constructeurs. Toute classe a un constructeur par
    défaut, sans argument. Lors de la construction
    d un objet, l opérateur new réserve la place
    mémoire pour l objet et initialise les attributs
    à leur valeur par défaut.
  • Le constructeur
  • exécute le corps de la méthode,
  • et retourne la référence de l objet créé.
  • Exemple avec seulement le constructeur par défaut
  • class Pixel
  • int x, y
  • Utilisation
  • class TestPixel
  • public static void main(String args)
  • Pixel p // p est déclaré, mais indéfini
  • p new Pixel() // p ! null, p.x p.y 0
  • p.x 4
  • p.y 5

77
  • Exemple avec un constructeur particulier
  • class Pixel
  • int x, y
  • Pixel(int x, int y)
  • this.xx this.yy
  • public static void main(String args)
  • Pixel p, q // p et q sont déclarés, mais
    indéfinis, p q null
  • p new Pixel(2,3) // p ! null, p.x2,
    p.y3
  • q new Pixel() // erreur
  • La définition explicite d un constructeur fait
    disparaître le constructeur par défaut implicite.
    Si on veut garder le constructeur par défaut, il
    faut alors le déclarer explicitement
  • class Pixel
  • int x, y
  • Pixel()
  • Pixel(int x, int y)
  • this.xx this.yy

78
  • Les données d un objet peuvent être des
    (références d ) objets.
  • class Segment
  • Pixel debut, fin
  • Utilisation
  • public static void main(String args)
  • Segment s // s indéfini
  • s new Segment() // s ! null, s.debut
    s.fin null
  • Plusieurs constructeurs pour la même classe
  • class Segment
  • Pixel debut, fin
  • Segment()
  • Segment(Pixel d, Pixel f)
  • this.debutd this.finf
  • Segment(int dx, int dy, int fx, int fy)
  • this.debutnew Pixel(dx,dy) this.finnew
    Pixel(fx,fy)

79
  • Exemples d emploi
  • public static void main(String args)
  • Segment s // s indéfini
  • s new Segment() // s.debut s.fin null
  • s.debut new Pixel(2,3)
  • s.fin new Pixel(5,8)
  • Pixel p new Pixel(2,3) Pixel q new
    Pixel(5,8)
  • Segment t new Segment(p,q)
  • Segment tt new Segment(new Pixel(2,3), new
    Pixel(5,8))
  • Segment r new Segment(2,3,5,8)

80
Membres et méthodes statiques
  • Les attributs peuvent être
  • des attributs de classe (static),
  • des attributs d objets (ou d instance).
  • Les attributs de classe static sont partagés par
    tous les objets de la classe. Il n en existe
    quun par classe au lieu de un pour chaque
    instance ou objet d une classe lorsquil s agit
    de membre d objets.
  • Exemple d attributs static
  • un compteur du nombre d objets (instances) de la
    classe,
  • un élément particulier de la classe, par exemple
    une origine.
  • class Point
  • int x, y
  • static Point origine new Point(0,0)
  • Les méthodes peuvent aussi être ou ne pas être
    static.
  • Les méthodes static sont invoquées en donnant le
    nom de la classe ou bien le nom d une instance
    de classe. Une méthode static ne peut pas faire
    référence à this.
  • Elles sont utiles pour fournir des services
    (helper).
  • Méthodes de la classe Math.

81
  • Exemples 1
  • public class Chrono
  • private static long start, stop
  • public static void start()
  • start System.currentTimeMillis()
  • public static void stop()
  • stop System.currentTimeMillis()
  • public static long getElapsedTime()
  • return stop - start
  • Et on s en sert de la manière suivante
  • class TestChrono
  • public static void main(String args)
  • Chrono.start()
  • for(int i0ilt100000i)?
  • for(int j0jlt100000j)
  • Chrono.stop()

82
  • Exemples 2
  • class User
  • String nom
  • static int nbUsers
  • static User allUsers new User10
  • User(String nom)
  • this.nom nom
  • allUsersnbUsers this
  • void send(String message, User destinataire)
  • destinataire.handleMessage(message, this)
  • void handleMessage(String message, User
    expediteur)
  • System.out.println(expediteur.nom  dit 
    message  à  this.nom)
  • void sendAll(String message)
  • for(int i0 iltnbUsersi)
  • if (allUsersi ! this) send(message,
    allUsersi)

83
  • Exemples 2 (suite)?
  • class User
  • public static void main(String args)
  • User anew User( Pierre ), bnew
    User( Anne ),
  • cnew User( Alex ), dnew
    User( Paul )
  • a.send( Bonjour , b)
  • b.senAll( Hello )
  • a.sendAll( Encore moi )
  • Donne à l exécution
  • Pierre dit  Bonjour  à Anne
  • Anne dit  Hello  à Pierre
  • Anne dit  Hello  à Alex
  • Anne dit  Hello  à Paul
  • Pierre dit  Encore moi  à Anne
  • Pierre dit  Encore moi  à Alex
  • Pierre dit  Encore moi  à Paul

84
Chapitre  Les concepts objets 
  • Passage vers l objet

85
Données de base
  • Descriptionun type entier, chaîne de car.,
    réel, etcune valeur (12,  mon texte , 7.28)?
  • Inconvénientsensemble de types limitétypage
    statiquepas de notion de sous-typage

Ensemble des valeurs possiblespour cette donnée
Type d une donnée

86
Les produits cartésiens
  • Principe
  • définir les données comme produit cartésien
    d autres données ex entier x entier x chaine
  • un Prod_Cart (ou enregistrement) 1 n-upletex
    (10, 20,  rose ) représente un point de
    l écran (( Durand ,  Paul ),
    ( Durand ,  Anne )) représente un

    couple
  • Réutilisation
  • utilisation d un constructeur de type produit
    cartésien
  • un nom pour le type
  • ensemble de champs nommés et typés

87
Produits cartésiens exemple
  • Introduction d un type  livre TYPE t_livre
    PROD_CART ( titre chaine auteur chaine
    éditeur chaîne année de parution date
    nombre de page entier prix réel)?
  • Utilisation
  • si RefProlog donnée de type livre, alors
    RefProlog.titre désigne son titre (et vaut  The
    Art of Prolog )?

88
Notion de classe et dobjet
  • Comparaison
  • type gt classe
  • Donnée/variable gt Objet (instance d un type)
    (instance d une classe)?
  • champ gt champ et une fonction est
    éligible à être un champ
  • Exemple
  • RefProlog serait un objet de classe livre

89
Classes et types premières différences
  • Type
  • point de vue statique gt les champs
  • Classe
  • Point de vue statique état
  • les champs (avec valeur par défaut éventuelle)?
  • les propriétés ou contraintes
  • Point de vue dynamique changements d états
  • les méthodes (définies au niveau de la classe,
    mais s appliquent sur les objets de cette
    classe), avec d éventuelles pré-conditions et
    post- conditions

90
Classes un exemple
Personne
Nom chaîne Prénom chaîne DateDeNaissance
t_date SituationDeFamille TYPE enuméré
( célibataire , )? Sexe ( M ,  F )?
créer(nom,prénom,date,sexe) //
surcharge créer(nom,prénom,date,sexe,situation)?
ModifierSituation(NouvelleSituation)?
Sexe M  ou  F  Nom ltgt   
Rmq si toto est un objet de classe personne,
Modifier la situation de toto se fait par
toto.ModifierSituation( Marié )?
91
Vie et mort d un objet
  • Un objet
  • naît
  • vie
  • meurt
  • Par classe 3 types de méthodes
  • constructeurs
  • destructeurs
  • les autresgt rien nest possible sur un objet
    non créégt rien nest possible sur un objet
    détruit

92
Persistance d un objet
  • Mort d un objet classique
  • appel de son destructeur
  • arrêt du système qui la créé
  • Inconvénients
  • panne
  • maintenance
  • évolutiongt Notion d objet persistant Un
    objet persistant est on objet dont lexistence
    continue après l arrêt du système qui l a créé

93
Variables et méthodes de classe
  • Cas général
  • champs propre à un objet
  • impossibilité à des objets dune même classe de
    partager des données
  • gt variables d une classe
  • même donnée pour tous les objets de la classe
  • gt méthodes de classe
  • ne s appliquent pas particulièrement à un
    objetgt à voir comme des fonctions de
    bibliothèques

94
Vers la réutilisabilité
Elève
Personnel
Nom Prénom
Nom Prénom
Année détude
Fonction
créer(nom,prénom)?
créer(nom,prénom)?
créer(nom,prénom,annéeEtude)? changerAnnéeDEtude
(année)?
créer(nom,prénom,fonc)? changerFonction(fonc)?
Parties différentes
Parties communes
  • gt Comment factoriser les parties communes ?

95
Héritage introduction
Personne
Représentations possibles
Nom Prénom
créer(nom,prénom)?
Personnel Personne
Elève Personne
Fonction
Année détude
créer(nom,prénom,fonc)? changerFonction(fonc)?
créer(nom,prénom,annéeEtude)? changerAnnéeDEtude
(année)?
  • Vocabulaire
  • Elève hérite/est une sous-classe/est une
    spécialisation de Personne
  • Personne est une généralisation/super-classe
    dElève
  • On emploie aussi les termes de classe mère et de
    classe fille

96
Héritage et sous-typage
  • Autre lecture de la relation d héritage
  • un objet d une classe fille est un objet de la
    classe mère
  • gt Tout objet dun type dune classe fille
    peut-être utilisé à la place dun objet du type
    dune classe mère
  • Sur l exemple créer peut s appliquer pour un
    élève ou pour le personnel
  • ! La réciproque n est pas vraie

97
Redéfinition et liaison dynamique
  • Principe de la liaison dynamique
  • La méthode périmètre de la classe Quadrilatère
    est redéfinie dans Losange.
  • Soit P de type Parallélogramme, L de type Losange
    et Q de type Quadrilatère
  • Q lt- P.Périmètre() calcule l1l2l3l4
  • Q lt- L.Périmètre() calcule 4l1

Quadrilatère
l1, l2, l3, l4 réels
périmètre() périmètrel1l2l3l4 créer(p1,p2,p
3,p4)?
LosangeQuadrilatère
Parallélogramme Quadrilatère
périmètre() Périmètre4l1
98
Classes et méthodes abstraites
  • Une classe abstraite C est une classe dont les
    seuls objets qui peuvent en être membres sont
    membres dune sous-classe de C.
  • Corollaire il n est pas possible de créer un
    objet de classe C si C est une classe abstraite
  • Une méthode abstraite est une méthode dont la
    définition nest pas donnée dans la classe
    courante mais devra lêtre dans des classes
    filles
  • Toute classe contenant au moins une méthode
    abstraite est une classe abstraite

99
Classes et méthodes abstraites
  • Exemple
  • Classe abstraite Point privé x, y
    ENTIER Point()
    Point(Valx, Valy ENTIER) // constructeur à 2
    this.x lt- Valx
    // paramètres this.y
    lt- Valy public procédure
    setX(Valx ENTIER) // deux méthodes
    public procédure setY(Valy ENTIER) //
    abstraites

100
Héritage disjonction ou recouvrement
  • Si un même objet ne peut pas être membre de
    plusieurs sous-classes d une même classe, on
    parle d héritage disjoint

ŒUVRE d art
Tableau
Morceau de musique
101
Héritage disjonction ou recouvrement
  • Sinon on parle d héritage avec recouvrement

Bâtiment
Professionnel
Habitation
102
Héritage multiple
  • Il y a héritage multiple si une classe peut
    hériter de plusieurs autres classesimpossibl
    e avec Java

Morceau de musique compositeur
partition
Livre auteur texte
ŒUVRE d art
103
Héritages propriétés
  • Transitivité
  • Si A hérite de B et B hérite de C alors A hérite
    de C
  • Non réflexif
  • Une classe ne peut pas hériter delle même
  • Non symétrique
  • Si A hérite de B alors B ne peut pas hériter de A
  • Corollaire
  • Un cycle dans une relation d héritage est
    impossible. Les relations dhéritages forment un
    DAG (Graphe dirigé acyclique)?

104
Classes et méthodes terminales
  • Une classe terminale est une classe dont aucune
    classe ne peut hériter.
  • Une méthode terminale est une méthode qui ne peut
    pas être redéfinie.
  • Un champ terminal dune classe est une constante.

105
Liens entre classe
  • Comment ?
  • Par les champs,en déclarant un champ de classe A
    dans une classe B
  • Dans les méthodes,en déclarant une variable de
    classe A dans une méthode de la classe B
  • Par la définition explicite dune
    relationexemple

Enseignant
Matière
nom prénom
nom volume horaire
106
Agir sur un objet dune classe liée
  • Actions possibles
  • lire la valeur d un champ
  • destination lt- nom_objet.nom_champ
  • modifier un champ
  • nom_objet.nom_champ lt- nouvelle_valeur
  • exécuter une méthode
  • résultat lt- nom_objet.nom_méthode(paramètre
    d entrée)?
  • Remarques
  • le symbole d affectation est ici lt-
  • le texte entre crochet est optionnel et signale
    0 itération ou n itérations

107
Actions sur objet constat
  • Rôle des méthodes
  • factoriser du code commun
  • avoir un typage plus fort (ne sapplique que sur
    les objets de la classe C dans laquelle elle est
    définie, ou dune classe héritant de C)?
  • nautoriser que certains changements détats sur
    un objet
  • Mais
  • possibilité dintervenir directement depuis
    l extérieur  sur un champ dune méthode
    (annule le dernier point)?
  • nest pas adapté à la réutilisabilité lorsque la
    représentation des données doit être modifiée
    (ex ensemble de car ou d entiers)?

108
Gestion des droits d accès
  • Conséquence du constat précédent
  • pour chaque champ et chaque méthode, possibilité
    de définir des droits daccès pour les autres
    classes

109
Encapsulation
  • Définition
  • modifier les champs d un objet n est possible
    que par l intermédiaire des méthodes définies
    directement ou par héritage dans la classe de cet
    objet
  • Principe
  • les champs sont tous privés
  • les méthodes mises à la disposition des autres
    classes sont déclarées publiquesNB si la
    classe a vocation à être utilisée comme une
    classe mère, certains champs et méthodes pourront
    être protégés

110
Encapsulation
  • Avantages
  • nautoriser que certains changements détats pour
    un objet
  • possibilité de modifier la représentation interne
    d une classe (les champs) sans devoir refaire
    tous les projets ou programmes qui utilisent la
    classe
  • Conséquences pour diffuser au public une
    classe, préciser
  • nom et rôle de la classe
Write a Comment
User Comments (0)
About PowerShow.com