1 / 81

JAVA Le cœur du langage

JAVA Le cœur du langage. Programmation Objet : Objectifs. Simplifier Code plus lisible Code facilement maintenable Code plus « humain » Organiser Développement Suivit ==> Projets Mieux Gérés ==> Gains. Classes et Objet. En java tout est objet Tout objet est défini par une classe

hung
Download Presentation

JAVA Le cœur du langage

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. JAVALe cœur du langage

  2. Programmation Objet : Objectifs • Simplifier • Code plus lisible • Code facilement maintenable • Code plus « humain » • Organiser • Développement • Suivit ==> Projets Mieux Gérés ==> Gains

  3. Classes et Objet • En java tout est objet • Tout objet est défini par une classe • Classe = Type • Objet = Instance du type • Guitare c; • c=new Guitare("Fender"); c "Fender"

  4. Objets • Morceau de programme identifié par • Ses Attributs • Représentés par des variables déclarée dans l'objet • Représentent un état de l'objet • Ses méthodes • fonctions auxquelles l'objet sait répondre • Représentent un comportement de l'objet • Objet Eleve durand ? • Objet Connexion uneConnexion ? listeCours() 180 m 80 kg "Jean" getAge()

  5. Classes • Usine de fabrication d'objets • Outil du programmeur • Permet de définir le comportement des objets • Prennent la Première lettre en majuscule • Classe Elève • Classe Connexion

  6. Création d'un objet • Pour manipuler un objet, on déclare une référence sur la classe de cet objet : Circle c; • Pour créer un objet, on instancie une classe en appliquant l'opérateur new sur un de ses constructeurs. Une nouvelle instance de cette classe est alors allouée en mémoire : c = new Circle();

  7. Constructeur • Tout objet doit avoir ses valeurs initiales positionnées. Un constructeur permet de fixer ces valeurs à la création de l'objet • Toute classe possède un constructeur par défaut, implicite. Il peut être redéfini. Une classe peut avoir plusieurs constructeurs qui diffèrent par le nombre et la nature de leurs paramètres. • Un constructeur est une méthode qui possède le même nom que la classe, mais qui ne renvoie rien

  8. Création d'un objet class Circle { protected double x, y, r; public Circle(double x, double y, double r) { this.x = x; this.y = y; this.r = r; } public Circle(Circle c) { this.x = c.getX(); y=c.getY(); r=c.getR(); } public Circle() { this(0.0, 0.0, 0.0); } public double getX(){return this.x;} public double getY(){return this.y;} public double getR(){return this.r;} } Circle(double x, double y, double z) Circle(Circle c) Circle() 2 3 10 getX() getY() getR()

  9. Définition d'une classe class Circle { … /*cf précédent*/ public int perimeter(){ return (Math.PI*2*r); } public int area(){ return (Math.PI*r*r); } } Circle(double x, double y, double z) Circle(Circle c) Circle() 2 3 10 getX() getY() area() getR() perimetre()

  10. Attributs et Variables • Les attributs sont relatifs aux objets • Ils sont définis dans la classe • Les variables sont relatives à une méthode • Elles sont définies dans une méthode class Bidon { protected Toto x; public int calcul(){ int tmp=0; while(tmp < CONST_X){ x=x.ajoute(tmp); } } } calcul() x 0x123

  11. Exercice • Instancier un objet de la classe Patient, avec comme nom durand et comme prénom paul • Réaliser une classe de gestion de division

  12. Instance et Classe : statique • La classe est également vue comme un objet • Les attributs et les méthodes statiques sont associés à la classe • Toutes les instances de la classe partagent la valeur de attributs "static" • Il n'est pas nécessaire d'instancier une classe pour accéder à ses éléments statiques

  13. Exemple du mot clé statique public class Circle { public static int count = 0; public static double PI = 3.14; protected double x, y, r; public Circle(double r){this.r = r; count++;} ... /*cf ppt précédent*/ public static Circle bigger(Circle c1, Circle c2){ if (c1.r > c2.r) return c1; else return c2; } } public class UneClasseExemple{ public UneClasseExemple(){ Circle c1 = new Circle(10); Circle c2 = new Circle(20); int n = Circle.count; // n = 2 Circle c4 = Circle.bigger(c1, c2); // c4 = c2 } } bigger(Circle, Circle) count 2 4 5 1000 getX() getY() area() getR() perimetre() 2 3 10 getX() getY() area() getR() perimetre()

  14. Exercice • Réaliser la classe Division avec des méthodes statiques • Comment lancer un programme ?

  15. Enfin mon premier programme public class HelloWorld { public static void main(String [] arg){ System.out.println("Hello, World !"); } } main(String [] arg) HelloWorld HelloWorld.java Compilateur javac HelloWorld.java HelloWorld HelloWorld.class Machine Virtuelle java HelloWorld.java

  16. Composition de classe • Une classe est un agrégat d'attributs et de méthodes : les membres • Principe de COMPOSITION Patient String nom prenom Durand String getNom() String Paul

  17. D'où viennent les objets ? • Les objets n'apparaissent que s'ils sont fabriqués par quelque chose... • Et qu'on a obtenu une référence dessus (statique, récupération suite à un appel) • SI ON N'A PAS UN OBJET, IL SUFFIT DE LE FABRIQUER

  18. D'où vient une classe ? • Soit on l'a défini entièrement • Soit on nous l'a fourni • SI ON A BESOIN D'UNE CLASSE, IL SUFFIT DE L'ECRIRE • Java fournit plus de 10 000 classes dans le kit de base (bibliothèque standard) • La difficulté est d'en connaître leurs existences

  19. Communication entre objets • Les objets communiquent entre eux en s'échangeant de messages • Un message est un appel de fonction d'un objet vers un autre : « Invoquer une méthode » ==> Unique manière de communiquer entre objets Patient getNom() ListePatients String nom prenom Durand String getNom() String Paul 0x234

  20. Syntaxe d'un message • <référenceDeL'objet>.<nomDuMessage> ==> Quels sont les messages impliqués ==> Exercice : réaliser la classe Addition class PaintShopPro { Cercle leCercle=new Cercle(0,0,10); public int uneFonction() { int surface=leCercle.getArea(); return surface; } }

  21. Référence et this • Pour pouvoir accéder à un objet il faut avoir une référence dessus. • La référence est le nom qu'on lui donne localement • Si on veut se parler à soi-même on utilise « this » class Cercle { public void afficheToi() { System.out.println( "Je suis un cercle de surface"+this.getArea(); } } }

  22. Méthodes static • Les méthodes statiques peuvent elles accéder à this ?

  23. Message or Not Message Vector tmp=new Vector(); tmp.addElement("10"); c.r = 3; a = c.area(); pi = Math.PI; b = Math.sqrt(2.0); System.out.println("toto"+"titi"); System.out.println("Bonjour"); int a=2; int b=3; int c=a+b; String toto="Hello,"; String titi="World!";  String tata=toto+titi;

  24. Notion d'encapsulation • La programmation objet permet de ne rendre visible de l'extérieur que certaines parties de l'objet • L'utilisateur d'un objet n'accède qu'à sa partie publique. L'autre partie est dite privée. Partie publique Partie privée

  25. Notion d'encapsulation • Intérêts : • Modification de la partie privée, tout en gardant la même définition publique • Masquer certains détails • D'une manière générale • Tous les attributs d'une classe sont "protected" • Certaines méthodes sont "public" d'autres privées

  26. Exemple public class ClientWeb { protected void connect(String unServer){ /* ouvrir une connexion reseau */ } protected String getDocument(){ /* Demander au serveur la page */ } public String getPageWeb(String server){ this.connect(server); String tmp=this.getDocument(); return tmp; } }

  27. Surcharge de méthode • La surcharge (overloading) permet à plusieurs méthodes ou constructeurs de partager le même nom. • Pour que deux méthodes soient en surcharge il faut qu'elles aient le même nom, mais une signature différente (paramètres de la fonction)

  28. Surcharge exemple class Point { protected double x,y; public Point (){ this.x=0.0; this.y=0.0;} public Point (double x, double y){this.x=x; this.y=y} //Calcule la distance entre moi et un autre point public double distance(Point autre){ double dx=this.x-autre.getX(); double dy=this.y-autre.getY(); return Math.sqrt(dx*dx+dy*dy); } //Calcule la distance entre moi et une autre coordonnée public double distance(double x, double y){ double dx=this.x-x; double dy=this.y-y; return Math.sqrt(dx*dx+dy*dy); } //Calcule la distance entre moi et une autre coordonnée public double distance(int x, int y){ double dx=this.x-(double)x; double dy=this.y-(double)y; return Math.sqrt(dx*dx+dy*dy); } //Calcule la distance entre moi et l'origine public double distance(){ return Math.sqrt(x*x+y*y);}}

  29. Surcharge exemple • Appel • Quand une méthode est appelée le nombre et le type des arguments permettent de définir la signature de la méthode qui sera invoquée. Point p1=new Point(); Point p2=new Point(20.0, 30.0); p2.distance(p1); p2.distance(50.0, 60.0); p2.distance(50, 60); p2.distance();

  30. Les types primitifs • Types • byte : 1 octet • short : 2 octets • int : 4 octets • long : 8 octets • float : 4 octets • double : 8 octets • boolean : true false • char : 2 octets (Unicode) • Ce ne sont pas des objets java. Donc … et Pourquoi ? • Un type primitif ne prend pas de majuscule

  31. Les types primitifs • Les affectations non implicites doivent être castées (sinon erreur à la compilation). int i = 258; long l = i; // ok byte b = i; // error: Explicit cast needed to convert int to byte byte b = 258; // error: Explicit cast needed to convert int to byte byte b = (byte)i; // ok mais b = 2 • Pas de message sur un type primitif • Définition de classes Wrapper : Integer • Définition de fonctions de conversion

  32. Les classes Wrapper • Classes qui encapsulent un type de base • ==> Permettre aux classes qui manipulent des Objets de manipuler des types de base • int i=4; • Integer j=new Integer (4); • Integer k=new Integer (i);

  33. Les trois représentation d’un nombre String.valueOf(k); String k=«5»; Integer j=new Integer(5); j.toString(); Integer.toString(i); j.intValue(); Integer.parseInt(k); new Integer(i) int i=5;

  34. Passage de paramètres dans les méthodes • Le mode de passage des paramètres dans les méthodes dépend de la nature des paramètres : • par référence pour les objets • par copie pour les types primitifs public class C { void methode1(int i, StringBuffer s) { i++; s.append("d");} void methode2() { int i = 0; StringBuffer s = new StringBuffer("abc"); methode1(i, s); System.out.println("i="+ i + ", s="+ s); // i=0, s=abcd } }

  35. Principes de base • Aucune instruction en dehors d’une classe • Tous la communication se fait par échange de messages public class MaClasse{ int i=12; String toto="Bonjour"; public static void main(String [] arg){ MaClasse unRepresentant=new MaClasse(); System.out.println("Je dis : "); System.out.println(unRepresentant.disBonjour()); } public String disBonjour(){return toto;} }

  36. Résumé • Des objets, des classes pour fabriquer ces objets • Des attributs : soit des variables, soit des méthodes • L'encapsulation permet de masquer du code • Les membres static sont attachés à la classe • Seuls les types de base ne sont pas des objets • Les classes prennent leur première lettre en Majuscule • On ne travaille que sur des références d'objet sauf pour les types de base

  37. Un peu d'algorithmique Java

  38. Bases du langage • Types • byte : 1 octet • short : 2 octets • int : 4 octets • long : 8 octets • float : 4 octets • double : 8 octets • boolean : true false • char : 2 octets (Unicode) • Instructions • if • while, do while, for • selection (switch) • Opérateurs • Arithmétique : =+-*/% • Relationnels : <><= >= == != • Logiques : ! && || • Incréments : ++ -- • Bit Wise : & | ^ ~ >> << >>> • Affectation : = += -= *= /= %=

  39. Bloc de programmation • { } n ’importe où, mais la plupart du temps autour d’une classe ou d’une méthode • Aucune instruction/déclaration hors d’un bloc • Une variable peut être déclarée n’importe où dans un bloc. Elle possède la portée de ce bloc

  40. Les structures de contrôle et expression • Essentiellement les mêmes qu'en C • if, switch, for, while, dowhile • ++, +=, &&, &, <<, ?: • Fonctionnement du switch sur type primitif

  41. Les tableaux • Déclaration int[] array_of_int; // équivalent à : int array_of_int[]; Color rgb_cube[][][]; • Création et initialisation array_of_int = new int[42]; rgb_cube = new Color[256][256][256]; int[] primes = {1, 2, 3, 5, 7, 7+4}; array_of_int[0] = 3 • Utilisation int l = array_of_int.length;// l = 42 int e = array_of_int[50]; // Lève une ArrayIndexOutOfBoundsException

  42. Les exceptions (1) • Elles permettent de séparer un bloc d'instructions de la gestion des erreurs pouvant survenir dans ce bloc. try { // Code pouvant lever des IOException ou des SecurityException }catch (IOException e) { // Gestion des IOException et des sous-classes de IOException }catch (Exception e){ // Gestion de toutes les autres exceptions }finally{ // Dans tous les cas }

  43. Les exceptions (2) • Ce sont des instances de classes dérivant de java.lang.Exception • La levée d'une exception provoque une remontée dans l'appel des méthodes jusqu'à ce qu'un bloc catch acceptant cette exception soit trouvé. Si aucun bloc catch n'est trouvé, l'exception est capturée par l'interpréteur et le programme s'arrête. • L'appel à une méthode pouvant lever une exception doit : • soit être contenu dans un bloc try/catch • soit être situé dans une méthode propageant (throws) cette classe d'exception • Un bloc (optionnel) finally peut-être posé à la suite des catch. Son contenu est exécuté après un catch ou après un break, un continue ou un return dans le bloc try

  44. Les exceptions (3) class RobotLaveur { void demarre() { try { uneMachineALaver.laver(); } catch(PasDAssietteException e) { ... } catch(BrasCasseException e) { ... } finaly { ... } ... } 1 6 7 class MachineALaver { void laver() throws PasDAssietteException { ... assiettesSales.depiler(); … } } 5 4 8 2 class PileSale{... assiette depiler () throws PasDAssietteException { if (pileVide()){ throw new PasDAssietteException(« fin de pile »); } return (Assiette)elemeentSuivant(); } } 3

  45. Les unités de compilation • Le code source d'une classe est appelé unité de compilation. • Il est recommandé (mais pas imposé) de ne mettre qu'une classe par unité de compilation. • L'unité de compilation (le fichier) doit avoir le même nom que la classe qu'elle contient.

  46. Les packages définition • Unité d'organisation des classes • Organisation logique : time.clock.Watch • Organisation physique : time/clock/Watch.class • Espace de nommage hiérarchique • Description de la hiérarchie : package time.clock; • Notion de nom complet : time.clock.Watch • Les bibliothèques java sont organisées en package • java.util, java.net, org.objectweb,… • Deux classes ayant le même nom complet ne peuvent pas s'exécuter en même temps.

  47. Nom de classe : résolution • Pour résoudre un nom de classe dans une autre classe ... time.clock.Watch toto=new time.clock.Watch(); ... import time.clock.Watch; ... Watch toto=new Watch(); ... import time.clock.*; ... Watch toto=new Watch(); Clock titi=new Clock(); ... import time.*; ... Watch toto=new Watch(); Clock titi=new Clock(); ...

  48. Nom de classe : résolution • Pour résoudre le nom d'une classe soit : • On donne son nom complet lors de l'utilisation • On résout initialement son nom • On résout initialement tous les noms d'un package • Les noms des classes du package java.lang n'ont pas à être résolus • On peut donc avoir deux classes Date java.util.Date java.sql.Date

  49. Les packages : organisation graph/2D/Circle.java package graph.2D; public class Circle() { ... } graph/3D/Sphere.java package graph.3D; public class Sphere() { ... } paintShop/MainClass.java package paintShop; import graph.2D.*; public class MainClass() { public static void main(String[] args) { graph.2D.Circle c1 = new graph.2D.Circle(50) Circle c2 = new Circle(70); graph.3D.Sphere s1 = new graph.3D.Sphere(100); Sphere s2 = new Sphere(40); // error: class paintShop.Sphere not found }

  50. Où trouver une classe ? • Les outils du système cherchent toutes les classes • Compilation et Exécution : typage fort C & E • Les classes sont recherchées sur le système de fichiers • Les classes standards sont automatiquement trouvées par les outils • Pour indiquer l'endroit sur le système de fichier à partir duquel il faut chercher les classes on utilise le classpath • Fonctionnement identique au path d'exécution

More Related