JAVA Les fondements de la programmation en JAVA

  • Slides: 69
Download presentation
JAVA Les fondements de la programmation en JAVA Olivier Le Cadet IUT Vélizy SRC

JAVA Les fondements de la programmation en JAVA Olivier Le Cadet IUT Vélizy SRC 1 Olivier Le Cadet - IUT de Vélizy

Références "Penser en Java", Bruce Heckel "Java tutorial", de sun. http: //java. sun. com/docs/books/tutorial/

Références "Penser en Java", Bruce Heckel "Java tutorial", de sun. http: //java. sun. com/docs/books/tutorial/ Cours de Miguel Tomasena, université de Chambéry. Cours de Xavier Hautbois. 18/12/2021 Olivier Le Cadet - IUT de Vélizy 2

I. Généralités sur le langage. 18/12/2021 Olivier Le Cadet - IUT de Vélizy 3

I. Généralités sur le langage. 18/12/2021 Olivier Le Cadet - IUT de Vélizy 3

Historique. Acronymes. 1991 : projet 'Green' (Sun) -> langage Oak. 1994 : création de

Historique. Acronymes. 1991 : projet 'Green' (Sun) -> langage Oak. 1994 : création de Java 1996 : Java 1. 02 (JDK 1. 02 : Java Development Toolkit). 1998 : Java 2 Playground (J 2 SE 1. 2 : Java 2 Platform, Standard Edition) 2004 : Java 5 Tiger (J 2 SE 1. 5) 18/12/2021 Olivier Le Cadet - IUT de Vélizy 4

Caractéristiques JVM : Java Virtual Machine Indépendant des plateformes, portable Mi-interprété, Mi compilé. Nombreuses

Caractéristiques JVM : Java Virtual Machine Indépendant des plateformes, portable Mi-interprété, Mi compilé. Nombreuses bibliothèques (API) disponibles. Multitâche (réalise du multi-threading). Distribué Robuste. Pas de pointeurs. Adapté pour des applications web. - Assez lent. Gourmand en mémoire. 18/12/2021 Olivier Le Cadet - IUT de Vélizy 5

Robustesse Langage fortement typé. Compilateur contraignant -> conduit à bien programmer. Pas d'accès direct

Robustesse Langage fortement typé. Compilateur contraignant -> conduit à bien programmer. Pas d'accès direct à la mémoire (pas de pointeurs). Gestion de la mémoire par un "ramasse-miettes" (garbage collector). Mécanismes d'exception (division par 0, accès à une référence null, …). Seules conversions sûres sont automatiques. 18/12/2021 Olivier Le Cadet - IUT de Vélizy 6

Fonctionnement d'un programme java. La JVM. est identique sous tous les environnements. fichier. class

Fonctionnement d'un programme java. La JVM. est identique sous tous les environnements. fichier. class l'utilisateur installe la JVM propre à son système. Celle-ci interprète le bytecode (pseudo-code) contenu dans fichier. class. 18/12/2021 Olivier Le Cadet - IUT de Vélizy 7

Les outils http: //www. javasoft. com (Site officiel; JDK -> interpréteurs (java. exe), compilateur

Les outils http: //www. javasoft. com (Site officiel; JDK -> interpréteurs (java. exe), compilateur (javac. exe), appletviewer. exe…). IDE : ce sont les environnements de développement (Integrated Development Environment). Ils facilitent l'écriture des algorithmes. 18/12/2021 IDE Gratuits : Eclipse (http: //www. eclipse. org/), Net. Beans IDE commerciaux : Jbuilder (Borland), Forte (Sun), etc… Olivier Le Cadet - IUT de Vélizy 8

Java est orienté objet Dans un programme java, comme nous le verrons, on va

Java est orienté objet Dans un programme java, comme nous le verrons, on va définir différents objets (des classes), en leur donnant des attributs qui décrivent leur état, et des méthodes qui indiquent les actions qu'ils peuvent faire (ex: chat…). Ainsi, certains objets déjà définis peuvent être réutilisés: java offre de nombeuses API (bibliothèques) dans lesquelles sont prédéfinis des objets bien utiles (vecteurs, objets pour gérer les entrées-sorties, etc…) Java fournit, de base de nombreux packages, c'est-à-dire des ensembles de classes utiles déjà définies. Les Java Foundation Classes (JFC, à installer, intégrées au kit de développement à partir de java 2 -> les SDK contiennent les JFC) contiennent d'autres objets importants. 18/12/2021 Olivier Le Cadet - IUT de Vélizy 9

