prog:java:toc
Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
prog:java:toc [2014/02/12 02:26] – modification externe 127.0.0.1 | prog:java:toc [Date inconnue] (Version actuelle) – supprimée - modification externe (Date inconnue) 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Introduction au langage Java ====== | ||
- | |||
- | Java est à la fois un langage de programmation informatique orienté objet et un environnement d' | ||
- | |||
- | ===== Versions de Java ===== | ||
- | |||
- | Le JSDK est le principal produit de Sun conscernant Java. Il est téléchargeable gratuitement((http:// | ||
- | |||
- | Le JSDK comprend | ||
- | * Bibliothèque de base | ||
- | * Compilateur : '' | ||
- | * Interpreteur | ||
- | |||
- | ===== Installation ===== | ||
- | - Lancer le package téléchargé | ||
- | - Vérifier la présence du chemin vers le répertoire créé dans le '' | ||
- | - Une vrariable d' | ||
- | - Une variable d' | ||
- | |||
- | ===== De l' | ||
- | |||
- | Quand on a terminé d' | ||
- | |||
- | (graphique) | ||
- | |||
- | |||
- | ===== Applets ===== | ||
- | En java on peut écrire deux types de programmes | ||
- | * Application | ||
- | * Applet | ||
- | |||
- | |||
- | ====== Éléments du langage ====== | ||
- | |||
- | * Java est sensible à la casse | ||
- | * Le programme est une classe | ||
- | * Import est équivalent du include en C/C++ | ||
- | * Comme en C/C++, lafonction (méthode) principale est main() | ||
- | * Les classes sont regroupées en packages (paquetages, | ||
- | * Convention des choix d' | ||
- | - Le nom de classe commence par une majuscule | ||
- | - Le nom de méthode ou attribut commencent pas une majuscule | ||
- | - Le deuxième mot et suivants commencent par une majuscule | ||
- | - Exemples : | ||
- | * Classes : '' | ||
- | * Attributs et méthodes : '' | ||
- | |||
- | ===== Commentaires ===== | ||
- | <code java> | ||
- | // ====== CONSTRUCTEURS ========================================================== // | ||
- | // ====== GETTERS ================================================================ // | ||
- | // ====== SETTERS ================================================================ // | ||
- | // ====== MÉTHODES =============================================================== // | ||
- | </ | ||
- | |||
- | Il est conseillé de documenter son code avec [[javadoc]]. | ||
- | |||
- | ===== Exemples de programmes ===== | ||
- | <code java> | ||
- | //Fichier : Bienvenue.java | ||
- | |||
- | /**Ceci est un commentaire javadoc.*/ | ||
- | |||
- | public class Bienvenue { | ||
- | |||
- | /* | ||
- | Comme en C/C++, la fonction main() est le point d’entrée de l' | ||
- | */ | ||
- | |||
- | public static void main(String s[]) { | ||
- | System.out.println(" | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | <code java> | ||
- | //Fichier : Montant.java | ||
- | public class Montant { | ||
- | public static void main(String s[]) { | ||
- | final double TPS = 0.07; | ||
- | final double TVQ = 0.075; | ||
- | |||
- | double prixUnit=10; | ||
- | int quantite=10; | ||
- | double mHt, mTps, mTvq, mTot; | ||
- | |||
- | mHt = prixUnit * quantite; | ||
- | mTps = mHt * TPS; mTvq = (mHt + mTps)*TVQ; | ||
- | mTot = mHt + mTps + mTvq; | ||
- | |||
- | System.out.println(" | ||
- | " | ||
- | " | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | Voir la classe [[prog: | ||
- | |||
- | ===== Types de données ===== | ||
- | Il y a deux grandes catégories de types de données en Java | ||
- | * Primitifs (simples) -> Donnée de base du langage | ||
- | * Composites (objets) -> Donnée encpsulée dans une classe | ||
- | |||
- | Les types de données primitifs sont indiqués tout en minuscules et les types de données composites sont nommés avec la première lettre en majuscules (tout comme la convention pour nommer les classes). | ||
- | |||
- | ==== Types de données primitifs ==== | ||
- | |||
- | ^ Type ^ Catégorie ^ Espace mémoire ^ Précision ^ | ||
- | | byte | entier | 1 octet | -128 -> 127 | | ||
- | | short | entier | 2 octets | ||
- | | int | entier | 4 octets | ||
- | | long | entier | 8 octets | ||
- | | float | réel | 4 octets | ||
- | | double | réel | 8 octets | ||
- | | char | caractère | 2 octets | ||
- | |||
- | ==== Types de données composites ==== | ||
- | |||
- | ^ Classe ^ Catégorie ^ | ||
- | | Integer | Entier | | ||
- | | Long | Entier | | ||
- | | Float | Réel | | ||
- | | Double | Réel | | ||
- | | Caracter | Caratère | | ||
- | | Boolean | Booléen | | ||
- | |||
- | |||
- | |||
- | ===== Déclarations ===== | ||
- | Quelques exemples pour déclarer des variables ou des objets. | ||
- | |||
- | **Syntaxe générale :** | ||
- | <code java> | ||
- | type nomVariable; | ||
- | </ | ||
- | |||
- | **Délaration - Initialisation :** | ||
- | * Variable de type simple -> '' | ||
- | * Variable de type objet -> '' | ||
- | |||
- | Les variables (non locales à une méthode) sont automatiquement initialisées (0 pour les | ||
- | numériques et caractère, //null// pour les objets, //false// pour les booléens). | ||
- | |||
- | ===== Opérateurs et expressions ===== | ||
- | Liste des opérateurs par priorité décroissante : | ||
- | |||
- | ^ # ^ Opérateur ^ | ||
- | | 1 | [] . () | | ||
- | | 2 | ! ~ ++ -- + - (cast) new | | ||
- | | 3 | * / % | | ||
- | | 4 | + - | | ||
- | | 5 | %%<< >> >>> | ||
- | | 6 | %%< <= > >=%% instanceof | | ||
- | | 7 | == != | | ||
- | | 8 | & | | ||
- | | 9 | %%^%% | | ||
- | | 10 | %%|%% | | ||
- | | 11 | %%&& | ||
- | | 12 | %%||%% | | ||
- | | 13 | ?: | | ||
- | | 14 | = += -= *= /= %= &= %%|= ^= <<= >>= >>> | ||
- | |||
- | **Assocativité** : | ||
- | - Les opérateurs unaires (2) et d' | ||
- | - Les autres -> de gauche à droite | ||
- | - Pour forcer la priorité utiliser les paranthèses | ||
- | |||
- | ==== Opérateur ternaire ==== | ||
- | |||
- | Aussi appelé //ternary operator//. | ||
- | |||
- | boolean expression ? valeurSiVrai : valeurSiFaux | ||
- | |||
- | Exemple : | ||
- | <code java> | ||
- | String humeur = estDeBonneHumeur ? "Je suis content" | ||
- | </ | ||
- | |||
- | |||
- | |||
- | ===== Structures et contrôles ===== | ||
- | |||
- | ==== Séquence ==== | ||
- | |||
- | * Toute instruction se termine par un point-virgule (;) | ||
- | * Un bloc de plus d'une instruction est délimitée par des accolades ({,}) | ||
- | |||
- | ==== Conditionnelles ==== | ||
- | |||
- | <code java> | ||
- | switch (variable) { | ||
- | case valeur1 : | ||
- | Liste d' | ||
- | break; | ||
- | |||
- | case valeur2 : | ||
- | Liste d' | ||
- | break; | ||
- | |||
- | case valeurn : | ||
- | Liste d' | ||
- | break; | ||
- | default: | ||
- | Liste d' | ||
- | break; | ||
- | } | ||
- | </ | ||
- | |||
- | ==== Boucles ==== | ||
- | |||
- | === foreach === | ||
- | |||
- | Le code suivant fait une sorte de '' | ||
- | |||
- | <code java> | ||
- | for (ColoredBox coloredBox: scene.coloredBoxes) | ||
- | if (coloredBox.isSelected) | ||
- | scene.coloredBoxes.removeElement(coloredBox); | ||
- | </ | ||
- | |||
- | |||
- | ==== Structures de données ==== | ||
- | === Tableaux === | ||
- | |||
- | <code java|Déclaration> | ||
- | int[] t1; // tableau d' | ||
- | int t2[]; // " | ||
- | int[] x, y; // x et y sont des tableaux | ||
- | int x, y[]; // seleuement y est un tableau | ||
- | Point[] t3; // tableau de Point (objets) | ||
- | </ | ||
- | <code java|Instanciation> | ||
- | t1 = new int[20]; | ||
- | t3 = new Point[10]; | ||
- | </ | ||
- | |||
- | |||
- | ====== Programmation Orientée objet ====== | ||
- | |||
- | La programmation orienté objet comprend plusieurs concepts : | ||
- | - Classes et objets | ||
- | - Encapsulation | ||
- | - Héritage et polymorphisme | ||
- | - Interfaces | ||
- | - Modes d' | ||
- | |||
- | |||
- | ===== Structure d'une classe ===== | ||
- | |||
- | Le nom de la classe et le nom de fichier sont liés, c' | ||
- | |||
- | |||
- | |||
- | Structure générale d'une classe | ||
- | ^ <nom de la classe> ^^ | ||
- | | < | ||
- | | < | ||
- | | < | ||
- | |||
- | |||
- | <code java> | ||
- | public class Etudiant { | ||
- | private String nom, prenom, adresse; | ||
- | private int age; | ||
- | |||
- | // Constructeurs | ||
- | public Etudiant(String n, String name, String pname) { | ||
- | nas = n; nom=name; prenom=pname; | ||
- | age=16; adresse=" | ||
- | } | ||
- | |||
- | public void demenage (String nouvelleAdr) { | ||
- | adresse = nouvelleAdr; | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | Dans un programme Java : | ||
- | <code java> | ||
- | Etudiant e1 = new Etudiant (" | ||
- | Etudiant e2; | ||
- | e2 = e1; | ||
- | </ | ||
- | Les variables '' | ||
- | |||
- | ===== Classe interne ===== | ||
- | |||
- | <code java> | ||
- | public Class ClasseHote { | ||
- | | ||
- | [...] | ||
- | | ||
- | private class ClasseInterne { | ||
- | | ||
- | [...] | ||
- | | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | |||
- | ===== Méthodes ===== | ||
- | |||
- | Méthodes d' | ||
- | * en lecture (// | ||
- | * en écriture (// | ||
- | |||
- | |||
- | ==== Surcharge et surdéfinition ==== | ||
- | |||
- | La surcharge (// | ||
- | |||
- | La surdéfinition (// | ||
- | |||
- | ===== Référence this ===== | ||
- | |||
- | Le '' | ||
- | |||
- | <code java> | ||
- | public class Personne { | ||
- | |||
- | private String nom; | ||
- | |||
- | public void setNom (String nom) { | ||
- | this.nom = nom; | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | On peut aussi utiliser '' | ||
- | <code java> | ||
- | public class Point { | ||
- | |||
- | private double abscisse, ordonnee; | ||
- | |||
- | |||
- | public Point(double a, double b) { | ||
- | abscisse=a; | ||
- | ordonnee=b; | ||
- | } | ||
- | |||
- | public Point(double a) { | ||
- | this(a,0); | ||
- | } | ||
- | |||
- | public Point() { | ||
- | this(0); | ||
- | } | ||
- | |||
- | } | ||
- | </ | ||
- | |||
- | Il est plus simple par la suite de modifier le code pour ajouter un attribut : | ||
- | <code java> | ||
- | public class Point { | ||
- | |||
- | private double abscisse, ordonnee; | ||
- | |||
- | |||
- | public Point(double a, double b) { | ||
- | this(a, | ||
- | } | ||
- | |||
- | public Point(double a) { | ||
- | this(a,0); | ||
- | } | ||
- | |||
- | public Point() { | ||
- | this(0); | ||
- | } | ||
- | |||
- | public Point (double a, double b, double c) { | ||
- | abscisse = a; | ||
- | ordonnee = b; | ||
- | profondeur = c; | ||
- | } | ||
- | |||
- | } | ||
- | </ | ||
- | |||
- | |||
- | |||
- | ===== Imbrication d' | ||
- | |||
- | La classe Adresse : | ||
- | |||
- | <code java> | ||
- | public class Adresse { | ||
- | private String numRue, | ||
- | | ||
- | | ||
- | | ||
- | |||
- | public Adresse (String n, String r, String c, String v) { | ||
- | numRue = n; | ||
- | nomRue = r; | ||
- | codePostal = c; | ||
- | ville = v; | ||
- | |||
- | } | ||
- | |||
- | public void setVille (String v) { | ||
- | ville = v; | ||
- | } | ||
- | |||
- | public String getVille () { | ||
- | return ville; | ||
- | } | ||
- | </ | ||
- | |||
- | |||
- | La classe Personne : | ||
- | |||
- | <code java> | ||
- | public class Personne { | ||
- | private String nas, nom, prenom; | ||
- | |||
- | public Adresse adresse; | ||
- | |||
- | public Adresse getAdresse () { | ||
- | return adresse; | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | <code java> | ||
- | Personne a = new Personne(); | ||
- | // afficher à l' | ||
- | Adresse adr = a.getAdresse(); | ||
- | String v= adr.getVille(); | ||
- | System.out.println(v); | ||
- | |||
- | // ou bien : | ||
- | System.out.println(a.getAdresse().getVille()); | ||
- | |||
- | </ | ||
- | |||
- | |||
- | |||
- | ===== Transmission et retour d' | ||
- | |||
- | Les données primitives sont toujours transmises par valeur. | ||
- | |||
- | <code java> | ||
- | public void incrementer (int x) { | ||
- | x++; | ||
- | } | ||
- | // ... | ||
- | int a=8; | ||
- | incrementer(a); | ||
- | System.out.println(" | ||
- | </ | ||
- | |||
- | Les objets sont toujours transmis par référence. | ||
- | |||
- | <code java> | ||
- | public class Point { | ||
- | private double abscisse, ordonnee; | ||
- | public void setAbs(double a) { | ||
- | abscisse = a; | ||
- | } | ||
- | } | ||
- | |||
- | public void changerAbs (Point x, double abs) { | ||
- | x.setAbs(abs); | ||
- | } | ||
- | |||
- | public void permute (Point x, Point y) { | ||
- | Point tmp=x; | ||
- | x=y; | ||
- | y=tmp; | ||
- | } | ||
- | |||
- | </ | ||
- | |||
- | <code java> | ||
- | Point p = new Point(); | ||
- | chagerabs(p, | ||
- | // | ||
- | </ | ||
- | |||
- | Quand on | ||
- | |||
- | <code java> | ||
- | Point p = new Point(), q = new Point(); | ||
- | permute(p, | ||
- | </ | ||
- | |||
- | |||
- | |||
- | ===== Packages ===== | ||
- | Les packages en Java sont des regroupement de classes. | ||
- | |||
- | Exemples de packages : | ||
- | - javax.swing -> programmation graphique | ||
- | - java.sql -> programmation sur bases de données | ||
- | - java.net -> programmation réseau | ||
- | |||
- | Avec '' | ||
- | |||
- | L' | ||
- | |||
- | |||
- | |||
- | ==== L' | ||
- | |||
- | <code java> | ||
- | import javax.swing.*; | ||
- | |||
- | public class Programme { | ||
- | public static void main(String s[]) { | ||
- | JFrame fen = new JFrame (" | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | ==== Ajouter une classe à un package ==== | ||
- | |||
- | <code java> | ||
- | package com.sgariepy.geometrie; | ||
- | |||
- | // éventuels import | ||
- | |||
- | public class Cercle { | ||
- | |||
- | } | ||
- | |||
- | |||
- | </ | ||
- | |||
- | La convention dans le choix de noms packages est d' | ||
- | |||
- | |||
- | |||
- | ===== Spécificateurs d' | ||
- | La visibilité, | ||
- | ^ Nom ^ Notation | ||
- | | Privé | ||
- | | Protégé | '' | ||
- | | Paquetage | ||
- | | Public | ||
- | |||
- | L' | ||
- | |||
- | |||
- | |||
- | |||
- | Avec la déclaration | ||
- | |||
- | |||
- | **Package 1 :** | ||
- | <code java> | ||
- | public class Classe1 { | ||
- | private int a; | ||
- | int b; | ||
- | |||
- | Class2 x; // ok | ||
- | |||
- | } | ||
- | |||
- | class Class2 { | ||
- | Class1 u = new Class1(); | ||
- | u.b = 36; //ok | ||
- | } | ||
- | </ | ||
- | |||
- | |||
- | **Package 2 :** | ||
- | <code java> | ||
- | public class Classe3 { | ||
- | Class2 y; // non, car Class2 qui a un acces " | ||
- | |||
- | } | ||
- | </ | ||
- | |||
- | |||
- | |||
- | Ayant une classe mère '' | ||
- | |||
- | ===== Modificateurs ===== | ||
- | - abstract -> classe ou méthode abstraite | ||
- | - static -> méthode ou attribut de classe | ||
- | - final | ||
- | - l' | ||
- | - peut s' | ||
- | - classe non dérivable | ||
- | |||
- | |||
- | ===== Attributs et méthodes de classes (static) ===== | ||
- | |||
- | |||
- | <code java> | ||
- | public class Groupe { | ||
- | private Etudiant[] etudiants; | ||
- | private int nbEtudiants; | ||
- | private static int capaciteMaximale = 20; // Note1 | ||
- | |||
- | public static int getCapaciteMaximale () { // Note2 | ||
- | return capaciteMaximale; | ||
- | } | ||
- | |||
- | } | ||
- | </ | ||
- | |||
- | **Note1** -> L' | ||
- | |||
- | **Note2** -> Pour accéder à l' | ||
- | |||
- | <code java> | ||
- | static void main(...) { | ||
- | Groupe g1 = new Groupe(), | ||
- | g2 = new Groupe(), | ||
- | g3 = new Groupe(); | ||
- | } | ||
- | </ | ||
- | |||
- | |||
- | |||
- | |||
- | <code java> | ||
- | public class Taxes { | ||
- | public static final double TPS = 0.05; // Note3 | ||
- | public static final double TVQ = 0.075; | ||
- | } | ||
- | </ | ||
- | |||
- | <code java> | ||
- | double montantHT = 300; | ||
- | double montantTPS; | ||
- | montantTPS = montantHT * Taxes.TPS; | ||
- | |||
- | </ | ||
- | |||
- | **Note3** -> Comme les attributs de la classe '' | ||
- | |||
- | Autre exemple : la classe Math -> Math.PI. | ||
- | - Math.random(); | ||
- | - Math.pow(x, | ||
- | - Math.sin(angle); | ||
- | |||
- | |||
- | ====== Chaînes de caractères ====== | ||
- | |||
- | |||
- | ===== Déclarer un tableau de chaînes ===== | ||
- | |||
- | <code java> | ||
- | String sTab[] = new String[5]; | ||
- | </ | ||
- | |||
- | ===== Comparer deux chaînes ===== | ||
- | |||
- | <code java> | ||
- | String chaine1 = " | ||
- | String chaine2 = " | ||
- | |||
- | if (chaine1.compareTo(chaine2)==0) { | ||
- | // logique | ||
- | } | ||
- | </ | ||
- | |||
- | ^ Résultat | ||
- | | <0 | La chaine se trouve avant, lexicographiquement | ||
- | | == 0 | Les deux chaînes sont équivalentes, | ||
- | | >0 | La chaine se trouve après, lexicographiquement | ||
- | |||
- | * http:// | ||
- | |||
- | ===== StringBuffer ===== | ||
- | |||
- | <code java> | ||
- | public class Personne { | ||
- | private String nas, nom; | ||
- | private int age; | ||
- | |||
- | public int getAge { | ||
- | return age; | ||
- | } | ||
- | public String getNAS { | ||
- | return NAS; | ||
- | } | ||
- | |||
- | } | ||
- | </ | ||
- | |||
- | |||
- | <code java> | ||
- | static public void main () { | ||
- | Personne = new Personne (); | ||
- | |||
- | int a p.getAge(); | ||
- | a -= 10; // l'age de la persone nest pas modifiee | ||
- | |||
- | String s = p.getNAS(); | ||
- | } | ||
- | </ | ||
- | |||
- | |||
- | Pour travailler sur des chaînes de caractère altérables, | ||
- | |||
- | |||
- | ====== Tableaux ====== | ||
- | ===== Principes ===== | ||
- | |||
- | * Les tableaux sont des objets particuliers. | ||
- | * Si on affecte un tableau à un autre, on fait en réalité une affectation de références. | ||
- | * Chaque tableau a un attribut public lengthqui représente la taille du tableau. | ||
- | * On peut spécifier la taille d'un tableau à l' | ||
- | * Si on tente d' | ||
- | * Le premier indice du tableau est toujours 0. | ||
- | |||
- | ==== Déclaration, | ||
- | ==== Déclaration ==== | ||
- | <code java> | ||
- | int[] T; //ou : int T[]; | ||
- | Point[] TP; //ou : Point TP[]; | ||
- | </ | ||
- | ==== Instanciation ==== | ||
- | <code java> | ||
- | T = new int[5]; | ||
- | TP = new Point[3]; | ||
- | </ | ||
- | Attention! | ||
- | <code java> | ||
- | TP[1].setAbs(25); | ||
- | T[1] = 26 //OK | ||
- | </ | ||
- | |||
- | ==== Initialisation ==== | ||
- | <code java> | ||
- | int[] T = {8, | ||
- | Point[] TP = {new Point(11, | ||
- | Point(4, | ||
- | </ | ||
- | |||
- | ===== Affectation et copie ===== | ||
- | Les tableaux étant des objets, l' | ||
- | |||
- | Pour la copie on utilise la méthode arrayCopyde la | ||
- | classe '' | ||
- | <code java> | ||
- | System.arrayCopy(T1, | ||
- | System.arrayCopy(T1, | ||
- | </ | ||
- | |||
- | ===== Arguments de méthodes ===== | ||
- | |||
- | * Une méthode peut recevoir un tableau en argument au même titre que n' | ||
- | * La transmissionse fait toujours par référence | ||
- | * Un méthode peut retourner un tableau comme résultat au même titre que n' | ||
- | * Le retour se fait toujours par référence. | ||
- | * La classe '' | ||
- | * La classe '' | ||
- | |||
- | ===== Tableaux multidimentionels ===== | ||
- | |||
- | * Ce sont en réalité des tableaux de tableaux (comme en C/C++) : | ||
- | <code java> | ||
- | double mat[][] = new double[4][3];// | ||
- | </ | ||
- | * On peut initialiser mat comme ceci : | ||
- | <code java> | ||
- | double mat[][] = {{3, | ||
- | </ | ||
- | * '' | ||
- | * Cependant, contrairement à C/C++, chaque ligne étant un objet, on peut permuter 2 lignes en écrivant simplement : | ||
- | <code java> | ||
- | double tem[] = mat[i]; | ||
- | mat[i] = mat[j]; | ||
- | mat[j] = temp; | ||
- | </ | ||
- | * On peut créer des tableaux avec des lignes de différentes tailles : | ||
- | <code java> | ||
- | double M[][] = new double[4][]; | ||
- | for (i=0; | ||
- | M[i] = new double[2*i+1]; | ||
- | </ | ||
- | |||
- | |||
- | |||
- | ====== Les vecteurs ====== | ||
- | Un vecteur ('' | ||
- | < | ||
- | **Avant JDK 1.5** | ||
- | Vector v = new Vector(); | ||
- | Dès la création du vecteur, une place pour le tableau est réservé en mémoire. | ||
- | <code java> | ||
- | Point p = new Point(5,2); | ||
- | v.add(p); | ||
- | Integer x = new Integer(48); | ||
- | v.add(x); | ||
- | String nom = " | ||
- | v.add(nom); | ||
- | </ | ||
- | |||
- | La méthode '' | ||
- | |||
- | ^ Contenu du vecteur v ^ Index ^ | ||
- | | p de type Point | 0 | | ||
- | | x de type Integer | 1 | | ||
- | | nom de type String | 2 | | ||
- | | ... | 3 | | ||
- | | ... | 4 | | ||
- | | ... | 5 | | ||
- | |||
- | <code java> | ||
- | if (v.contains(q)); | ||
- | Object o = v.get(2); | ||
- | Object m = v.get(0); | ||
- | int a1 = p.getAbscisse(); | ||
- | int a2 = m.getAbscisse(); | ||
- | Point n = (Point) v.get(0); | ||
- | int a3 = m.getAbscisse(); | ||
- | </ | ||
- | |||
- | |||
- | < | ||
- | **À partir de JDK 1.5** | ||
- | <code java> | ||
- | Vector< | ||
- | Point p = ...; | ||
- | vp.add(p); | ||
- | Point r = vp.get(0); | ||
- | </ | ||
- | |||
- | |||
- | < | ||
- | **La méthode toArray()** | ||
- | |||
- | Cette méthode permet de retourner un tableau de __références__ des objets. | ||
- | <code java> | ||
- | Object[] = v.toArray(); | ||
- | ((Point) t[0]).setAbscisse(10); | ||
- | </ | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ====== Héritage ====== | ||
- | |||
- | Exemple d'une personne. | ||
- | |||
- | Apports de l' | ||
- | * Réutilisation du code | ||
- | * Faciite la maintenance du code | ||
- | * Permet des traitements génériques | ||
- | |||
- | L' | ||
- | |||
- | <code java> | ||
- | public class Etudiant extends Personne | ||
- | </ | ||
- | |||
- | {{prog: | ||
- | |||
- | <code java> | ||
- | public class Personne { | ||
- | protected String NAS, Nom, Prenom, Adresse; | ||
- | |||
- | public void changerAdresse(string nouvAdr) { | ||
- | |||
- | //... | ||
- | } | ||
- | |||
- | public void print () { | ||
- | System.Out.print (" | ||
- | " | ||
- | " | ||
- | } | ||
- | } | ||
- | |||
- | public class Etudiant extends Personne { | ||
- | |||
- | public void print () { | ||
- | super.print(); | ||
- | System.Out.print (" | ||
- | " | ||
- | " | ||
- | } | ||
- | |||
- | public String getSession () { | ||
- | return session; | ||
- | } | ||
- | |||
- | } | ||
- | |||
- | </ | ||
- | |||
- | |||
- | ===== Référencement entre classes parent et filles ===== | ||
- | |||
- | |||
- | Une référence peut pointer sur différents types d' | ||
- | <code java> | ||
- | Personne p1, p2; | ||
- | Etudiant e1, e2; | ||
- | |||
- | p1 = new Personne(); | ||
- | e1 = new Etudiant(); | ||
- | p2 = new Etudiant(); | ||
- | e2 = new Personne(); | ||
- | </ | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ===== Liaison dynamique ===== | ||
- | Ce qui est intéressant, | ||
- | |||
- | <code java> | ||
- | String s1 = p1.getSession(); | ||
- | String s2 = p2.getSession(); | ||
- | String s2 = ((Etudiant) p2).getSession(); | ||
- | String s3 = e1.getSession(); | ||
- | |||
- | </ | ||
- | |||
- | <code java> | ||
- | p1.print(); | ||
- | p2.print(); | ||
- | e1.print(); | ||
- | </ | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ===== Méthodes finales ===== | ||
- | |||
- | On peut spécifier une méthode comme étant '' | ||
- | |||
- | <code java> | ||
- | import java.util.*; | ||
- | |||
- | public class Personne { | ||
- | | ||
- | public final String getNAS() { | ||
- | return nas; | ||
- | } | ||
- | } | ||
- | |||
- | public class Etudiant extends Personne { | ||
- | public String getNAS() { //NON : getNAS() est finale. | ||
- | return nas; | ||
- | } | ||
- | } | ||
- | |||
- | </ | ||
- | |||
- | Dans l'API, la classe classe '' | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ===== Méthodes héritées ===== | ||
- | |||
- | Certaines méthodes sont héritées de classes parent et il peut être intéressant de les redéfinir. | ||
- | |||
- | Par exemple la méthode '' | ||
- | <code java> | ||
- | public boolean equals (Object p) { | ||
- | if (p instanceof Point) { | ||
- | Point t = (Point) p; | ||
- | return (x == t.getX() && y == t.getY()); | ||
- | } | ||
- | else return false; | ||
- | } | ||
- | </ | ||
- | |||
- | |||
- | ===== Classes inernes ===== | ||
- | * C’est un luxe plutot qu’une nécessité. | ||
- | * C’est une classe définie à l’intérieur d’une autre classe. | ||
- | * Permet d’accéder directement aux données de la classe qui la contient. | ||
- | * Une classe interne est cachée aux autres classes. | ||
- | * Très utilisées dans les interfaces utilisateurs et dans la gestion des événements. | ||
- | |||
- | <code java> | ||
- | public class X { | ||
- | |||
- | class Y { | ||
- | |||
- | } | ||
- | |||
- | }</ | ||
- | |||
- | Une classe interne ('' | ||
- | |||
- | Exemple : | ||
- | <code java> | ||
- | class Personne { | ||
- | ... | ||
- | public JPanel getUI() { | ||
- | return new PersonnePanel(); | ||
- | } | ||
- | |||
- | class PersonnePanel extends JPanel { | ||
- | //création de l’interface graphique d’une | ||
- | //personne sous forme d’un panneau. | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | Puis, dans un programme : | ||
- | <code java> | ||
- | JFrame fenetre x = new JFrame(); | ||
- | Personne x = new Personne(); | ||
- | JPanel xUI = x.getUI(); | ||
- | fenetre.getContentPane().add(xUI); | ||
- | </ | ||
- | |||
- | ===== Classes abstraites ===== | ||
- | |||
- | * Sert de base à d’autres classes, qui vont en dériver. | ||
- | * Impose un format commun aux classes dérivées. | ||
- | * Améliore la clarté et facilite la conception des classes. | ||
- | * Ne peut pas être instanciée. | ||
- | * Contient une ou plusieurs méthodes abstraites. | ||
- | * Les méthodes abstraites doivent être surdéfinies par toutes les classes non abstraites dérivées. | ||
- | * Si une classe contient une méthode abstraite alors elle est abstraite même si elle n’est pas déclarée comme telle. | ||
- | |||
- | Exemple de classe abstraite : | ||
- | <code java> | ||
- | public abstract class Figure { // | ||
- | public boolean getVisibilite() { | ||
- | return visible; | ||
- | } | ||
- | |||
- | public void setVisibilite(boolean v) { | ||
- | visible = v; | ||
- | } | ||
- | |||
- | public abstract double getSurface(); | ||
- | |||
- | private boolean visible; | ||
- | } | ||
- | </ | ||
- | |||
- | |||
- | Dans le cas suivant, on définit une classe qui hérite de la classe '' | ||
- | <code java> | ||
- | public class Cercle extends Figure { //Fichier : Cercle.java | ||
- | public Cercle() { | ||
- | centre = new Point(0,0); | ||
- | rayon = 10; | ||
- | } | ||
- | |||
- | public Cercle(double r) { | ||
- | centre = new Point(0,0); | ||
- | rayon = r; | ||
- | } | ||
- | |||
- | public Cercle(Point c, double r) { | ||
- | centre = c; | ||
- | rayon = r; | ||
- | } | ||
- | |||
- | public double getSurface() { | ||
- | return Math.PI*Math.pow(rayon, | ||
- | } | ||
- | |||
- | private Point centre; | ||
- | private double rayon; | ||
- | } | ||
- | </ | ||
- | |||
- | La classe suivante est celle d'un '' | ||
- | <code java> | ||
- | public class Rectangle extends Figure | ||
- | // ... | ||
- | |||
- | public Rectangle(double L, double l) { | ||
- | centre=new Point(0,0); | ||
- | longueur=L; | ||
- | } | ||
- | |||
- | public double getSurface() { | ||
- | return longueur*largeur; | ||
- | } | ||
- | |||
- | public double getLongueur() { | ||
- | return longueur; | ||
- | } | ||
- | |||
- | private Point sommetHG; | ||
- | private double longueur, largeur; | ||
- | } | ||
- | </ | ||
- | |||
- | Exemple de code avec ce qui est possible et impossible de faire : | ||
- | <code java> | ||
- | class TestFigure { //Figure : TestFigure.java | ||
- | |||
- | public static void main(String args[]) { | ||
- | Figure f1, f2, f3; | ||
- | f1 = new Figure(); //NON. Figure est abstraite | ||
- | f2 = new Cercle(); //OK | ||
- | System.out.println(f2.getSurface()); | ||
- | f3 = new Rectangle(9, | ||
- | System.out.println(f3.getSurface()); | ||
- | System.out.println(f3.getLongueur());// | ||
- | System.out.println((Rectangle)f3.getLongueur());// | ||
- | System.out.println(((Rectangle)f3).getLongueur());// | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | |||
- | |||
- | ===== Interfaces ===== | ||
- | |||
- | L' | ||
- | |||
- | * L’héritage multiple rend les compilateurs soit complexes (C++) soit peu performants (Eiffel). | ||
- | * Le concept d’interface a été introduit par java pour récupérer une bonne partie des fonctionnalités de l’héritage multiple : amener une classe à reflèter le comportement de plusieurs classes parentes. | ||
- | * Une interface est une classe abstraite déclarée avec le mot reservé interface au lieu de class. | ||
- | * Une interface ne peut contenir que des méthodes abstraites et des constantes. | ||
- | * Une interface ne peut pas avoir des attributs. | ||
- | * Une classe peut implémenter une interface : elle doit alors définir toutes les méthodes de l’interface. | ||
- | * Une classe ne peut dériver que d’une seule classe mais elle peut implémenter plusieurs interfaces. | ||
- | |||
- | |||
- | Création d'une interface : | ||
- | <code java> | ||
- | interface MonInterface { | ||
- | public void f1(...); | ||
- | public double f2(...); | ||
- | } | ||
- | </ | ||
- | |||
- | Implémentation de l' | ||
- | <code java> | ||
- | public class ABC implements MonInterface { | ||
- | ... | ||
- | |||
- | public void f1(...) { | ||
- | ... | ||
- | } | ||
- | |||
- | public double f2(...) { | ||
- | ... | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | Propriétés d'une interface : | ||
- | * On peut déclarer des objets d’une interface : | ||
- | <code java> | ||
- | MonInterface x1, x2; | ||
- | x1 = new ABC(); | ||
- | </ | ||
- | |||
- | * On peut utiliser l’opérateur instanceof pour vérifier si un objet implémente une interface : | ||
- | <code java> | ||
- | if (x1 instanceof MonInterface) ... | ||
- | </ | ||
- | |||
- | * On peut faire de l’héritage d’interfaces : | ||
- | <code java> | ||
- | public interface MonInterface2 extends MonInterface { | ||
- | public void f3(...); | ||
- | } | ||
- | </ | ||
- | |||
- | |||
- | <code java> | ||
- | public class Util { | ||
- | public void trier (Cercle t[]) { | ||
- | for (int i = 0; i< | ||
- | for (int j=i+1; j< | ||
- | if (t[i].getSurface() > t[j].getSurface[]) { | ||
- | Cercle temp; | ||
- | temp = t[i]; | ||
- | t[i] = t[j]; | ||
- | t[j] = temp | ||
- | } | ||
- | } | ||
- | } | ||
- | |||
- | |||
- | // ... | ||
- | |||
- | main () { | ||
- | Cercle t[] = new Cercle t[50]; | ||
- | // intanciation des 50 cercles | ||
- | // ... | ||
- | Util.trier(t); | ||
- | } | ||
- | </ | ||
- | |||
- | |||
- | |||
- | |||
- | ==== Comparable ==== | ||
- | |||
- | Pour réellement comparer des objets entre eux, plus qu' | ||
- | |||
- | |||
- | Le comparable est utilisé pour établir un ordre naturel entre les instances d'un même type d' | ||
- | - Implémenter la classe '' | ||
- | - Définir la méthode '' | ||
- | - Dans une classe tierce, créer des instances dans un tableau et appeler la méthode '' | ||
- | |||
- | |||
- | |||
- | On peut préciser la précision d'une comparaison en multipliant les valeurs comparables. | ||
- | |||
- | <code java> | ||
- | public int compareTo(Object o) { | ||
- | if (o instanceof Cercle) | ||
- | return (int) 100*getSurface() - 100*((Cercle)x).getSurface())); | ||
- | else | ||
- | |||
- | </ | ||
- | |||
- | |||
- | ==== Comparators ==== | ||
- | |||
- | D' | ||
- | |||
- | <code java> | ||
- | public class Etudiant implements Comparable { | ||
- | private String num, nom, prenom; | ||
- | private double note; | ||
- | |||
- | public int compareTo(Object x) { | ||
- | if (!(x instance of Etudiant)) throw new ClassCastException(" | ||
- | Etudiant e = (Etudiant) x; | ||
- | int res = nom.compareToIgnoreCase(e.nom); | ||
- | if (res != 0) return res; | ||
- | res = prenom.compareToIgnoreCase(e.prenom); | ||
- | return res; | ||
- | } | ||
- | |||
- | public boolean equals (Object x) { | ||
- | if (!(x instance)) return false; | ||
- | return (this.compareTo(x)==0); | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | |||
- | ====== Gestion des événements ====== | ||
- | |||
- | - Le modèle de délégation | ||
- | - Exemple des événements les plus courants | ||
- | |||
- | ===== Les modèles de délégations ===== | ||
- | |||
- | Fonctionne selon le modèle source-écouteur. | ||
- | |||
- | |||
- | ==== Exemple - Le clic sur un bouton ==== | ||
- | |||
- | Le clic est un événement de type **Action** (rprésenté par la classe '' | ||
- | |||
- | L' | ||
- | |||
- | '' | ||
- | |||
- | Catégories d' | ||
- | - ActionEvent | ||
- | - KeyEvent | ||
- | - MouseEvent | ||
- | - WindowEvent | ||
- | |||
- | Phases de mise en oeuvre d' | ||
- | - Créer une classe // | ||
- | - Créer l' | ||
- | - Lier l' | ||
- | - Avertit l' | ||
- | - Exécution de '' | ||
- | |||
- | <code java> | ||
- | public class AppUI extends JFrame implements ActionListener { | ||
- | |||
- | public AppUI () { | ||
- | // ajout des éléments graphiques | ||
- | miNouveau.addActionListener(this); | ||
- | miOuvrir.addActionListener(this); | ||
- | } | ||
- | |||
- | // ... | ||
- | |||
- | public void actionPerformed(ActionEvent e) { | ||
- | Object source = e.getSource(); | ||
- | |||
- | if (source == miNouveau) { | ||
- | // instructions | ||
- | } | ||
- | else if (source == miOuvrir) { | ||
- | // instructions | ||
- | } | ||
- | } | ||
- | } | ||
- | </ | ||
- | ===== WindowListener et WindowsAdapter ===== | ||
- | |||
- | L' | ||
- | - '' | ||
- | - '' | ||
- | - '' | ||
- | - '' | ||
- | - '' | ||
- | - '' | ||
- | |||
- | Dans les applications, | ||
- | |||
- | |||
- | ====== Modèle Vue Contrôleur ====== | ||
- | Les applications créés en Java, devraient être implémentés avec le MVC (modèle, vue, contrôleur). | ||
- | |||
- | Il y a donc trois types de classes selon ce modèle : | ||
- | - Les classes du **modèle** -> Les classes qui implémentent les traitements au sein de l' | ||
- | - Les classes de la **vue** -> Les classes de présentation qui affichent tout ou une partie du modèle à l' | ||
- | - Les classes **contrôleur** | ||
- | * Connectent et déconnectent le modèle de la vue | ||
- | * Opèrent les événements (écouteurs) | ||
- | |||
- | {{ : | ||
- | |||
- | ====== Modèle observeur / observable ====== | ||
- | Les classes du modèle peuvent aussi implémenter l' | ||
- | |||
- | La connexion entre le modèle et la vue est rédigée à l'aide du patron de conception __Observer__. | ||
- | - l' | ||
- | - l' | ||
- | |||
- | ===== Observable ===== | ||
- | Quelques méthodes peuvent être implémentées : | ||
- | * setChanged() | ||
- | * notifyObservers() | ||
- | * addObserver(Objet vue) -> connecte la vue au modèle | ||
- | * removeObserver(Object view) | ||
- | {{ : | ||
- | |||
- | ===== Observer ===== | ||
- | La principale méthode d'un observeur est utile quand les données du modèle ont changé et c'est -> **'' | ||
- | |||
- | |||
- | ====== Ressources externes ====== | ||
- | http:// | ||
prog/java/toc.1392168388.txt.gz · Dernière modification : 2022/02/02 00:43 (modification externe)