La programmation orientée objets et le langage Java
Transcription
La programmation orientée objets et le langage Java
La programmation orientée objets et le langage Java Master BBSG 2 Laurent Tichit Département Informatique et Interactions, Faculté des Sciences de Luminy Cours 1: Java “sans les objets” c L. Tichit, 2015-2016 POO et Java 1 / 32 Java “sans les objets” Ressources Documentation www.dil.univ-mrs.fr/~tichit/java/ (cours, docs) java.sun.com : logiciel et docs, dont la doc de l’API : http://docs.oracle.com/javase/8/docs/api/ c L. Tichit, 2015-2016 POO et Java 2 / 32 Java “sans les objets” Ressources Documentation www.dil.univ-mrs.fr/~tichit/java/ (cours, docs) java.sun.com : logiciel et docs, dont la doc de l’API : http://docs.oracle.com/javase/8/docs/api/ Logiciel JRE - Java Runtime Environment : machine java + bibliothèques, pour exécuter les programmes java JDK - Java Development Toolkit : compilateur et outils pour développer (contient un JRE) éditeur de textes quelconque (bloc-notes, vi, Jext, gedit, etc.) très préférable : eclipse (EDI très puissant) c L. Tichit, 2015-2016 POO et Java 2 / 32 Java “sans les objets” Ressources Documentation www.dil.univ-mrs.fr/~tichit/java/ (cours, docs) java.sun.com : logiciel et docs, dont la doc de l’API : http://docs.oracle.com/javase/8/docs/api/ Logiciel JRE - Java Runtime Environment : machine java + bibliothèques, pour exécuter les programmes java JDK - Java Development Toolkit : compilateur et outils pour développer (contient un JRE) éditeur de textes quelconque (bloc-notes, vi, Jext, gedit, etc.) très préférable : eclipse (EDI très puissant) version courante de Java 8 (2015) : JavaSE 8 update ? ? (ou OpenJDK 8 build ? ?) Windows : jdk-8u??-windows-i586/x64.exe Ubuntu/Debian : openjdk-8-jdk c L. Tichit, 2015-2016 POO et Java 2 / 32 Java “sans les objets” Le langage Java créé par James Gosling, vers 1995 chez Sun Microsystems Inc. destiné à l’informatique répartie : sécurité, réutilisabilité, portabilité langage neuf (pas de compatibilité à assurer) langage orienté objets bibliothèque très importante langage compilé et interprété par un interpréteur (appelé machine virtuelle) c L. Tichit, 2015-2016 POO et Java 3 / 32 Java “sans les objets” Java est compilé et interprété compilation : traduction texte java → bytecode interprétation : exécution du bytecode par une machine virtuelle Java (portabilité et sécurité) MaClasse.java texte MaClasse.class javac bytecode données java résultats machine -hôte c L. Tichit, 2015-2016 POO et Java 4 / 32 Java “sans les objets” Deux commandes à connaı̂tre compilation d’un fichier source javac <nom de fichier> ex : javac Bonjour.java c L. Tichit, 2015-2016 POO et Java 5 / 32 Java “sans les objets” Deux commandes à connaı̂tre compilation d’un fichier source javac <nom de fichier> ex : javac Bonjour.java exécution d’une classe exécutable java <nom de classe> ex : java Bonjour il doit exister une classe Bonjour comportant une méthode main particulière c L. Tichit, 2015-2016 POO et Java 5 / 32 Java “sans les objets” Deux commandes à connaı̂tre compilation d’un fichier source javac <nom de fichier> ex : javac Bonjour.java exécution d’une classe exécutable java <nom de classe> ex : java Bonjour il doit exister une classe Bonjour comportant une méthode main particulière avec eclipse tout cela devient transparent → rapidité de développement mais nuit à la compréhension des mécanismes) c L. Tichit, 2015-2016 POO et Java 5 / 32 Java “sans les objets” L’inévitable PRINT "HELLO" Une classe exécutable complète (minimale) : fichier Bonjour.java public class Bonjour { public static void main(String[] args) { System.out.println("Bonsoir !"); } } c L. Tichit, 2015-2016 POO et Java 6 / 32 Java “sans les objets” L’inévitable PRINT "HELLO" Une classe exécutable complète (minimale) : fichier Bonjour.java public class Bonjour { public static void main(String[] args) { System.out.println("Bonsoir !"); } } Essai : >javac Bonjour.java > c L. Tichit, 2015-2016 POO et Java 6 / 32 Java “sans les objets” L’inévitable PRINT "HELLO" Une classe exécutable complète (minimale) : fichier Bonjour.java public class Bonjour { public static void main(String[] args) { System.out.println("Bonsoir !"); } } Essai : >javac Bonjour.java >java Bonjour Bonsoir ! > c L. Tichit, 2015-2016 POO et Java 6 / 32 Java “sans les objets” Deux erreurs fréquentes fichier Bonjour.java public class Bonjour { public static void main() { System.out.println("Bonsoir !"); } } Essai : >javac Bonjour.java >java Bonjour.class Exception in thread "main" java.lang.NoClassDefFoundError: Bonjour/class c L. Tichit, 2015-2016 POO et Java 7 / 32 Java “sans les objets” Deux erreurs fréquentes fichier Bonjour.java public class Bonjour { public static void main() { System.out.println("Bonsoir !"); } } Essai : >javac Bonjour.java >java Bonjour Exception in thread "main" java.lang.NoSuchMethodError: main c L. Tichit, 2015-2016 POO et Java 8 / 32 Java “sans les objets” Deux erreurs fréquentes fichier Bonjour.java public class Bonjour { public static void main() { System.out.println("Bonsoir !"); } } Essai : >javac Bonjour.java >java Bonjour Exception in thread "main" java.lang.NoSuchMethodError: main Une classe exécutable doit posséder une méthode ayant la signature public static void main(String[] args) c L. Tichit, 2015-2016 POO et Java 8 / 32 Java “sans les objets” Deux mises en garde... Les langages orientés objets ont été développés pour lutter contre la complexité des grosses applications : il est difficile d’en montrer l’intérêt sur de petits exemples ce cours fait appel à l’expérience et/ou l’imagination de l’auditeur c L. Tichit, 2015-2016 POO et Java 9 / 32 Java “sans les objets” Deux mises en garde... Les langages orientés objets ont été développés pour lutter contre la complexité des grosses applications : il est difficile d’en montrer l’intérêt sur de petits exemples ce cours fait appel à l’expérience et/ou l’imagination de l’auditeur Les bibliothèques accompagnant ces langages sont très copieuses : la documentation de l’API est absolument indispensable les recherches dans cette doc sont de véritables jeux de pistes ne pas hésiter à réutiliser des programmes qui fonctionnent plus que jamais il est nécessaire de beaucoup pratiquer c L. Tichit, 2015-2016 POO et Java 9 / 32 Java “sans les objets” Approche du langage Parlant très (trop ?) simplement, la POO c’est de la carrosserie : packaging et gestion des droits d’accès aux éléments des programmes mise en commun et réutilisation du code c L. Tichit, 2015-2016 POO et Java 10 / 32 Java “sans les objets” Approche du langage Parlant très (trop ?) simplement, la POO c’est de la carrosserie : packaging et gestion des droits d’accès aux éléments des programmes mise en commun et réutilisation du code Qu’y a-t-il sous cette carrosserie ? essentiellement, le C : même syntaxe de base conservation de la grande majorité des concepts c L. Tichit, 2015-2016 POO et Java 10 / 32 Java “sans les objets” Approche du langage Parlant très (trop ?) simplement, la POO c’est de la carrosserie : packaging et gestion des droits d’accès aux éléments des programmes mise en commun et réutilisation du code Qu’y a-t-il sous cette carrosserie ? essentiellement, le C : même syntaxe de base conservation de la grande majorité des concepts Officiellement nous connaissons Python. Aujourd’hui, nous allons présenter rapidement quelques différences entre la syntaxe de base de Java et celle de Python faire une mauvaise approche de la notion de classe c L. Tichit, 2015-2016 POO et Java 10 / 32 Java “sans les objets” Approche du langage Les variables et fonctions doivent être déclarées. Exemple : en Python def distance(x1, y1, x2, y2): dx = x1 - x2 dy = y1 - y2 return math.sqrt(dx * dx + dy * dy) c L. Tichit, 2015-2016 POO et Java 11 / 32 Java “sans les objets” Approche du langage Les variables et fonctions doivent être déclarées. Exemple : en Python def distance(x1, y1, x2, y2): dx = x1 - x2 dy = y1 - y2 return math.sqrt(dx * dx + dy * dy) en Java il faut en Java double distance(int x1, int y1, int x2, int y2) { int dx, dy; dx = x1 - x2; dy = y1 - y2; return Math.sqrt(dx * dx + dy * dy); } c L. Tichit, 2015-2016 POO et Java 11 / 32 Java “sans les objets” Types primitifs Nombres entiers byte : entier sur 8 bits (256 valeurs, de −128 à +127) short : entier sur 16 bits (65536 valeurs, de −32768 à +32767) int : entier sur 32 bits (' 4, 3 × 109 valeurs) long : entier sur 64 bits c L. Tichit, 2015-2016 POO et Java 12 / 32 Java “sans les objets” Types primitifs Nombres entiers byte : entier sur 8 bits (256 valeurs, de −128 à +127) short : entier sur 16 bits (65536 valeurs, de −32768 à +32767) int : entier sur 32 bits (' 4, 3 × 109 valeurs) long : entier sur 64 bits Nombres décimaux float : flottant sur 32 bits (norme IEEE, 7 chiffres significatifs) double : flottant sur 64 bits (norme IEEE, 15 chiffres significatifs) c L. Tichit, 2015-2016 POO et Java 12 / 32 Java “sans les objets” Types primitifs Nombres entiers byte : entier sur 8 bits (256 valeurs, de −128 à +127) short : entier sur 16 bits (65536 valeurs, de −32768 à +32767) int : entier sur 32 bits (' 4, 3 × 109 valeurs) long : entier sur 64 bits Nombres décimaux float : flottant sur 32 bits (norme IEEE, 7 chiffres significatifs) double : flottant sur 64 bits (norme IEEE, 15 chiffres significatifs) Valeurs booléennes boolean : { false, true } c L. Tichit, 2015-2016 POO et Java 12 / 32 Java “sans les objets” Types primitifs Nombres entiers byte : entier sur 8 bits (256 valeurs, de −128 à +127) short : entier sur 16 bits (65536 valeurs, de −32768 à +32767) int : entier sur 32 bits (' 4, 3 × 109 valeurs) long : entier sur 64 bits Nombres décimaux float : flottant sur 32 bits (norme IEEE, 7 chiffres significatifs) double : flottant sur 64 bits (norme IEEE, 15 chiffres significatifs) Valeurs booléennes boolean : { false, true } Caractères char : caractères Unicode sur 16 bits c L. Tichit, 2015-2016 POO et Java 12 / 32 Java “sans les objets” Approche du langage L’indentation (marge) et la fin de ligne n’ont aucun rôle syntaxique code erroné if (a <= b) min = a; max = b; else min = b; max = a; c L. Tichit, 2015-2016 POO et Java 13 / 32 Java “sans les objets” Approche du langage L’indentation (marge) et la fin de ligne n’ont aucun rôle syntaxique code erroné if (a <= b) min = a; max = b; else min = b; max = a; La marge et la découpe en lignes sont sans importance. Il faut écrire : code correct if (a <= b) { min = a; max = b; } else { min = b; max = a; } c L. Tichit, 2015-2016 POO et Java 13 / 32 Java “sans les objets” Approche du langage Certaines instructions requièrent un ; à la fin, d’autres non : affectation variable = expression; c L. Tichit, 2015-2016 POO et Java 14 / 32 Java “sans les objets” Approche du langage Certaines instructions requièrent un ; à la fin, d’autres non : affectation variable = expression; appel de fonction sans résultat fonction(arg1 , arg2 , . . . argk ); c L. Tichit, 2015-2016 POO et Java 14 / 32 Java “sans les objets” Approche du langage Certaines instructions requièrent un ; à la fin, d’autres non : affectation variable = expression; appel de fonction sans résultat fonction(arg1 , arg2 , . . . argk ); instruction conditionnelle if (expression) instruction else instruction if (expression) instruction c L. Tichit, 2015-2016 POO et Java 14 / 32 Java “sans les objets” Approche du langage Certaines instructions requièrent un ; à la fin, d’autres non : affectation variable = expression; appel de fonction sans résultat fonction(arg1 , arg2 , . . . argk ); instruction conditionnelle if (expression) instruction else instruction if (expression) instruction boucle tant que while (expression) instruction c L. Tichit, 2015-2016 POO et Java 14 / 32 Java “sans les objets” Approche du langage Certaines instructions requièrent un ; à la fin, d’autres non : affectation variable = expression; appel de fonction sans résultat fonction(arg1 , arg2 , . . . argk ); instruction conditionnelle if (expression) instruction else instruction if (expression) instruction boucle tant que while (expression) instruction boucle pour for (expr1 ; expr2 ; expr3 ) instruction c L. Tichit, 2015-2016 POO et Java 14 / 32 Java “sans les objets” Approche du langage Boucle tant que : while (expression) instruction Exemple : étant donné u > 0, trouver le plus grand entier k tel que 2k < u c L. Tichit, 2015-2016 POO et Java 15 / 32 Java “sans les objets” Approche du langage Boucle tant que : while (expression) instruction Exemple : étant donné u > 0, trouver le plus grand entier k tel que 2k < u extrait de code ... k = 0; p = 1; while (p < u) { k = k + 1; p = 2 * p; } k = k - 1; ... c L. Tichit, 2015-2016 /* p = 2^k */ /* ou k++; */ /* ou k--; */ POO et Java 15 / 32 Java “sans les objets” Approche du langage Boucle pour for (expr1 ; expr2 ; expr3 ) instruction − expr1 : initialisation − expr2 : condition de continuation (comme dans while) − expr3 : passage à l’itération suivante Exemple : somme des n éléments d’un tableau de nombres tab : c L. Tichit, 2015-2016 POO et Java 16 / 32 Java “sans les objets” Approche du langage Boucle pour for (expr1 ; expr2 ; expr3 ) instruction − expr1 : initialisation − expr2 : condition de continuation (comme dans while) − expr3 : passage à l’itération suivante Exemple : somme des n éléments d’un tableau de nombres tab : extrait de code ... somme = 0; for (i = 0; i < n; i = i + 1) somme = somme + tab[i]; ... c L. Tichit, 2015-2016 POO et Java 16 / 32 Java “sans les objets” Une toute petite approche de la notion de classe Présentation des classes sans parler des objets (en quelque sorte faire du C en Java ? ) c L. Tichit, 2015-2016 POO et Java comment 17 / 32 Java “sans les objets” Une toute petite approche de la notion de classe Présentation des classes sans parler des objets (en quelque sorte faire du C en Java ? ) Pour aujourd’hui, une classe est comment une unité de compilation (i.e. un texte source) c L. Tichit, 2015-2016 POO et Java 17 / 32 Java “sans les objets” Une toute petite approche de la notion de classe Présentation des classes sans parler des objets (en quelque sorte faire du C en Java ? ) Pour aujourd’hui, une classe est comment une unité de compilation (i.e. un texte source) un espace de noms (i.e. un moyen d’allonger les noms des variables et fonctions, pour éviter les conflits) c L. Tichit, 2015-2016 POO et Java 17 / 32 Java “sans les objets” Une toute petite approche de la notion de classe Présentation des classes sans parler des objets (en quelque sorte faire du C en Java ? ) Pour aujourd’hui, une classe est comment une unité de compilation (i.e. un texte source) un espace de noms (i.e. un moyen d’allonger les noms des variables et fonctions, pour éviter les conflits) Pratiquement, en quoi consiste faire du C en Java ? écrire le code à l’intérieur d’une classe (ou plusieurs) qualifier static toutes les variables et fonctions qualifier public certains éléments imposés faire confiance à C, sauf pour les tableaux c L. Tichit, 2015-2016 POO et Java 17 / 32 Java “sans les objets” Exemple : simulation de la loi normale loi de probabilité uniforme toutes les valeurs ont la même probabilité la fonction Math.random() fait cela c L. Tichit, 2015-2016 POO et Java 18 / 32 Java “sans les objets” Exemple : simulation de la loi normale loi de probabilité uniforme toutes les valeurs ont la même probabilité la fonction Math.random() fait cela loi normale ou gaussienne 1 x−µ densité de probabilité p(x) = σ√12π e − 2 ( σ ) (les valeurs centrales sont plus probables que les valeurs extrêmes) 2 comment l’avoir sur l’ordinateur ? c L. Tichit, 2015-2016 POO et Java 18 / 32 Java “sans les objets” Exemple : simulation de la loi normale loi de probabilité uniforme toutes les valeurs ont la même probabilité la fonction Math.random() fait cela loi normale ou gaussienne 1 x−µ densité de probabilité p(x) = σ√12π e − 2 ( σ ) (les valeurs centrales sont plus probables que les valeurs extrêmes) 2 comment l’avoir sur l’ordinateur ? Bonne approximation (les ri sont des tirages uniformes, 0 <= ri <= 1) : y = r1 + r2 + · · · + r12 − 6 c L. Tichit, 2015-2016 POO et Java 18 / 32 Java “sans les objets” Exemple : simulation de la loi normale fichier SimuLoiNormale.java public class SimuLoiNormale { static double alea() { double s = 0; for (int i = 0; i < 12; i++) s = s + Math.random(); return s - 6; } c L. Tichit, 2015-2016 POO et Java 19 / 32 Java “sans les objets” Exemple : simulation de la loi normale fichier SimuLoiNormale.java public class SimuLoiNormale { static double alea() { double s = 0; for (int i = 0; i < 12; i++) s = s + Math.random(); return s - 6; } static int nombre = 100; public static void main(String[] args) { double somme, somcar; somme = somcar = 0; for (int i = 0; i < nombre; i++) { double x = alea(); somme = somme + x; somcar = somcar + x * x; } double moy = somme / nombre; double var = somcar / nombre - moy * moy; System.out.println("moyenne " + moy); System.out.println("variance " + var); } } c L. Tichit, 2015-2016 POO et Java 19 / 32 Java “sans les objets” Exemple : simulation de la loi normale fichier SimuLoiNormale.java public class SimuLoiNormale { Quels sont les membres de la classe SimuLoiNormale ? static double alea() { double s = 0; for (int i = 0; i < 12; i++) s = s + Math.random(); return s - 6; } static int nombre = 100; public static void main(String[] args) { double somme, somcar; somme = somcar = 0; for (int i = 0; i < nombre; i++) { double x = alea(); somme = somme + x; somcar = somcar + x * x; } double moy = somme / nombre; double var = somcar / nombre - moy * moy; System.out.println("moyenne " + moy); System.out.println("variance " + var); } } c L. Tichit, 2015-2016 POO et Java 19 / 32 Java “sans les objets” Exemple : simulation de la loi normale fichier SimuLoiNormale.java public class SimuLoiNormale { Quels sont les membres de la classe SimuLoiNormale ? static double alea() { double s = 0; for (int i = 0; i < 12; i++) s = s + Math.random(); return s - 6; } deux méthodes : SimuLoiNormale.alea() SimuLoiNormale.main(. . . ) static int nombre = 100; une variable : SimuLoiNormale.nombre public static void main(String[] args) { double somme, somcar; somme = somcar = 0; for (int i = 0; i < nombre; i++) { double x = alea(); somme = somme + x; somcar = somcar + x * x; } double moy = somme / nombre; double var = somcar / nombre - moy * moy; System.out.println("moyenne " + moy); System.out.println("variance " + var); } } c L. Tichit, 2015-2016 POO et Java 19 / 32 Java “sans les objets” Exemple : simulation de la loi normale fichier SimuLoiNormale.java public class SimuLoiNormale { Quels sont les membres de la classe SimuLoiNormale ? static double alea() { double s = 0; for (int i = 0; i < 12; i++) s = s + Math.random(); return s - 6; } deux méthodes : SimuLoiNormale.alea() SimuLoiNormale.main(. . . ) static int nombre = 100; une variable : SimuLoiNormale.nombre public static void main(String[] args) { double somme, somcar; somme = somcar = 0; for (int i = 0; i < nombre; i++) { double x = alea(); somme = somme + x; somcar = somcar + x * x; } double moy = somme / nombre; double var = somcar / nombre - moy * moy; System.out.println("moyenne " + moy); System.out.println("variance " + var); } dans la classe on peut utiliser le nom court (voir appel d’alea) } c L. Tichit, 2015-2016 POO et Java 19 / 32 Java “sans les objets” Exemple : simulation de la loi normale fichier SimuLoiNormale.java public class SimuLoiNormale { Quels sont les membres de la classe SimuLoiNormale ? static double alea() { double s = 0; for (int i = 0; i < 12; i++) s = s + Math.random(); return s - 6; } deux méthodes : SimuLoiNormale.alea() SimuLoiNormale.main(. . . ) static int nombre = 100; une variable : SimuLoiNormale.nombre public static void main(String[] args) { double somme, somcar; somme = somcar = 0; for (int i = 0; i < nombre; i++) { double x = alea(); somme = somme + x; somcar = somcar + x * x; } double moy = somme / nombre; double var = somcar / nombre - moy * moy; System.out.println("moyenne " + moy); System.out.println("variance " + var); } dans la classe on peut utiliser le nom court (voir appel d’alea) dans une autre classe il faudra employer le nom complet (voir l’appel de random) } c L. Tichit, 2015-2016 POO et Java 19 / 32 Java “sans les objets” L’identification complète d’une méthode alea s’appelle en fait SimuLoiNormale.alea() à l’intérieur de sa classe on peut utiliser le nom court c L. Tichit, 2015-2016 POO et Java 20 / 32 Java “sans les objets” L’identification complète d’une méthode alea s’appelle en fait SimuLoiNormale.alea() à l’intérieur de sa classe on peut utiliser le nom court deux méthode distinctes peuvent avoir le même nom : il suffit qu’elles appartiennent à des classes distinctes c L. Tichit, 2015-2016 POO et Java 20 / 32 Java “sans les objets” L’identification complète d’une méthode alea s’appelle en fait SimuLoiNormale.alea() à l’intérieur de sa classe on peut utiliser le nom court deux méthode distinctes peuvent avoir le même nom : il suffit qu’elles appartiennent à des classes distinctes on peut appeler random notre fonction : SimuLoiNormale.random() Math.random() les noms complets sont différents. c L. Tichit, 2015-2016 POO et Java 20 / 32 Java “sans les objets” Surcharge des noms des méthodes plus fort : deux méthodes de la même classe peuvent avoir le même nom, il suffit qu’elles aient des signatures distinctes class SimuLoiNormale { ... static double alea() { ... } ... static double alea(int k) { ... } ... } c L. Tichit, 2015-2016 POO et Java 21 / 32 Java “sans les objets” Surcharge des noms des méthodes plus fort : deux méthodes de la même classe peuvent avoir le même nom, il suffit qu’elles aient des signatures distinctes class SimuLoiNormale { ... static double alea() { ... } ... static double alea(int k) { ... } ... } appels de ces méthodes : y = SimuLoiNormale.alea(); ... y = SimuLoiNormale.alea(20); c L. Tichit, 2015-2016 /* la première */ /* la deuxième */ POO et Java 21 / 32 Java “sans les objets” Surcharge des noms des méthodes un autre exemple (extrait de la bibliothèque standard) class Math static static static ... } c L. Tichit, 2015-2016 { double abs(double x) { ... } float abs(float x) { ... } int abs(int x) { ... } POO et Java 22 / 32 Java “sans les objets” Surcharge des noms des méthodes un autre exemple (extrait de la bibliothèque standard) class Math static static static ... } { double abs(double x) { ... } float abs(float x) { ... } int abs(int x) { ... } emploi y = Math.abs(x); c L. Tichit, 2015-2016 POO et Java 22 / 32 Java “sans les objets” Surcharge des noms des méthodes un autre exemple (extrait de la bibliothèque standard) class Math static static static ... } { double abs(double x) { ... } float abs(float x) { ... } int abs(int x) { ... } emploi y = Math.abs(x); encore un exemple System.out.println("Résultat: "); System.out.println(y); c L. Tichit, 2015-2016 POO et Java 22 / 32 Java “sans les objets” Paquets (package) les classes sont un c L. Tichit, 2015-2016 rangement des méthodes POO et Java 23 / 32 Java “sans les objets” Paquets (package) les classes sont un rangement des méthodes les paquets sont un rangement des classes package mesOutils; class SimuLoiNormale { static double alea() { ... } } c L. Tichit, 2015-2016 POO et Java 23 / 32 Java “sans les objets” Paquets (package) les classes sont un rangement des méthodes les paquets sont un rangement des classes package mesOutils; class SimuLoiNormale { static double alea() { ... } } la classe s’appelle maintenant : mesOutils.SimuLoiNormale c L. Tichit, 2015-2016 POO et Java 23 / 32 Java “sans les objets” Paquets (package) les classes sont un rangement des méthodes les paquets sont un rangement des classes package mesOutils; class SimuLoiNormale { static double alea() { ... } } la classe s’appelle maintenant : mesOutils.SimuLoiNormale et la méthode : mesOutils.SimuLoiNormale.alea() c L. Tichit, 2015-2016 POO et Java 23 / 32 Java “sans les objets” Paquets (package) les classes sont un rangement des méthodes les paquets sont un rangement des classes package mesOutils; class SimuLoiNormale { static double alea() { ... } } la classe s’appelle maintenant : mesOutils.SimuLoiNormale et la méthode : mesOutils.SimuLoiNormale.alea() but de tout cela : éviter les conflits de noms (réutilisabilité) c L. Tichit, 2015-2016 POO et Java 23 / 32 Java “sans les objets” Paquets (package) les noms de paquet peuvent contenir . : java.awt.event.MouseEvent Java n’y voit pas une hiérarchie (java.awt.event n’est pas un sous-paquet de java.awt)... c L. Tichit, 2015-2016 POO et Java 24 / 32 Java “sans les objets” Paquets (package) les noms de paquet peuvent contenir . : java.awt.event.MouseEvent Java n’y voit pas une hiérarchie (java.awt.event n’est pas un sous-paquet de java.awt)... ...mais les paquets correspondent à des répertoires : les classes de java.awt.event doivent être dans java/awt/event c L. Tichit, 2015-2016 POO et Java 24 / 32 Java “sans les objets” Paquets (package) les noms de paquet peuvent contenir . : java.awt.event.MouseEvent Java n’y voit pas une hiérarchie (java.awt.event n’est pas un sous-paquet de java.awt)... ...mais les paquets correspondent à des répertoires : les classes de java.awt.event doivent être dans java/awt/event java.sun.com recommande un système de nommage planétaire (cosmique ?) : package fr.univ mrs.dil.tichit.stats.mesOutils; class SimuLoiNormale { ... c L. Tichit, 2015-2016 POO et Java 24 / 32 Java “sans les objets” Paquets (package) les noms de paquet peuvent contenir . : java.awt.event.MouseEvent Java n’y voit pas une hiérarchie (java.awt.event n’est pas un sous-paquet de java.awt)... ...mais les paquets correspondent à des répertoires : les classes de java.awt.event doivent être dans java/awt/event java.sun.com recommande un système de nommage planétaire (cosmique ?) : package fr.univ mrs.dil.tichit.stats.mesOutils; class SimuLoiNormale { ... la fonction s’appelle maintenant fr.univ mrs.dil.tichit.stats.mesOutils.SimuLoiNormale.alea() c L. Tichit, 2015-2016 POO et Java 24 / 32 Java “sans les objets” Instruction import but : alléger les noms des classes lors de leur utilisation on écrit au début du fichier import mesOutils.SimuLoiNormale; import java.awt.event.*; c L. Tichit, 2015-2016 POO et Java // une classe // tout le paquet 25 / 32 Java “sans les objets” Instruction import but : alléger les noms des classes lors de leur utilisation on écrit au début du fichier import mesOutils.SimuLoiNormale; import java.awt.event.*; // une classe // tout le paquet cela permet d’écrire SimuLoiNormale.alea() au lieu de mesOutils.SimuLoiNormale.alea() c L. Tichit, 2015-2016 POO et Java 25 / 32 Java “sans les objets” Instruction import but : alléger les noms des classes lors de leur utilisation on écrit au début du fichier import mesOutils.SimuLoiNormale; import java.awt.event.*; // une classe // tout le paquet cela permet d’écrire SimuLoiNormale.alea() au lieu de mesOutils.SimuLoiNormale.alea() il ne s’agit pas de désigner un paquet que, sinon, le compilateur ne trouverait pas, ni d’obtenir le droit d’accéder aux classes du paquetage mais uniquement de permettre l’emploi du nom court des classes du paquetage c L. Tichit, 2015-2016 POO et Java 25 / 32 Java “sans les objets” Structure d’un fichier source Java un ou aucun énoncé package c L. Tichit, 2015-2016 POO et Java 26 / 32 Java “sans les objets” Structure d’un fichier source Java un ou aucun énoncé package un nombre quelconque d’énoncés import c L. Tichit, 2015-2016 POO et Java 26 / 32 Java “sans les objets” Structure d’un fichier source Java un ou aucun énoncé package un nombre quelconque d’énoncés import une (préférable) ou plusieurs classes c L. Tichit, 2015-2016 POO et Java 26 / 32 Java “sans les objets” Structure d’un fichier source Java un ou aucun énoncé package un nombre quelconque d’énoncés import une (préférable) ou plusieurs classes dont une seule est public, elle impose son nom au fichier c L. Tichit, 2015-2016 POO et Java 26 / 32 Java “sans les objets” Structure d’un fichier source Java un ou aucun énoncé package un nombre quelconque d’énoncés import une (préférable) ou plusieurs classes dont une seule est public, elle impose son nom au fichier partout où on veut, des commentaires fichier MonCadre.java /* auteur: Laurent * date: 20.10.14 */ package mesOutils; import java.awt.*; import java.awt.event.*; public class MonCadre { le code de la classe est ici } c L. Tichit, 2015-2016 POO et Java 26 / 32 Java “sans les objets” Conventions de nommage des recommandations, non des obligations c L. Tichit, 2015-2016 POO et Java 27 / 32 Java “sans les objets” Conventions de nommage des recommandations, non des obligations but : faciliter la lecture des programmes (réutilisabilité) c L. Tichit, 2015-2016 POO et Java 27 / 32 Java “sans les objets” Conventions de nommage des recommandations, non des obligations but : faciliter la lecture des programmes (réutilisabilité) noms faits de plusieurs mots : à partir du 2e , commencer chaque mot par une majuscule c L. Tichit, 2015-2016 POO et Java 27 / 32 Java “sans les objets” Conventions de nommage des recommandations, non des obligations but : faciliter la lecture des programmes (réutilisabilité) noms faits de plusieurs mots : à partir du 2e , commencer chaque mot par une majuscule noms des classes : commencer par majuscule class CadrePrincipalDeMonApplication { ... c L. Tichit, 2015-2016 POO et Java 27 / 32 Java “sans les objets” Conventions de nommage des recommandations, non des obligations but : faciliter la lecture des programmes (réutilisabilité) noms faits de plusieurs mots : à partir du 2e , commencer chaque mot par une majuscule noms des classes : commencer par majuscule class CadrePrincipalDeMonApplication { ... noms des méthodes et variables : commencer par minuscule int x, y; double vitesseDuVent; c L. Tichit, 2015-2016 POO et Java 27 / 32 Java “sans les objets” Conventions de nommage des recommandations, non des obligations but : faciliter la lecture des programmes (réutilisabilité) noms faits de plusieurs mots : à partir du 2e , commencer chaque mot par une majuscule noms des classes : commencer par majuscule class CadrePrincipalDeMonApplication { ... noms des méthodes et variables : commencer par minuscule int x, y; double vitesseDuVent; paquetages : commencer chaque élément par minuscule import mesOutils.statistiques.*; c L. Tichit, 2015-2016 POO et Java 27 / 32 Java “sans les objets” Conventions de nommage des recommandations, non des obligations but : faciliter la lecture des programmes (réutilisabilité) noms faits de plusieurs mots : à partir du 2e , commencer chaque mot par une majuscule noms des classes : commencer par majuscule class CadrePrincipalDeMonApplication { ... noms des méthodes et variables : commencer par minuscule int x, y; double vitesseDuVent; paquetages : commencer chaque élément par minuscule import mesOutils.statistiques.*; variables statiques finales : tout en majuscule, avec des static final int NOMBRE DE POINTS = 1000; c L. Tichit, 2015-2016 POO et Java 27 / 32 Java “sans les objets” Les tableaux du langage Tous les tableaux sont dynamiques (créés à l’exécution) c L. Tichit, 2015-2016 POO et Java 28 / 32 Java “sans les objets” Les tableaux du langage Tous les tableaux sont dynamiques (créés à l’exécution) tous les accès aux tableaux sont contrôlés c L. Tichit, 2015-2016 POO et Java 28 / 32 Java “sans les objets” Les tableaux du langage Tous les tableaux sont dynamiques (créés à l’exécution) tous les accès aux tableaux sont contrôlés exemple : déclaration int[] table; (pour le moment, table vaut null) c L. Tichit, 2015-2016 POO et Java 28 / 32 Java “sans les objets” Les tableaux du langage Tous les tableaux sont dynamiques (créés à l’exécution) tous les accès aux tableaux sont contrôlés exemple : déclaration int[] table; (pour le moment, table vaut null) création : table = new int[nombreElts]; c L. Tichit, 2015-2016 POO et Java 28 / 32 Java “sans les objets” Les tableaux du langage Tous les tableaux sont dynamiques (créés à l’exécution) tous les accès aux tableaux sont contrôlés exemple : déclaration int[] table; (pour le moment, table vaut null) création : table = new int[nombreElts]; accès aux éléments du tableau (exemple) : table[i] = expression; c L. Tichit, 2015-2016 POO et Java 28 / 32 Java “sans les objets” Les tableaux du langage Tous les tableaux sont dynamiques (créés à l’exécution) tous les accès aux tableaux sont contrôlés exemple : déclaration int[] table; (pour le moment, table vaut null) création : table = new int[nombreElts]; accès aux éléments du tableau (exemple) : table[i] = expression; un tel accès provoque toujours deux vérifications : table 6= null, sinon NullPointerException 0 ≤ i <nombreElts, sinon ArrayIndexOutOfBoundsException c L. Tichit, 2015-2016 POO et Java 28 / 32 Java “sans les objets” La taille des tableaux Exemple : fichier TestArgsMain.java public class TestArgsMain { public static void main(String[] args) { for (int i = 0; i < args.length; i++) System.out.println(args[i]); } } c L. Tichit, 2015-2016 POO et Java 29 / 32 Java “sans les objets” La taille des tableaux Exemple : fichier TestArgsMain.java public class TestArgsMain { public static void main(String[] args) { for (int i = 0; i < args.length; i++) System.out.println(args[i]); } } Essai : > javac TestArgsMain.java > java TestArgsMain Combien vaut 2+3 Combien vaut 2+3 > c L. Tichit, 2015-2016 POO et Java 29 / 32 Java “sans les objets” Une variable tableau est une référence... int[] t1, t2; (déclaration) null t1 c L. Tichit, 2015-2016 null t2 POO et Java 30 / 32 Java “sans les objets” Une variable tableau est une référence... int[] t1, t2; (déclaration) null t1 t1 = new int[7]; null t2 (création) 0 0 0 0 t1 c L. Tichit, 2015-2016 POO et Java 0 0 0 null t2 30 / 32 Java “sans les objets” Une variable tableau est une référence... int[] t1, t2; (déclaration) null t1 t1 = new int[7]; null t2 (création) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 t1 t2 = t1; null t2 (affectation) t1 c L. Tichit, 2015-2016 t2 POO et Java 30 / 32 Java “sans les objets” Tableaux à deux indices Déclaration double[][] matrice; Création matrice = new double[nl][nc]; Exemple (avec nl = 3, nc = 4) : matrice 0 c L. Tichit, 2015-2016 0 0 0 0 0 0 0 0 0 0 POO et Java 0 31 / 32 Java “sans les objets” Tableaux à deux indices On obtient le même résultat avec : double[][] matrice; ... matrice = new double[nl][]; for (int i = 0; i < nl; i++) matrice[i] = new double[nc]; matrice 0 c L. Tichit, 2015-2016 0 0 0 0 0 0 0 0 0 0 POO et Java 0 32 / 32