II. Types et variables 18/12/2021 Olivier Le Cadet - IUT de Vélizy 10

II. Types et variables 18/12/2021 Olivier Le Cadet - IUT de Vélizy 10

 Instruction : Instruction, déclaration. Une instruction est une ligne de code; elle se

Instruction : Instruction, déclaration. Une instruction est une ligne de code; elle se termine par un point-virgule ; Les variables sont des lettres qui pourront prendre différentes valeurs, il faut leur associer un type (entier, flottant…). Ce sont des instructions particulières, les déclarations, qui permettent de les définir. Déclaration : La déclaration est obligatoire, précédée du type : int i; i pourra prendre dans la suite n'importe quelle valeur entière. Règles de nommage : lettres et chiffres, _, -, … pas de Le Cadet - IUT de Vélizy chiffre en premier. Olivier Sensible à la casse.

Types de données Java est fortement typé (typage explicite) Java définit différent types de

Types de données Java est fortement typé (typage explicite) Java définit différent types de base : Entiers (byte, short, int, long) : int j= -152; octets 1, 2, 4, 8 Flottants (float, ou double) : octets float a=13. 2; 4 ou 8 Caractère (char) : char c='o'; 2 octets Booléens (boolean) : true, false 1 octet Les variables d'autres types sont en fait des références vers des objets ou des Oliviertableaux. Le Cadet - IUT de Vélizy

conversion de types primitifs (casting) Conversions implicites : int i=3; double x=i; // i

conversion de types primitifs (casting) Conversions implicites : int i=3; double x=i; // i est préalablement converti en un double. Conversions explicites : cast. int i=3; double x=1. 333; i=(int) x; // i prend la valeur 1. 18/12/2021 Olivier Le Cadet - IUT de Vélizy 13

 Opérateurs numériques : Les nombres Affectation : = Calcul : + - *

