Programmation Objet et JAVA

Dimension: px
Commencer à balayer dès la page:

Download "Programmation Objet et JAVA"

Transcription

1 Programmation Objet et JAVA Organisation du cours 10 séances de CM/TD/TP Les chapitres essentiels Java, la notion d Objet et de Classes L héritage et le polymorphisme Les collections, Les exceptions, les fichiers Les interfaces graphiques en Swing x sujets de TD/TP Sujets donnés à l avance 1 examen écrit de 2h Phelma 2015 Documents : Site : Le poly Les sujets de TD Site indispensable : Caractéristiques Introduction Objet : Inspiré du C++, Objective C et Smalltalk : Java fortement objet. Simple Suppression des sources d erreurs classiques : pas de pointeurs, pas de gestion mémoire par le programmeur Robuste Nombreuses vérifications sont faites à la compilation (protection des classes, ) Sécurisé à la conception du langage Les notions de sécurité réseau sont incluses (SecurityManager), en particulier pour les applets Compact Java a été conçu pour fonctionner dans un environnement évolutif. L'interpréteur Java n'a besoin que de 215Ko. Chargement dynamique des classes 3

2 Introduction : caractéristiques Introduction : caractéristiques Langage Interprété Traduit et exécuté à chaque chargement Développement plus simple Temps d exécution plus long Fichier *.java Indépendant du processeur et de l OS dépend de la définition de la machine virtuelle Fichier *.class Indépendant du processeur et de l OS dépend de la définition de la machine virtuelle Pas de Fichier Executable Dépendant du processeur et de l OS Dépend de la Réalisation de la machine virtuelle Indépendant de l'architecture : Portable Conçu pour cela (machine virtuelle) Ensemble complet d exécution : machine à pile 32 bits Jeu d instructions précis Des registres Une pile Interprète du byte_code : intermédiaire entre compilation et interprétation Seule, la JVM change entre MAC, PC, Windows, Unix. Les types de base ont des tailles fixes Multithread Gestion de plusieurs tâches prévue Réseau Ensemble de classes pour utiliser des protocoles TCP/IP tels que HTTP et FTP Gestion des langues Deux types de programmation différents Applications Programmes écrits en Java Exécuté sur une machine qui possède un interpréteur java. Ce programme pourra se lancer indifféremment sous n'importe quelle machine/os. Applets Introduction : Applets Java versus C Applets : intégration de java au www Programmes écrits en Java, installés généralement sur un serveur Web L'applet est téléchargée depuis le serveur Web sur le poste client Exécutés sur le poste Client par la JVM du navigateur à la demande de celui-ci Testés grâce à appletviewer 2 chargement applet (.class) Serveur www distant Poste client netscape, IE,... 1 : demande 3 execution JAVA est portable sans recompilation sur toutes les plates formes (processeur/os) PC, Mac, PDA, telephone, etc Même syntaxe, même structure de contrôle que C et C++ Principales différences Pas de variables globales Pas de préprocesseur #define, #include #ifdef Pas de pointeurs Le main est une fonction interne à une classe C++ : Pas de surcharge des opérateurs C++ : Pas d'héritage multiple Nombreuses bibliothèques standard Réseau,Système, thread Graphisme, Interface utilisateur, Multimédia E/S, chaînes et expressions régulières` RMI : applications réparties sur plusieurs machines Securité, cryptographie Base de données, xml 8

3 Types de base Langage fortement typé comme C++ huit types de base Type Taille Valeur int 4 bytes à ( 231) short 2 bytes à long 8 bytes 263 byte 1 byte -128 à +127 float 4 bytes +/- ( 1, à ) double 8 bytes +/- ( 4, à 1, ) char 2 bytes caractères (internationaux) boolean true or false POO et UML Notions de base Valeurs extrémales par Type.MAX_VALUE, type.min_value char c = Byte.MAX_VALUE 9 10 Concept de classe : le point 2D Le point 2D en procédural ou en objet Problème posé Définir les outils nécessaires pour un logiciel de géométrie tel que cabri ou pour un logiciel de dessin Exemple : définir la symétrie centrale et les translations et homothéties sur des points dans le plan cartésien Structure point avec champs x et y class point Attributs x et y Qu est ce qu un point du plan Définition statique : ce sont les champs ou attributs Une entité comportant 2 coordonnées abscisse ordonnée Que doit on pouvoir faire avec : ce sont les méthodes Entrées/sorties Le créer : mettre des valeurs dans les coordonnées L afficher : ecrire les valeurs à l écran L utiliser pour résoudre un problème Translation d un vecteur donné Homothétie par un facteur k Trouver le symétrique d un point 11 Fonctions void affiche (point) void translate(point*, double,double) point homothetie(point, double) point symetriecentrale(point) En C, pas de liens entre les fonctions et les structures de données qu elles manipulent Exemple : on peut utiliser affiche sur un entier par erreur Méthodes void affiche () void translate(double,double) point homothetie(double) point symetriecentrale() En POO, on regroupe champs et fonctions au sein de la classe il existe un lien physique entre attributs, méthodes et objets On ne peut pas utiliser affiche sur un int 12

4 En C, le point 2D et ses fonctions typedef struct Point { /* Definition des champs d'un point */ double x; double y; POINT; Point : 2 coordonnées /* definition des fonctions sur un point */ /* Comment afficher un point */ void affiche(point a) {printf("x:%lf y:%lf\n",a.x,a.y); /* Comment translater un point */ void translate(point* ax, double a, double b) { ax->x += a; ax->y += b; /* constante x point ==> point */ POINT multcste(point a, double k) { POINT res; res.x = k*a.x; res.y = k*a.y; return res; /* Symetrie centrale d un point : ==> point */ POINT symetriecentrale(point a) {POINT res; res.x = -a.x; res.y = -a.y; return res; Quelles sont les actions réalisables sur un point? 13 En C, le point 2D et ses fonctions void main() { int i; POINT p1, p2, p3; printf("premier exemple"); p1.x=2; p1.y=8; affiche(p1); translate( &p1, 1,-6); // Attention aux pointeurs!!! affiche(p1); p2 = multcste(p1, 10.0); affiche(p2); p3=symetriecentrale(p1); affiche(p3); affiche(i); // Rien n empeche cela : il n y a aucun lien entre affiche et la structure POINT 14 Exemple de classe : le point 2D Point : 2 coordonnées Exemple d objet : des points particuliers public class Point { /* Definition des champs d'un point */ private double x; private double y; /* definition des methodes d'un point */ /* Constructeur : valeurs initiales d'un point */ public Point () { x = 0; y = 0; public Point (double a, double b) { x = a; y = b; Quelles sont les actions réalisables sur un point? Comment initialiser un point : 2 possibilités /* Comment afficher un point */ public void affiche() { System.out.println("Abcisse "+x+" ordonnee : "+y); /* Comment translater un point */ public void translate(double a, double b) { x += a; y += b; /* constante x point ==> point */ public Point multcste(double k) { Point res; res = new Point(this.x, this.y); // Ou Point(x,y) res.x = k*res.x; res.y = k*res.y; return res; /* Symetrie centrale d un point : ==> point */ public Point symetriecentrale() { return new Point(-x,-y); 15 public class Ex1b { public static void main (String[] args){ Point p1, p2, p3; System.out.println("Premier exemple"); p1 = new Point(2,8); p1.affiche(); p1.translate(1,-6); p1.affiche(); p2 = p1.multcste(10.0); p2.affiche(); p2=null; p3=p1.symetriecentrale(); p3.affiche(); 3 Points : p1 p2 p3 Affichage de p1 Creation de p1 16

5 POO : concepts de base Conception, Modèles et Diagrammes en POO 1 programme ; 1 ensemble d objets qui s envoient des messages Encapsulation : données+méthodes+sécurité Données et méthodes dans une même entité : la classe données : les informations propres à un objet, méthodes : les actions réalisables sur/avec cet objet Objet : instance d'une classe Sécurité : Cloisonne l intérieur et l extérieur de l objet privé : inaccessible de l'extérieur de la classe ou de l objet public : ce qui l'extérieur à le droit d'utiliser Réutiliser sans connaître le fonctionnement interne Sans risquer de modifier ce qui est fait Héritage Graphe de parenté entre des Classes Héritage des méthodes et données qui ne sont pas à redéfinir Ajouter des nouvelles fonctionnalités à ce qui existe déjà Isole les éléments nouveaux pour la sécurité du code existant Polymorphisme : une même méthode prend plusieurs formes Une méthode est typée par ses paramètres. Le même nom est utilisable par plusieurs classes ou type de données Quand on utilise une classe donnée, elle sait quelle est la bonne fonction à utiliser! pas de test de type en POO. 17 UML : Unified Modeling Langage Langage graphique de modélisation de projet informatique orienté objet : Définition des classes/attributs et des méthodes (modèle statique) Définition des aspects dynamiques et temporels (modèle dynamique). Le modèle statique permet de structurer les besoins de l utilisateur du logiciel : diagramme use-cases de structurer les attributs et les méthodes en les répartissant dans des classes, reliées entre elles par des liaisons de trois types : héritage, agrégation, relation : diagrammes d objets, de classes, De structurer l application en terme de modules (diagramme de composants) et de matériel utilisé (diagramme de déploiement) Le modèle dynamique décrit le comportement dynamique et temporel du système : Structurer les interactions entre objets (diagramme de collaboration) et leur séquencement temporel, ie ordre d'exécution des méthodes (diagramme de séquence) Spécifier les séquences d etats possibles des objets (automates) : diagramme d etat-transition 18 Diagramme de classe : UML Questions Une classe Faire le diagramme de classe d un complexe Quels sont ses attributs? Donnez les prototypes de 4 méthodes utiles Nom de la classe Attributs ou champs + : public # : protégé - : private méthodes 19 20

6 Les classes en JAVA Notion d objet Les classes et les objets Une classe permet de définir des modèles ayant une certaine autonomie La classe définit la structure des objets Les champs les méthodes utilisables par un objet de ce type, i.e. les actions qu un objet de ce type peut réaliser Syntaxe [public] class Nom_de_ma_classe { // déclaration des champs; [public, private] type nom_champ; //déclaration de methodes; [public, private] type_retour nom_de_fonction(type nom_parametre, ) 21 En java, pas de rédéfinition des opérateurs à l inverse du C++ En pratique, le nom d une classe commence par une majuscule Le nom du fichier est celui de la classe contenant la fonction main ou celui de la classe public 22 Les objets et les variables en JAVA Concept d'objet : exemple Un objet = un exemple ou une entité dont le modèle (type) est une classe On dit aussi une instance de classe. La variable est une référence (pointeur constant) sur cet objet En Java, 3 étapes Définition de la variable : Point p1; Sa durée de vie est celle du bloc Création et allocation de l objet : p1= new Point(2,8); Sa durée de vie est celle de son utilisation Elle est détruite AUTOMATIQUEMENT par le garbage collector, quand elle est devenue inutile Utilisation du point p1 : par exemple, appliquer affiche() à p1 : p1.affiche() ou changer la valeur de l abscisse : p1.x=10; public class Ex1c { public static void main (String[] args){ System.out.println("Premier exemple"); Point p1=null, p2=null; // Définition p1, p2 p1 = new Point(); p1.x=2; p1.y=8; p1.affiche(); p2 = new Point(20,80); p2.affiche(); // Creation p1 // On change p1 p1.x = p1.x + 20; p1.y += 80; p1.affiche(); p2=null; ` // l objet pointé par p2 est libre // les variables p2 et p1 sont détruites p1 p2 p1 22 p p1 80 Donc En java, une variable est une référence, i.e. un pointeur "masqué" Le passage d un objet comme paramètre d une fonction permet de modifier cet objet : pas besoin de passage de l adresse Pas de pointeur, de gestion mémoire par le programmeur p2.affiche() p1.affiche() p1.affiche() 23 24

