1 / 194

Programmation Objet et JAVA

Programmation Objet et JAVA. Phelma 2012. Organisation du cours. 4 cours de 2h 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 7 TD de 2h Sujets donnés à l’avance

Download Presentation

Programmation Objet et JAVA

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

E N D

Presentation Transcript


  1. Programmation Objet et JAVA Phelma 2012

  2. Organisation du cours • 4 cours de 2h • 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 • 7 TD de 2h • Sujets donnés à l’avance • Une partie du code est en général donné • 1 examen de 2h • Documents : • Site : http://tdinfo.phelma.grenoble-inp.fr/2APOO/ • Le poly • Les sujets de TD • Site indispensable : • http://java.sun.com/j2se/1.5.0/docs • http://java.sun.com/javase/6/docs/api

  3. Java versus C • 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

  4. Types de base • Langage fortement typé comme C++ • huit types de base Type Taille Valeur int 4 bytes -2147483648 à + 2147483647 ( 231) short 2 bytes -32768 à +32767 long 8 bytes 263 byte 1 byte -128 à +127 float 4 bytes +/- ( 1,4.10 - 45 à 3.4 10 + 38 ) double 8 bytes +/- ( 4,94 .10 -324 à 1,79 . 10 + 308 ) char 2 bytes 65536 caractères (internationaux) boolean true or false • Valeurs extrémales par Type.MAX_VALUE, type.MIN_VALUE • char c = Byte.MAX_VALUE

  5. POO et UML Notions de base

  6. Concept de classe : le point 2D • 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 • 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

  7. Le point 2D en procédural ou en objet class point • Structure point avec champs x et y • Attributs x et y Méthodes void affiche () void translate(double,double) point homothetie(double) point symetriecentrale() Fonctions void affiche (point) void translate(point*, double,double) point homothetie(point, double) point symetriecentrale(point) • 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 • 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

  8. En C, le point 2D et ses fonctions Point : 2 coordonnées Quelles sont les actions réalisables sur un point ? typedef struct Point { /* Definition des champs d'un point */ double x; double y; } POINT; /* 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; } }

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

  10. Exemple de classe : le point 2D Point : 2 coordonnées Quelles sont les actions réalisables sur un point ? 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; } /* 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); } } Comment initialiser un point : 2 possibilités

  11. Exemple d’objet : des points particuliers 3 Points : p1 p2 p3 Creation de p1 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(); } } Affichage de p1

  12. POO : concepts de base • 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.

  13. Conception, Modèles et Diagrammes en POO • UML : Unified Modeling Langage • Langage graphique de modélisation de projet informatique orienté objet : • 1.Définition des classes/attributs et des méthodes (modèle statique) • 2.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

  14. Diagramme de classe : UML • Une classe Nom de la classe Attributs ou champs + : public # : protégé - : private méthodes

  15. Questions • Faire le diagramme de classe d’un complexe • Quels sont ses attributs ? • Donnez les prototypes de 4 méthodes utiles

  16. Notion d’objet Les classes et les objets

  17. Les classes en JAVA • 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, …) } • 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

  18. Les objets et les variables en JAVA • 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; • 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

  19. 2 22 20 8 88 80 Concept d'objet : exemple 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(); // Creation p1 p1.x=2; p1.y=8; // On change p1 p1.affiche(); p1 p1 p2 = new Point(20,80); ` p2.affiche(); p1 p2 p1.x = p1.x + 20; p1.y += 80; p1.affiche(); p1 p2=null; // l’objet pointé par p2 est libre } // les variables p2 et p1 sont détruites } p1.affiche() p2.affiche() p1.affiche()

  20. Notion d’objet Les attributs et les méthodes

  21. Accès aux membres • 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. • 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 • Comment écrire public void translate(double x, double y)

  22. 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 • 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 ? public void translate(double a, double y) { x = x + a; this.y = this.y + y; }

  23. Notion d’objet Sécurité

  24. Accès et protection • 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

  25. Accès aux membres et aux méthodes (2) 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(); } }

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

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

  28. Accesseurs et mutateurs • Classe Fraction • Attributs • num et denum • 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 accesseurgetchamp() que vous devez définir • Parfois, autoriser la modification du champ par un mutateursetchamp() 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 Mutateurs/Accesseurs Méthodes internes à la classe void init(double,double) Méthodes autorisées à l’extérieur • main() { • }

  29. Accesseurs et mutateurs 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); } };

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

  31. Notion d’objet Initialisation, construction, destruction

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

  33. Constructeur 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"); } }

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

  35. Destructeur 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()

  36. Notion d’objet Surcharge de méthodes

  37. Surcharge ou Polymorphisme 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

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

  39. Objets et références

  40. 1 2 1 2 Objets et référence ou le retour des pointeurs • 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 8 a c 2 b

  41. 2 22 20 88 8 80 Le passage d’objets en paramètres • Un objet passé en paramètre d’une méthode est passé par adresse et il peut être modifié par la fonction 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){ Point p1=null, p2=null; p1 p1 p1 = new Point(2,8); p1.affiche(); p1 p2 = new Point(20,80); ` p2.affiche(); p2 p2.ajoutemoiap(p1); // Ici p1 est modifié à cause de ajoutemoiap p1.affiche(); p1 } // les variables p2 et p1 sont détruites } p1.affiche() p2.affiche() p1.affiche()

  42. Divers

  43. Les Entrées Sorties en pratique • 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); System.out.println("Tapez une chaine"); x=clavier.nextLine(); System.out.println("Ce que vous avez ecrit : " + x); } }

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

  45. 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 !!!

  46. Exercices .. • 1. Quelle est la différence entre une classe et un objet ? • 2. Écrire les accesseurs et mutateurs d'un complexe • 3. Écrire le constructeur qui prend en paramètre 2 Doubles • 4. Écrire la méthode qui calcule le conjugué • 5. Écrire la méthode qui calcule le module • 6. Écrire le main dans cette classe • Il demande 2 doubles au clavier, créé un complexe à partir des deux doubles, calcule son module et l'affiche à l'écran, mettre la partie imaginaire à zéro et recalculer le module. • Si le main est dans la classe, il y a deux façon de mettre la partie imaginaire à zéro, si le main est dans une autre classe, il n'y en a qu'une, pourquoi ?

  47. Notion d’objet Les classes et objets composés

  48. Les points essentiels • Agrégation ou composition • Construction • Héritage • Chainage des constructeurs • Protection des attributs • Redéfinition des méthodes / Surcharge des méthodes • Polymorphisme • Liaison dynamique • Classe abstraite • Héritage multiple

  49. Des objets dans les objets • 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

  50. Classe Point 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; } };

More Related