4.85k likes | 5.38k Views
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.
E N D
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
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
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
Prise de notes de • X = Delphine Tirole • Y = Mikaël Geljic
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
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
Plan • Présentation de ce qui vous attend • Bibliographie • Programmation objet • Le langage Java • Algorithmique 1 (rappel) et 2 • ...
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
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.
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).
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.
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 • ...
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
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
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
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
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
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
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é
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
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; } ...
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); } ...
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); } }
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
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 } }
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 ; } }
Info(s) diverse(s) • Ici fin cours 1
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
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(); }
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(); } }
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é
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() */
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) */ ...
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) */ …
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; } …
info • Fin 2ème coursprises de notes : • TD – prises de notes • Td1 • Td2 • TP – prises de notes • A • B • C
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 */ …
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 */ … }
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é.
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); } } }
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
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); } } }
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
Info 2007-2008 • Notes élaborées par David et Dhaya • 1h30
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
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 …
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); }
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.