7 Accès aux membres Notion d objet Accès aux membres d un objet : objet.champ Attention, objet est une référence Exemple : a.x est l abscisse du point a. Les attributs et les méthodes Appeler/exécuter une méthode : objetappelant.methode(param); Cela signifie que l on exécute methode(parametres) «SUR» objetappelant Les méthodes s exécutent sur un objet p.affiche() signifie On cherche la classe de p : c est la classe Point On cherche si une méthode affiche() existe dans la classe Point : si elle n existe pas, erreur de compilation «Cannot find Symbol» On exécute cette fonction avec un paramètre supplémentaire invisible :this, qui est l objet sur lequel on travaille = objet appelant. Ici, this = p public void translate(double a, double b) { x = x + a; y = y + b; Si on appelle translate avec le point p sous la forme p.translate(2,3), p.x et p.y qui sont incrémentés de 2 et 3 25 Comment écrire public void translate(double x, double y) 26 Paramètre this Dans une méthode, il y a toujours un paramètre «implicite» this, qui est l objet sur lequel on travaille p.translate(1,2) ==> this est une référence sur p Notion d objet Donc public void translate(double a, double y) { ATTENTION!!!!! x = x + a; y = y + y; // Quand on écrit y, est ce le paramètre de la fonction ou l attribut de p? Sécurité public void translate(double a, double y) { x = x + a; this.y = this.y + y; 27 28

8 Accès et protection Accès aux membres et aux méthodes (2) Principe de la POO : L objet est responsable de son état les membres (attributs ou méthodes) peuvent etre protégés en lecture/écriture des autres fonctions ou objets du programme. Public Les membres public sont accessibles pour toutes les méthodes et fonctions du programme On peut lire et ecrire les champs à n importe quel endroit dans le code On peut executer une méthode dans n importe quelle lméthode Private Un membre private n est accessible que par les méthodes de sa classe ou de son package Une méthode private peut être exécutée par une autre méthode de la classe, mais pas par celles des autres classes. Un champ private n est accessible que par une méthode de la classe. En particulier, main() est une fonction qui n appartient pas à la classe Point : elle ne peut pas accéder aux champs x et y d un objet de la classe Point 29 Lecture de 2 nombres au clavier, creation d un point Ex6.java import java.util.*; public class Ex6 { public static void main (String []arg) {double x1, x2; Point a,b,c ; Scanner clavier = new Scanner(System.in); System.out.println("Entrer 2 reels "); x1=clavier.nextdouble(); // Lecture d un reel x2=clavier.nextdouble(); // 3,14567 :virgule a= new Point(x1,x2); // Création du point avec x1 et x2 a.affiche(); // On execute affiche sur a; ici, this = a b = new Point(3,8); b.affiche(); // On execute affiche sur a; ici, this = b b.x=x1; // Interdit car x est privé b.translate(2,6); b.affiche(); a.translate(b); a.affiche(); c = a.multcst(2.); c.affiche(); 30 Accès et protection Exemple :Fichier Ex7.java class Point { private double x,y; // x et y ne peuvent être lus/modifiés que par des méthodes de la classe private void interdit() {x=0; System.out.println("Appel interdit hors classe"); // interdit() ne peut être appelée que par des méthodes de la classe public void autorise() {this.interdit(); // OK car autorise() est dans la classe // autorise() peut être appelée par des méthodes d autres classes ; public class Ex7 { public static void main (String []arg) { Point a,b ; a= new Point(1,2); a.affiche(); b= new Point(); b.affiche(); a.x=5; // Interdit car x est private b.interdit(); // Interdit car interdit() est private b.autorise(); // Autorise car autorise() est public 31 Accès et protection : pourquoi? class Fraction{ public double numerateur, denominateur; // Constructeur : jamais de denominateur nul public Fraction(double a, double b) { if (b==0) { System.out.println("Denominateur nul"); System.out.exit(1); else {set=a; denominateur=b; Fraction produit(fraction q) { // Attention si q.denominateur est nul, rien n est verifié ici numerateur *= q. numerateur; denominateur *= q. denominateur; public String tostring() { return numerateur + "/" + denominateur; ; public class Ex7c { public static void main (String []arg) { Fraction a = new Fraction(1,2); Fraction b = new Fraction(3,4); System.out.println("b vaut " + b); b.produit(a); System.out.println("b vaut " + b); a.denominateur=0; // C est contraire au fonctionnement de la classe, mais comme denominateur n est pas privé, c est syntaxiquement correct. b.produit(a); System.out.println("b vaut " + b); 32

9 Accesseurs et mutateurs Accesseurs et mutateurs Le concepteur de la classe se pose la question : Qu est ce qui est utile aux autres classes et fonctions de ma classe, i.e. le monde extérieur Ce qui est utile est public, le reste, utile au fonctionnement interne de l objet est private. De cette manière, «l extérieur» ne peut modifier le comportement interne et voulu par le concepteur : c est l encapsulation En pratique, les champs sont souvent privés Si besoin, autoriser la lecture du champ par un accesseur getchamp() que vous devez définir Parfois, autoriser la modification du champ par un mutateur setchamp() que vous devez définir Les mutateurs/accesseurs peuvent etre public ou privé Toujours initialiser les champs grâce aux constructeurs C est le concepteur qui décide et non l utilisateur de l accès possible Classe Fraction Méthodes internes à la classe void init(double,double) Attributs num et denum Mutateurs/Accesseurs main() { Méthodes autorisées à l extérieur 33 class Fraction{ //Attributs privés private double numerateur, denominateur; // Accesseurs et Mutateurs: public double getnumerateur(){ return numerateur; public double getdenominateur() { return denominateur; public void setnumerateur(double a) {numerateur=a; // Avec ce mutateur, on est sur que jamais une fraction ne sera infinie public void setdenominateur(double a) { if (b==0) {System.out.println("Denominateur nul"); System.exit(1); else denominateur=a; // Methode interne à la classe, inutile pour les autres classes private void init(double a, double b){setnumerateur(a); setdenominateur(b); // Constructeurs : on utilise la méthode privée public Fraction(double a, double b) { init(a,b); public Fraction(Fraction q) { init(q.a,q.b); // Meme la methode produit peut utiliser les mutateurs, avec verification automatique du denominateur. public void produit(fraction q) { setnumerateur(numerateur*q. numerateur); setdenominateur(denominateur*q. denominateur); ; 34 Accesseurs et mutateurs public class Ex7c { public static void main (String []arg) { Fraction a = new Fraction(1,2); Fraction b = new Fraction(a); System.out.println("b vaut " + b); b.produit(a); System.out.println("b vaut " + b); a.setdenominateur(0); // C est contraire au fonctionnement de la classe, qui refuse les fractions infinies, et le programme va quitter à cet endroit. b.produit(a); System.out.println("b vaut " + b); Notion d objet Initialisation, construction, destruction 35 36

10 Constructeur Constructeur Constructeur : méthode appelée automatiquement à la création d'un objet Rôle Initialise les différentes parties de l'objet : on connaît toujours l état initial Réalise les actions indispensable à l'état initial de l'objet Plusieurs manières d'initialiser un objet " Surcharge possible i.e. plusieurs constructeurs de même nom Construire un point à partir de 2 réels Construire un point à partir de rien Construire un point à partir d un autre point Syntaxe Fonction de même nom que la classe, comme en C++ Attention Par défaut, java ajoute un constructeur sans paramètres Quand on définit un constructeur, on ne peut plus construire des points sans utiliser un de ceux ci class Point { private double x; private double y; /* Constructeur : quelles sont les valeurs initiales d'un point */ public Point (double a, double b) {System.out.println("C1"); x = a; y = b; public Point () { System.out.println("Constructeur 2"); x = 0; y = 0; public Point (Point a) { System.out.println("Cons 3"); x = a.x; y = a.y; ; public class Ex4 { public static void main (String []arg) { Point a ; System.out.println("Creation de a"); a= new Point(1,2); // Création du point 1,2, constructeur 1 System.out.println("Fin xreation de a"); System.out.println("Creation de b"); Point b = new Point(); // Création du point 0,0 constructeur 2 System.out.println("Fin creation de b"); System.out.println("Creation de c"); Point c = new Point(b); // Création de C à partir de b; System.out.println("Fin creation de c"); Destructeur Destructeur Fonction appelée automatiquement lors de la destruction des objets Prototype : protected void finalize() En C++, ~nom_de_la_classe() En java, très peu utilisé car vous ne gérez pas la libération de la mémoire : c est automatique, grâce au ramasse miette GC ou ramasse miette : Récupère automatiquement la mémoire des objets devenus inutiles et appelle la méthode finalize On ne sait pas quand il est appelé : on ne sait donc pas quand est utilisé le destructeur Objets inutiles : objets réels alloués qui ne sont plus utilisés Difficile à trouver ==> quand un objet est inutile, pour qu il puisse etre détruit, mettre sa référence à null En général, on n appelle pas le gc() directement car il peut etre tres lent pas de destructeur 39 import java.util.*; class Point { protected void finalize() {System.out.println("Appel au Destructeur"); ; public class Ex5 { public static void main (String []arg) {Point a ; Scanner clavier = new Scanner(System.in); System.out.println("Creation de a"); a= new Point(1,2); // Création du point 1,2, constructeur 1 System.out.println("Fin xreation de a"); a=null; clavier.nextline(); System.gc(); // Destruction du point a System.out.println("Creation de b"); Point b = new Point(); // Création du point 0,0 constructeur 2 On passe dans le destructeur Ligne : System.gc() 40

11 Surcharge ou Polymorphisme de méthodes : Notion d objet Surcharge de méthodes Possibilité pour une fonction ou méthode d avoir un même nom si les signatures différentes Signature : type de retour, nombre et type des paramètres En Java et C++, surcharge uniquement sur les paramètres La fonction réellement exécuter est déterminée sur la base des paramètres utilisés En java, il y a liaison dynamique décidé à l execuion Attention : on ne peut pas surcharger uniquement sur le type de retour Surcharge ou Polymorphisme de méthodes : class Point { private double x, y; /* Constructeur */ public Point (double a, double b) {x = a; y = b; public Point (Point a) {x = a.x; y = a.y; Objets et références public void affiche() { System.out.println( "x:"+x+" y:"+y); // Deux methodes de translations : A partir de 2 reels public void translate(double a, double b) { x += a; y += b; // A partir d un point public void translate(point p) { x += p.x; y += p.y; ; public class Ex5 { public static void main (String []arg) { Point a= new Point(1,2); // Création du point 1,2 Point b = new Point(10,20); Point c = new Point(b); // Création de C à partir de b; b.affiche(); b.translate(1,2); b.affiche(); c.affiche(); c.translate(a); c.affiche(); 43 44

12 Objets et référence ou le retour des pointeurs Le passage d objets en paramètres p1 = new Point (2,3); p1 est une référence sur un objet réel C est donc un pointeur constant public class Ex8b { public static void main (String []arg) { Point a,b,c ; a= new Point(1,2); a.affiche(); b = a; c = new Point(a); b.affiche(); c.affiche(); a.setx(8); a.affiche(); b.affiche(); c.affiche(); Qu est ce que ce programme affiche a b 18 2 c 1 2 class Point {. /* Cette fonction modifie son parametre meme si elle est stupide : */ void ajoutemoiap(point p) { p.x = p.x+x; p.y += y; public class Ex1c { public static void main (String[] args){ p1 22 p1 Point p1=null, p2=null; 88 p1 = new Point(2,8); p1.affiche(); p2 = new Point(20,80); ` p2 20 p1 p2.affiche(); 80 p2.ajoutemoiap(p1); // Ici p1 est modifié à cause de ajoutemoiap p1 p1.affiche(); Un objet passé en paramètre d une méthode est passé par adresse et il peut être modifié par la fonction // les variables p2 et p1 sont détruites p2.affiche() p1.affiche() 45 p1.affiche() 46 Les Entrées Sorties en pratique Divers Lire des nombres et des chaines : classe Scanner Créer un objet de la classe scanner associé au flux de lecture voulu : le clavier Les méthodes nextdouble(), nextint(), nextline() de la classe scanner permettent la lecture des réels, entiers et chaines. Afficher : System.out.println() import java.util.*; public class Essai { public static void main (String []arg) { double x1, x2; String x; Scanner clavier = new Scanner(System.in); System.out.println("Entrer 2 reels "); x1=clavier.nextdouble(); // Lecture d un reel x2=clavier.nextdouble(); // 3,14567 :virgule System.out.println("Voici x1 : " + x1); 47 System.out.println("Tapez une chaine"); x=clavier.nextline(); System.out.println("Ce que vous avez ecrit : " + x); 48

13 Méthodes existantes dans une classe Tous les classes JAVA héritent de la classe de base Object, qui contient : Pour l affichage : tostring() Doit retourner une représentation textuelle de l objet Elle est utilisée par System.out.println Pour les tests d égalité : equals() a==b ne test pas si les objets a et b sont identiques mais si a et b regarde le même objet Il faut définir le test d égalité avec la méthode equals Pour recopier un objet : clone() class Point { public String tostring() {return("abscisse:"+x+" ordonnée:"+y); // Avec cette methode, on peut afficher point avec System.out.println(a) public boolean equals(point b) {return( x==b.x && y==b.y); ; public class Ex8c { public static void main (String []arg) { Point a,b,c,d; a= new Point(1,2); b = new Point(1,2); c=new Point(1,3); d=a; System.out.println(a);// Affiche a if (a==b) System.out.println("a et b pointe le meme objet"); if (a==d) System.out.println("a et d pointe le meme objet"); if (a.equals(b)) System.out.println("a et b de contenu identique"); if (a.equals(c)) System.out.println("a et c de contenu identique"); if (a.equals(d)) System.out.println("a et d de contenu identique"); 49 Résumé Un programme objet : 1 fonction main qui démarre le programme, crée les objets et les enchainements d actions 1 ensemble de classes décrivant les capacités des données manipulées 1 classe : type de données qui rassemble des données (champs) et la manière de s en servir (méthodes) Données et méthodes protégées si besoin : public : n importe quelle fonction du programme peut les modifier ou les utiliser private : seules les méthodes de la classe concernée peuvent les modifier ou les utiliser En pratique données privées. Que doit faire l utilisateur avec la classe que je développe? ==> seules méthodes publiques Initialisation, affichage, addition, etc.. Autres méthodes privées Constructeurs : comment initialiser l objet? Accesseurs et mutateurs : méthodes publiques ou privées définissant l accès en lecture/ecriture à un champ Surcharge : plusieurs fonctions peuvent avoir le même nom, mais pas les mêmes nombres et/ou types de paramètres 1 objet : 1 instance Définir la variable Créer l objet Destruction de l objet automatique quand on n en a plus besoin : pas de gestion mémoire ni pointeurs Exécuter une méthode ou fonction : objet.méthode(parametres); x.affiche(); ou c1.add(c2,c3); INTERDIT : affiche(x) Aucune fonction/méthode hors d une classe, aucune variable hors d une méthode Mélanger, ajouter 3 litres de jus d orange, 1 litre de vodka, et ca doit marcher!!! 50 Tableaux Tableaux Ensemble d objets de même type à accès direct Les tableaux sont des OBJETS Taille du tableau fixe, n est pas modifiable, accessible par la valeur (et pas la méthode) length: tab.length; Accès aux éléments par tab[i] Vérification des bornes, ArrayIndexOutOfBoundsException si erreur Indices débutant à 0 Tableaux et tableaux d objets Création d un tableau en 3 étapes 1/ Déclaration d une variable : int [] tableau; 2/ Instanciation ou création : tableau = new int [10]; 3/ Utilisation : tableau [i] = 2*i tableau Indices Tableau de 10 éléments

14 Tableaux (2) Copie de tableaux de nombres ou partage Ex9.java Lire la dimension au clavier, créer un tableau de nombre, le remplir et l afficher Copie : fonction arraycopy : la destination doit etre créée (allouée) System.arraycopy(Object src, int indsrc, Object dest, int inddest, int long) import java.util.*; public class Ex9 { public static void main(string[] arg) { int [] tableau; Scanner clavier = new Scanner (System.in); System.out.println("Nombre d'element du tableau?"); int nb = clavier.nextint(); tableau = new int [nb]; for (int i=0; i<tableau.length ; i++) tableau[i]=2*i+1; for (int i=0; i< tableau.length ; i++) System.out.print(tableau[i]+" " ); tableau[2+ tableau.length ]=0; // ERREUR : pourquoi? public class Ex10 { public static void main (String []arg) {Scanner clavier = new Scanner(System.in); double [] t1, t2,t3; System.out.println("Entrer le nombre de reels"); t1 = new double [ clavier.nextint()]; for (int i=0; i< t1.length ; i++) t1[i]=2*i+1; for (int i=0; i< t1.length ; i++) System.out.print(t1[i]+" "); System.out.println(); t2=t1; t3 = new double [ t1.length ]; System.arraycopy(t1,0,t3,0,t1.length); for (int i=0; i< t2.length ; i++) System.out.print(t2[i]+" "); System.out.println(); for (int i=0; i< t3.length ; i++) System.out.print(t3[i]+" "); System.out.println(); for (int i=0; i< t2.length ; i++) t2[i]=-1; for (int i=0; i< t1.length ; i++) System.out.print(t1[i]+" "); System.out.println(); for (int i=0; i< t2.length ; i++) System.out.print(t2[i]+" "); System.out.println(); for (int i=0; i< t3.length ; i++) System.out.print(t3[i]+" "); System.out.println(); Copie de tableaux de nombres ou partage Tableaux d objets t t2 t Création d un tableau d objet : 2 étapes Créer le tableau : Point [] tab = new Point [ clavier.nextint()]; Créer chaque objet du tableau :` for (int i=0; i< tab.length ; i++) tab[i]=new Point(2*i,2*i+1); Exemple : tableau de points public class Ex11 { public static void main (String []arg) { Point [] tab; Scanner clavier = new Scanner(System.in); System.out.println("Entrer le nombre de points"); tab = new Point [ clavier.nextint()]; clavier.nextline(); // Attention ; les points ne sont pas créés for (int i=0; i< tab.length ; i++) System.out.print(tab[i]+" "); System.out.println(); clavier.nextline(); // Creation des points for (int i=0; i< tab.length ; i++) tab[i]=new Point(2*i,2*i+1); for (int i=0; i< tab.length ; i++) System.out.print(tab[i]+" "); System.out.println();

15 Copie légère ou profonde de tableaux d objets Copie légère de tableaux d objets arraycopy! recopie de tous les éléments du tableau Ne duplique pas les objets!!! --> partage des objets t[i] : copie légère SI le programmeur duplique aussi les objets t[i] : copie profonde tab public class Ex12 { public static void main (String []arg) { Point [] tab, copie1, copie2; Scanner clavier = new Scanner(System.in); System.out.println("Entrer le nombre de points"); tab = new Point [ clavier.nextint()]; // Creation des points for (int i=0; i< tab.length ; i++) tab[i]=new Point(2*i,2*i+1); // Pour tous les points du tableau tab for (Point a : tab) System.out.print(a+" "); System.out.println(); copie1=tab copie arraycopy( ) 20 3 copie1 = tab; copie2 = new Point [tab.length] ; System.arraycopy(tab,0,copie2,0,tab.length); copie2 for (Point a : tab) System.out.print(a+" "); System.out.println(); for (Point a : copie1) System.out.print(a+" "); System.out.println(); for (Point a : copie2) System.out.print(a+" "); System.out.println(); // On met toutes les abcisses de tab a zero for (int i=0; i< tab.length ; i++) tab[i].setx(0); for (Point a : tab) System.out.print(a+" "); System.out.println(); for (Point a : copie1) System.out.print(a+" "); System.out.println(); for (Point a : copie2) System.out.print(a+" "); System.out.println(); Pour la copie profonde, il faut utiliser la méthode clone(). Voir plus loin sur les interfaces Copie légèrede tableaux d objets Notion d objet Les classes et objets composés

16 Les points essentiels Des objets dans les objets Agrégation ou composition Construction Héritage Chainage des constructeurs Protection des attributs Redéfinition des méthodes / Surcharge des méthodes Une classe Cercle Les champs Le point du centre : de la classe Point: C est un lien de COMPOSITION Le rayon : un double Les méthodes La surface L affichage La translation Polymorphisme Liaison dynamique Classe abstraite Héritage multiple Classe Point Des objets dans les objets import java.util.*; class Point { /* Definition des donnees d'un point */ private double x; private double y; /* Constructeur : 1 seule définition, les 2 autres l'appellent */ public Point (double a, double b) { setx(a); sety(b); public Point () { this(0.,0.); public Point (Point a) { this(a.getx(),a.gety()); /* Accesseurs et mutateurs */ public double getx() { return x; protected void setx(double val) { x=val; public double gety() { return y; protected void sety(double val) { y=val; public void affiche() { System.out.println("Abcisse "+getx()+" ordonnee : "+gety()); /* Comment translater un point */ public void translate(double a, double b) { setx(getx()+a); sety(gety()+b); public void translate(point t) { translate(t.getx(),t.gety()); /* Afficher un nombre : deux ecritures */ public String tostring() { return Double.toString(x)+","+ y +" "; public boolean equals(point b) {return( getx()==b.getx() && gety()==b.gety()); public Point multcste(double k) { Point res= new Point(this); res.setx(getx()*k); res.sety( gety()*k); return res; ; class Cercle { // on utilise au maximum les méthodes de Point. private Point cdg; private double rayon; public Cercle() { rayon=0; cdg= new Point(); // Attention : créer le cdg public Cercle(Point p, double r) { rayon=r; cdg=new Point(p); // pas cdg=p; public Cercle(double cdgx, double cdgy, double r) { rayon=r; cdg=new Point(cdgx, cdgy); public double surface() { return (Math.PI*rayon*rayon); public String tostring() { return("cercle de Cdg "+cdg.tostring()+" et de rayon"+rayon); //OU public String tostring() { return("cercle de Cdg "+cdg+" et de rayon"+rayon); public void translate(double a, double b) { cdg.translate(a,b); public class Ex13 { public static void main (String []arg) { Scanner clavier = new Scanner(System.in); Cercle c1, c2; double x1, x2,r; Point a; // Creation du cercle avec les 3 valeurs lues au clavier System.out.println("Entrer le cdg du cercle 1, puis le rayon"); c1 = new Cercle(clavier.nextDouble(), clavier.nextdouble(),clavier.nextdouble()); System.out.println("C1 : "+c1 + "de surface :"+c1.surface()); System.out.println("Cdg cercle 2"); x1=clavier.nextdouble(); x2=clavier.nextdouble(); a= new Point(x1,x2); // Création du point avec les x1 et x2 1 System.out.println("Entrer le rayon du cercle 2"); r=clavier.nextdouble(); c2 = new Cercle(a,r); System.out.println("C2 : "+c2+" de surface :"+c2.surface()); System.out.println("translation?"); x1=clavier.nextdouble(); x2=clavier.nextdouble(); c1.translate(x1,x2); System.out.println("C1 : "+c1);

17 Héritage Héritage simple Héritage L héritage est un concept pour les fainéants qui exploitent le travail des autres L héritage permet de réutiliser ce qui a déjà été fait très simplement La nouvelle classe (fille) hérite d une classe existante (père) Elle possède les mêmes champs et les mêmes méthodes On peut ajouter de nouveaux champs et de nouvelles méthodes L héritage est récursif : une classe dérivée peut devenir classe de base Les liens hiérarchiques forment un arbre : l arbre d héritage Héritage : Augmenter les capacités Héritage : Spécialiser l objet Augmenter les capacités d un point Exemple : Ajout de la gestion de la couleur d un point : class Point { private double x, y; public void translate(double a,double b) {setx(x+a); sety(y+b); class PointCouleur extends Point { /* Definition des champs d'un point couleur ; on a déjà x et y */ private int couleur; public PointCouleur () { // Par defaut, x et y sont nuls super(); // ATENTTION : x=0; y=0; est interdit couleur=0; public PointCouleur (double a, double b, int c) { super(a,b); couleur=c; public String tostring(){return (super.tostring() + "couleur"+integer.tostring(couleur)); ; Spécialiser les capacités d un point Exemple : Uniquement les points positifs : class Pointpositif extends Point { // on autorise que les nombres positifs public void setx (double a) { if (a>=0) super.setx(a); else System.out.println("Erreur "+a); ; public void sety (double a) { if (a>=0) super.sety(a); else System.out.println("Erreur "+a); ; ; public class Ex16 { public static void main (String []arg) {PointCouleur a,b,c ; Pointpositif d; a=new PointCouleur(1,2,0); b=new PointCouleur(4,5,255); c=new PointCouleur(8,9,65535); System.out.println("a "+a); System.out.println("b "+b); a.translate(2,3); System.out.println("a "+a); //c = b.multcste(5); System.out.println("c "+c); d =new Pointpositif(1,2); System.out.println("d "+d); d.translate(1,1); System.out.println("d "+d); d.translate(-3,0);

18 Héritage : Mettre en commun Héritage : Mettre en commun Faire des classes permettant de manipuler les cercles et les rectangles Créer Calculer la surface Translater Les cercles et les rectangles ont des points communs Le cdg La creation On fait donc une classe «pere» qui reroupe les parties communes des cercles et des rectangles On peut faire encore plus!! Héritage : intérêt Définir explicitement les liens entre les classes Une classe augmente ou étend les possibilités d une autre classe : on ajoute la notion de couleur Une classe spécialise une autre classe : le point positif est un point du quart de plan x>0 y>0 Une classe adapte le comportement d une autre classe à un besoin concret A l inverse, une classe mère regroupe des comportements communs (voir la classe forme ci dessous) Un mélange des trois raisons précédentes Exploiter les classes existantes Sans écrire de code Sans connaître le code Génie logiciel : organisation du développement logiciel Regrouper les aspects (ici, champs ou methodes) communs Définir les accès et les protections des structures de données Mieux conceptualiser les développements Comment? Trouver les relations de type «est-un» : classe dérivée Trouver les points communs et les regrouper : classe mère Héritage : ne pas confondre avec l association Relation structurelle d agrégation Composition d un objet par un ou plusieurs composants ou objets appartenant uniquement à cet objet Ex : Ordi possède un écran et clavier Relation structurelle d association Relation existant entre deux objets, moins forte que la précédente (non exclusive) Ex : une entreprise emploie une personne mais les objets représentant la personne et l entreprise existe séparément. Relation de spécialisation/généralisation Spécialisation d une classe par rapport à un modèle de base : héritage Ex : le lien Ecran-Périphérique Le graphe complet pour un ordi

19 Champs hérités : Champs hérités privés : Un objet possède tous les champs de sa classe et de sa classe mère, de grand-mère Le nom est comme précédemment : objet.nom_du_champ Le nom de la classe mère n apparaît pas : si a est un PointCouleur : on écrit a.couleur, a.x, a.y Mais Les protections s appliquent : les champs privés ne sont accessibles que par les méthodes de la classe où ils sont définis. Les champs x et y de Point sont privés Un objet de la classe PointCouleur accède au champ couleur mais pas aux champs x et y s ils sont private. Important quand vous définissez une hiérarchie de classes utilisées par d autres!!!! Trop lourd lorsque c est un ensemble de classes cohérentes comme les Point, PointCouleur Donc Le mot clé protected permet l accès aux champs pour toutes les classes dérivées Le mot clé final interdit à une classe d etre superclasse, à une méthode d etre redéfinie. class Point { private double x, double y;. class PointCouleur extends Point { private int couleur; /* Les nouveaux constructeurs */ public PointCouleur () { x=y=0; couleur=0; // INTERDIT car x et y privé public PointCouleur (double a, double b, int c) { super(a,b); couleur=c; public String tostring(){ return (super.tostring()+ "couleur "+Integer.toString(couleur)); ; public class Ex17a { public static void main (String []arg) { PointCouleur a,b; a=new PointCouleur(1,2,0); b=new PointCouleur(4,5,255); System.out.println("a "+a); System.out.println("b "+b); a.translate(2.,3.); System.out.println("a "+a); a.x=56; INETRDIT, car main n est pas une méthode de PointCouleur Impossible d utiliser les parties privées x et y d un point couleur sans mutateur Parfois lourd à programmer Champs hérités protected : Utilisation directe des parties protected x et y d un point class Point { Attention à la protection qui peut etre détournée protected double x, double y; On suppose que Point et PointCouleur sont écrites et on ne. dispose pas du source Truand hacke la classe Point par héritage class PointCouleur extends Point { /* Definition des champs d'un point couleur ; on a déjà x et y */ protected int couleur; /* Les nouveaux constructeurs */ public PointCouleur () { x=y=0; couleur=0; // ATENTION : on peut modifier x et y public PointCouleur (double a, double b, int c) { super(a,b); couleur=c; public String tostring(){ return (super.tostring()+ "couleur "+Integer.toString(couleur)); // super, c est la classe mere ; class Truand extends PointCouleur { public void setx(double a) { x=a; // Je modifie x, meme si je n ai pas le code PointCouleur: contraire à la POO public class Ex17 { public static void main (String []arg) {PointCouleur a,b; Truand c; a=new PointCouleur(1,2,0); b=new PointCouleur(4,5,255); System.out.println("a "+a); System.out.println("b "+b); a.translate(2,3); System.out.println("a "+a); //a.x=56; A Eviter, car main n est pas une méthode de PointCouleur c = new Truand(); System.out.println(c); //Vraiment pas recommandé; il suffit de déclarer PointCouleur comme classe finale pout etre tranquille c.setx(8); System.out.println(c); Champs hérités : conserver la protection Pour empecher n importe quel utilisateur de modifier les champs protected, il faut interdire l héritage La classe truand ne peut plus hériter de PointCouleur class Point { protected double x, double y;. final class PointCouleur extends Point { /* Definition des champs d'un point couleur ; on a déjà x et y */ protected int couleur;. ; class Truand extends PointCouleur { // Interdit car classe PointCouleur est final public void setx(double a) { x=a; public class Ex17b { public static void main (String []arg) {PointCouleur a,b; Truand c;.

20 Méthodes héritées : comment s y retrouver Méthodes redéfinies et surchargées : Un objet possède toutes les méthodes de sa classe et de sa classe mère, de grand-mère L appel est comme précédemment : objet.nom_de_methode(parametres); Le nom de la classe mère n apparaît pas : si a est un PointCouleur : a.translate(2,3); Comment trouve t on la bonne méthode? On cherche dans la classe de l objet a : si la méthode est ici (meme nom, meme nombre et type de paramètres), on l execute Sinon On cherche dans la classe mère de a, puis dans la classe grandmère. Mot clé super : désigne la classe mère de l objet ou de la classe. Permet d'exécuter les méthodes dont on hérite exemple : méthode tostring dans la classe PointCouleur Attention au vocabulaire Une méthode est redéfinie dans une hiérarchie lorsqu elle a le même nom et les mêmes types de paramètre Une méthode est surchargée lorsqu elle a le même nom et des types différents de paramètres class Point {.. public void translate(double a,double b) { System.out.println("Methode translate de point"); x += a; y+= b; class PointCouleur extends Point { /* Definition des champs d'un point couleur ; on a deja x et y */ protected int couleur; /* Les nouveaux constructeurs */ public PointCouleur () { super(); couleur=0; public PointCouleur (double a, double b, int c) { super(a,b); couleur=c; public String tostring(){ return ("redefinie : "+super.tostring()+"couleur " +Integer.toString(couleur)); public void translate(double a,double b, int c) { // SURCHARGE : c System.out.println(" Surcharge methode translate "); super.translate(a,b); couleur += c; ; public class Ex18 { public static void main (String []arg) {PointCouleur a,b; a=new PointCouleur(1,2,0); b=new PointCouleur(4,5,255); System.out.println("a "+a); System.out.println("b "+b); a.translate(2,3); System.out.println("a "+a); b.translate(4,8,-1); System.out.println("b "+b); Cas particulier des constructeurs Cas particulier des constructeurs (2) La classe PointCouleur dérive de Point. Donc, lors de la construction d un PointCouleur, il faut qu un constructeur de Point soit appelé, car seul Point est responsable de la construction d un point Donc, un constructeur de PointCouleur appelle toujours un constructeur de Point Soit explicitement super(parametres) : appel explicite en PREMIERE instruction à un constructeur de Point this(parametres) : appel explicite en PREMIERE instruction à un constructeur de PointCouleur Soit implicitement Aucun appel explicite: le compilateur ajoute un appel à super() en tete de constructeur. S il n y a pas de constructeur Point(), erreur d execution import java.util.*; class Point { protected double x,y; public Point (double a, double b) { System.out.println("Point : Constructeur 1"); x = a; y = b; public Point () { System.out.println("Point : Constructeur 2"); x = 0; y = 0; public Point (Point a) { System.out.println("Point : Constructeur 3"); x = a.x; y = a.y; ; class PointCouleur extends Point { protected int couleur; public PointCouleur (double a, double b, int c) { super(a,b); couleur=c; System.out.println("PointCouleur : Constructeur 1"); public PointCouleur () { System.out.println("PointCouleur : Constructeur 2"); couleur=0; public PointCouleur (PointCouleur a) { this(a.x,a.y,a.couleur); System.out.println("PointCouleur : Constructeur 3"); public class Ex19 { public static void main (String []arg) { PointCouleur a,b,c; Scanner clavier = new Scanner(System.in); System.out.printf("Construction a"); a = new PointCouleur(1,2,3); System.out.printf("Construction b"); b = new PointCouleur(a); System.out.printf("Construction c"); c = new PointCouleur();

21 Héritage et Polymorphisme Héritage et Polymorphisme Polymorphisme : même traitement pour des objets de classe différentes Interet : même nom pour des choses identiques (clone(), tostring(), translate() ) Liaison dynamique : si x est une forme, quelle est la vraie méthode qui s applique à x Exemple : surface()? Liaison statique et dynamique Polymorphisme : exemple Polymorphisme : exemple class Forme { protected Point cdg; public Forme() { cdg=new Point(0,0); public Forme(double a, double b) { cdg=new Point(a,b); public Forme(Point a) { cdg=new Point(a); double surface() { System.out.println("Surface de Forme"); return 0; void translate(double a, double b) { System.out.println("Translate de Forme"); cdg.translate(a,b); public String tostring() {return cdg.tostring(); class Cercle extends Forme{ protected double rayon; public Cercle() { super(); rayon=0; public Cercle(Point p, double r) { super(p); rayon=r; // pas cdg=p; public Cercle(double cdgx, double cdgy, double r) { super(cdgx,cdgy); rayon=r; public double surface() { System.out.println("Surface de Cercle"); return (Math.PI*rayon*rayon); public String tostring() { return ("Cercle de Cdg "+cdg.tostring()+" et de rayon "+Double.toString(rayon)); class Rectangle extends Forme { protected double largeur, hauteur; public Rectangle() { super(); largeur=hauteur=0; public Rectangle(Point p, double l, double h) { super(p);largeur=l;hauteur=h; public Rectangle(double cdgx, double cdgy, double l, double h) {super(cdgx,cdgy);largeur=l;hauteur=h; public double surface() { System.out.println("Surface de Rectangle"); return (largeur*hauteur); public String tostring() { return (getclass().getname()+"rectangle "+super.tostring() +" "+hauteur+" "+largeur); public class Ex20 { public static void main (String []arg) { Scanner clavier = new Scanner(System.in); Cercle c1; Rectangle r1; Forme f1, f; c1=new Cercle(2,3,4); r1=new Rectangle(8,9,2,3); f1 = new Forme(6,7); double s1=c1.surface(); System.out.println("Surface de c1 "+s1); double s2=r1.surface(); System.out.println("Surface de r1 "+s2); double s3=f1.surface(); System.out.println("Surface de f1 "+s3); f=c1; System.out.println("Surface de f"+f.surface()); f=r1; System.out.println("Surface de f"+f.surface()); f=f1; System.out.println("Surface de f"+f.surface()); f = new Cercle(5,6,7); System.out.println("Surface de f"+f.surface()); On connaît les classes de c1, r1,f1 Ici, on ne connaît pas la classe réelle de f Quel est le résultat?

22 Polymorphisme : exemple (3) Liaison dynamique, vérification statique Conclusion Liaison statique : lorsque la classe est connue, la fonction surface utilisée est celle de la classe de l objet appelant. JAMAIS EN JAVA Liaison dynamique : lorsque la classe effective est inconnue (f est une forme), le type réel de l objet est déterminé dynamiquement (au moment de l'exécution) avant de chercher la fonction. C est donc la fonction de la classe réelle qui est utilisée, et non celle de la classe visible Attention, c est la notion de conversion entre classe de base et dérivée : un rectangle est une forme, mais l inverse n est pas vrai. Vérifications statiques À la compilation À partir du type déclaré de l objet : la classe de cette objet doit contenir une méthode dont la signature est compatible avec l appel On ne connaît pas le type réel de l objet, donc impossible de vérifier la classe effective contient une méthode correcte Le type de la méthode est définit à la compilation en fonction des paramètres. Si Forme et ses dérivés contiennent les fonctions surface() et surface(int), c est à la compilation que l on définit si on utilisera des méthode surfe ) ou surface(int) Forme a = new Forme(); a.surface(); // La classe Forme doit contenir une méthode surface() Forme b = new Rect(); b.surface(); // La classe Forme doit contenir une méthode surface(), car ici le compilateur ne peut pas savoir que b est un rectangle. Mais il sait que la méthode surface ne prend pas de paramètres b.surface(10); // La classe Forme doit contenir une méthode surface(int), L execution recherche simplement dans la classe réelle de l objet la méthode dont la compilation a définit le choix. Forme a = new Forme(); a.surface(); /l execution execute surface() de Forme Forme b = new Rect(); b.surface(); //l execution execute surface() de Rect b.surface(10); //l execution execute surface(int) de Rect Polymorphisme et classe abstraite Polymorphisme et classe abstraite Peut on déterminer la surface d une forme? Qu est ce qu une forme? Un concept : on ne peut créer un objet de type Forme, puisque qu on ne peut pas le définir complètement La méthode surface est impossible à écrire. Renvoyer 0 est une aberration Que faut il faire? Dans la classe Forme, surface est donc une méthode abstraite Surface() doit exister dans les classes dérivées, mais on ne sait pas l écrire au niveau de forme De ce fait, la classe Forme est une classe abstraite On ne peut pas créer un objet à partir d une classe abstraite, car il n est pas complètement défini Une classe peut hériter d une classe abstraite. Si une classe hérite d une méthode abstraite et que cette méthode n est pas redéfinie dans la classe, alors la classe est obligatoirement abstraite.

23 Polymorphisme et classe abstraite Polymorphisme et classe abstraite abstract class Forme { protected Point cdg; public Forme() { cdg=new Point(0,0); public Forme(double a, double b) { cdg=new Point(a,b); public Forme(Point a) { cdg=new Point(a); abstract double surface(); void translate(double a, double b) { System.out.println("Translate de Forme"); cdg.translate(a,b); public String tostring() {return cdg.tostring(); class Cercle extends Forme{ protected double rayon; public Cercle() { super(); rayon=0; public Cercle(Point p, double r) { super(p); rayon=r; // pas cdg=p; public Cercle(double cdgx, double cdgy, double r) { super(cdgx,cdgy); rayon=r; public double surface() { System.out.println("Surface de Cercle"); return (Math.PI*rayon*rayon); public String tostring() { return ("Cercle de Cdg "+cdg.tostring()+" et de rayon "+Double.toString(rayon)); class Rectangle extends Forme { protected double largeur, hauteur; public Rectangle() { super(); largeur=hauteur=0; public Rectangle(Point p, double l, double h) { super(p); largeur=l;hauteur=h; public Rectangle(double cdgx, double cdgy, double l, double h) {super(cdgx,cdgy);largeur=l;hauteur=h; public double surface() { System.out.println("Surface de Rectangle"); return (largeur*hauteur); public String tostring() { return (getclass().getname()+"rectangle "+super.tostring() +" "+hauteur+" "+largeur); public class Ex21 { public static void main (String []arg) { Scanner clavier = new Scanner(System.in); Cercle c1; Rectangle r1; Forme f1, f; c1=new Cercle(2,3,4); r1=new Rectangle(8,9,2,3); // f1 = new Forme(6,7); double s1=c1.surface(); System.out.println("Surface de c1 "+s1); double s2=r1.surface(); System.out.println("Surface de r1 "+s2); double s3=f1.surface(); System.out.println("Surface de f1 "+s3); f=c1; System.out.println("Surface de f"+f.surface()); f=r1; System.out.println("Surface de f"+f.surface()); // f=f1; System.out.println("Surface de f"+f.surface()); f = new Cercle(5,6,7); System.out.println("Surface de f"+f.surface()); Polymorphisme et classe abstraite Un tableau de formes à dessiner ou à calculer? public class Ex22 { public static void main (String []arg) { Scanner clavier = new Scanner(System.in); Forme [] tab; System.out.println("Nombre de forme "); tab = new Forme [clavier.nextint()]; Interface for (int i=0; i< tab.length; i++) { switch( (int) ((Math.random()+0.5)*2)) { case 1: System.out.println(i+" est un rectangle "); tab[i]=new Rectangle(Math.random(),Math.random(),Math.random(),Math.random()); break; case 2: System.out.println(i+" est un cercle "); tab[i]=new Cercle(Math.random(),Math.random(),Math.random()); break; for (int i=0; i< tab.length; i++) System.out.println("Surface de "+ i+" = "+tab[i].surface()); // Modifions l ordre Forme f = tab[0]; tab[0]=tab[tab.length -1]; tab[tab.length -1]=f; for (int i=0; i< tab.length; i++) System.out.println( i+" = "+tab[i]);

24 Interface Une interface est un ensemble d'opérations utilisée pour spécifier un service offert par une classe. Elle peut être vue comme une classe sans attributs et dont toutes les opérations sont spécifiées mais pas définies à priori (ie vides) Elle peut être vue comme un contrat ou un modèle que doivent offrir toutes les classes qui se réclame (implémente) de cette interface public interface objetgeometrique{ public int surface(); public void translate(int, int ); Héritage Héritage multiple Héritage multiple Héritage multiple : le canard Les animaux sont définis par une classe Les animaux volant, nageant, courant sont eux aussi défini par une classe Une truite est définie par une classe dérivant de nageant Un canard vole Un canard court (pas vite) Un canard nage (mal) animaux Pour respecter la notion d héritage, il faut donc que la classe canard hérite des 3 classes volant, nageant, courant animaux Animaux volant Animaux nageant Animaux courant Animaux volant Animaux nageant Animaux courant Truites Canard Truites

25 Héritage multiple : problème Héritage multiple : problème Une truite hérite des champs Vitesse par Nageant Poids, nom et cdg par Nageant/Animaux Un canard hérite des champs Vitesse par Nageant Poids, nom et cdg par Nageant/Animaux Vitesse par Volant Poids, nom et cdg par Volant/Animaux Vitesse par Courant Poids, nom et cdg par Courantt/Animaux Donc un canard a 3 poids!!! Il faudrait de l héritage partagé (cela existe en C++ avec l heritage virtuel) de manière à ce que la classe Canard n hérite qu une seule fois des champs poids, nom et cdg. Héritage multiple : solution Héritage multiple Solution proposée pour le cas du canard Interdit en JAVA : une classe ne peut hériter que d une seule autre classe mais autorisé en C++ Remplacé par la notion d interface Qu est ce qu une interface en JAVA Précise des comportements (des méthodes) que doivent avoir les objets qui en dérive Ne définit pas ses comportements N a pas de champs (hormis des constantes) Une interface peut hériter d une autre interface

26 Héritage multiple Héritage multiple class Animaux { protected int poids; protected Point cdg; public Animaux( int p) { poids=p; cdg=new Point(0,0); public void deplace(int a, int b) {cdg.translate(a,b); public String tostring() { return ("Animal : poids "+poids+" au point "+cdg); ; interface Volant { void vole(); public String tostring(); ; interface Nageant { void nage(); public String tostring(); ; interface Courant { void coure(); public String tostring(); ; Héritage multiple Héritage multiple class Canard extends Animaux implements Volant, Nageant, Courant { private int vitessecourse=2, vitessenage=5, vitessevole=3; private String nom; public Canard (String name, int p){super(p); nom=new String (name); public String tostring() { return ("Canard "+nom+" "+super.tostring()); public void vole() { super.deplace(vitessevole,vitessevole); public void nage() { super.deplace(vitessenage,vitessenage); public void coure() { super.deplace(vitessecourse,vitessecourse); Class Chien extends Animaux implements Courant { private int vitessecourse=10; private String nom; public Chien (String name, int p){super(p); nom=new String (name); public String tostring() { return ("Canard "+nom+" "+super.tostring()); public void coure() { super.deplace(vitessecourse,vitessecourse); public class Ex23 { public static void main (String []arg) { Canard a; Chien b; a=new Canard("Duffy",10); System.out.println(a); b = new Chien("Medor",50); System.out.println(b); a.vole(); System.out.println(a); a.nage(); System.out.println(a); a.coure(); System.out.println(a); b.coure(); System.out.println(b); // b.vole (); Exemple : Affiche image est un composant qui permet d afficher une image Quand j écris ce composant, je veux qu il soit utilisable pour afficher facilement d autres images. Par exemple, Comment l utiliser sur les classes Fractales que vous avez faites Dans l écriture de AfficheImage, les éléments dont j ai besoin sont la dimension de l image et les pixels de l image. Pour pourvoir afficher, il faut donc que l image possède ces 3 éléments : on pourrait faire de l héritage des classes (Mendel) à afficher MAIS Julia hérite de Fractale, qui hérite de Object. Elle ne peut pas hériter de Imagecalcul. On fait donc de Imagecalcul une interface

27 Les containers Les containers Tableaux, Listes, Ensembles, Listes associatives Les structures de données classiques Listes Accès séquentiel : premier, suivant ==> recherche lente Dynamique : nombre d éléments variable dans le temps Insertion, suppression faciles et efficace Tableaux Accès direct Nombre d éléments fixés à l avance Insertion et suppression lentes Containers : les structures classiques + les principaux algorithmes disponibles Structures linéaires Listes Ensembles, ensembles triés: éléments ne peuvent etre dupliqués Tableaux, Tableaux dynamiques Structures associatives ou dictionnaire =Map Eléments : couple clé-valeur Exemples : (nom, n telephone) Structures plus complexes : tables hachage, arbres binaire, arbres balancés Méthodes et algorithmes Ajout, suppression, appartenance, recherche Tri, Les containers 2 catégories de conteneurs Collection<E> List<E> structure séquentielle, l'utilisateur contrôle l'ordre des éléments. ArrayList<E> implémentation dans tableau de taille variable, accès par indice Vector<E> toujours implémentation dans tableau (plus vieux) LinkedList<E> implémentation par double chaînage et pointeurs Queue<E> FIFO, file à priorité Set<E> (pas deux éléments identiques) HashSet<E> ensemble non ordonné, impléménté par table de hachage TreeSet<E> ensemble ordonné implémenté par arbre binaire de recherche équilibré (red black tree) Map<K,V> ensemble associatif HashMap<K,V> les clés sont un ensemble non ordonné TreeMap<K,V> : item les clés sont un ensemble ordonné Classe concrete Interface

28 Quelques méthodes communes aux collections Quels containers choisir? Collection<E> boolean isempty(); int size(); boolean add(e elt); // vrai s il est effectivement ajouté boolean remove(object o); // vrai s il est effectivement retiré void clear(); boolean contains(object o); Pour l instant, utiliser contains et remove avec le profil : boolean remove(e elt); boolean remove(e elt); Méthodes static de la classe outil Collections : des algo génériques void Collections.sort(List<E>); E Collections.max(Collection<E>); E Collections.min(Collection<E>); void Collections.reverse(List<E>); En général, on sait si on a besoin d une liste, d un tableau, d un ensemble, d un ensemble trié, d un dictionnaire, d un dictionnaire trié, d un arbre binaire de recherche. On définit un objet du type de l interface la plus générique : Collection On crée ensuite l objet réel du type voulu : Linkedlist : liste séquentielle classique avec pointeur ArrayList : liste implantée par un tableau avec accès par index rapide. On peut aussi considérer que c est un tablleau dont la taille peut varier dans le temps. Vector, à peu pres identique à ArrayList Queue (FIFO) : file!!! HashSet : ensemble implémenté par une table de hashage Ensemble : une seule occurrence de chaque élément autorisé Accès aux éléments rapide TreeSet, : ensemble implémenté avec un arbre binaire de recherche, trié en permanence HashMap : ensemble associatif (clé valeur) TreeMap : Ensmble associatif trié en permanence sur la clé Accès aux éléments rapide en log(n) Aller voir l API pour plus!!! Les collections : les méthodes générales L interface list : les méthodes Méthodes de la classe collections boolean isempty() : test si le conteneur est vide int size() : renvoi le nombre d éléments du conteneur boolean add(object) : ajoute un élément au conteneur boolean addall(collection) : ajoute tous les éléments d une collection au conteneur boolean remove(object) : supprime un élément au conteneur boolean removeall(collection) : supprime tous les éléments d une collection du conteneur void clear() : supprimer tous les éléments du conteneur boolean contains(object) : appartenance d un élément au conteneur Object [] toarray() : transforme une collection en tableau Iterator iterator() : définit un itérateur pour le parcours du conteneur Methodes boolean add(int index, Object o) : ajoute un élément d indice index au conteneur Object get(int index) : obtient l objet à l indice index du conteneur boolean remove(int index) : supprime un élément d indice index au conteneur boolean removeall(collection) : supprime tous les éléments d une collection du conteneur LinkedList Implantation par une liste doublement chainée Accès direct au début et à la fin Accès séquentiel aux éléments (attention au cout des fonctions utilisant un indice) Méthodes supplémentaires addfirst(), addlast(),, getfirst(), getlast(), removefisrt(),, removelast() Méthodes statiques : algorithmes génériques void sort(list) Object max(collections), Object min(collections) void reverse(list) void rotate(collection, distance) ArrayList Implantation par un tableau Accès direct à tous les éléments Insertion et suppression obligent à décaler les éléments

29 Collection : utilisation et iterateur Exemple : liste de points Déclarer une collection Collection<Classe> col; Créer une collection vide (classe non abstraite : linkedlist, ArrayList, Vector, ) col = new LinkedList<Classe>(); Ajouter des éléments à la collection col.add(mon_nouvel_element); Utiliser les algo génériques si besoin Collections.sort(col); public class Ex24 { public static void main (String []arg) { Collection<Point> liste; // Definir une collection liste = new LinkedList<Point>(); // Créer la liste de point Point a = new Point(3,3); // Ajout des points dans la liste liste.add(a); liste.add(new Point(2,2)); liste.add(new Point(1,1)); Parcourir ou traiter les collections : passer d un élément à un autre, en utilisant un code générique ==> la classe iterator permet le parcours d une collection quelconque; Déclarer un iterateur : Iterator<Classe> p; Créer un iterateur SUR la collection à parcourir (methode iterator() de la classe Collections) p= col.iterator(); Parcourir la collection : p.hasnext() : y a t il encore des éléments dans la collection? Classe o; o = p.next() : retourne le prochain élément de la collection // Parcours de la liste pour affichage for (Iterator<Point> p=liste.iterator(); p.hasnext(); ) { Point b=p.next(); // Remarquer le cast vers un Point System.out.println("Point = "+b); Exemple : tri de liste de points class PointComparable extends Point implements Comparable { public PointComparable (double a, double b) { super(a,b); public PointComparable () { super(); public PointComparable (PointComparable a) { super((point) a); public int compareto(object b) { Point a = (Point)b; if (getx() < a.getx()) return -1; else if (getx() >a.getx()) return 1; else if (gety() < a.gety()) return -1; else if (gety() >a.gety()) return -1; else return 0; public class Ex24b { // C est le meme code que precedement public static void main (String []arg) { Collection<PointComparable> liste; liste = new LinkedList<Forme>(); PointComparable a = new PointComparable(3,3); // Ajout des points dans la liste liste.add(a); liste.add(new PointComparable(2,2));liste.add(new PointComparable(1,1)); // Parcours de la liste pour affichage for (Iterator<PointComparable> p=liste.iterator(); p.hasnext(); ) { PointComparable b; b= p.next(); // Remarquer l absence de cast vers un Point System.out.println("Point = "+b); Collections.sort((List) liste); // methode de tri générique System.out.println("Apres le tri"); for (Iterator <PointComparable> p=liste.iterator(); p.hasnext(); ) System.out.println("Point = "+ (PointComparable) p.next()); Exemple : liste de Formes public class Ex25 { public static void main (String []arg) { Scanner clavier = new Scanner(System.in); Collection<Forme> liste; liste = new LinkedList<Forme> (); liste.add(new Cercle(1,2,3)); liste.add(new Cercle(4,5,6)); liste.add(new Rectangle(9,8,7,6)); for (Iterator <Forme> p=liste.iterator(); p.hasnext(); ) System.out.println("Forme = "+ p.next()); // remarquer le cast en Forme : on doit indiquer que l object // est une forme, mais le polymorphisme de l affichage permet // la liaisoon dynamique for (Iterator <Forme> p=liste.iterator(); p.hasnext(); ) { Forme a= p.next(); System.out.println("surface de = "+a.surface());

30 Généricité : tableau dynamique de Formes Parcourir une association (map) public class Ex26 { public static void main (String []arg) { Scanner clavier = new Scanner(System.in); Collection <Forme> tab; tab = new ArrayList<Forme>(); // La seule chose à changer!!!!! tab.add(new Cercle(1,2,3)); tab.add(new Cercle(4,5,6)); tab.add(new Rectangle(9,8,7,6)); for (Iterator<Forme> p=tab.iterator(); p.hasnext(); ) System.out.println("Forme = "+ p.next()); // remarquer le cast en Forme : on doit indiquer que l object // est une forme, mais le polymorphisme de l affichage permet // la liaisoon dynamique for (Iterator <Forme> p=liste.iterator(); p.hasnext(); ) { Forme a= p.next(); System.out.println("surface de = "+a.surface()); Les entrées sont des couples clés-valeur (K,V) " différents parcours possibles Des méthodes permettent d obtenir : Ensemble des clés public Set<K> keyset (); Ensemble des valeurs public Collection<classe> values (); Ensemble des entrées public Set<Map.Entry<K,V>> entryset (); Map.Entry<K,V> Type des objets contenus dans l'ensemble retourné par entryset Enregistrement à 2 champs (paire), l'un de type K, l'autre de type V Accès aux champs par : public K getkey (); public V getvalue Parcourir une association (map) : exemple // déclaration et création d une association vide TreeMap <String, String > map = new TreeMap <String, String >(); // remplissage map.put(" rouge ", "... définition du mot rouge..."); map.put(" vélo ", "... définition du mot vélo..."); map.put(" artichaut ", "... définition du mot artichaut... "); // parcours de l ensemble des mots (= les clés) : System.out.print("ensemble des mots :"); for (String mot: map.keyset()) System.out.print(mot + ", "); // parcours de l ensemble des définitions (= les valeurs) : System.out.print(«\nensemble des définitions :"); for (String def: map.values()) System.out.println(def. tostring () + "; "); MAP : tableau associatif : histogramme public class Ex29 { public static void main (String []arguments) { Map<String, Integer> m = new HashMap<String, Integer>(); for (String a : arguments) { Integer freq = m.get(a); m.put(a, (freq == null)? 1 : freq + 1); System.out.println("Nombre de mots differents "+m.size()); System.out.println("Histogramme des mots :"+m); // parcours de l'ensemble des paires (cle, valeur) System.out.println("\nensemble des paires (mot,définition) : "); Iterator<Map.Entry<String,String>> itassoc = map.entryset().iterator(); while (itassoc.hasnext()) { Map.Entry<String,String> e = itassoc.next(); String mot = e.getkey(); String def = e.getvalue(); System.out.println(mot + " est défini par : " + def);

31 JAVA 1.5 : la généricité en plus Généricité En Java 1.5 Généricité : ne pas tenir compte des objets réellement manipulés pour définir les structures de données et les algorithmes Exemple : supprimer le cast lors du parcours et de la récupération de l élément. Faire des listes de qqchoses valable pour tous les qqchoses Définir les structures (classes) ou méthodes en fonction d un type paramétrique Exemple : des piles de n importe quoi class Pile<E> { private int nb; // Nombre d elements utilises private E[] tab; // Attention : pas de creation des tableaux generiques ==> les passer dans le constructeur t=new E[2]; est interdit public Pile(E[] tableau) { tab = tableau; nb=0; ; public void empiler(e e) { if (nb < tab.length) tab[nb++] = e; public E depiler() { return (nb>0?tab[--nb]:null); public void afficher() { for (E e : tab) System.out.println(e); public class Ex27 { // pile d entiers et pile de point public static void main (String []arguments) { Pile<Integer> p1= new Pile<Integer>(new Integer[10]); p1.empiler(8); p1.empiler(10); p1.afficher(); Pile<Point> p2 = new Pile<Point>(new Point [8]); Point a = new Point(8,9); p2.empiler(a); p2.empiler(new Point()); p2.empiler(new Point(1,2)); p2.afficher(); Exemple : liste de Formes en java 1.5 # Remarquer # la boucle for # L absence de cast Traitement des erreurs public class Ex28 { public static void main (String []arg) { Collection<Forme> liste; // Collection de Forme liste = new ArrayList<Forme>(); // tableau de Forme liste.add(new Cercle(1,2,3)); liste.add(new Cercle(4,5,6)); liste.add(new Rectangle(9,8,7,6)); System.out.println("Affichage par un foreach"); for ( Forme a : liste) System.out.println(a); // Pratique, n est il pas? System.out.println("Affichage de la surface par iterateur"); for (Iterator<Forme> p=liste.iterator(); p.hasnext(); ) { Forme a= p.next(); // Pas de conversion utile System.out.println("surface de = "+a.surface()); Les exceptions

32 Exceptions Exceptions : classes particulières Classes et Méthodes permettant de décrire ce qui doit se passer en cas d'erreur Séparation du code normal du cas "exceptionnel» Traitement de l erreur pas obligatoirement à proximité de l erreur Propagation facile de l'erreur à travers les sous programmes Regroupement possible des exceptions Chaque méthode déclare les exceptions qu elle est susceptible de déclencher Une exception est créée par Le système : IOException pour les ES, ArrayIndexOutOfBoundsException par exemple Vos méthodes : Pour lancer une exception vous même: throw new MaclasseException(parametres) Les exceptions sont des objets dont les classes dérivent de la classe Exception Throwable On y met les informations utiles au gestionnaire d exceptions ie les méthodes qui vont gérer l erreur. Les exceptions sont classées en 3 classes Error : exceptions pour les erreurs systèmes comme pas assez de mémoire. En général, on ne peut rien faire, sinon quitter RuntimeException : erreur classique, mais le compilateur n oblige pas l utilisateur à déclarer que ses méthodes peuvent déclencher une exception. Pratique, mais des vérifications en moins. Toutes les exceptions arithmétiques, erreurs d indice de java sont de ce type par exemple. Exception : erreur classique, mais le compilateur oblige l utilisateur à déclarer que sa méthode peut déclencher cette exception par le mot clé throws. Les exceptions générées par les Entrées sorties par exemple. Exceptions : Transmettre une exception Exceptions : Capturer une (ou plus) exception Lorsqu une exception apparaît, on peut soit Retransmettre (throws) ou jeter l exception : ignorer et retransmettre l exception à la fonction appelante. throws permet de dire qu une méthode peut déclencher une exception. C est obligatoire public static void main(string[] args) throws IOException { int r; FileReader in = new FileReader(new File("rgb.txt")); while ((r = in.read())!= -1) System.out.println(" Caractere lu"+r); in.close(); Capturer et traiter l exception ( try.. Catch) Capturer et traiter l exception ( try.. Catch) Ouverture d un fichier passé en paramètre de commande et affichage de ce fichier public static void main(string[] args) try { int r; FileReader in = new FileReader(new File (args[0])); while ((r = in.read()) ==-1) System.out.println(" Caractere lu"+r); catch (FileNotFoundException e) { // Fichier pas existant System.out.println("Pas de fichier "+e); e.printstacktrace(); System.exit(1); catch (IOException e) { // Autre erreur d E/S System.out.println("Autre erreur");

33 Exceptions : Capturer une exception Exceptions : lancer une exception Beaucoup d exceptions sont déjà possibles en java Pour lancer une exception, on utilise le mot clé throws suivi de la création de l objet dont la classe est celle de l exception voulue Ne pas oublier de déclarer que la méthode en question est susceptible de lancer une exception par le mot clé throws dans le prototype class Except2 { static int factorielle(int n) throws Exception { int res = 1; if (n<0){ throw new Exception(); for(int i = 1; i <= n; i++) res = res * i; return res; public static void main (String [] args) { int x; System.out.println("Entrez un nombre (petit):"); Scanner clavier=new Scanner(System.in); x = clavier.nextint(); try { System.out.println(factorielle(x)); catch (Exception e) System.out.println("Factorielle de " +x+" pas definie!"); Exceptions : créer votre exception Exceptions : gérer une exception Beaucoup d exceptions sont déjà possibles en java. Rare de créer une exception Gestion des exceptions pour assurer que les Pointspositifs ont bien des coordonnées positives Créer une classe Monexception dérivant de RuntimeException Détection et lancement des exceptions dans les mutateurs setxexception(), setyexception() La classe MonException stocke le point dans son état avant la tentative de coordonnées négatives ainsi que la valeur négative. Le traitement est simplement l affichage du point et de la valeur aberrante class Monexception extends RuntimeException { private Point a; double valeur; public Monexception() { public Monexception(Point x, double val) { a=x; valeur=val; public String tostring() { return("exception positif "+a+"valeur non positive "+valeur); class Pointpositif extends Point { // nombres positifs uniquement public Pointpositif(double a, double b) {super(a,b); public void setx (double a) { if (a>=0) super.setx(a); else throw new Monexception(this,a); ; public void translate(double a, double b) { setx(getx()+a); sety(gety()+b); Dans cet exemple, la fonction f fait une translation, ne gère pas les exceptions et les retransmet à la fonction qui l a appelée (main) qui devra traiter l erreur La fonction g fait une translation et gère les exceptions. La gestion de l erreur se limite ici à afficher cette erreur public class Ex38b { // f ne gère pas les exceptions, g les gère // Ici le throws n est pas obligatoire, car Monexception est Runtime public static void f(pointpositif a) throws Monexception { System.out.println("Entree dans f qui ne gere pas les exceptions"); a.translate(-3,-5); System.out.println("Sortie de f qui ne gere pas les exceptions"); // Remarque : on ne passe pas par sortie si exception!!! public static void g(pointpositif a) { System.out.println("Entree dans g qui gere les exceptions"); try { a.translate(-3,-5); catch (Monexception e) { // Que faire si point negatif?? System.out.println("Erreur due a une exception dans g"); System.out.println("Les appels qui ont genere cette exception :"); e.printstacktrace(system.out);

34 Exceptions : créer une exception Exceptions : créer une exception public static void main (String []arg) {Pointpositif c,a,b; Scanner clavier=new Scanner(System.in); a = new Pointpositif(1,2); b = new Pointpositif(1,2); c = new Pointpositif(1,2); try { a.translate(-3,0); System.out.println("a "+a); catch (Monexception e) { System.out.println("Les appels qui ont genere cette exception :"); e.printstacktrace(system.out); clavier.nextline(); try { // Obligatoire pour utiliser f(), sauf si main transmet exceptions f(b); catch (Monexception e) { System.out.println("Les appels qui ont genere cette exception :"); e.printstacktrace(system.out); clavier.nextline(); g(c); Sérialisation Sérialisation Sérialisation : Comment stocker et relire facilement des objets dans un fichier ou un flot Importer java.io.* Interface Serializable Aucune méthode, indique seulement la possibilité de sérialisation Cela implique que des informations sur la classe de l objet sont stockés dans le flux Stocker et relire des objets dans des flots (disques ou réseau) Attention : les objets «internes» doivent aussi être sérialisés Voir la classe Point pour le champ cdg dans l exemple ci apres. Rien à faire : on utilise le flux ObjectOutputStream et la méthode writeobject(object a) pour écrire ObjectOutputStream fic=new ObjectOutputStream(new FileOutputStream("Forme.dat")); fic.writeobject(a); le flux ObjectIntputStream et la méthode readobject(object a) pour lire

35 Sérialisation Serialisation class Point implements Serializable {. // comme précédemment abstract class Forme implements Serializable {. // comme précédemment class Point extends Forme{. // comme précédemment class Rectangle extends Forme{. // comme précédemment Exemple : liste de formes On crée une liste de formes On y met 2 cercle et 1 rectangle puis un autre cercle On les stocke dans un fichier : D abord le nombre de forme Ensuite, on parcours la liste pour les stocker une par une On relit ce fichier à l aide d une deuxième liste public class Ex39 { public static void main (String []arg) { Collection<Forme> liste = new ArrayList<Forme>(); // tableau de Forme liste.add(new Cercle(1,2,3)); liste.add(new Cercle(4,5,6)); liste.add(new Rectangle(9,8,7,6)); liste.add(new Cercle(10,11,12)); for ( Forme a : liste) System.out.println(a); // Pratique, n est il pas? System.out.println("Ecriture fichier des formes"); try { ObjectOutputStream fic=new ObjectOutputStream(new FileOutputStream("Forme.dat")); fic.writeobject(new Integer(liste.size())); // Nombre de formes for (Forme a : liste) fic.writeobject(a); // Ecriture des formes fic.flush(); fic.close(); // Fermeture du flux catch (java.io.ioexception e) { System.out.println("Erreur"); Serialisation Serialisation : encore mieux System.out.println("Relecture des formes"); Collection<Forme> liste2 = new ArrayList<Forme>(); // tableau de Forme try { ObjectInputStream fic=new ObjectInputStream(new FileInputStream("Forme.dat")); Integer nb = fic.readobject(); // Lecture du nombre de Forme for (int i=0; i<nb; i++) { liste2.add((forme) fic.readobject()); // Lecture, Ajout dans liste2 catch (IOException e) {System.out.println("Erreur : E/S"); catch (ClassNotFoundException e) {System.out.println("Forme inexistante"); for ( Forme a : liste2) System.out.println(a); // Affichage de la liste2 Une liste est déjà sérialisable On stocke directement la liste dans un fichier : On relit ce fichier à l aide d une deuxième liste public class Ex39 { public static void main (String []arg) { Collection<Forme> liste = new ArrayList<Forme>(); // tableau de Forme liste.add(new Cercle(1,2,3)); liste.add(new Cercle(4,5,6)); liste.add(new Rectangle(9,8,7,6)); liste.add(new Cercle(10,11,12)); for ( Forme a : liste) System.out.println(a); // Pratique, n est il pas? System.out.println("Ecriture fichier des formes"); try { ObjectOutputStream fic; fic = new ObjectOutputStream(new FileOutputStream("Forme.dat")); fic.writeobject(liste); fic.flush(); fic.close(); // Fermeture du flux catch (java.io.ioexception e) {System.out.println("Erreur");

36 Serialisation System.out.println("Relecture des formes"); Collection<Forme> liste2 = new ArrayList<Forme>(); // tableau de Forme try { ObjectInputStream fic; fic = =new ObjectInputStream(new FileInputStream("Forme.dat")); liste2=(arraylist<forme>) fic.readobject()); // Lecture des forme et catch (IOException e) {System.out.println("Erreur : E/S"); catch (ClassNotFoundException e) {System.out.println("Erreur : classe inexistante"); for ( Forme a : liste2) System.out.println(a); // Affichage de la liste2 JAVA Interface Graphique SWING SWING Construire une IG en pratique Du LEGO Méthode de construction : Une plaque de base On ajoute des briques prédéfinies par dessus Construire une fenetre de base (JFrame, JDialog, JApplet ) Construire un conteneur intermédiaire : Jpanel, JScrollPane, JSplitPane, Ajouter des objets graphiques ou d autres conteneurs intermédiaires dans le conteneur intermédiaire Ajouter le conteneur intermédiaire à la fenetre de base Visualiser la fenetre de base (methode setvisble(true)) Plaque de base : Composants de haut niveau Fenêtre de base : objets Jframe, Jwindow, Jdialog, Objets JApplet Briques prédéfinies : composants ou contrôle boutons, textfield,etc.. On peut aussi construire de nouveaux objets graphiques à partir (héritant) d'autres objets sous forme de classe

37 Swing : exemple 1 Swing : exemple 1 bis import javax.swing.*; import java.awt.*; class Deuxboutons { private JFrame frame; JButton button; JLabel label; public Deuxboutons(){ frame = new JFrame("Exemple"); // La fenetre de base et son titre JPanel pane = new JPanel(); // Le panneau qui contiendra les boutons button = new JButton("Mon bouton"); //Le bouton label = new JLabel("Du texte"); // Zone texte pane.add(button); // Ajout du bouton au Panel pane.add(label); // Ajout de la zone de texte // frame.getcontentpane().add(pane); Avant java 1.5 frame.add(pane); // Depuis java 1.5, un raccourci frame.pack(); // Dimensions préférées frame.setvisible(true); // Sinon, pas visible public class Ex30 { public static void main(string[] args) { new Deuxboutons(); import javax.swing.*; import java.awt.*; class Deuxboutons extends JFrame { private JButton button; JLabel label; public Deuxboutons(){ super("ex31 : premiere interface"); JPanel pane = new JPanel(); button = new JButton("Mon bouton"); label = new JLabel("Du texte"); pane.add(button); pane.add(label); add(pane); pack(); setvisible(true); public class Ex31 { public static void main(string[] args) { new Deuxboutons(); SWING Apports de SWING Couche logicielle indépendante de la plate forme physique Modèle-Vue-Contrôleur modèle : les données à afficher vue : représentation graphique de ces données contrôleur : traite des interactions du composant avec l utilisateur avantages meilleure modularité plusieurs vues distinctes pour un même modèle possibilité de modifier l implémentation d un modèle (optimisation, réorganisation,...) sans rien changer aux vues et aux contrôleurs. Look and Feel modifiable, internationalisation, Composants de premier niveau fille de la fenêtre de fond : objets Jframe, JFenetre, JDialog, JApplet Nouveaux objets et capacité accrue Image dans les boutons Gestion des bordures de fenêtres fenêtres de formes non rectangulaires Double buffering Jlist, Jtree, JTable Copier/coller java.awt.datatransfert.dataflavor Timers Filechooser,Colorchooser Java2D API Fenêtre texte JTextField, JtextArea : idem AWT JPasswordField : masquée JEditorPane, JTextPane : editeur de texte complet (plusieurs polices simultanées..)

38 SWING : la hiérarchie classique d'une IG SWING : Modèle objet La fenêtre principale (top-level) : JFrame, ou JDialog ou JApplet Contient un root pane : en général, inutilisé par le programmeur, qui contient glass pane : transparent et invisible sauf si sa méthode paint est définie. Il peut intercepter alors tous les événements du root pane layered pane : ensemble de couches, comprenant le Content Pane, utilisé par exemple pour les pop-up, le drag and drop, etc.. permettant et positionner les composants et d afficher par ordre de profondeur. Par defaut, contient la barre de menu et le ContentPane, sans superposition barre de menu : position de la barre de menu qui sera créée par JMenuBar et mise en place par setjmenubar Content Pane : utilisé par la plupart des applications et applets obtenu par GetContentPane() contient les composants, sauf la barre de menu facilite le placement des composants : il contient le gestionnaire de positionnement Le sous système graphique est objet chaque composant s'affiche chaque composant provoque l'affichage des composants qu'il contient Exemple : Ex30.java La fenêtre top level JFrame s'affiche Le contentpane affiche un fond opaque Le JPanel s'affiche (par dessus le précédent) : le fond (paintcomponent()) les bordures(paintborder()) Il demande à son contenu de s'afficher(paintchildren()) Le JButton "Mon bouton" s'affiche par paintcomponent() le fond le texte Le Jlabel "Du texte" s'affiche par paintcomponent() le texte Pour provoquer l'affichage, utiliser repaint() : affiche tout le composant repaint(int,int,int,int) : affiche le rectangle JButton Mon Bouton JFrame getcontentpane() JPanel Jlabel Du Texte SWING : les contrôles de base SWING : les objets de base import javax.swing.*; import java.awt.*; class Testswing extends JFrame {super("les controlesf de base"); public Testswing(){ JPanel pane = new JPanel(); pane.add(new JButton("Mon bouton")); pane.add(new JLabel("Du texte")); pane.add(new JRadioButton("Bouton Radio")); pane.add(new JCheckBox("Case a cocher")); String [] texte = { "aa","bb","cc","dd"; pane.add(new JComboBox(texte)); pane.add(new JSlider(JSlider.HORIZONTAL,0,5,3)); pane.add(new JTextField(5)); getcontentpane().add(pane); pack(); setvisible(true); public class Ex32 { public static void main(string[] args) { new Testswing(); Les boutons Classique : JButton JCheckBox pour les case à cocher JRadioBouton pour un ensemble de bouton JMenutItem pour un bouton dans un menu JCheckBoxMenuItem JRadioButtonMenuItem JToggleButton Super Classe de CheckBox et Radio JComboBox : composant permettant de faire un choix parmi plusieurs propositions JList : liste à choix multiple en colonne JSlider : saisie et visualisation graphique d un nombre entre 2 valeurs JTextField: permet d écrire du texte dans une zone monoligne JTextArea: permet d écrire du texte dans une zone multiligne JLabel: permet d afficher du texte ou une image JTree : affiche une arborecense JFileChooser, JColorChooser JProgressBar

39 Comment positionner les composants Positionnement dans une IG Pas de positionnement statique et fixé à l avance Disposition et dimensionnement des objets dans une IG Effectué à l'initialisation et au redimensionnement dépend de l'ordre de création de la politique de placement du containeur flowlayout : ligne/ligne borderlayout : position du composant défini par les points cardinaux (4+1) gridlayout : grille (un par case) remplie de gauche à droite, de haut en bas cardlayout : composants visibles séquentiellement (comme les onglets) gridbaglayout : grille dont les composants peuvent occuper plusieurs cases methode setlayout(new borderlayout) : positionnement de la politique pack() oblige les composants à prendre leur taille "préférée" composant visible ou non : setvisible() Disposition et dimensionnement absolu : possible, mais à éviter Swing : Borderlayout Swing : Gridlayout import javax.swing.*; import java.awt.*; class TestBorder extends JFrame { public TestBorder(){ super("test du Border"); setdefaultcloseoperation(jframe.exit_on_close); JPanel pane = new JPanel(new BorderLayout()); pane.add(new JButton("Mon bouton"),borderlayout.north); pane.add(new JLabel("Dutexte",JLabel.CENTER),BorderLayout.SOUTH); pane.add(new JRadioButton("Bouton Radio"),BorderLayout.EAST); pane.add(new JCheckBox("Case a cocher"),borderlayout.west); String [] texte = { "aa","bb","cc","dd"; pane.add(new JComboBox(texte),BorderLayout.CENTER); getcontentpane().add(pane); pack(); setvisible(true); public class Ex33 { public static void main(string[] args) { new TestBorder(); import javax.swing.*; import java.awt.*; class TestGrid extends JFrame { public TestGrid(){ super("test du grid"); setdefaultcloseoperation(jframe.exit_on_close); JPanel pane = new JPanel(new GridLayout(3,2)); pane.add(new JButton("Mon bouton")); pane.add(new JLabel("Du texte",jlabel.center)); pane.add(new JRadioButton("Bouton Radio")); pane.add(new JCheckBox("Case a cocher")); String [] texte = { "aa","bb","cc","dd"; pane.add(new JComboBox(texte)); pane.add(new JSlider(JSlider.HORIZONTAL,0,5,3)); pane.add(new JTextField(5)); getcontentpane().add(pane); pack(); setvisible(true); public class Ex34 { public static void main(string[] args) { new TestGrid();

40 Swing : Boxlayout import javax.swing.*; import java.awt.*; Structurer une interface : description hiérarchique class TestBox extends JFrame { public TestBox(){ super("test de BoxLayout "); setdefaultcloseoperation(jframe.exit_on_close); JPanel pane = new JPanel(); pane.setlayout(new BoxLayout(pane,BoxLayout.Y_AXIS)); pane.add(new JButton("Mon bouton")); pane.add(new JLabel("Du texte",jlabel.center)); pane.add(new JRadioButton("Bouton Radio")); pane.add(new JCheckBox("Case a cocher")); String [] texte = { "aa","bb","cc","dd"; pane.add(new JComboBox(texte)); pane.add(new JSlider(JSlider.HORIZONTAL,0,5,3)); pane.add(new JTextField(5)); getcontentpane().add(pane); pack(); setvisible(true); public class Ex35 { public static void main(string[] args) { new TestBox(); Structurer l interface Créer un nouveau composant pour dessiner import javax.swing.*; import java.awt.*; // L'ordre d'inclusion n'a pas d'importance, les ajouts sont répercutés immédiatement class Pandanspan extends Jframe { public Pandanspan () { super("hierarchique"); setdefaultcloseoperation(jframe.exit_on_close); JButton button1 = new JButton("bouton1"); JLabel label1 = new JLabel("texte1"); JLabel label2 = new JLabel("texte2"); JButton button2 = new JButton("bouton2"); JButton button3 = new JButton("bouton3"); JButton button4 = new JButton("bouton4"); JButton button5 = new JButton("bouton5"); JPanel pane1 = new JPanel(new BorderLayout()); //layout spécifié à la construction JPanel pane2 = new JPanel(new BorderLayout()); JPanel pane3 = new JPanel(new BorderLayout()); pane1.add(button1, BorderLayout.EAST); pane1.add(label1, BorderLayout.WEST); pane1.add(pane2, BorderLayout.CENTER); pane2.add(button2, BorderLayout.NORTH); pane2.add(button3, BorderLayout.SOUTH); pane2.add(pane3, BorderLayout.CENTER); pane3.add(button4, BorderLayout.EAST); pane3.add(button5, BorderLayout.WEST); pane3.add(label2, BorderLayout.CENTER); getcontentpane().add(pane1, BorderLayout.CENTER); pack(); setvisible(true); public class Ex36 { public static void main(string[] args) { new Pandanspan(); La classe Graphics est une classe abstraite permettant de dessiner des formes simples et des chaines de caractères D etre indépendant du support réel :carte graphique, imprimante, image en mémoire contient des informations sur : Les couleurs d affichage, de fond, le type d opération de dessin (xor) Le composant abstrait dans lequel on dessine Pour dessiner dans une fenetre: On crée un nouveau composant d affichage dérivant de JPanel et on redéfinit les méthodes PaintComponent(Graphics g) pour l affichage PaintBorder pour les bordures public void paintcomponent(graphics g) { super.paintcomponent(g); //Le fond g.drawrect(10, 20, 99, 199); g.setcolor(color.yellow); // Dessine un rectangle jaune g.fillrect(10+1, ,98,198);

41 Dessiner une liste de forme On utilise la liste de forme (rectangle et cercle) Ces classes sont modifiées pour avoir une méthode dessiner sur un élément de type Graphics. Chaque classe sait quel dessin elle doit faire On crée un nouveau composant AfficheForme qui contient la liste à afficher Cette liste est passée à la construction de Afficheforme AfficheForme dérive de JPanel et sa méthode PaintCOmponent explicite le dessin à faire ie dessiner chaque forme de la liste abstract class Forme { protected Color couleur;. class Cercle extends Forme{ public void dessine(graphics g) { g.setcolor(couleur); g.filloval(cdg.getx(),cdg.gety(),rayon,rayon); ; class Rectangle extends Forme {. public void dessine(graphics g) { g.setcolor(couleur); g.fillrect(cdg.getx(),cdg.gety(),largeur, hauteur); ; Dessiner une liste de forme class AfficheForme extends JPanel { // nouveau composant affichant une liste de forme Collection<Forme> liste; public AfficheForme( Collection<Forme> l) { liste=l; public void paintcomponent(graphics g) { super.paintcomponent(g); for ( Forme a : liste) a.dessine(g); public class Ex37 { public static void main (String []arg) { /* Creation de la liste de formes */ Collection<Forme> liste= new LinkedList<Forme>(); liste.add(new Cercle(10,20,30,Color.yellow)); liste.add(new Cercle(100,100,30,Color.green)); liste.add(new Rectangle(150,10,50,80,Color.magenta)); /* Creation de la fenetre et affichage par le composant Afficheforme */ JFrame f = new JFrame("Paint"); f.getcontentpane().add(new AfficheForme(liste)); f.setsize(250,200); f.setvisible(true); f.repaint(); Graphics : couleurs, pinceaux Image Tous les attributs classiques de dessin sont disponibles à travers les classes et methodes de Java Gestion des couleurs, épaisseur, etc. : setpaint, setstroke Remplissage : classes Color, GradientPaint, TexturePaint,. AWT : getimage, drawimage myimage = Toolkit.getDefaultToolkit().getImage(filenameOrURL); g.drawimage(myimage, 0, 0, this); SWING : une image est simplement affichée dans un JPanel, un JButton interface icons Classe ImageIcon : implemente icons, lit du GIF ou JPEG, mais aussi des BufferedImage (!= Image) la fonction painticon(component,graphics,int,int) personnalise l'affichage d'une image si besoin (assez rare) Exemple : classe Ex2 au début Transformations affines AffineTransform textat = new AffineTransform(); textat.translate(0,(float)texttl.getbounds().getheight()); Java2D : On utilise la classe BufferedImage qui définit de nombreux outils de rendu, de filtrage, etc ImageIO.read(File), ImageIO.write(BufferedImage, "Format",File) g.drawimage(.) : affiche l image, applique des filtres

42 Afficher une image dans un composant (1) Afficher une image dans un composant (2) class AfficheImage extends JLabel { private ImageIcon icon=null; public AfficheImage(String im) { updateimage(im); public void updateimage(string im) { icon=new ImageIcon(im); seticon(icon); // Creation et affichage de l image class AppliAffiche extends JFrame { private AfficheImage affiche =null; public AppliAffiche(String im) { getcontentpane().add(affiche=new AfficheImage(im)); pack(); setvisible(true); public void suite(string im) { affiche.updateimage(im); pack(); public class Ex40 { public static void main (String []arg) { Scanner clavier = new Scanner(System.in); if (arg==null) {System.out.println("Usage : java Ex40 im1 im2..."); else { AppliAffiche p = new AppliAffiche(arg[0]); System.out.println("Photo suivante"); clavier.nextline(); for (int i=1; i<arg.length; i++) { p.suite(arg[i]); System.out.println("Photo suivante"); clavier.nextline(); class AfficheImage extends JPanel{ private BufferedImage img = null; public AfficheImage(BufferedImage i) { img=i; public void updateimage(bufferedimage i) { img=i; repaint(); public void paintcomponent(graphics g) { g.drawimage(img, 0, 0, null); public Dimension getpreferredsize() { return (img==null)? new Dimension(100,100): new Dimension(img.getWidth(null), img.getheight(null)); class AppliAffiche extends JFrame { private AfficheImage affiche =null; public AppliAffiche(BufferedImage im) { getcontentpane().add(affiche=new AfficheImage(im)); pack(); setvisible(true); public void suite(bufferedimage im) { affiche.updateimage(im); pack(); public class Ex40b { public static void main(string [] arg) {Scanner clavier = new Scanner(System.in); BufferedImage img = null; if (arg==null) {System.out.println("Usage : java Ex40 im1 im2..."); else { try { img = ImageIO.read(new File(arg[0])); catch (IOException e) { AppliAffiche p = new AppliAffiche(img); System.out.println("Photo suivante"); clavier.nextline(); for (int i=1; i<arg.length; i++) { try { img = ImageIO.read(new File(arg[i])); catch (IOException e) { p.suite(img); System.out.println("Photo suivante"); clavier.nextline(); System.exit(0); Menu Menu 1. Création d une barre de menu $ JMenuBar barremenu=new JMenuBar(); 2. Création d un menu, type Fichier, Edition,. JMenu menu=new JMenu("Formes"); 3. Création des éléments du menu JMenuItem item1=new JMenuItem("Sauver"); 4. Ajout des éléments au menu menu.add(item1); 5. Ajout du menu à la barre barremenu.add(menu); 6. Remarque : un JMenuItem génère un événement de type ActionEvent lorsqu il est sélectionné 1. Voir la gestion des événements en JAVA import javax.swing.*; class TestMenu extends JFrame { private JMenuBar menubar; public TestMenu() { super("exemple"); creationmenu(); getcontentpane().add(new JPanel()); setdefaultcloseoperation(jframe.exit_on_close); setsize(400,300); setvisible(true); private void creationmenu() { menubar = new JMenuBar(); JMenu menu = new JMenu("Fichier"); JMenu menu2 = new JMenu("Formes"); JMenu submenu = new JMenu("Formes simples"); menu.add(new JMenuItem("Nouveau")); menu.add(new JMenuItem("Ouvrir")); menu.add(new JMenuItem("Sauver")); menu2.add(submenu); submenu.add(new JMenuItem("Rectangle")); submenu.add(new JMenuItem("Cercle")); menubar.add(menu); menubar.add(menu2); setjmenubar(menubar); public class Ex41 { public static void main (String []arg) { new TestMenu();

43 Gestion des évenements JAVA Gestion des évènements en SWING Que se passe t il? quand on appuie sur un bouton, quand on ferme une fenetre, quand on bouge la souris Un événement contenant le lieu, la nature et l objet «actionné» est créé par le système graphique. Cet événement est différent selon qu il s agit d un clic sur un bouton, le déplacement de la souris, etc Cet événement est mis dans l EDT (Emploi du temps ou mieux, Event Dispatcher Thread). Le «dispatcher» envoie cet événement aux objets qui se sont déclarés intéressés par cet événement Qui est intéressé? Des objets de type écouteur (aux portes) C est le bouton qui provoque les événements qui autorise les écoutes. Les objets écouteurs (un ou plusieurs) définissent l(es) action(s) qui doivent avoir lieu Cette action est définie par un <typeevenement>listener, fonction qui précise l entete des fonctions gérant l action. Ce sont des callback dans d autres systemes. Ecouter un bouton : premier exemple Ecouter un bouton et réagir Il faut créer l interface graphique : une fenetre de base Un bouton Il faut créer la classe qui ecoute (ici Monecouteur) : elle implémente l interface actionlistener qui permet de gérer les clics sur un bouton, les sélections de menu On définit dans cette classe la méthode actionperformed( ) qui explicite ce qui doit être fait quand on clique sur un bouton : ici on affiche sur la fenetre console le texte «Action sur le bouton» On crée un objet de cette classe : objetecoutant En pratique, le nom de la variable est souvent inutile : on crée des objets anonymes, sans nom On enregistre cet objet aupres du bouton par la méthode addactionlistener, car c est quand meme le bouton qui autorise ou non l ecoute import javax.swing.*; import java.awt.*; import java.awt.event.*; class Ecouteur1 extends JFrame { private JButton button; public Ecouteur1 () { super("exemple ecouteur 1"); button = new JButton("Appuyer pour afficher un texte"); Monecouteur objetecoutant = new Monecouteur(); button.addactionlistener(objetecoutant); add(button, BorderLayout.CENTER); pack(); setvisible(true); /* Classe interne à la classe ecouteur1 souvent utilisée pour les listener On peut aussi définir une classe externe. */ class Monecouteur implements ActionListener { public void actionperformed(actionevent event) { System.out.println("Action surle bouton"); public class Ex45 { public static void main(string[] args) { new Ecouteur1();

44 Fermer la fenetre Fermer la fenetre Il faut créer l interface graphique : c est le meme code Il faut créer une classe (ici Monecouteurfenetre) qui implémente l interface windowlistener qui permet de gérer les fenetres Il faut définir 7 méthodes, meme si elles sont vides void windowopened(windowevent e) : ouverture de la fenetre void windowclosed(windowevent e) : apres la fermeture de la fenetre void windowclosing(windowevent e) : au moment de la fermeture de la fenetre void windowiconified(windowevent e) : iconifier la fenetre void windowdeiconified(windowevent e) : deiconifier de la fenetre void windowactivated(windowevent e) : focus dans la fenetre; Utiliser de préférence windowgainedfocus de WindowFocusListener void windowdeactivated(windowevent e) : perte du focus de la fenetre. Utiliser de préférence windowlostfocus de WindowFocusListener On crée un objet anonyme, sans nom car c est inutile On enregistre cet objet aupres de la fenetre par la méthode addwindowlistener import javax.swing.*; import java.awt.*; import java.awt.event.*; class Ecouteur1 { private JButton button; JFrame frame; public Ecouteur1 () { frame=new JFrame("exemple ecouteur 1"); button = new JButton("Appuyer pour afficher un texte"); Monecouteur objetecoutant = new Monecouteur(); button.addactionlistener(objetecoutant); frame.addwindowlistener(new Monecouteurfenetre()); frame.add(button, BorderLayout.CENTER); frame.pack(); frame.setvisible(true); class Monecouteur implements ActionListener { public void actionperformed(actionevent event) { System.out.println("Action surle bouton"); class Monecouteurfenetre implements WindowListener { public void windowclosing(windowevent event) { System.exit(0); public void windowclosed(windowevent e) { public void windowopened(windowevent e) { public void windowiconified(windowevent e) { public void windowdeiconified(windowevent e) { public void windowactivated(windowevent e) { public void windowdeactivated(windowevent e) { public class Ex45b { public static void main(string[] args) { new Ecouteur1(); Les adapteurs : Fermer la fenetre Ecouter 2 boutons (1) Gérer les événements par adaptateur une interface listener! toutes les méthodes doivent être écrites, même vides exemple : windowslistener : 7 méthodes à redéfinir,, W,,, Un adaptateur : une classe contient déjà une version vide! on ne surcharge que les fonctionnalités dont on a besoin Attention : la classe ecouteur HERITE de la classe Adapter au lieu de IMPLEMENTE une interface ComponentAdapter ContainerAdapter FocusAdapter KeyAdapter MouseAdapter MouseMotionAdapter WindowAdapter Une application qui affiche un compteur mis à jour par 2 boutons Il faut créer l interface graphique : une fenêtre de base un bouton «plus», un bouton «moins» Un label qui affiche le compteur Une variable entière contenant le compteur Pour gérer les boutons, plusieurs solutions Version objet avec 2 écouteurs : une classe écouteur spécifique pour chaque bouton. Il y a donc 2 classes, une pour le moins, une pour le plus. Aucun test n est à faire dans l'écouteur, puisqu il sait quel bouton est utilisé Version 1 écouteur : une seule classe écouteur, qui teste si le composant d où provient l événement est le bouton plus ou le bouton moins Version 1 ecouteur this : la classe ecouteur est la classe qui définit l application elle-même

45 Ecouter 2 boutons (1) Ecouter 2 boutons : 2 ecouteurs import javax.swing.*; import java.awt.*; import java.awt.event.*; // Deux boutons : un qui décrémente, un qui incrémente class Ecouteur2 extends JFrame { private int count = 0; JLabel label; JButton buttonplus, buttonmoins; private void creationinterface() { buttonplus = new JButton("plus"); buttonmoins = new JButton("moins"); label = new JLabel("0", JLabel.CENTER); JPanel buttons = new JPanel(new GridLayout(0, 1)); buttons.add(buttonplus); buttons.add(buttonmoins); JPanel pane = new JPanel(new BorderLayout()); pane.add(buttons, BorderLayout.WEST); pane.add(label, BorderLayout.CENTER); getcontentpane().add(pane, BorderLayout.CENTER); pack(); setvisible(true); public Ecouteur2() { super("exemple"); creationinterface(); buttonplus.addactionlistener(new MyActionListener1()); buttonmoins.addactionlistener(new MyActionListener2()); addwindowlistener(new MyWindowListener ()); private class MyActionListener1 implements ActionListener { public void actionperformed(actionevent event) { count++; label.settext(integer.tostring(count)); private class MyActionListener2 implements ActionListener { public void actionperformed(actionevent event) { count--; label.settext(integer.tostring(count)); // Remarque ; les classes internes ont accès aux champs de l interface private class MyWindowListener extends WindowAdapter { public void windowclosing(windowevent event) { System.exit(0); public class Ex46 { public static void main(string[] args) { new Ecouteur2(); Ecouter 2 boutons : 1 seul ecouteur Ecouter 2 boutons : 1 ecouteur=this private class MyActionListener implements ActionListener { public void actionperformed(actionevent event) { if(event.getsource() == buttonplus) count++; else count--; label.settext(integer.tostring(count)); private class MyWindowListener extends WindowAdapter { public void windowclosing(windowevent event) { System.exit(0); public class Ex47 { public static void main(string[] args) { new Ecouteur2(); import javax.swing.*; import java.awt.*; import java.awt.event.*; class Ecouteur2 extends WindowAdapter implements ActionListener {JFrame frame; private int count = 0; JLabel label; JButton buttonplus, buttonmoins; private void creationinterface() { frame=new JFrame("Exemple"); buttonplus = new JButton("plus"); buttonmoins = new JButton("moins"); label = new JLabel("0", JLabel.CENTER); JPanel buttons = new JPanel(new GridLayout(0, 1)); buttons.add(buttonplus); buttons.add(buttonmoins); JPanel pane = new JPanel(new BorderLayout()); pane.add(buttons, BorderLayout.WEST); pane.add(label, BorderLayout.CENTER); frame.getcontentpane().add(pane, BorderLayout.CENTER); frame.pack(); frame.setvisible(true); public Ecouteur2() { creationinterface(); buttonplus.addactionlistener(this); buttonmoins.addactionlistener(this); frame.addwindowlistener(this); public void actionperformed(actionevent event) { if(event.getsource() == buttonplus) count++; if(event.getsource() == buttonmoins) count--; label.settext(integer.tostring(count)); public void windowclosing(windowevent event) { System.exit(0); public class Ex48 {public static void main(string[] args) { new Ecouteur2();

46 Résumé Résumé la gestion des événements est faite par délégation par un listener ou un adapter l'événement n'est pas géré par le composant source de l événement mais par un objet qui s'est déclaré intéressé (écouteur) par ce type d'événement au moyen de add<type>listener() ou set<type>listener() auprès de l'objet source cet objet écouteur doit implanter la ou les méthodes précisées par le type de listener. Ces méthodes décrivent ce qui doit être fait avec l'événement. Un listener est une interface au sens Java du terme. Il faut définir toutes les méthodes de l interface, même si elles sont vides. Un adapter est une classe contenant des versions vides des méthodes. On redéfinit uniquement celles qui sont nécessaires. Une classe ecouteur doit alors héritée de l adapter. s'il existe plusieurs objets écouteurs, tous reçoivent une copie de l'événement dans un ordre non défini. Si aucun listener n'est défini, l'événement est ignoré un écouteur peut écouter plusieurs sources différentes Un objet peut écouter plusieurs boutons Un objet peut écouter les événements issu de ses propres composants En pratique Définir et cééer l interface graphique et ses boutons. Définir les écouteurs et les actions : ecrire les classes (Monecouteur) et méthodes (ActionPerformed) Créer les ecouteurs des différents composants graphiques (new Monecouteur()) Enregistrer les ecouteurs aupres des boutons à écouter (addactionlistener( )) Les évènements sont typés, organisé en classes Mouse!, clicbouton! Méthodes utiles : retourne la chaîne associée à l'évènement : entier contenant les touches enfoncées par l'utilisateur (SHIFT,CTR) Object getsource() : composant émettant l'événement int getid() : retourne le type de l événement long getwhen() : retourne le temps écoulé depuis l apparition de l évènement Quel écouteur définir pour quelle action? Exemple pour la souris Interface ActionListener Utilisée par les clics bouton, choix de menu, et les CR dans un zone de texte (JTextField, JTextArea) Méthodes à définir void actionperformed(actionevent e) : que faire lors de l'apparition d un des évènements Interface MouseListener ou classe MouseAdapter Utilisée pour les actions souris entrant et sortant dans la fenetre, les clics dans la fenetre Méthodes à définir void mouseclicked(mouseevent e) : clic dans la fenetre void mouseentered(mouseevent e) : souris entrant dans la fenetre void mouseexited(mouseevent e) : souris sortant de la fenetre void mousepressed(mouseevent e) : touche souris appuyée dans la fenetre void mouserealised(mouseevent e) : touche souris relachée dans la fenetre Principales méthodes de la classe MouseEvent boolean isaltdown(), boolean iscontroldown(), boolean ismetadown(), boolean isshiftdown() int getmodifiers(), int getx(), int gety() Méthodes utiles boolean isleftmousebutton(mouseevent e) : vrai si e concerne le bouton gauche de la souris boolean ismiddlemousebutton(mouseevent e) : vrai si e concerne le bouton milieu de la souris boolean isrightmousebutton(mouseevent e) : vrai si e concerne le bouton droit de la souris Interface MouseMotionListener ou classe MouseMotionAdapter Utilisée pour les déplacement souris dans la fenetre Méthodes à définir void mousedragged(mouseevent e) : clic dans la fenetre void mousemovedmouseevent e) : déplacement souris dans la fenetre import javax.swing.*;import java.awt.event.*;import java.awt.*; class Appli extends JFrame { JLabel zone1; public Appli() { zone1 = new JLabel("Test de mouse",jlabel.center); zone1.addmousemotionlistener(new Ecouteur()); getcontentpane().add(zone1); setsize(200,200); setvisible(true); private class Ecouteur implements MouseMotionListener { private void affiche(mouseevent e) { System.out.println("x= "+e.getx()+", y="+e.gety()); ` public void mousemoved(mouseevent e) { System.out.print("Mouvement"); affiche(e); public void mousedragged(mouseevent e) { System.out.print("Glisser"); affiche(e); public class Ex49 { public static void main(string[] args) { new Appli();

47 Quel écouteur définir pour quelle action (2)? Quel écouteur définir pour quelle action (3)? Interface KeyListener ou classe KeyAdapter Utilisée pour les actions clavier sur un composant Le Composant doit pouvoir obtenir le focus avec setfocusable(true) Méthodes à définir void keytyped(keyevent e) : touche unicode (ascii) tapée void keypressed(keyevent e) : touche quelconque appuyée dans le composant void keyrealised(keyevent e) : touche quelconque relachée dans le composant Principales méthodes de la classe KeyEvent boolean isactionkey() int getkeychar(), int getkeycode() Interface ChangeListener Utilisée les Sliders, les ColorChooser, les Spinners Méthodes à définir void statechanged(changeevent e) : changement dans le composant Interface ItemListener Utilisée les checkboxes, les ComboBoxes Méthodes à définir void itemstatechanged(itemevent e) : changement dans le composant Principales méthodes de la classe ItemEvent ItemSelectable getitemselectable() : similaire à getsource() Object getitem(), int getstatechange() Interface WindowListener ou classe WindowAdapter Utilisée pour les actions sur les fenetres : ouverture, fermeture, iconification, quitter Méthodes à définir void windowopened(windowevent e) : ouverture de la fenetre void windowclosed(windowevent e) : apres la fermeture de la fenetre void windowclosing(windowevent e) : au moment de la fermeture de la fenetre void windowiconified(windowevent e) : iconifier la fenetre void windowdeiconified(windowevent e) : deiconifier de la fenetre void windowactivated(windowevent e) : focus dans la fenetre; Utiliser de préférence windowgainedfocus de WindowFocusListener void windowdeactivated(windowevent e) : perte du focus de la fenetre. Utiliser de préférence windowlostfocus de WindowFocusListener La principale action à redéfinir est celle de la fermeture d une application. Pour cela, il faudrait Soit vos applications graphiques implémentent l interface WindowListener avec ses 7 methodes redéfinir systématiquement la fonction windowclosed Ecrire un corps de fonction vide pour les autres Soit vos applications graphiques héritent de WindowAdapter avec ses 7 methodes redéfinir systématiquement la fonction windowclosed Mais votre application ne peut plus hérité d une autre classe Solution : la méthode définit la sortie propre sans redéfinir le listener ou l adapter setdefaultcloseoperation(jframe.exit_on_close); Un chat local (1) Chat local (2) Taper du texte dans une fenêtre, Recevoir dans une autre, avec ascenseur import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Ex51 { private JTextArea texte, copie; public Ex51() { // Fenetre principale qui envoie JFrame frame = new JFrame("Chat"); // Gestion de la sortie de fenetre frame.setdefaultcloseoperation(jframe.exit_on_close); //Création du panel de la fenetre principale JPanel panelprincipal = new JPanel(new BorderLayout()); texte = new JTextArea(); // Partie texte de la Fenetre d emission JScrollPane paneltexte = new JScrollPane (texte); // Bouton de la Fenetre d emission JButton button = new JButton("Envoyer"); panelprincipal.add(paneltexte, BorderLayout.CENTER); panelprincipal.add(button, BorderLayout.SOUTH); // Gestion de l'appui sur le bouton "Envoyer" button.addactionlistener(new MyActionListener()); frame.getcontentpane().add(panelprincipal);

48 Chat local (3) Swing : Applets (1) // Creation de la deuxième fenetre pour la reception JFrame fenetrecopie = new JFrame("Fenetre de reception"); // Création d'une zone de texte pour le message recu avec edition impossible copie = new JTextArea(); copie.seteditable(false); // Creation du panel de la fenetre de reception JScrollPane panelcopie = new JScrollPane (copie); fenetrecopie.getcontentpane().add(panelcopie); frame.setsize(200, 200); frame.setlocation(0, 0); frame.setvisible(true); fenetrecopie.setsize(200, 200); fenetrecopie.setlocation(400, 0); fenetrecopie. setvisible(true); private class MyActionListener implements ActionListener { public void actionperformed(actionevent event) { copie.append(texte.gettext() + "\n"); // Lecture dans la fenetre d'emission (texte) texte.settext(""); // et ecriture dans la fenetre de reception public static void main(string[] args) { new Ex51(); Applet! dérive de JApplet : possède un root pane Possède un unique contentpane barre de menu disponible Conséquences ajout des composants dans le ContentPane, pas dans l'applet idem pour le gestionnaire de placement (layout) Sous système graphique chaque composant se redessine à partir de la hiérarchie objet de l'ig! inutile et dangereux de redéfinir paint ou update! paintcomponent d'un composant assure l'affichage personnalisé l IG de l'applet est créée dans la fonction init() par ajout de composants Les actions sont définies par les ecouteurs/adapteurs Plug-in java pour utiliser swing dans les applets Balise APPLET maintenant Swing : Applets (2) import javax.swing.*; import java.awt.*; public class HelloSwingApplet extends JApplet { public void init() { JLabel label = new Jlabel ("Hello Swing applet!"); label.sethorizontalalignment(jlabel.center); label.setborder(borderfactory.creatematteborder(1,1,2,2,color.black)); getcontentpane().add(label, BorderLayout.CENTER); <HTML> <HEAD> <TITLE>Swing Applet</TITLE> </HEAD> <BODY> <APPLET code="helloswingapplet" width=600 height=300> Your browser does not support Java, so nothing is displayed. </APPLET> </BODY> </HTML> Swing : les threads En SWING, pas de difficultés si l'application ne modifie pas ses propres composants Exemple: création de l'ig dans init() pour l'applet, modification dans les gestionnaires d'événements Dans le cas contraire, les composants swing ne doivent être accessibles que par un thread à la fois. Règle générale Construire l'application dans le thread principal, Construire l'applet dans init les threads secondaires passent par les gestionnaires d'événements (sans action directe sur l'ig) pour leur modification les méthodes repaint() et revalidate() postent des messages et ne modifient pas directement l'ig : utilisables. Pour les cas spéciaux, exécution de code utilisateur par le thread eventdispatching : soumet la requête (met en evenement dans la file d ev) et n'attend pas : soumet la requête et attend

49 Swing : JTable Swing : Jtable (2) JTable : javax.swing.table Tableau dont les cellules sont des Component Un Modèle (AbstractTableModel), une vue (Jtable) En général JTable dans une JScrollPane. Sinon, pas d'entêtes de colonnes Modèle par défaut Données dans un vector ou un tableau Cellules éditables Une table peut provoquer des événements pour faire réagir d'autres objets son modèle doit les créer par appels de méthode firetablexxx provoque les événements firetablecellupdated, firetablechanged, firetabledatachanged, firetablerowsdeleted, firetablerowsinserted, firetablerowsupdated, firetablestructurechanged l'objet récepteur (écouteur) doit implémenter l'interface public class SimpleTableDemo... implements TableModelListener {... public SimpleTableDemo() {... model = table.getmodel(); model.addtablemodellistener(this);... public void tablechanged(tablemodelevent e) {... int row = e.getfirstrow(); int column = e.getcolumn(); String columnname = model.getcolumnname(column); Object data = model.getvalueat(row, column);... import javax.swing.*; import java.awt.*; import javax.swing.table.*; public class jtab2 { public static void main(string [] a){ Object [][] donnees = { {"8h-9h", new Integer(100),"Mathématiques", {"9h-10h",new Integer(10),"Physique",{"10h-11h", new Integer(190),"Chimie" ; String [] entete = { "Heures", "Salle", "Matières"; DefaultTableModel dtm = new DefaultTableModel(donnees, entete); JTable jt = new JTable(dtm); JScrollPane jsp = new JScrollPane(jt); JFrame appl = new JFrame("Exemple de table : emploi du temps"); JPanel p1 = new JPanel(new BorderLayout()); appl.getcontentpane().add(p1); p1.add(jsp); appl.pack(); appl.show(); JTable les colonnes sont des objets indexées à partir de 0 méthodes pour changer la largeur d'une colonnes (jt.getcolumnmodel().getcolumn(1)).setpreferredwidth(10); Swing : Jtable (3) Labels et Onglets JTable : construire son propre modèle Class MonModel extends AbstractTableModel() { String [] entete = {...; Object [][] donnees = {...; public String getcolumnname(int col) { return entete[col].tostring(); public int getrowcount() { return donnees.length; public int getcolumncount() { return entete.length; public Class getcolumnclass(int c){return getvalueat(0, c).getclass(); public Object getvalueat(int row, int col) { return donnees[row][col]; public boolean iscelleditable(int row, int col) { return true; // ICI on met celles qui peuvent changer public void setvalueat(object value, int row, int col) { donnees[row][col] = value; firetablecellupdated(row, col); JLabel : Image possible Icon image = new ImageIcon("image.jpg"); JLabel labelimage = new JLabel(image); JTabbedPane : Onglet addtab : ajoute un onglet import java.awt.*; import java.util.*; import java.awt.event.*; import javax.swing.*; public class TabTest extends JPanel { private JTabbedPane jtp; private JLabel labelimage; private JPanel panneau1 = new JPanel(); private JPanel panneau2 = new JPanel(); private JPanel panneau3 = new JPanel(); public TabTest() { setlayout(new BorderLayout()); jtp = new JTabbedPane(); Icon image = new ImageIcon("dauphin09.jpg"); labelimage = new JLabel("dauphins nageants", image, SwingConstants.CENTER); panneau1.add(labelimage); Icon image2 = new ImageIcon("chien.gif"); panneau2.add(new JLabel(image2)); panneau3.add(new JLabel("JLabel avec du texte seulement")); jtp.addtab("image & Texte", panneau1); jtp.addtab("image seule", panneau2); jtp.addtab("texte seul", panneau3); add(jtp, BorderLayout.CENTER); public static void main(string args[]) { JFrame jf = new JFrame("Tabbed Pane Test"); TabTest tt = new TabTest(); jf.getcontentpane().add(tt, BorderLayout.CENTER); jf.setsize(600,300); jf.setvisible(true);

50 Labels et Onglets JTree import java.awt.*; import javax.swing.*; import javax.swing.tree.*; public class jtree { private static Object [] nodenames = { "one", "two", "three", "four", "five", "six", "seven", new Integer(8), new Integer(9), new Float(10) ; private static boolean [] leaf = { false, true, true, false, true, true, false, true, true, true ; public static void main(string args[]) { JFrame jf = new JFrame("Tree Test"); DefaultMutableTreeNode [] nodes = new DefaultMutableTreeNode[10]; for (int i = 0; i < nodes.length; i++) { nodes[i] = new DefaultMutableTreeNode(nodeNames[i],!leaf[i]); nodes[0].add(nodes[1]); nodes[0].add(nodes[2]); nodes[0].add(nodes[3]); nodes[0].add(nodes[6]); nodes[0].add(nodes[9]); nodes[3].add(nodes[4]); nodes[3].add(nodes[5]); nodes[6].add(nodes[7]); nodes[6].add(nodes[8]); JTree jt = new JTree(nodes[0]); jf.getcontentpane().add(jt, BorderLayout.CENTER); jf.pack(); jf.setvisible(true); Exemple : JTree

as Architecture des Systèmes d Information

as Architecture des Systèmes d Information Plan Plan Programmation - Introduction - Nicolas Malandain March 14, 2005 Introduction à Java 1 Introduction Présentation Caractéristiques Le langage Java 2 Types et Variables Types simples Types complexes

Plus en détail

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la

Plus en détail

Cours 1: Java et les objets

Cours 1: Java et les objets Ressources Les interface homme-machine et le langage Java DUT première année Henri Garreta, Faculté des Sciences (Luminy) Cyril Pain-Barre & Sébastien Nedjar, IUT d Aix-Marseille (Aix) Cours 1: infodoc.iut.univ-aix.fr/~ihm/

Plus en détail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

Plus en détail

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique

Plus en détail

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. [email protected] www.cril.univ-artois.fr/~jabbour

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr www.cril.univ-artois.fr/~jabbour LMI 2 Programmation Orientée Objet POO - Cours 9 Said Jabbour [email protected] www.cril.univ-artois.fr/~jabbour CRIL UMR CNRS 8188 Faculté des Sciences - Univ. Artois Février 2011 Les collections

Plus en détail

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

Programmation par les Objets en Java

Programmation par les Objets en Java Programmation par les Objets en Java Najib TOUNSI Les classes en Java (TD 3) I. Notion de classe I.1 Classe, champs, méthodes, instanciation, this, private vs. public. Créer une classe Point (coordonnée

Plus en détail

Java Licence Professionnelle 2009-2010. Cours 7 : Classes et méthodes abstraites

Java Licence Professionnelle 2009-2010. Cours 7 : Classes et méthodes abstraites Java Licence Professionnelle 2009-2010 Cours 7 : Classes et méthodes abstraites 1 Java Classes et méthodes abstraites - Le mécanisme des classes abstraites permet de définir des comportements (méthodes)

Plus en détail

Initiation à JAVA et à la programmation objet. [email protected]

Initiation à JAVA et à la programmation objet. raphael.bolze@ens-lyon.fr Initiation à JAVA et à la programmation objet [email protected] O b j e c t i f s Découvrir un langage de programmation objet. Découvrir l'environnement java Découvrir les concepts de la programmation

Plus en détail

Une introduction à Java

Une introduction à Java Une introduction à Java IFT 287 (Semaine 1) UNIVERSITÉ DE SHERBROOKE 1 Java - Historique Développé par Sun Microsystems en 1994 Inventeur James Gosling (canadien!) Objectif langage sûr (fortement typé)

Plus en détail

Langage Java. Classe de première SI

Langage Java. Classe de première SI Langage Java Table des matières 1. Premiers pas...2 1.1. Introduction...2 1.2. Mon premier programme...2 1.3. Les commentaires...2 2. Les variables et les opérateurs...2 3. La classe Scanner...3 4. Les

Plus en détail

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Polymorphisme, la classe Object, les package et la visibilité en Java... 1 Polymorphisme, la classe Object, les package et la visibilité en Java. Polymorphisme, la classe Object, les package et la visibilité en Java.... 1 Polymorphisme.... 1 Le DownCast... 4 La Classe Object....

Plus en détail

Programmer en JAVA. par Tama ([email protected]( [email protected])

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Programmer en JAVA par Tama ([email protected]( [email protected]) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes

Plus en détail

Généralités sur le Langage Java et éléments syntaxiques.

Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques....1 Introduction...1 Genéralité sur le langage Java....1 Syntaxe de base du Langage...

Plus en détail

Programmation en Java IUT GEII (MC-II1) 1

Programmation en Java IUT GEII (MC-II1) 1 Programmation en Java IUT GEII (MC-II1) 1 Christophe BLANC - Paul CHECCHIN IUT Montluçon Université Blaise Pascal Novembre 2009 Christophe BLANC - Paul CHECCHIN Programmation en Java IUT GEII (MC-II1)

Plus en détail

TD3: tableaux avancées, première classe et chaînes

TD3: tableaux avancées, première classe et chaînes TD3: tableaux avancées, première classe et chaînes de caractères 1 Lestableaux 1.1 Élémentsthéoriques Déclaration des tableaux Pour la déclaration des tableaux, deux notations sont possibles. La première

Plus en détail

Chapitre VI- La validation de la composition.

Chapitre VI- La validation de la composition. Chapitre VI- La validation de la composition. Objectifs du chapitre : Expliquer les conséquences de l utilisation de règles de typage souples dans SEP. Présenter le mécanisme de validation des connexions

Plus en détail

Chapitre 2. Classes et objets

Chapitre 2. Classes et objets Chapitre 2: Classes et Objets 1/10 Chapitre 2 Classes et objets Chapitre 2: Classes et Objets 2/10 Approche Orientée Objet Idée de base de A.O.O. repose sur l'observation de la façon dont nous procédons

Plus en détail

Java Licence Professionnelle CISII, 2009-2010. Cours 2 : Classes et Objets

Java Licence Professionnelle CISII, 2009-2010. Cours 2 : Classes et Objets Licence Professionnelle CISII, 2009-2010 Cours 2 : Classes et Objets 1 Classes et Objets Objectifs des LOO : - Manipuler des objets - Découper les programmes suivant les types des objets manipulés - Regrouper

Plus en détail

PROGRAMMATION PAR OBJETS

PROGRAMMATION PAR OBJETS PROGRAMMATION PAR OBJETS Java Environnement et constructions spécifiques Walter Rudametkin Maître de Conférences Bureau F011 [email protected] B. Carré Polytech Lille 2 Java (Sun 1995)

Plus en détail

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. [email protected]

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr . Cours intensif Java 1er cours: de C à Java Septembre 2009 Enrica DUCHI LIAFA, Paris 7 [email protected] LANGAGES DE PROGRAMMATION Pour exécuter un algorithme sur un ordinateur il faut le

Plus en détail

Java Licence Professionnelle CISII, 2009-10

Java Licence Professionnelle CISII, 2009-10 Java Licence Professionnelle CISII, 2009-10 Cours 4 : Programmation structurée (c) http://www.loria.fr/~tabbone/cours.html 1 Principe - Les méthodes sont structurées en blocs par les structures de la programmation

Plus en détail

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40 Déroulement du cours Introduction Concepts Java Remarques Langage et Concepts de Programmation Orientée-Objet Gauthier Picard École Nationale Supérieure des Mines de Saint-Étienne [email protected]

Plus en détail

Java c est quoi? Java pourquoi?

Java c est quoi? Java pourquoi? Grandes lignes du cours Cours JAVA : Le bases du langage Java. Version 3.02 Julien Sopena 1 1 [email protected] Équipe REGAL - INRIA Rocquencourt LIP6 - Université Pierre et Marie Curie Licence professionnelle

Plus en détail

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Structure d un programme et Compilation Notions de classe et d objet Syntaxe Cours1 Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Programmation Orientée Objet Un ensemble d objet qui communiquent Pourquoi POO Conception abstraction sur les types

Plus en détail

Objets et Programmation. origine des langages orientés-objet

Objets et Programmation. origine des langages orientés-objet Objets et Programmation origine des langages orientés-objet modularité, encapsulation objets, classes, messages exemples en Java héritage, liaison dynamique G. Falquet, Th. Estier CUI Université de Genève

Plus en détail

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets. Encapsulation L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets. La visibilité dépend des membres : certains membres peuvent être visibles et d'autres

Plus en détail

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés) Introduction à la POO 1. Histoire de la POO 9 2. Historique du 12 La conception orientée objet 1. Approche procédurale et décomposition fonctionnelle 13 2. La transition vers l'approche objet 14 3. Les

Plus en détail

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7 Université Lumière Lyon 2 Faculté de Sciences Economiques et Gestion KHARKIV National University of Economic Introduction au Langage Java Master Informatique 1 ère année Julien Velcin http://mediamining.univ-lyon2.fr/velcin

Plus en détail

TP1 : Initiation à Java et Eclipse

TP1 : Initiation à Java et Eclipse TP1 : Initiation à Java et Eclipse 1 TP1 : Initiation à Java et Eclipse Systèmes d Exploitation Avancés I. Objectifs du TP Ce TP est une introduction au langage Java. Il vous permettra de comprendre les

Plus en détail

Package Java.util Classe générique

Package Java.util Classe générique Package Java.util Classe générique 1 Classe Vector La taille est dynamique: dès qu un tableau vectoriel est plein, sa taille est doublée, triplée, etc. automatiquement Les cases sont de type Object add(object

Plus en détail

TD/TP PAC - Programmation n 3

TD/TP PAC - Programmation n 3 Université Paris Sud Licence d informatique/iup-miage2 Année 2004-2005 Auteur : Frédéric Vernier Semaine : 11-16 octobre 2004 Conditions : sur machine avec les outils standards java web: http://vernier.frederic.free.fr/indexpac.html

Plus en détail

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2 Langage et Concepts de Programmation Objet Travaux Dirigés no2 Pôle Informatique École Nationale Supérieure des Mines de St-Etienne Vous trouverez plus de détails sur les concepts abordés lors de ce TD

Plus en détail

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement des objets d'une classe Utilisation d'une classe Droit

Plus en détail

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004 Questionnaire d'examen final INF1101 Sigle du cours Nom : Signature : Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004 Professeur(s)

Plus en détail

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique Institut Supérieure Aux Etudes Technologiques De Nabeul Département Informatique Support de Programmation Java Préparé par Mlle Imene Sghaier 2006-2007 Chapitre 1 Introduction au langage de programmation

Plus en détail

Premiers Pas en Programmation Objet : les Classes et les Objets

Premiers Pas en Programmation Objet : les Classes et les Objets Chapitre 2 Premiers Pas en Programmation Objet : les Classes et les Objets Dans la première partie de ce cours, nous avons appris à manipuler des objets de type simple : entiers, doubles, caractères, booléens.

Plus en détail

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION) CLASSE RACINE Object ancêtre de toutes les classes RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION) définit donc des méthodes héritées par toutes

Plus en détail

INITIATION AU LANGAGE JAVA

INITIATION AU LANGAGE JAVA INITIATION AU LANGAGE JAVA I. Présentation 1.1 Historique : Au début des années 90, Sun travaillait sur un projet visant à concevoir des logiciels simples et performants exécutés dans des PDA (Personnal

Plus en détail

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java Langages objets Introduction M2 Pro CCI, Informatique Emmanuel Waller, LRI, Orsay présentation du module logistique 12 blocs de 4h + 1 bloc 2h = 50h 1h15 cours, 45mn exercices table, 2h TD machine page

Plus en détail

Aide mémoire UML & Java 1ère partie : Introduction. [email protected]

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr Aide mémoire UML & Java 1ère partie : Introduction [email protected] 9 septembre 2014 1 2014 v1.11 Table des matières 1 Généralités 6 1.1 Notations utilisées.....................................

Plus en détail

Anne Tasso. Java. Le livre de. premier langage. 6 e édition. Groupe Eyrolles, 2000, 2002, 2005, 2006, 2008, 2010, ISBN : 978-2-212-12648-8

Anne Tasso. Java. Le livre de. premier langage. 6 e édition. Groupe Eyrolles, 2000, 2002, 2005, 2006, 2008, 2010, ISBN : 978-2-212-12648-8 Anne Tasso Java Le livre de premier langage 6 e édition Groupe Eyrolles, 2000, 2002, 2005, 2006, 2008, 2010, ISBN : 978-2-212-12648-8 Table des matières Avant-propos Organisation de l ouvrage..............................

Plus en détail

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf Introduction à Java Matthieu Herrb CNRS-LAAS http://homepages.laas.fr/matthieu/cours/java/java.pdf Mars 2014 Plan 1 Concepts 2 Éléments du langage 3 Classes et objets 4 Packages 2/28 Histoire et motivations

Plus en détail

Programmation Objet I

Programmation Objet I 2002-2003 UFR Mathématique de la Décision Deuxième Année de DEUG Science mention MASS Programmation Objet I Fabrice Rossi et Fabien Napolitano c Fabrice Rossi et Fabien Napolitano, 2002-2003 Le code de

Plus en détail

Héritage presque multiple en Java (1/2)

Héritage presque multiple en Java (1/2) Héritage presque multiple en Java (1/2) Utiliser deux classes ou plus dans la définition d'une nouvelle classe peut se faire par composition. class Etudiant{ int numero; Diplome d; float passeexamen(examen

Plus en détail

La carte à puce. Jean-Philippe Babau

La carte à puce. Jean-Philippe Babau La carte à puce Jean-Philippe Babau Département Informatique INSA Lyon Certains éléments de cette présentation sont issus de documents Gemplus Research Group 1 Introduction Carte à puce de plus en plus

Plus en détail

Programmation Orientée Objet application au langage Java Version Novembre 2007

Programmation Orientée Objet application au langage Java Version Novembre 2007 Programmation Orientée Objet application au langage Java Version Novembre 2007 Mickaël BARON - 2007 mailto:[email protected] ou mailto:[email protected] SERLI informatique SERLI : www.serli.com

Plus en détail

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5 UNIVERISTE MOHAMMED PREMIER Faculté des Sciences d Oujda Oujda - Maroc Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5 Pr. El Mostafa DAOUDI Département de Mathématiques

Plus en détail

TP, première séquence d exercices.

TP, première séquence d exercices. TP, première séquence d exercices. Benoît Valiron [email protected] 7 novembre 2010 Introduction Vous écrirez les réponses aux questions courtes sur une feuille à rendre à la fin de la

Plus en détail

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par

Plus en détail

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ; CNAM NFP121 TP 10 19/11/2013 (Séance 5) Objectif Manipuler les exceptions ; 1 Entrées/sorties Exercice 1 : Lire un entier à partir du clavier Ajouter une méthode readint(string message) dans la classe

Plus en détail

Génie Logiciel avec Ada. 4 février 2013

Génie Logiciel avec Ada. 4 février 2013 Génie Logiciel 4 février 2013 Plan I. Généralités II. Structures linéaires III. Exceptions IV. Structures arborescentes V. Dictionnaires I. Principes II. Notions propres à la POO I. Principes Chapitre

Plus en détail

RMI le langage Java XII-1 JMF

RMI le langage Java XII-1 JMF Remote Method Invocation (RMI) XII-1 Introduction RMI est un ensemble de classes permettant de manipuler des objets sur des machines distantes (objets distants) de manière similaire aux objets sur la machine

Plus en détail

Java Licence Professionnelle CISII, 2009-2010

Java Licence Professionnelle CISII, 2009-2010 Licence Professionnelle CISII, 2009-2010 Cours 1 : Introduction à Java A. Belaïd [email protected] Cours disponible sur le site : http://www.loria.fr/~abelaid puis Teaching 1 Fonctionnement 12 séances :

Plus en détail

TD/TP PAC - Programmation n 3

TD/TP PAC - Programmation n 3 Université Paris Sud Licence d informatique/iup-miage2 - Année 2004-2005 auteur : Frédéric Vernier semaine : 11-16 octobre 2004 conditions : sur machine avec les outils standards java web: http://vernier.frederic.free.fr/indexpac.html

Plus en détail

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy Claude Delannoy Programmer en langage C++ 8 e édition Avec une intro aux design patterns et une annexe sur la norme C++11 Groupe Eyrolles, 1993-2011. Groupe Eyrolles, 2014, pour la nouvelle présentation,

Plus en détail

Plan Pédagogique du cours

Plan Pédagogique du cours Plan Pédagogique du cours Module: Programmation Orientée Objet Section : informatique Niveau : 3 ème niveau (gestion, industriel, réseau) Volume Horaire : 22,5 heures Cours Intégrés + 45 Travaux Pratiques

Plus en détail

Chapitre V. Les classes : Object, Vector, etc.

Chapitre V. Les classes : Object, Vector, etc. Chapitre V Les classes de base Les classes : Object, Vector, etc. Plan La classe Object Les collections La classe ArrayList La classe Vector Les classes Wrappers Les classes String et StringBuffer La classe

Plus en détail

Exercices sur les interfaces

Exercices sur les interfaces Exercices sur les interfaces Fabrice Rossi 18 octobre 1999 1 Le type Object 1.1 Manipulations élémentaires Exercice 1.1 : Indiquer l affichage produit par le programme suivant : public class UpCast1 {

Plus en détail

Utilisation d objets : String et ArrayList

Utilisation d objets : String et ArrayList Chapitre 6 Utilisation d objets : String et ArrayList Dans ce chapitre, nous allons aborder l utilisation d objets de deux classes prédéfinies de Java d usage très courant. La première, nous l utilisons

Plus en détail

Chapitre I Notions de base et outils de travail

Chapitre I Notions de base et outils de travail Chapitre I Notions de base et outils de travail Objectifs Connaître les principes fondateurs et l historique du langage Java S informer des principales caractéristiques du langage Java Connaître l environnement

Plus en détail

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions Langage JAVA Bases du langage Opérations sur les fichiers Réseau Multi-tâche Logiciel: interfaces... Gestion des périphériques (méthodes natives) Accès aux bases de données Bases du langage Historique

Plus en détail

Programmation Objet Java Correction

Programmation Objet Java Correction INSA - 4 AE 2007 2008 Durée : 1H00 Contrôle Programmation Objet Java Correction Consignes Tous les documents sont autorisés, mais ils seront peu utiles. Indiquez vos nom et prénom sur chaque feuille. Le

Plus en détail

UE Programmation Impérative Licence 2ème Année 2014 2015

UE Programmation Impérative Licence 2ème Année 2014 2015 UE Programmation Impérative Licence 2 ème Année 2014 2015 Informations pratiques Équipe Pédagogique Florence Cloppet Neilze Dorta Nicolas Loménie [email protected] 2 Programmation Impérative

Plus en détail

ACTIVITÉ DE PROGRAMMATION

ACTIVITÉ DE PROGRAMMATION ACTIVITÉ DE PROGRAMMATION The purpose of the Implementation Process is to realize a specified system element. ISO/IEC 12207 Sébastien Adam Une introduction 2 Introduction Ø Contenu Utilité de l ordinateur,

Plus en détail

2 e édition JAVA 5 et 6. Jérôme Bougeault. TSoft et Groupe Eyrolles, 2003, 2008, ISBN : 978-2-21212250-3

2 e édition JAVA 5 et 6. Jérôme Bougeault. TSoft et Groupe Eyrolles, 2003, 2008, ISBN : 978-2-21212250-3 2 e édition JAVA 5 et 6 Jérôme Bougeault TSoft et Groupe Eyrolles, 2003, 2008, ISBN : 978-2-21212250-3 Classes et objets Les constructeurs Propriétés Les méthodes L héritage Les interfaces Les relations

Plus en détail

Cours d initiation à la programmation en C++ Johann Cuenin

Cours d initiation à la programmation en C++ Johann Cuenin Cours d initiation à la programmation en C++ Johann Cuenin 11 octobre 2014 2 Table des matières 1 Introduction 5 2 Bases de la programmation en C++ 7 3 Les types composés 9 3.1 Les tableaux.............................

Plus en détail

Programmation Orientée Objet Java

Programmation Orientée Objet Java Programmation Orientée Objet Java Bertrand Estellon Département Informatique et Interactions Aix-Marseille Université 12 novembre 2014 Bertrand Estellon (DII AMU) Programmation Orientée Objet Java 12 novembre

Plus en détail

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation impérative et structures de données simples Introduction au langage C Sandrine Blazy - 1ère année 24 octobre 2007 Cours d Algorithmique-Programmation

Plus en détail

Chapitre 10. Les interfaces Comparable et Comparator 1

Chapitre 10. Les interfaces Comparable et Comparator 1 Chapitre 10: Les interfaces Comparable et Comparator 1/5 Chapitre 10 Les interfaces Comparable et Comparator 1 1 Ce chapitre a été extrait du document "Objets, Algorithmes, Patterns" de [René Lalement],

Plus en détail

UML. Diagrammes de classes (suite) Delphine Longuet. [email protected]

UML. Diagrammes de classes (suite) Delphine Longuet. delphine.longuet@lri.fr Polytech Paris-Sud Formation initiale 3 e année Spécialité Informatique Année 2014-2015 UML Diagrammes de classes (suite) Delphine Longuet [email protected] Opérations Opérations Service qui peut

Plus en détail

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Cours de Programmation Impérative: Zones de mémoires et pointeurs Cours de Programmation Impérative: Zones de mémoires et pointeurs Julien David A101 - [email protected] Julien David (A101 - [email protected]) 1 / 1 Z`o n`e s `d`e m`é m`o i r`e Julien

Plus en détail

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, 2000-2015, ISBN : 978-2-212-14154-2

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, 2000-2015, ISBN : 978-2-212-14154-2 Anne Tasso Java Le livre de premier langage 10 e édition Avec 109 exercices corrigés Groupe Eyrolles, 2000-2015, ISBN : 978-2-212-14154-2 Table des matières Avant-propos Organisation de l ouvrage..............................

Plus en détail

Licence Bio Informatique Année 2004-2005. Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Licence Bio Informatique Année 2004-2005. Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose... Université Paris 7 Programmation Objet Licence Bio Informatique Année 2004-2005 TD n 1 - Correction Premiers pas Exercice 1 Hello World parce qu il faut bien commencer par quelque chose... 1. Enregistrez

Plus en détail

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object Facultés Universitaires Notre-Dame de la Paix Conception et Programmation Orientées- Object 2008-2009 RÉSUMÉ PRATIQUE... 4 CLASSE OBJET... 4 NOTION D HÉRITAGE... 4 LE POLYMORPHISME... 5 LES CLASSES ABSTRAITES...

Plus en détail

Conventions d écriture et outils de mise au point

Conventions d écriture et outils de mise au point Logiciel de base Première année par alternance Responsable : Christophe Rippert [email protected] Introduction Conventions d écriture et outils de mise au point On va utiliser dans cette

Plus en détail

et Programmation Objet

et Programmation Objet FACULTE POLYTECHNIQUE DE MONS Service d Informatique et Programmation Objet Mohammed Benjelloun 2 ème Bachelier Année académique 2008-2009 Table des matières Avant-propos--------------------------------------------------------------------------

Plus en détail

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

JAVA TD0. Prise en main du langage Environnement de base JAVA 1 JAVA TD0 Prise en main du langage Environnement de base JAVA 1 Mon premier programme public class HelloWorld { public static void main(string [] arg){ System.out.println("Hello, World!"); main(string []

Plus en détail

Programmation avec des objets : Cours 7. Menu du jour

Programmation avec des objets : Cours 7. Menu du jour 1 Programmation avec des objets : Cours 7 Menu du jour 1. Retour sur la classe Liste 2. Précisions sur l interface 3. Difficultés dans le cas d erreurs 4. Soulever des exceptions 5. Utilisation des Listes

Plus en détail

Tp 1 correction. Structures de données (IF2)

Tp 1 correction. Structures de données (IF2) Tp 1 correction Structures de données (IF2) Remarque générale : compilez et exécutez le code au-fur-et-à mesure de son écriture. Il est plus facile de corriger une petite portion de code délimitée que

Plus en détail

Auto-évaluation Programmation en Java

Auto-évaluation Programmation en Java Auto-évaluation Programmation en Java Document: f0883test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INTRODUCTION AUTO-ÉVALUATION PROGRAMMATION EN

Plus en détail

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ; s Introduction Naissance d'un programme Exercice I-1: Apprendre à décomposer une tâche en sous-tâches distinctes a. Objets nécessaires : 1 tableau, 1 clou, 2 pointes, 1 ficelle, 1 marteau, 1 crayon, 1

Plus en détail

CPR Informatique. (poste 3159 ou 3164) Septembre 2002

CPR Informatique. (poste 3159 ou 3164) Septembre 2002 CPR Informatique (poste 3159 ou 3164) Septembre 2002 Programmer en Java Table des matières 1.- PRESENTATION GENERALE DU LANGAGE JAVA...3 1.1. Introduction...3 1.2. Historique...3 1.3. Les principales raisons

Plus en détail

Traduction des Langages : Le Compilateur Micro Java

Traduction des Langages : Le Compilateur Micro Java BARABZAN Jean-René OUAHAB Karim TUCITO David 2A IMA Traduction des Langages : Le Compilateur Micro Java µ Page 1 Introduction Le but de ce projet est d écrire en JAVA un compilateur Micro-Java générant

Plus en détail

Diagramme de classes

Diagramme de classes Diagramme de classes Un diagramme de classes décrit les classes et leurs relations (associations, généralisation/spécialisation, ). classe association méthodes attributs héritage Diagramme de classes :

Plus en détail

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski [email protected]

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski [email protected] Mars 2002 Pour Irène et Marie Legal Notice Copyright c 2002 Patrick Cégielski Université

Plus en détail

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51 DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51 PLAN DU COURS Introduction au langage C Notions de compilation Variables, types, constantes, tableaux, opérateurs Entrées sorties de base Structures de

Plus en détail

Java 1.5 : principales nouveautés

Java 1.5 : principales nouveautés Cours 6 - TEP - UPMC - 2008/2009 p. 1/34 Java 1.5 : principales nouveautés classes paramétrées : generics encapsulation des valeurs de types primitifs : auto[un]boxing itération sur les boucles types énumérés

Plus en détail

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET I. INTRODUCTION 1.1. HISTORIQUE 1991: Concepts Java pour Sun -conception d'un langage pour des appareils électroniques(code embarqué) -syntaxe proche du C++

Plus en détail

Bases de programmation. Cours 5. Structurer les données

Bases de programmation. Cours 5. Structurer les données Bases de programmation. Cours 5. Structurer les données Pierre Boudes 1 er décembre 2014 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Types char et

Plus en détail

Flux de données Lecture/Ecriture Fichiers

Flux de données Lecture/Ecriture Fichiers Flux de données Lecture/Ecriture Fichiers 1 Un flux de données est un objet qui représente une suite d octets d un programme pour une certaine destination ou issus d une source pour un programme flux d

Plus en détail

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/2012. 1 - Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/2012. 1 - Vue générale 2 - Mon premier programme 3 - Types de Programme Java 1 - Vue générale 2 - Mon premier programme 3 - Types de Programme 1 2 c est quoi? Technologie développée par SUN Microsystems lancée en 1995 Dans un des premiers papiers* sur le langage JAVA, SUN le décrit

Plus en détail

Programmation Orientée Objet

Programmation Orientée Objet Université de Pau et des Pays de l Adour Institut Universitaire de Technologie des Pays de l Adour Département Réseaux et Télécommunications 371, rue du Ruisseau BP 201 40004 Mont-de-Marsan Cedex tél :

Plus en détail

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3. 1. Structure d un programme C Un programme est un ensemble de fonctions. La fonction "main" constitue le point d entrée pour l exécution. Un exemple simple : #include int main() { printf ( this

Plus en détail

Remote Method Invocation (RMI)

Remote Method Invocation (RMI) Remote Method Invocation (RMI) TP Réseau Université Paul Sabatier Master Informatique 1 ère Année Année 2006/2007 Plan Objectifs et Inconvénients de RMI Fonctionnement Définitions Architecture et principe

Plus en détail

Gestion distribuée (par sockets) de banque en Java

Gestion distribuée (par sockets) de banque en Java Gestion distribuée (par sockets) de banque en Java Université Paris Sud Rappel sur la solution locale de gestion simple de banque L objet de cet exercice était de créer une application java qui implante

Plus en détail

1 Définition d une classe en Java

1 Définition d une classe en Java Université Montpellier-II UFR des Sciences - Département Informatique Licence Informatique - Ingénierie Logicielle - Concepts et Outils de la modélisation et du développement de logiciel par et pour la

Plus en détail

La technologie Java Card TM

La technologie Java Card TM Présentation interne au CESTI La technologie Java Card TM [email protected] http://dept-info.labri.u-bordeaux.fr/~sauveron 8 novembre 2002 Plan Qu est ce que Java Card? Historique Les avantages

Plus en détail

Support de cours et TD Programmation Orientée Objet

Support de cours et TD Programmation Orientée Objet REPUBLIQUE TUNISIENNE MINISTERE DE L ENSEIGNEMENT SUPERIEUR ET DE LA RECHERCHE SCIENTIFIQUE Institut Supérieur des Etudes Technologiques de Médenine Département Informatique Support de cours et TD Programmation

Plus en détail