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