Bases de la programmation Java Introduction Bases de la programmation Java Plan 1 Informations utiles 3 Présentation du langage Java 2 4 5 6 Introduction Langages de haut niveau Syntaxe de base Un langage Objets / Valeurs Les tableaux en Java 2 1 Bases de la programmation Java Introduction 1. INFORMATIONS UTILES Enseignement l l l Cours → 9 séances de 2 heures Travaux dirigés → 11 séances de 2 heures Projet → à faire en groupe Enseignant (pour le cours) l l l l l Yann Viémont Bt. Descartes — Bureau 304-a — Poste 54046 Laboratoire PRiSM — CNRS UMR 8144 Http://www.prism.uvsq.fr/~viemont GSM : 06 19 14 32 57 (pour les cas d ’urgence) 3 Bases de la programmation Java Introduction Programme de l’ UE7-Info Bases de la programmation Java l Syntaxe de base (rappels) l Tableaux complexes en Java l Notions d ’objets (rappels) La programmation objet en Java l l Interfaces et polymorphisme Héritage l Classes abstraites l Listes Structures de données abstraites et implémentations Java l l Piles Files 4 2 Bases de la programmation Java 2. Introduction LANGAGES DE HAUT NIVEAU Avantages l l l l l l Compréhensible par l’homme (non binaire) Indépendant des matériels Manipulation des données complexes (entiers, réels, tableaux, objets : dessins, livres, …) Manipulation des expressions complexes (A*B)/C Mécanismes élaborés d’enchaînement des instructions Organisation des programmes (modularité, visibilité, protection, …) Nécessite un traducteur (compilateur / interpréteur) 5 Bases de la programmation Java Compilateur Le code source est indépendant de la machine La compilation est faite une fois pour toutes Le code objet est du binaire dépendant du codage et des instructions de la machine cible Le chargeur adapte le code objet aux adresses mémoires réellement utilisées pour chaque exécution demandée L’objet devient une suite de 0 et de 1 en mémoire Introduction Code source (fichier) Compilateur Objet (fichier) Chargeur Machine cible Objet (mémoire) 6 3 Bases de la programmation Java Introduction Interpréteur L’interpréteur est lui-même un programme source qui a été compilé puis chargé sur la machine Le programme a interpréter correspond aux données de l’interpréteur qui s’exécute L’exécution est plus lente car la traduction est faite à chaque lancement du programme Code source (fichier) Machine cible Interpréteur (objet en mémoire) Source (données en mémoire) 7 Bases de la programmation Java Introduction Cas des boucles Boucle Chaque instruction du programme source est traduite (interprétée) au fur et à mesure En cas d’itération (boucle), la même instruction est réinterprétée à chaque passage Interprétation Exécution La pénalité de performance est importante 8 4 Bases de la programmation Java Et le langage Java ? Introduction Le source Java est « compilé »en code-octet (byte code) correspondant aux instructions d ’une machine virtuelle A La machine virtuelle est un programme source compilé pour chaque type de couple (machine physique + système d’exploitation) La machine virtuelle fournit un environnement de programmation standard l l l Gestion de la mémoire (ramasse-miette) Gestion des entrées / sorties (disque, écran, clavier, …) Interface avec le système d’exploitation 9 Bases de la programmation Java Introduction Interprétation optimisée toto.java javac Code source (fichier) Compilateur toto.class Machine cible Code -octet (fichier) java toto.class Machine virtuelle (objet en mémoire) Code-octet (données en mémoire) La pénalité de performance est très fortement réduite 10 5 Bases de la programmation Java Introduction Beaucoup plus qu’un langage Java est un langage orienté-objet récemment introduit par SUN et rendu disponible dans le domaine public. Java est un : l l Langage complet à tout faire Environnement de programmation très développé comprenant de nombreuses bibliothèques standards l Véritable système d ’objets distribués l Interagir simplement avec le Web Java permet d’ : l Accéder et fournir des services simplement au travers du réseau 11 Bases de la programmation Java Historique Introduction Java a commencé avec le projet Green en 1991 l Langage Oak est destiné au logiciel intégré aux appareils électroménagers et audio / vidéo Adaptation à la technologie Web l l l l Intégration à un navigateur Web (HotJava 1994) Création des applets Extension du langage renommé Java (version 1) Définition du « byte code » en 1995 l Premier JDK (atelier de développement) en 1996 l Environnement complet de développement Nouvelle plate-forme Java2 l l Déploiement d’applications distribuées Services Web 12 6 Bases de la programmation Java Introduction Logiciel pour appareillage électronique Machine de développement Code source Problèmes : Plusieurs versions de source selon les systèmes d ’exploitation l Compilation spécifique pour chaque plate-forme l Machine à laver Micro-onde Objet 1 Gestion des versions l Coûts de développement prohibitifs l Objet 3 Magnétoscope Objet 2 13 Bases de la programmation Java Solution Oak Machine de développement Machine à laver Machine virtuelle Objet Introduction Code source Micro-onde Magnétoscope Machine virtuelle Objet Machine virtuelle Objet 14 7 Bases de la programmation Java Transposition au Web Poste client Browser + JVM Web Applet Introduction Poste serveur Application Java téléchargeable Chargement Chargementdynamique dynamiqued’une d’uneapplication application 15 Bases de la programmation Java Introduction 3. PRÉSENTATION DU LANGAGE Points forts de Java : l l l l l l Simplicité Orientation objets Grande sécurité Portabilité Performances Parallélisme 16 8 Bases de la programmation Java Simplicité Introduction Le langage Java : l l l l l Reprend la syntaxe de base de C Possède une grande cohérence de conception Offre un nombre limité de constructions non redondantes Rend la gestion de la mémoire transparente Ne demande aucun précompilateur 17 Bases de la programmation Java Orientation objets Introduction Java reprend le meilleur des concepts objets les plus simples l l l l l l Langage de programmation inspiré d’Objective C et de C++ La définition d’interfaces est supportée en natif Tout est une classe, un objet, une variable d’instance ou une méthode Le modèle soujascent est un modèle objet / valeur L ’encapsulation est complètement contrôlable par le programmeur Les librairies systèmes sont des classes qui rendent le langage extensible à l’infini 18 9 Bases de la programmation Java Sécurité Introduction La grande majorité des erreurs de programmation courantes sont décelées par l ’interpréteur l l l Java est fortement typé Les indices de tableau ne peuvent déborder Pas de calcul d ’adresse l Toutes les variables sont initialisées l Modèle Bac-A-Sable (Sand box) La machine virtuelle contrôle les actions de l’application l Permissions définies dans un fichier 19 Bases de la programmation Java Portabilité Introduction Java comporte une spécification très stricte de la JVM l l l l Java est interprété Le code-octet est indépendant de la plate-forme Pas de comportement spécifique à une implémentation L ’API est constituée de librairies standards extensives 20 10 Bases de la programmation Java Performance Introduction Grâce au code-octet, l’interpréteur ne conduit qu’à une faible perte de performance De plus on dispose maintenant de : l l Compilateurs « juste-à-temps » (JIT : just in time) Compilateurs natifs La gestion de l ’interface homme/machine est fortement optimisée dans les bibliothèques de l’API Les JVM disponibles savent utiliser les bibliothèques performantes pour le graphisme, l’audio, la vidéo l l Open GL MPEG-4 21 Bases de la programmation Java Introduction 4. SYNTAXE DE BASE (rappels) La syntaxe de base comprend : l Les expressions – Types de base – Constantes – Variables – Opérateurs l Les instructions – Instructions simples (déclarations, affectations, …) – Instructions conditionnelles – Instructions itératives l l Les tableaux Les méthodes 22 11 Bases de la programmation Java Types de base Introduction Java est un langage fortement typé : toute donnée manipulée est typée et ne peut échapper à son type que par conversion implicite ou explicite. Conversions implicites : l l l Augmentation de la précision (p.e. int --> long) En maths les entiers sont des réels (p.e. int --> float) Les expressions sont calculées dans le type le plus général de ses composants 23 Bases de la programmation Java Types numériques Entiers l l l byte (complément à deux sur 8 bits) int (complément à deux sur 32 bits) short l long l float Introduction (complément à deux sur 16 bits) (complément à deux sur 64 bits) Réels (mantisse + exposant) l (standard IEEE 754 sur 32 bits) double (standard IEEE 754 sur 64 bits) 24 12 Bases de la programmation Java Types non numériques Booléens l boolean (true ou false) l Caractères Introduction char byte (codage Unicode sur 16 bits) l l String (en fait une classe prédéfinie mais munie d'une syntaxe spéciale) (peut être utilisé pour stocker de l'ascii) 25 Bases de la programmation Java Constantes Introduction l byte, short ou int en décimal, octal ou hexadécimal : l long (idem avec un "l" ou un "L" à la fin) l double en décimal ou en scientifique l simple (idem avec un "f" ou un "F" à la fin) l char l boolean – 0, 104, -1098, 0777, 0xAF – 0L, -47652913476L, 0x3FFFFFFFFFFFL – 35.99, -0.0007, 2., 1.628E6, -0.7803E-3 – 3.14159F – 'c', '\t', '\u0x61'('a') – true ou false 26 13 Bases de la programmation Java Variables Introduction Une variable est une donnée manipulée par son nom (identificateur) i, j, x, var1, delta, périmêtre, primeDeTransport, DENSITÉ_DU_PLOMB Les variables sont déclarée l int i, j ; double x ; l Affectée l Initialisée i = 12 ; j = 3*i + delta ; int i = 12 ; final float DENSITÉ_DU_PLOMB = 11.35F ; 27 Bases de la programmation Java Introduction Expressions numériques int i, j ; float a, b ; double x, y ; l Expressions entières : long m = 3 * i * (j + 6) ; int k1 = (int) m % 1000 ; int k2 = (int) (m % 1000) ; long p = (long) c + m / -27 ; l Expressions réelles : double z = 3.53 * i + (a - b) / x ; float c = (float) (-2*i*y + 4.54749E8*a) ; double s = java.lang.Math (c) ; 28 14 Bases de la programmation Java Introduction Expressions booléennes l Comparaisons numériques l Comparaison de référence d'objets l Expressions logiques (avec simplification) l Expressions logiques (sans simplification) Exemples : == != < == != instanceof && || & | > <= >= ! ~ ((a >= 1E10) || ((b != 0d) && (a/b > 0.2))) (monObjet == null) || !(monObjet instanceof MaClasse) (--i > 0) & (--j > 0) // dangereux ! 29 Bases de la programmation Java Expressions binaires Introduction Les expressions binaires permettent de manipuler des valeurs entières comme des chaînes de bits en effectuant l l Exemple : Décalages : Masquages : << & > | >>> ^ ~ final int VU = 1 ; final int PRIS = 1 << 1 ; int état = … ; boolean pasVuPasPris = (état & (VU | PRIS)) == 0 ; 30 15 Bases de la programmation Java Introduction Expressions chaînes de caractères Bien que le type String soit en fait une classe, il est muni d'une syntaxe particulière l Constante chaîne l Opération de concaténation String s1 = "exemple de conca" ; String s2 = s1 + "ténation" ; 31 Bases de la programmation Java Affectations Introduction L'affectation permet d'initialiser et de modifier des variables int i = 12 ; périmètre = 2 * PI * rayon ; l On peut utiliser des raccourcis : (var1 op= var2) est équivalent à (var1 = var1 op var2) pour += -= *= /= %= &= |= ^= <<= >>= >>>= i *= 3 ; // comme i = 3*i ; l Une affectation est une expression qui vaut sa partie droite l Les opérateurs d'incrémentation / décrémentation ++ modifient directement la valeur d'une variable entière i = j = k = 0 ; // comme i = (j = (k = 0)) -- i++ ; // comme i += 1 ; ou encore i = i + 1 ; (i-- > 0) & (++j < max) 32 16 Bases de la programmation Java Introduction Expression conditionnelle Prend une valeur parmi deux selon une condition l l l Pour les habitués de C et C++ Peu lisible — sauf dans les cas les plus simples Syntaxe expr_bool ? expr_vrai : expr_faux Exemple : int maxAB = (a>b) ? a : b ; 33 Bases de la programmation Java Résumé des opérateurs Arithmétique : Comparaison : Logique booléenne : Décalage : Logique binaire : Affectation : Incrémentation : Conditionnel : Autre : + == - & / != < && << * || >> | ^ ! ~ = += -= >>= >>>= ++ -- [] . ?: > % <= >= Introduction instanceof >>> *= () new /= %= &= |= ^= <<= (type) 34 17 Bases de la programmation Java Précédences Opérateurs post-fixés Opérateurs unaires Création ou conversion Multiplicatifs Aditifs Décalage Comparaison Egalité ET binaire OU exclusif binaire OU inclusif binaire ET logique OU logique Conditionnel Affectation Introduction [] . (params) expr++ expr-++expr --expr +expr -expr ~ ! new (type)expr * / % + << >> >>> < > <= >= instanceof == != & ^ | && || ? : = += -= *= /= %= &= ^= |= <<= >>= >>>= 35 Bases de la programmation Java Parenthésage Introduction Un opérande peut être remplacé par une expression l l De même type Entre parenthèses Les règles de précédences induisent un parenthésage implicite ex1 = a * b + c / d ; // = (a * b) + (c / d) ex2 = a > b && cond || a + c == 12 ; // = (a>b) && (cond || ((a+c) == 12)) Les opérateurs de même précédence sont évalués de gauche à droite ex3 = a / b * c ; // = (a / b) * c ≠ a / (b * c) Les affectations sont évaluées de droite à gauche 36 18 Bases de la programmation Java Instructions Introduction Une instruction est une unité d'exécution du langage Elle se termine par un ; l Certaines expressions forment des instructions valides l – Affectation – Incrémentation / décrémentation – Appel de méthode – Création dynamique d'objet Une déclaration de variable est une instruction l Les instructions sont normalement exécutées en séquence l Les instructions de contrôle permettent de modifier l'ordre d'exécution l Les instructions peuvent être regroupées l 37 Bases de la programmation Java Organisation en blocs Introduction Plusieurs instructions peuvent être regroupées en bloc l l l l Les blocs sont délimités par { … } Un bloc est toujours admis à la place d'une instruction On obtient une structure de blocs imbriqués Cette structure définit des règles de visibilité { double droit = Math.PI / 2. ; angle += droit ; float cos = (float) Math.sin (angle) ; } … 38 19 Bases de la programmation Java Portée des variables Introduction Une variable n'est pas définie hors du bloc où elle est déclarée Un nom de variable peut être réutilisé dans une déclaration dans un bloc imbriqué Une nouvelle variable indépendante est crée l Cette variable masque la précédente (externe) { int x = 14 ; int y = 0 ; { int x = 10 ; y++ ; // = 1 x += y ; // = 11 } y++ ; // = 2 x++ ; // = 15 et non 12 … l Bases de la programmation Java 39 Introduction Instructions de contrôle L'ordre d'exécution du programme est contrôlé par l Tests – Condition l Exceptions l Branchements – Alternative – Aiguillage l Boucles – Pré-condition – Post-condition – Itérateur – Déclenchement – Capture – Appel – Retour – Rupture 40 20 Bases de la programmation Java Introduction Instructions conditionnelles Condition simple : if (condition) instruction max = a ; if (a < b) max = b ; Alternative : if (condition) instruction else instruction if (a > b) max = a ; else max = b ; 41 Bases de la programmation Java Aiguillages switch (var) { case val1 : instructions case val2 : instructions case val3 : … default : instructions } Introduction static final int NORD = 0 ; static final int EST = 1 ; static final int SUD = 2 ; static final int OUEST = 3 ; … switch (orientation) { case NORD : y++ ; break ; case EST : x++ ; break ; case SUD : y-- ; break ; case OUEST : x-- ; break ; } 42 21 Bases de la programmation Java Introduction Enchaînement des voies switch (mois) { case 2 : if (bissextile (année)) nbJours = 29 ; else nbJours = 28 ; break ; case 4 : case 6 : case 9 : case 11 : nbJours = 30 ; break ; } default : nbJours = 31 ; 43 Bases de la programmation Java Boucles Introduction Pré-condition : while (condition) instruction boolean trouvé = false ; while (!trouvé) trouvé = anpe.rechercher (emploi) ; Post-condition : do instruction while (condition) boolean trouvé ; Do // fait au moins 1 fois trouvé = anpe.rechercher (emploi) ; while (!trouvé) 44 22 Bases de la programmation Java Itérateurs Introduction for (initialisation ; condition ; itération) instruction La boucle "for" offre une syntaxe élégante pour écrire une itération l Contrôlée par une variable compteur static final int N = 20 ; factorielleN = 1 ; for (int i = 1 ; i <= N ; i++) factorielleN *= i ; l Contrôlée par une interface appropriée for (Elément e = liste.premier () ; e != null ; e = liste.suivant ()) e.afficher () ; Bases de la programmation Java Capture des exceptions 45 Introduction Java fournit un mécanisme d'exception l l Une exception peut être levée ou capturée La capture suit une syntaxe de bloc try { instructions dangeureuses } catch (exception) { traitement d'erreur } finally { instructions de fin } 46 23 Bases de la programmation Java Ruptures Introduction Les ruptures sont utiles pour l Eviter de faire du travail inutile l Simplifier le code l D'un niveau de bloc par défaut break permet de sortir d'un aiguillage ou d'une boucle l De plusieurs niveaux à l'aide d'une étiquette l D'un niveau de boucle par défaut continue permet de passer à l'itération suivante l De plusieurs niveaux à l'aide d'une étiquette l Quel que soit le niveau de bloc où le return se trouve dans la méthode return permet de sortir d'une méthode 47 Bases de la programmation Java Introduction 5. UN LANGAGE OBJETS / VALEURS Java est construit sur deux concepts de base : l l Les objets Les valeurs Cette distinction traverse tout le langage et toutes les constructions. La manipulation des valeurs se fait directement : int i = 4 ; int j = i * 1000 ; La manipulation des objets de fait par référence : Object o ; // référence nulle au départ o = new Object () ; // o référence un nouvel objet créé dynamiquement 48 24 Bases de la programmation Java Introduction Valeurs Définition : une valeur est un élément d ’un type de base (prédéfini) du langage Les types prédéfinis sont : char, byte, short, int, long float, double, boolean, void l l l Les variables correspondantes peuvent être directement affectées Les paramètres de ces types sont transmis par valeur Le typage est strict 49 Bases de la programmation Java Introduction Exemple int x ; x = 46 ; float pi = 3.1416F ; x 0 x 46 pi 3.1416 50 25 Bases de la programmation Java Typage strict Introduction int a = 3 ; float x = 1.25F ; int b = a + x ; // ERREUR ! Si le programmeur sait ce qu’il fait, il peut écrire : int b = a + (int) x ; // ce qui fait 4 ! float y = a + x ; // dans ce sens c’est permis // et on obtient bien 4.25 51 Bases de la programmation Java Objets Introduction Définition : les objets sont des instances de classes l l l l l l Ils sont crées et détruits dynamiquement par la JVM Ils sont accédés par des références La notation pointée permet le déréférencement Une référence n’est pas un pointeur Les références sont fortement typées Les paramètres objets sont transmis par référence 52 26 Bases de la programmation Java Introduction Exemple class Simplissime { int i = 0 ; void incrémente () { i++ ; } } … Simplissime o1 ; o1 = new Simplissime () ; o1.i = 18 ; o1.incrémente () ; // donc 19 o1 = new MonAutreClasse () ; // interdit ! 53 Bases de la programmation Java Introduction Exemple (suite) o1 o1 null 0 incrémente () o1 18 incrémente () o1 19 incrémente () 54 27 Bases de la programmation Java 6. LES TABLEAUX Introduction Un tableau est une structure qui comporte plusieurs éléments de même type La taille du tableau est déterminée au moment de sa création dynamique Après sa création, un tableau est une structure de taille fixe 55 Bases de la programmation Java Tableaux = objets Introduction Un tableau Java est un objet Java l l l Extension implicite de la classe Object Créé par un new Manipulé par référence l Intégré au langage avec une syntaxe particulière l La longueur l Le tableau proprement dit qui est encapsulé Un tableau Java tab contient deux variables l tab.length La notation indicée permet d'accéder aux éléments tab [indice] 56 28 Bases de la programmation Java Type des éléments Introduction Un tableau Java est typé : ses éléments sont uniformément typés Les éléments d'un tableau sont soit des valeurs soit des objets l Valeurs d'un même type de base l Objets d'une même classe l Objets particuliers : tableaux de même type char [], byte [], short [], int [], long [], float [], double [], boolean [] Object [], String [], Frame [], Point [], … ==> Tableaux à plusieurs dimensions int [] [], int [] [] [] 57 Bases de la programmation Java Représentation interne Introduction En interne, un tableau comporte deux variables d'instance l La longueur sur un int l La suite des éléments l Valeurs d'un même type de base l Objets d'une même classe l Tableaux de même type Les éléments d'un tableau sont rangées en séquence – Ces valeurs sont rangées en séquence – Les références à ces objets sont rangées en séquence – Les références aux tableaux sont rangées en séquence L'accès à un élément particulier se fait par un calcul d'adresse à partir de son indice 58 29 Bases de la programmation Java Référence de tableau Introduction Une référence de tableau est typée l Par le type du tableau (de ses éléments) l Le type du tableau ne détermine pas sa taille l Le tableau doit ensuite être créé dynamiquement d'une taille donnée Une référence de tableau est déclarée et initialisée à null par défaut l Une même référence peut être utilisée successivement – Pour des tableaux différents – Pour des tableaux de tailles différentes 59 Bases de la programmation Java Tableau de valeurs tab int [] tab ; tab tab = new int [n] ; tab [3] = 10 ; A l'initialisation, le tableau d'entiers est un tableau de valeurs 0 Introduction null taille = n 0 1 2 3 4 n-1 0 0 … … 0 … 0 …/ 10 … 0 … … … … 0 60 30 Bases de la programmation Java Introduction La variable tableau est une référence taille = n tab 0 1 tab = {7, 8, 9} ; 2 3 taille = 3 La variable tab référence un nouveau tableau Le premier tableau est récupéré par le ramasse-miette 0 7 2 9 1 4 8 n-1 0 0 … … 0 … 0 …/ 10 … 0 … … … … 0 61 Bases de la programmation Java Syntaxe l Déclaration l Création l Déclaration + création l Création des éléments Introduction int [] tab ; tab = new int [N] ; int [] tab = new int [N] ; // les int sont crées avec le tableau // ils valent 0 au départ l Initialisation à l'aide d'une constante tableau int [] tab = {12, 0, 23, 1, -2, 0, 10} ; 62 31 Bases de la programmation Java Itération sur un tableau Introduction La boucle for est utilisée de façon "canonique" pour parcourir les éléments d'un tableau Ex : int [] tab = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} ; int somme = 0 ; for (int i = 0 ; i < tab.length ; i++) somme += tab [i] ; 63 Bases de la programmation Java Introduction Tableau d'objets tab Simplissime [] tab ; tab tab = new Simplissime [n] ; tab [3] = new Simplissime () ; tab [3].incrémente () ; A l'initialisation, le tableau d'objets est un tableau de références nulles null taille = n 0 1 2 3 4 n-1 null null … … null … null /… … null … … … … 0/ 1 incrémente () null 64 32 Bases de la programmation Java Syntaxe l Déclaration l Création l Déclaration + création l Création des éléments Introduction MaClasse [] tab ; tab = new MaClasse [N] ; MaClasse [] tab = new MaClasse [N] ; for (int i = 0 ; i < tab.length ; i++) tab [i] = new MaClasse (…) ; 65 Bases de la programmation Java Syntaxe (suite) l Introduction Initialisation à l'aide d'une constante tableau MaClasse unObjet = new MaClasse (…) ; MaClasse [] tab = { new MaClasse (…), unObjet, new MaClasse (…), unObjet } ; // soit 4 éléments pour 3 objets 66 33 Bases de la programmation Java Références multiples tab taille = n 0 1 2 3 4 n-1 … … null … … … … … … … null Introduction 0 incrémente () 1 incrémente () 14 incrémente () 67 Bases de la programmation Java Introduction Tableaux multidimensionnels Un élément de tableau peut lui même être un tableau l Le tableau peut être N-dimensionnel régulier double [][] matrice = new double [3][3] ; float [][][] valeurChamp = new float [100][100][100] ; l Le tableau peut être N-dimensionnel irrégulier l Le "tableau" peut former une hiérarchie de hauteur variable int [][] triangle5 = { {1}, {1, 1}, {1, 2, 1}, {1, 3, 3, 1}, {1, 4, 6, 4, 1} } ; 68 34 Bases de la programmation Java Tableau 2D de valeurs tab Introduction taille = 5 taille = 3 0 1 2 3 4 0 1 2 int [][] tab ; tab = new int [3][5] ; tab [1][1] = 10 ; taille = 5 taille = 5 0 1 2 3 4 0 0 0 0 0 0 1 2 3 4 0 0 0 0 0 0 0 0 0 0 69 Bases de la programmation Java Introduction Triangle de Pascal 1 1 1 1 3 1 Le triangle est définit par les équations suivantes : Ci,j = 1 Ci,j = C i-1,j-1 + Ci-1,j si j=1 ou j=i si 1<j<i 1 1 1 1 2 1 4 6 3 1 4 1 5 10 10 5 1 6 15 20 15 6 1 7 21 35 35 21 7 1 … … … … … … … … … 70 35 Bases de la programmation Java Tableau 2D irrégulier Introduction class TriangleDePascal { int [][] triangle ; TriangleDePascal (int nbl) { if (nbl < 0) return ; triangle = new int [nbl][] ; for (int i = 0 ; i < nbl ; i++) { triangle [i] = new int [i + 1] ; triangle [i][0] = 1 ; for (int j = 1 ; j < i ; j++) triangle [i][j] = triangle [i - 1][j - 1] + triangle [i - 1][j] ; triangle [i][i] = 1 ; } } 71 Bases de la programmation Java Introduction Tableau 2D irrégulier — Figure Triangle5 taille = 1 taille = 5 0 0 1 2 3 4 taille = 2 taille = 3 taille = 5 0 1 2 3 4 1 4 6 4 1 taille = 4 0 1 2 3 1 3 3 1 1 0 1 2 0 1 1 1 1 2 1 72 36 Bases de la programmation Java Introduction Itération sur un tableau irrégulier public String toString () { String s = "" ; for (int i = 0 ; i < triangle.length ; i++) { s += "(" + triangle [i][0] ; for (int j = 1 ; j < triangle [i].length ; j++) s += ", " + triangle [i][j] ; s += ")\n" ; } return s ; } } // fin classe TriangleDePascal 73 Bases de la programmation Java Tableaux dangereux Introduction Un élément de tableau peut lui même être un tableau l l l Le tableau peut être N-dimensionnel régulier Le tableau peut être N-dimensionnel irrégulier Le "tableau" peut former une hiérarchie de hauteur variable Object [] bizarre = {valeurChamp, matrice, new Simplissime (), unObjet, triangle} ; 74 37