Opérateurs numériques : Les nombres Affectation : = Calcul : + - * / Combiné : += Modulo : % Comparaison : == >= != Incrémentation/décrémentation : ++ -- Piège 1 : ne SURTOUT pas confondre = et == !! Exemple : int a = 1; a++; -= *= < /= <= > Olivier Le Cadet - IUT de Vélizy

 Pour comparer, ou répéter plusieurs fois (i est Tests et boucles alors le

Pour comparer, ou répéter plusieurs fois (i est Tests et boucles alors le compteur). Piège 2 : ne pas oublier les parenthèses if ( …) for (i=0; i<100; i++){. . . } } else{ if (a>10){ switch(var){ case 'a' : . . . } break; default: . . . break; Olivier Le Cadet - IUT de Vélizy while (i<100){

Exercices 1. Que valent a et b après les trois instructions : a=1; b=2+a;

Exercices 1. Que valent a et b après les trois instructions : a=1; b=2+a; a+=b; 2. Ecrivez un bout de code, qui en fonction de la valeur d'une variable jour (entier compris entre 1 et 7) affiche le jour de la semaine. 3. Faites afficher la table de multiplication par 7. Olivier Le Cadet - IUT de Vélizy

III. Les tableaux, les chaînes de caractères. 18/12/2021 Olivier Le Cadet - IUT de

III. Les tableaux, les chaînes de caractères. 18/12/2021 Olivier Le Cadet - IUT de Vélizy 17

Tableaux: initialisation, déclaration. Initialisation : int tab[] = new int[10]; // 1 dimension, 10

Tableaux: initialisation, déclaration. Initialisation : int tab[] = new int[10]; // 1 dimension, 10 places int[] tab = new int[10]; int[] tab 2 = {1, 2, 3, 4, 5, 6, 0}; int[][] tab 3 ={{8, 1}, {4}, {1, -3, 2}}; Accès aux éléments tab[0]=3; tab[1]=2; tab 3[0][0]=2; // On définit les 2 premiers élmts de tab remplace le 8 par un 2 Pièges : un tableau commence à l'indice 0! La longueur n'est pas dynamique, on l'obtient ainsi: int longueur=tab. length; 18/12/2021 Olivier Le Cadet - IUT de Vélizy 18

Tableaux : un exemple public class Moyenne{ public static void main(String[] args){ float moy=0;

Tableaux : un exemple public class Moyenne{ public static void main(String[] args){ float moy=0; int tab[]={8, 12, 14. 4, 2}; for (int i=0; i<tab. length; i++){ moy+=tab[i]; } moy/=4; System. out. println("moyenne : "+ moy); } } 18/12/2021 Olivier Le Cadet - IUT de Vélizy 19

Les chaînes de caractères En java, c'est un objet défini : par la classe

Les chaînes de caractères En java, c'est un objet défini : par la classe String (chaînes constantes) String. Buffer pour des chaînes variables. String s="abc"; //String s =new String("abc"); L'opérateur + permet de concaténer des chaînes : int i=1; String s="abc"+i; La classe String définit des méthodes (passer en minuscules, compter le nombre de lettres, comparer…). Exemple : String s="ABC". to. Lower. Case(); 18/12/2021 Olivier Le Cadet - IUT de Vélizy 20

IV. Les classes 18/12/2021 Olivier Le Cadet - IUT de Vélizy 21

IV. Les classes 18/12/2021 Olivier Le Cadet - IUT de Vélizy 21

Les classes En java, tout le code est inclus dans des classes. "Tout est

Les classes En java, tout le code est inclus dans des classes. "Tout est classe en java". Les classes représentent des objets, caractérisés par un état actuel (les attributs) et des actions qu'ils peuvent effectuer (méthodes). class Chat{ int nombre. Pattes=4; String couleur. Poil; Attributs void manger(){…} // Instructions indiquant à un chat quoi faire pour manger void miauler(){…} } 18/12/2021 Méthodes Olivier Le Cadet - IUT de Vélizy 22

Les attributs Ce sont des variables caractérisant l'objet décrit par la classe. Syntaxe :

Les attributs Ce sont des variables caractérisant l'objet décrit par la classe. Syntaxe : <modificateur d'accès><type><nom> Exemples : private String nom; public int nombre. Pattes; Les modificateurs d'accès indiquent la visibilité des attributs ou des méthodes qu'ils caractérisent (voir plus loin). 18/12/2021 Olivier Le Cadet - IUT de Vélizy 23

Les méthodes Ce sont des fonctions, définissant les actions que peut accomplir l'objet décrit

Les méthodes Ce sont des fonctions, définissant les actions que peut accomplir l'objet décrit par la classe. Une fonction prend en entrée certains paramètres, les arguments, les traite, et retourne une valeur de sortie (qui peut être un tableau). Pour retourner une valeur, on utilise le mot clé return. Si une fonction ne retourne rien le type de retour est void. Syntaxe : <modificateur d'accès><type retourné>(<arguments>){ <instructions> } 18/12/2021 Olivier Le Cadet - IUT de Vélizy 24

Portée des variables Passage par valeur : Les paramètres d'entrée d'une méthode sont copiés

Portée des variables Passage par valeur : Les paramètres d'entrée d'une méthode sont copiés puis on utilise à l'intérieur de la méthode cette copie. Les paramètres d'entrée ne sont donc pas modifiés en sortie. Variable locale : une variable déclarée dans un bloc d'instruction (dans des accolades {. . }) n'est connue que dans ce bloc. Donc, une variable déclarée dans une méthode n'est connue que dans cette méthode. Variable globale : Une variable définie en dehors de toute méthode ou de tout bloc d'instruction est visible dans toute la classe qui la contient. 18/12/2021 Olivier Le Cadet - IUT de Vélizy 25

Exemples de méthodes Exemple 1 : private String presente. Toi(String nom){ return "Je m'appelle

Exemples de méthodes Exemple 1 : private String presente. Toi(String nom){ return "Je m'appelle "+nom+". "; } Exemple 2 : public double calcule. Perimetre(double rayon){ return 2*Math. PI*rayon; } Exemple 3 : définissez une méthode qui inverse les deux éléments d'un tableau à deux cases (Entrée? Sortie? Prototype de la méthode? ). 18/12/2021 Olivier Le Cadet - IUT de Vélizy 26

Utilisation d'une classe Une fois notre classe créée, comment l'utiliser? La classe Chat définit

Utilisation d'une classe Une fois notre classe créée, comment l'utiliser? La classe Chat définit le comportement général de tous les chats : si l'on veut créer un chat en particulier il faut créer une instance de la classe avec l'opérateur new. Chat C 1; Chat C 2; // rien n'a été crée. C 1 et C 2 seront des chats. C 1=new Chat(); // C'est là qu'est créé une instance de chat. Ce qui suit l'opérateur new, c'est le nom d'une méthode particulière, qui a le même nom que la classe : c'est le constructeur. Le constructeur est la méthode qui est appelée lors de la création d'un objet par l'opérateur new. 18/12/2021 Olivier Le Cadet - IUT de Vélizy 27

Constructeurs 18/12/2021 Surcharge : Il peut y avoir plusieurs constructeurs avec un nombre d'arguments

Constructeurs 18/12/2021 Surcharge : Il peut y avoir plusieurs constructeurs avec un nombre d'arguments différents Chat() construit un Chat(String nom) construit un chat qui a déjà un nom. Un constructeur doit porter le même nom que la classe. Un constructeur ne retourne aucun type (on n'utilise pas void non plus). Olivier Le Cadet - IUT de Vélizy 28

Un autre exemple : cercle (fichier Cercle. java). public class Cercle{ private double x,

Un autre exemple : cercle (fichier Cercle. java). public class Cercle{ private double x, y; // Le centre private double rayon; // Le rayon // méthodes public double perimetre(){ return 2*Math. PI*rayon; } public void affiche(){ System. out. println("Cercle de centre ( "+x+" , "+y+")"+"et de rayon "+rayon); } public Cercle(){ rayon=1; } public Cercle(double x 0, double y 0, double r){ x=x 0; y=y 0; rayon=r; } } // Fin de la classe Cercle 18/12/2021 Olivier Le Cadet - IUT de Vélizy 29

Instanciation de la classe Cercle Un autre constructeur possible: public Cercle(double rayon){this. rayon=rayon}; Le

Instanciation de la classe Cercle Un autre constructeur possible: public Cercle(double rayon){this. rayon=rayon}; Le mot clé this représente, au moment de l'exécution, l'objet courant. Rayon de ce cercle. Cercle C 1=new Cercle(8. 0); // C 1 de rayon 8 Cercle C 2=new Cercle(1. 0, 2. 0); // C 2 de centre (1, 1) et de rayon 2 18/12/2021 Olivier Le Cadet - IUT de Vélizy 30

Accès aux attributs et aux méthodes d'une classe. Syntaxe : mon. Objet. attribut mon.

Accès aux attributs et aux méthodes d'une classe. Syntaxe : mon. Objet. attribut mon. Objet. ma. Methode(paramètres) Exemples : Cercle 1=new Cercle(1. 0, 2. 0); Cercle 1. x=1. 0; Impossible ici car x est private! double perimetre=Cercle 1. perimetre(); 18/12/2021 Olivier Le Cadet - IUT de Vélizy 31

Encapsulation ; visibilité des méthodes et attributs. Certains attributs, certaines méthodes d'une classe n'ont

Encapsulation ; visibilité des méthodes et attributs. Certains attributs, certaines méthodes d'une classe n'ont pas à être connues d'un utilisateur => il faut les rendre inaccessibles. Quatre niveaux de protection : private, protected, public, package. impossible car rayon est private. Il faut créer une méthode get. Rayon() publique permettant d'obtenir le rayon : double diametre=2*Cercle 1. rayon; double diametre=2*Cercle 1. get. Rayon(); 18/12/2021 Olivier Le Cadet - IUT de Vélizy 32

Encapsulation; les 4 niveaux de protection. 18/12/2021 Olivier Le Cadet - IUT de Vélizy

Encapsulation; les 4 niveaux de protection. 18/12/2021 Olivier Le Cadet - IUT de Vélizy 33

Démarrage d'un programme java Démarrage d'une applet java : Le navigateur repère la balise

Démarrage d'un programme java Démarrage d'une applet java : Le navigateur repère la balise <applet> et créé une instance de l'applet. puis l'initialise (méthode init()) puis la démarre (méthode start()) Démarrage d'une application java : Une des classes doit posséder une méthode main public static void main(String args[]) On appelle la machine virtuelle java (java) en lui donnant le nom de la classe qui contient le main. Elle exécute les instructions présentes dans le main. 18/12/2021 Olivier Le Cadet - IUT de Vélizy 34

Un exemple fichier Cercle. java public class Cercle{. . voir avant. . } fichier

Un exemple fichier Cercle. java public class Cercle{. . voir avant. . } fichier Test. java public class Test{ public static void main(String args[]){ Cercle C 1=new Cercle (-1. 0, 2. 0); C 1. affiche(); } } 18/12/2021 Olivier Le Cadet - IUT de Vélizy 35

Le mot clé static Caractérise les attributs ou les méthodes (ou des classes). Un

Le mot clé static Caractérise les attributs ou les méthodes (ou des classes). Un attribut ou une méthode statique n'a pas besoin d'être instancié pour être utilisé. Exemple : public class Personne{ public static String nom="Dupont"; } On accèdera à nom en faisant Personne. nom et non Personne 18/12/2021 P 1=new Personne(); puis P 1. nom Olivier Le Cadet - IUT de Vélizy 36

Le mot clé final Caractérise des attributs ou des méthodes (ou des classes). Permet

Le mot clé final Caractérise des attributs ou des méthodes (ou des classes). Permet de définir cet attribut ou cette méthode comme étant constante : impossible de changer la valeur d'un objet déclaré comme final. public final double RAYON_MAX=100; Par convention, les constantes sont écrites en majuscule. 18/12/2021 Olivier Le Cadet - IUT de Vélizy 37

Conventions de programmation Les constantes en majuscules Première lettre du nom de la classe

Conventions de programmation Les constantes en majuscules Première lettre du nom de la classe : en majuscule (class Chat{. . } et non class chat{. . }) Nom de variables : première lettre en minuscule. S'il y a plusieurs mots, les premières lettres des mots suivants sont en majuscule. Ex: Chat mon. Chat; int mon. Entier. Positif; Bien indenter le code : ce qui est dans une même boucle est mis en retrait par rapport au reste du code. 18/12/2021 Olivier Le Cadet - IUT de Vélizy 38

V. L'héritage 18/12/2021 Olivier Le Cadet - IUT de Vélizy 39

V. L'héritage 18/12/2021 Olivier Le Cadet - IUT de Vélizy 39

L'héritage. extends Certains objets sont des cas particuliers, des souscatégorie, d'un autre type d'objet.

L'héritage. extends Certains objets sont des cas particuliers, des souscatégorie, d'un autre type d'objet. Un carré est un rectangle. Un chat est un animal. Plutôt que de réécrire entièrement une classe Chat si l'on dispose déjà d'une classe Animal, on peut en hériter. Seul ce qui caractérise un chat devra être réécrit. public class Chat extends Animal{ … } Une sous-classe (ou classe fille) hérite des attributs et méthodes de sa classe mère (aussi appelée parfois super-classe). 18/12/2021 Olivier Le Cadet - IUT de Vélizy 40

L'héritage. Intérêt : Il n'y a pas tout à réécrire : on utilise le

L'héritage. Intérêt : Il n'y a pas tout à réécrire : on utilise le code des classes parents. Supprime des redondances dans le code. Permet de structurer logiquement son code. Attention : pas d'héritage multiple en java. Une classe a une seule classe mère. Redéfinition : on peut redéfinir les méthodes de la classe mère, qui sont alors masquées. Object : toutes les classes héritent d'une classe Object définie dans java. lang 18/12/2021 Olivier Le Cadet - IUT de Vélizy 41

Héritage – exemple (classe mère) public class Animal{ private String nom; private int nombre.

Héritage – exemple (classe mère) public class Animal{ private String nom; private int nombre. Pattes; private String categorie; //mammifère, reptile, . . public Animal(String nom, String categorie){ this. nom=nom; this. categorie=categorie; } public Animal(String nom){ this. nom=nom; this. categorie="indeterminé"; } public void set. Nom(String nom){this. nom=nom; } public String get. Nom(){ return this. nom; } public String get. Categorie(){ return this. categorie; } public void parler(){System. out. println("groumph"); } public String to. String(){return "Catégorie: " +categorie+"nom: "+nom; } } 18/12/2021 Olivier Le Cadet - IUT de Vélizy 42

Héritage – la classe fille public class Chat extends Animal{ private String couleur. Poil;

Héritage – la classe fille public class Chat extends Animal{ private String couleur. Poil; public Chat(String couleur, String nom){ super(nom, "mammifère"); //super appelle le constructeur this. couleur. Poil=couleur; } public Chat(String nom){ super(nom); } public void set. Nom(String nom){this. nom=nom; } public void parler(){System. out. println("miaou"); } public String to. String(){return "Catégorie: " parent +this. get. Categorie()+" nom: "+this. get. Nom(); } } 18/12/2021 Olivier Le Cadet - IUT de Vélizy 43

Héritage : la classe de test class Essai{ public static void main(String[] args){ Chat

Héritage : la classe de test class Essai{ public static void main(String[] args){ Chat C 1=new Chat("roux", "kochka"); System. out. println(C 1. to. String()); C 1. set. Nom("liloo"); System. out. println(C 1. to. String()); } } 18/12/2021 Olivier Le Cadet - IUT de Vélizy 44

Le mot clé super Dans le constructeur : permet d'appeler le constructeur parent. public

Le mot clé super Dans le constructeur : permet d'appeler le constructeur parent. public Chat(String couleur, String nom){ super(nom, "mammifère"); //super appelle le this. couleur. Poil=couleur; } constructeur parent Dans une méthode : permet d'appeler une méthode telle qu'elle est définie dans la classe mère. public String to. String(){ return super. to. String()+ " couleur de poil : "+couleur. Poil; } 18/12/2021 Olivier Le Cadet - IUT de Vélizy 45

Constructeurs fils. Règles d'utilisation de super() et de this() Les constructeurs ne sont pas

Constructeurs fils. Règles d'utilisation de super() et de this() Les constructeurs ne sont pas hérités! super() passe la main au constructeur de la classe mère. L'appel super() doit être la première instruction du constructeur. passe la main à un autre constructeur de la classe considéré. Cela doit être la première instruction. this() 18/12/2021 Olivier Le Cadet - IUT de Vélizy 46

Polymorphisme Un chat défini par la classe Chat peut, si besoin, être considéré comme

Polymorphisme Un chat défini par la classe Chat peut, si besoin, être considéré comme un animal défini par Animal => polymorphisme. a est dans l'exemple un animal mais aussi un chat: (Chat)a permet de l'utiliser comme Chat c 1=new Chat("kochka", "blanc"); Animal a=c 1; // Utilisation du polymorphisme System. out. println(a. to. String()); System. out. println(a. get. Poil()); // ERREUR //get. Poil() pas défini pour un animal. System. out. println(((Chat)a). get. Poil()); //OK //On indique ici que a doit être regardé comme un chat 18/12/2021 Olivier Le Cadet - IUT de Vélizy 47

Polymorphisme Un chat peut être considéré comme un animal (plus général), mais un animal

Polymorphisme Un chat peut être considéré comme un animal (plus général), mais un animal ne peut pas être considéré comme un chat. Chat C=new Animal("miaou"); // ERREUR // On ne peut convertir un animal en chat Lors de l'exécution, si deux méthodes existent, c'est la plus spécifique qui est exécutée (cf to. String() de l'exemple). 18/12/2021 Olivier Le Cadet - IUT de Vélizy 48

Classes abstraites. abstract public abstract class Classe. Abstraite{. . . } Une classe abstraite

Classes abstraites. abstract public abstract class Classe. Abstraite{. . . } Une classe abstraite définit le prototype de certaines méthodes abstraites (type des paramètres d'entrée et de retour, nom des méthodes), ma is pas leur implémentation. Une classe qui contient des méthodes abstraites doit être abstraite. Cette classe ne peut pas être instancié. Elle doit être héritée. Les classes filles doivent implémenter les méthodes abstraites de la classe abstraite (sinon elle est abstraite également). 18/12/2021 Olivier Le Cadet - IUT de Vélizy 49

Les interfaces Pas d'héritage multiple en java (une seule classe mère). Les interfaces permettent

Les interfaces Pas d'héritage multiple en java (une seule classe mère). Les interfaces permettent de contourner le problème. Définies avec le mot clef interface au lieu de class. caractéristiques : 18/12/2021 On définit les méthodes de l'interface mais pas leur code (comme pour les classes abstraites). Les méthodes doivent être public Tous les attributs doivent être public et static. Une interface peut hériter d'un nombre quelconque d'interfaces. interface C extends A, B {. . . } Olivier Le Cadet - IUT de Vélizy 50

Relations classes-interfaces Une interface ne peut hériter d'une classe, mais une classe peut implanter

Relations classes-interfaces Une interface ne peut hériter d'une classe, mais une classe peut implanter (implements) une interface. 18/12/2021 public class A implements I 1, I 2, I 3 {. . . } La classe doit alors implémenter toutes les méthodes définies dans l'interface. "Contrat" à remplir. Définit un fonctionnement commun à toutes les classes qui implémentent l'interface. Une classe peut implémenter un nombre quelconque d'interfaces. Olivier Le Cadet - IUT de Vélizy 51

Un exemple (de "penser en java") import java. util. *; interface Can. Fight {

Un exemple (de "penser en java") import java. util. *; interface Can. Fight { void fight(); } interface Can. Swim { void swim(); } interface Can. Fly { void fly(); } class Action. Character { public void fight() {. . . } } class Hero extends Action. Character implements Can. Fight, Can. Swim, Can. Fly { public void swim() {. . . } public void fly() {. . . } } 18/12/2021 Olivier Le Cadet - IUT de Vélizy 52

Interface : exemple (fin) public class Adventure { static void t(Can. Fight x) {

Interface : exemple (fin) public class Adventure { static void t(Can. Fight x) { x. fight(); } static void u(Can. Swim x) { x. swim(); } static void v(Can. Fly x) { x. fly(); } static void w(Action. Character x) { x. fight(); } public static void main(String[] args) { Hero h = new Hero(); t(h); // Le traite comme un Can. Fight u(h); // Le traite comme un Can. Swim v(h); // Le traite comme un Can. Fly w(h); // Le traite comme un Action. Character } } Ainsi, grâce au polymorphisme de java, un héros peut être considéré comme Action. Character, comme Can. Fly (entité pouvant voler), comme Can. Swim, ou comme Can. Fight selon les besoins. Oblige l'utilisateur de l'interface à implémenter les méthodes de l'interface, et donc à se conformer à un certain type de fonctionnement. 18/12/2021 Olivier Le Cadet - IUT de Vélizy 53

VI. Les exceptions 18/12/2021 Olivier Le Cadet - IUT de Vélizy 54

VI. Les exceptions 18/12/2021 Olivier Le Cadet - IUT de Vélizy 54

Les exceptions Lors de l'exécution d'un programme, il existe parfois des situations exceptionnelles à

Les exceptions Lors de l'exécution d'un programme, il existe parfois des situations exceptionnelles à gérer: Dépassements de tableau Divisions par zéro Accès aux fichiers On peut alors : 18/12/2021 Ne rien faire Interrompre l'exécution normale, traiter le problème (gérer l'exception) et reprendre l'exécution. Olivier Le Cadet - IUT de Vélizy 55

Les exceptions Certaines exceptions sont lancées lors d'événements inattendus : / par 0 (Arithmetic.

Les exceptions Certaines exceptions sont lancées lors d'événements inattendus : / par 0 (Arithmetic. Exception), dépassement de tableau (Index. Out. Of. Bound. Exception), … Les exceptions dérivent toutes de la classe throwable 18/12/2021 Olivier Le Cadet - IUT de Vélizy 56

Capture des exceptions try{ // … Code où une exception risque d'être levée }

Capture des exceptions try{ // … Code où une exception risque d'être levée } catch (Exception e){ // … Instructions à exécuter en cas d'erreurs // (l'exception a effectivement été levée) } finaly{ // Optionnel. Instructions exécutés dans tous les cas. } 18/12/2021 Olivier Le Cadet - IUT de Vélizy 57

Exemple class Test. Exception{ public static void main (String args[]){ try{ int tab[]=new int[3];

Exemple class Test. Exception{ public static void main (String args[]){ try{ int tab[]=new int[3]; tab[1]=1; tab[2]=2; tab[3]=4; } catch (Array. Index. Out. Of. Bounds. Exception e){ System. out. println("Dépassement d'indice!"); } } } 18/12/2021 Olivier Le Cadet - IUT de Vélizy 58

relayer (throws) et lever (throw) une exception Il est possible de relayer, sans la

relayer (throws) et lever (throw) une exception Il est possible de relayer, sans la traiter, une exception (throws) : void ma. Methode throws IOException{. . . } L'exception, si elle survient, est alors transmise, elle peut-être traitée plus tard. Il est possible de définir une nouvelle exception puis de la lever : 18/12/2021 public class Mon. Exception extends Exception{ public Strig to. String(){return("mon problème")} } if (machin==0) throw new Mon. Exception(); Olivier Le Cadet - IUT de Vélizy 59

VII. Librairie de classes (l'API) 18/12/2021 Olivier Le Cadet - IUT de Vélizy 60

VII. Librairie de classes (l'API) 18/12/2021 Olivier Le Cadet - IUT de Vélizy 60

Les packages Package Regroupement de classe Ranger les classes en package permet De structurer

Les packages Package Regroupement de classe Ranger les classes en package permet De structurer le projet Proposer aux utilisateurs un ensemble de classe cohérent (thématique commune) Sécurité : renforce le mécanisme de portée. Un paquetage contient des classes et des souspaquetages. Un package porte le nom du répertoire qui l'accueille. 18/12/2021 Olivier Le Cadet - IUT de Vélizy 61

Principaux packages de base java. lang : types de base (Object), Threads, Exception… La

Principaux packages de base java. lang : types de base (Object), Threads, Exception… La base. java. util : Vector, Hashtable, Date… java. applet : gestionnaire d'applets. java. awt : interfaces graphiques. java. io : entrées/sorties. java. net : socket, URL, … java. sql : accès aux bases de données. … Gestion des couleurs : java. awt. Color (classe Color du package java. awt) 18/12/2021 Olivier Le Cadet - IUT de Vélizy 62

Inclure un package Définir un package : package SRC 1. gr. A. tp 1;

Inclure un package Définir un package : package SRC 1. gr. A. tp 1; public class. . { … } Importer un package : import Accéder à la classe Date du package java. util : java. util. Date date. Debut; 18/12/2021 Ou sinon mettre au début du fichier : import java. util. Date ou import java. util. * pour importer toutes les classes de java. util. On peut alors écrire : Date date. Debut; Olivier Le Cadet - IUT de Vélizy 63

package java. lang Arborescence des classes java : http: //java. sun. com/j 2 se/1.

package java. lang Arborescence des classes java : http: //java. sun. com/j 2 se/1. 4. 2/docs/api/ java. lang contient les classes Object, Class, Math, System, String. Buffer, Thread, Exception, Error, … 18/12/2021 Olivier Le Cadet - IUT de Vélizy 64

Classe Object C'est la classe d'où dérivent toutes les autres classes. Méthodes : :

Classe Object C'est la classe d'où dérivent toutes les autres classes. Méthodes : : renvoie un objet Class (mon. Objet. get. Class(). get. Name(); ) get. Class() equals() : comparaison de deux objets (obj 1. equals(obj 2); ) finalize() ; appelé lorsque le ramasse-miettes doit récupérer l'emplacement d'un objet. clone() : renvoie un second objet identique au premier (q=p. clone(); ) 18/12/2021 Olivier Le Cadet - IUT de Vélizy 65

Classe String : quelques méthodes. char. At(int) : renvoie le caractère à l'indice spécifié.

Classe String : quelques méthodes. char. At(int) : renvoie le caractère à l'indice spécifié. equals(String) : s 1. equals(s 2) true si s 1 et s 2 identiques index. Of(String) : s 1. index. Of(s 2) indice de la première occurrence de s 2 dans s 1. length() : s 1. length() longueur de s 1. replace(char, char) : s 1. replace('a', 'b') change tous les a en b dans s 1 et renvoie la nouvelle chaîne. sub. String(int, int) : s 1. substring(1, 3) renvoie la souschaîne de s 1 comprise entre le 2ème et le 4ème caractère. trim() : s 1. trim() : enlève les espaces blancs en début et fin de chaîne. 18/12/2021 Olivier Le Cadet - IUT de Vélizy 66

Integer, Float, Double, System… parse. Int(String) : méthode abstraite de la classe Integer. int

Integer, Float, Double, System… parse. Int(String) : méthode abstraite de la classe Integer. int i=Integer. parse. Int("1") va convertir la chaîne argument en un entier (type primitif). parse. Float(String) : float f=Float. parse. Float("1. 1") in, out, err : attributs de System. out et err sont des objets Print. Stream. in: entrée standard (clavier). out: sortie standard. err: sortie d'erreur standard. println() : méthode de la classe Print. Stream. Affichage. 18/12/2021 Olivier Le Cadet - IUT de Vélizy 67

Classe Math Ses attributs et méthodes sont statiques : Math. PI, Math. E. Autres

Classe Math Ses attributs et méthodes sont statiques : Math. PI, Math. E. Autres méthodes (statiques) : 18/12/2021 sin(double), cos(double), tan(double) exp(double), log(double), sqrt(double) floor(double) // partie entière inférieure pow(double a, double b) // a puissance b random() round(double), abs(double), etc… Olivier Le Cadet - IUT de Vélizy 68

package java. util: Vector, Random, Date, Calendar… Vector : collections d'objets (taille dynamique) Object

package java. util: Vector, Random, Date, Calendar… Vector : collections d'objets (taille dynamique) Object add. Element(Object) : v. add. Element(mon. Objet). Ajouter mon. Objet dans v. Object first. Element() : v. first. Element() retourne le premier objet de v. int index. Of(Object) : void insert. Element. At(Object, int) : void remove. Element(Object) : void remove. Element. At(int) : int size() : v. size() -> taille de v. Un vecteur peut stocker des objets de toutes sortes (mais pas de type primitifs : pas de int, utiliser des Integer). 18/12/2021 Olivier Le Cadet - IUT de Vélizy 69