1 / 435

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 EA 4269 Philippe.Canalda@univ-fcomte.fr http://psm.pu-pm.univ-fcomte.fr/~pcanalda Octobre 2008. Présentation du cours de Conception et de Programmation Orientée Objet - Java.

pakuna
Download Presentation

Présentation du cours de Conception et de Programmation Orientée Objet - Java

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Philippe Canalda Master 1 PSM – Montbéliard – Conception et Programmation Avancée MultiMédia UFR STGI / LiFC EA 4269 Philippe.Canalda@univ-fcomte.fr http://psm.pu-pm.univ-fcomte.fr/~pcanalda Octobre 2008 Présentation du cours de Conception et de Programmation Orientée Objet - Java

  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 d’exercices, etc.intégration du travail d’autrui

  3. 1ère intervention CM : prises de notes : X + Y • Organisation de l’enseignement • 1ère illustration d’une 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 l’algorithme de tri par insertion et constitution des groupes d’étudiant • Présentation <orale> 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. Prise de notes de • X = Delphine Tirole • Y = Mikaël Geljic

  5. 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

  6. 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 d’une boule initiale

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

  8. Plan • ... • Notions d’UML : 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

  9. 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.

  10. 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).

  11. Bibliographie Sur l’UML • 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.

  12. 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 • ...

  13. 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 • L’examen final de 1ère et de 2ème session

  14. 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

  15. 1.1 Styles de programmation Style applicatif • Fondé sur l’évaluation d’expressions, 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

  16. 1.1 Styles de programmation Style impératif • Fondé sur l’exé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

  17. 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 d’interaction • 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

  18. 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

  19. 1.2 Avantages du style objet Facilite l ’abstraction • L’abstraction 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é

  20. 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

  21. 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; } ...

  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) { 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); } ...

  23. 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); } }

  24. 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

  25. 1.5 Exemple : disques et anneaux class Disque { protected Point centre ; // composition protected int rayon ; public Disque(int x, int y, int rayon) { this.centre=new 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 } }

  26. 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 ; } }

  27. Info(s) diverse(s)‏ • Ici fin cours 1

  28. 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

  29. 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 » * @author Canalda * @version 1.0 \******* */ public class TestHelloWorld extends Frame { /** * Constructeur */ public TestHelloWorld() { super(« Hello World ! »); setSize(200,100); show(); }

  30. 2.1 Deuxième exemple public class TestHelloWorld extends Frame { … /** Méthode de dessin de la fenêtre * @params graphics contexte d ’affichage */ public void paint(Graphics graphics) { graphics.setColor(Color.black); graphics.drawString(« Bonjour », 65, 60); } /* Méthode principale * @param args arguments de la ligne de commande */ public static void main(String[] args) { new TestHelloWorld(); } }

  31. 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é

  32. 2.1 Créer une documentation HTML Il s ’agit de créer une documentation et non d ’établir les spécifications des classes. • @author : il peut y avoir plusieurs auteurs • @see : pour créer un lien sur une autre documentation Java • @param : pour indiquer les paramètres d ’une méthode • @return : pour indiquer la valeur de retour d ’une fonction • @exception : pour indiquer quelle exception est levée • @version : pour indiquer le numéro de version du code • @since : pour indiquer le numéro de version initiale • @deprecated : indique une méthode ou membre qui ne devrait plus être utilisée. Crée un warning lors de la compilation. - exemple : /** * @deprecated Utiliser plutôt afficher * @see #afficher()‏ */

  33. 2.1 Un exemple /** * Classe permettant de manipuler des matrices * @author Canalda * @author Fino * @version 1.0 */ public class Matrice { private int n; private int [][] m; /** Premier constructeur. Cree une matrice nulle de taille donnee en * parametre. * @param n un entier pour la taille * @see Matrice#Matrice(int, int)‏ */ ...

  34. 2.1 Un exemple public class Matrice { private int n; private int [][] m; /** Premier constructeur. Cree une matrice nulle de taille donnee en * parametre. * @param n un entier pour la taille * @see Matrice#Matrice(int, int)‏ */ public Matrice(int n){ this.n=n; this.m=new int [n][n]; } /** Deuxieme constructeur. Cree une matrice dont la taille et le contenu * sont donnes en parametre. * @param n un entier pour la taille * @param x un entier pour le contenu de chaque case * @see Matrice#Matrice(int)‏ */ …

  35. 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. * @param n un entier pour la taille * @param x un entier pour le contenu de chaque case * @see Matrice#Matrice(int)‏ */ public Matrice(int n, int x){ this.n=n; this.m=new int[n][n]; for(int i=0; i<n; i++)‏ for(int j=0; j<n; j++) this.m[i][j]=x; } …

  36. info • Fin 2ème coursprises de notes : • TD – prises de notes • Td1 • Td2 • TP – prises de notes • A • B • C

  37. 2.1 Un exemple public class Matrice { private int n; private int [][] m; … /** Methode de transposition de matrice */ public void transposer(){ for(int i=0; i<n; i++)‏ for(int j=i+1; j<n; j++) { int t=this.m[i][j]; this.m[i][j]=this.m[j][i]; this.m[j][i]=t; } } /** Methode d’affichage d ’une matrice */ …

  38. 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 i=0; i<n; i++)‏ for(int j=0; j<n; j++) { sb.append(m[i][j]); sb.append(«  »); } sb.append(«  \n»); } return sb.toString(); } /** Methode principale */ … }

  39. 2.1 Un exemple public class Matrice { private int n; private int [][] m; … /** Methode principale * @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é.

  40. Cours 3

  41. 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 (n==1)‏ 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); } } }

  42. 2.1 Exécution d ’une applette On crée un fichier DessinDragon.html contenant : <HTML> <HEAD> <TITLE> Courbe du dragon </TITLE> </HEAD> <BODY> <APPLET CODE=« Dragon.class » WIDTH=400 HEIGHT=400> </APPLET> </BODY> </HTML> On ouvre ensuite ce fichier sous Netscape ou bien directement par appletviewer DessinDragon.html

  43. 2.1 Le dragon documenté import java.awt.*; import java.applet.*: public class Dragon extends Applet { /** * Methode de dessin du dragon. * </BR> * On obtient le dessin suivant : * </BR> * <APPLET> CODE=« Dragon.class » WIDTH=300 HEIGHT=300> </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 (n==1)‏ 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); } } }

  44. 2.2 Le langage Java Java est dérivé de Kawa. Créé en 1995, la version actuelle est la 1.6 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 d’interfaces • 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

  45. Info 2007-2008 • Notes élaborées par David et Dhaya • 1h30

  46. 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

  47. 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 …

  48. Fin CM2 année 20082009

  49. 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) { return (b==0) ? a : pgcd(b, a%b); }

  50. 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 P;int x=2;…p.push(x); • L ’objet courant est nommé this et peut-être sous-entendu s ’il n’y a pas d ambiguïté de visibilité.public void setX(int x) { this.x=x;} • 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.

More Related