1 / 345

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

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@univ-fcomte.fr http://src.pu-pm.univ-fcomte.fr/public/staff/canalda

abeni
Télécharger la présentation

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. 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@univ-fcomte.fr http://src.pu-pm.univ-fcomte.fr/public/staff/canalda Octobre 2006

  2. 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 En préambule

  3. 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 1ère intervention CM : prises de notes : F. Schulzendorf + J.Roden

  4. 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 1ère intervention TD

  5. TP1 E. Dietrich + François Welker TP2 S. Armessen + J. Pascau TP 3 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 1ère intervention TP : prise de notes

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

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

  8. 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. Bibliographie

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

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

  11. 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 ... Bibliographie

  12. 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 Travail demandéContrôle de Connaissances

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

  14. 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 1.1 Styles de programmation

  15. 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 1.1 Styles de programmation

  16. 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 1.1 Styles de programmation

  17. 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 1.2 Avantages du style objet

  18. 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é 1.2 Avantages du style objet

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

  20. 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; } ... 1.3 Un exemple

  21. 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); } ... 1.3 Un exemple

  22. 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); } } 1.3 Un exemple

  23. 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 1.4 Héritage et composition

  24. 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 } } 1.5 Exemple : disques et anneaux

  25. 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 ; } } 1.5 Exemple : disques et anneaux

  26. 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 2.1 Premier exemple

  27. 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(); } 2.1 Deuxième exemple

  28. 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(); } } 2.1 Deuxième exemple

  29. 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é 2.1 Deuxième exemple

  30. 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() */ 2.1 Créer une documentation HTML

  31. /** * 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) */ ... 2.1 Un exemple

  32. 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) */ … 2.1 Un exemple

  33. 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; } … 2.1 Un exemple

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

  35. 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 */ … 2.1 Un exemple

  36. 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 */ … } 2.1 Un exemple

  37. 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é. 2.1 Un exemple

  38. 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); } } } 2.1 Fractales

  39. 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 2.1 Exécution d ’une applette

  40. 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); } } } 2.1 Le dragon documenté

  41. 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 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 2.2 Le langage Java

  42. Notes élaborées par David et Dhaya 1h30

  43. 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 2.2 Le langage Java

  44. 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 … 2.3 Structure d ’1 programme

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

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

  47. 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. P=new 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. 2.4 Expressions, types, variables

  48. Toujours par valeur, ou bien par référence implicite. Exemple : soit la méthode static int plus(int a, int b) { return a+b; } A l ’appel de la méthode, par exemple int c=plus(a+1,7), lesparamè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 aLocal=a+1; int bLocal=7; int résultat=aLocal+bLocal; 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. Passage de paramètres

  49. 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 = 127;b += 1; // b = -128 2.5 Types de base (primitifs)

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

More Related