Chaînes de caractères – un exemple d`objet Plan Définition Codage
Transcription
Chaînes de caractères – un exemple d`objet Plan Définition Codage
Plan Chaînes de caractères – un exemple d’objet Définition Programmation objet Classe String Classe StringBuilder Université de Nice - Sophia Antipolis Richard Grin Version1.1 – 10/11/11 Richard Grin Définition Chaînes de caractères page 2 Codage Unicode Une chaîne de caractères est une suite de caractères lisibles par un homme Très utilisé dans les programmes informatiques, par exemple pour afficher des informations, désigner un fichier, recevoir un nom d’utilisateur, afficher les options d’un menu Les caractères utilisés par Java sont codés par le codage Unicode Unicode peut représenter tous les caractères affichables de toutes les langues (ou presque…), les caractères de ponctuation et même les caractères utilisés par les mathématiques ou d’autres domaines La version actuelle du codage Unicode est la version 5 qui code plus d’un million de caractères Richard Grin Richard Grin Chaînes de caractères page 3 Chaînes de caractères page 4 Programmation objet Jusqu’à maintenant dans cette introduction à la programmation nous n’avons pas fait de programmation objet La programmation objet manipule des… objets Elle modélise la réalité concernée par le programme à l’aide d’objets Programmation objet Richard Grin Chaînes de caractères page 5 Richard Grin Chaînes de caractères page 6 1 Un objet Qu’est-ce qu’un objet ? Entité identifiable, concrète ou abstraite Un objet réagit à des messages qu’on lui envoie ; la façon dont il réagit constitue le comportement de l’objet Il ne réagit pas toujours de la même façon à un même message ; sa réaction dépend de l’état dans lequel il est Comportement Arrête-toi vitesse direction ... État (caché) (interface publique) va à x km/h Un objet R. Grin Introduction à Java 7 Une voiture R. Grin Introduction à Java Exemples d’objet Démarre 8 Interactions entre objets Une voiture Un employé Un client Une facture Une chaîne de caractères Les objets interagissent en s’envoyant des messages Objet qui reçoit le message Message envoyé objet1.decrisToi(); employe.valeurDeTonSalaire(2000); Paramètre du message Richard Grin Chaînes de caractères page 9 R. Grin Messages entre objets arrête-toi nom:Pierre âge:28 ans ... Conduit à la ville v Pierre Pierre envoie un message à sa voiture : R. Grin 10 Notion de classe Le code lié aux objets d’un même type est écrit dans une classe Par exemple, les objets Pierre, Paul et Jacques sont représentés par la classe Personne La classe contient le code qui décrit l’état et le comportement des objets qui sont de ce type démarre vitesse:60 direction:5 ... va à x km/h va à 70 km/h Introduction à Java La voiture de Pierre maVoiture.vaAVitesse(70); Introduction à Java 11 Richard Grin Chaînes de caractères page 12 2 Les classes en Java Méthodes et messages L’état interne est donné par les valeurs des variables d’instance Le comportement est donné par les méthodes Par exemple, la classe Personne contient le code qui décrit les variables d’instance et les méthodes applicables aux personnes Méthodes de la classe d’un objet ↔ messages qu’on peut lui envoyer Quand un objet reçoit un message, il exécute la méthode correspondante R. Grin Introduction à Java 13 R. Grin Introduction à Java 14 Paradigme objet La programmation objet est un paradigme, une manière de « modéliser le monde » : des objets ayant un état interne et un comportement collaborent en s’échangeant des messages pour fournir les fonctionnalités qu’on demande à l’application R. Grin Introduction à Java 15 Classe String Richard Grin Chaînes de caractères page 16 Classe String Extrait de String.java Le développeur peut créer ses propres types d’objet Il peut aussi manipuler des types d’objets créés par d’autres Pour cette partie du cours nous allons étudier les chaînes de caractères, objets fournis en standard par le JDK de Java sous la forme de la classe java.lang.String /** The value is used for character storage.*/ private final char[] value; Richard Grin Chaînes de caractères page 17 /** The count is the number of characters in the String. */ private final int count; dans src.zip Richard Grin Chaînes de caractères page 18 3 Types en Java Création d’un objet String Les classes peuvent servir de type (pour déclarer les variables ou dans les signatures des méthodes), comme les types primitifs Les types que l’on a déjà vu : Types primitifs (int, double,…) Classes (String par exemple) Tableaux (int[] ou String[] par exemple) En Java, la syntaxe normale pour la création d’un objet utilise le mot clé new, comme pour un tableau : Train train = new Train(125); La classe String a une syntaxe spéciale String chaine = "Bonjour"; crée un objet String et l’affecte à la variable chaine Comme pour les tableaux, l’objet String est entreposé dans le tas (pas dans la pile) D’autres sortes de types seront étudiées dans le cours de L3 Richard Grin Chaînes de caractères chaine = "Bonjour"; page 19 Richard Grin String dans le tas Chaînes de caractères page 20 Vocabulaire Un objet de la classe String (ou de toute autre classe) s’appelle une instance de la classe Bonjour chaine Pile Richard Grin Tas Chaînes de caractères 21 Un objet String n’est pas modifiable La classe String est une classe particulière car il est impossible de modifier l’état des instances de la classe Il existe dans le JDK la classe StringBuilder pour représenter les chaînes de caractères modifiables ; elle sera étudiée à la fin de cette section Richard Grin Chaînes de caractères page 23 Richard Grin Chaînes de caractères page 22 Nouvelle affectation avec les String String chaine = "Bonjour"; chaine = "Hello"; Cet objet String n’est pas modifié La dernière instruction correspond aux étapes suivantes : 1) Une nouvelle valeur (Hello) est créée 2) La variable chaine référence la nouvelle chaîne Hello (et plus l’ancienne chaîne Bonjour) 3) La place occupée par la chaîne Bonjour pourra être récupérée à un moment ultérieur par le ramasse-miette Richard Grin Chaînes de caractères 24 4 chaine = "Bonjour"; chaine = "Hello"; String dans le tas chaine = "Bonjour"; chaine = "Hello"; String dans le tas Plus tard le ramasse-miette viendra libérer la place occupée par « Bonjour » Hello Bonjour Bonjour chaine chaine Pile Richard Grin Tas Chaînes de caractères Pile 25 Richard Grin Concaténation de chaînes Tas Chaînes de caractères 26 Concaténation de chaînes S’il y a plusieurs + dans une expression, les calculs se font de gauche à droite String s = "Bonjour" + " les amis"; Si un des 2 opérandes de l’opérateur + est une String, l’autre est traduit automatiquement en String : int x = 5; s = "Valeur de x + 1 = " + s contient « Valeur de x + 1 s = x + 1 + "est la valeur s contient « 6 est la valeur int x = 5; s = "Valeur de x = " + x; x + 1; = 51 » de x + 1"; de x + 1 » On peut utiliser des parenthèses pour modifier l’ordre d’évaluation : s = "Valeur de x + 1 = " + (x + 1); Richard Grin Chaînes de caractères 27 Richard Grin Égalité de Strings La méthode equals (comme les autres méthodes de la classe String) n’est pas une méthode static (voir javadoc) String s1, s2; s1 = "Bonjour "; s2 = "les amis"; if ((s1 + s2).equals("Bonjour les amis")) System.out.println("Egales"); « = = » teste si 2 objets sont les mêmes ; il ne doit pas être utilisé pour comparer 2 chaînes Chaînes de caractères 28 Méthodes d’instance La méthode equals teste si 2 instances de String contiennent la même valeur : Richard Grin Chaînes de caractères 29 Elle correspond à un message envoyé à un objet (pas à une classe) Les méthodes static sont appelées des méthodes de classe ; les autres sont appelées des méthodes d’instance La plupart des méthodes sont des méthodes d’instance Richard Grin Chaînes de caractères page 30 5 Comparaison de Strings Méthodes de String s.compareTo(t) Il est impossible de connaître toutes les méthodes des classes fournies par le JDK Il faut se renseigner en utilisant la javadoc de la classe renvoie le « signe de s-t » : 0 en cas d’égalité de s et de t, un nombre entier positif si s suit t dans l’ordre lexicographique un nombre entier négatif sinon Richard Grin Chaînes de caractères 31 Richard Grin Exemples de méthodes de String http://truc.unice.fr/rep1/rep2/fichier.html int n = adresse.indexOf(":"); // 4 String protocole = adresse.substring(0, n); // http String reste = adresse.substring(n + 3); n = reste.indexOf("/"); // 13 rep1/rep2/fichier.html String machine = reste.substring(0, n); String chemin = reste.substring(n + 1); int m = chemin.lastIndexOf("/"); // 9 String repertoire = chemin.substring(0, m); String fichier = chemin.substring(m + 1); Chaînes de caractères page 32 A retenir Récupérer le protocole, la machine, le répertoire et le nom du fichier d’une adresse Web Richard Grin Chaînes de caractères 33 Aucune des méthodes de la classe String ne modifie la chaîne qui reçoit le message Par exemple, substring extrait une souschaîne qui est retournée par la méthode mais la chaîne qui reçoit le message n’est pas modifiée Richard Grin Chaînes de caractères page 34 Chaînes de caractères 2 classes du paquetage java.lang : String pour les chaînes constantes Classe StringBuilder Richard Grin Chaînes de caractères StringBuilder pour les chaînes variables On utilise le plus souvent String, sauf si la chaîne doit être fréquemment modifiée page 35 Richard Grin Chaînes de caractères 36 6 Chaînes modifiables Exemple StringBuilder possèdent des méthodes qui modifient le receveur du message et évitent la création de nouvelles instances ; par exemple : StringBuilder sb = new StringBuilder("Personne"); sb.append(s); sb.insert(0, "8 "); append insert replace delete Attention, StringBuilder ne redéfinit pas equals Pour comparer le contenu de 2 StringBuilder le plus simple est de les transformer en String pour utiliser equals Richard Grin Chaînes de caractères 37 page 38 La concaténation de Strings est une opération coûteuse (elle implique en particulier la création d’un StringBuilder) Passer explicitement par un StringBuilder si la concaténation doit se renouveler Utiliser plutôt la classe String qui possède de nombreuses méthodes Si la chaîne de caractères doit être souvent modifiée, passer à StringBuilder avec le constructeur StringBuilder(String s) Repasser de StringBuilder à String avec toString() Chaînes de caractères Chaînes de caractères Concaténation - performances String et StringBuilder Richard Grin Richard Grin 39 Richard Grin Chaînes de caractères 40 Exemple String[] t; ... // Remplit t // Création de l’instance de StringBuilder StringBuilder sb = new StringBuilder(t[0]); // Concaténation des éléments de t dans sb // (évite des créations d’objets) for (int i = 1; i < t.length; i++) { sb.append(t[i]); } // Récupère le résultat dans une String String chaine = c.toString(); Richard Grin Chaînes de caractères 41 7