Programmation Orientée Objet et Java
Classes Anonymes
Enumération -String – Dates
YOUSEF EL MOURABIT
Génie Informatique II
EST-Beni Mellal
AU: 2022/2023
Classes anonymes
2 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
Classes anonymes
Introduits par Java 1.1 pour faciliter la gestion des évènements
Supposons que l’on dispose d’une classe A. Il est possible de créer un
objet d’une classe dérivée de A, en utilisant une syntaxe de cette forme :
3 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
Classes anonymes
4 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
Classes anonymes
La syntaxe de définition d’une classe anonyme ne s’applique que dans deux cas :
classe anonyme dérivée d’une autre (comme dans l’exemple précédent),
classe anonyme implémentant une interface.
5 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
Chaînes de caractères
6 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
Chaînes de caractères
Java dispose d’une classe String permettant de manipuler des chaines de
caractères.
Les constantes chaînes telles que "bonjour" ne sont en fait que des objets
de type String construits automatiquement par le compilateur.
String ch = "bonjour" ;
7 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
La classe String : non modifiable
Un objet de type String n’est pas modifiable. Il n’existera donc aucune
méthode permettant d’en modifier la valeur.
« + » est l’opérateur de concaténation des chaines de caractères
8 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
La classe String
Accès aux caractères d’une chaine
La méthode charAt de la classe String permet d’accéder à un caractère de rang
donné d’une chaîne (le premier caractère porte le rang 0). Ainsi, avec :
String ch = "bonjour" ;
[Link](0) correspond au caractère ’b’,
[Link](2) correspond au caractère ’n’.
Recherche dans une chaîne :
La méthode indexOf surdéfinie dans la classe String permet de rechercher, à
partir du début d’une chaîne ou d’une position donnée :
la première occurrence d’un caractère donné,
la première occurrence d’une autre chaîne.
Dans tous les cas, elle fournit : soit la position du caractère concerné soit -1 sinon.
Il existe également une méthode lastIndexOf, surdéfinie pour effectuer les
mêmes recherches que indexOf, mais en examinant la chaîne depuis sa fin.
String mot = "anticonstitutionnellement" ;
n = [Link] (’t’) ; // n vaut 24
9 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
Comparaison de chaînes
la classe String dispose d’une méthode equals qui compare le contenu de deux chaînes.
La méthode equalsIgnoreCase effectue la même comparaison, mais sans distinguer les
majuscules des minuscules.
On peut effectuer des comparaisons lexicographiques de chaînes pour savoir laquelle de
deux chaînes apparaît avant une autre, en se fondant sur l’ordre des caractères
chaî[Link](chaîne2):
Elle fournit :
• un entier négatif si chaîne1 arrive avant chaîne2,
• un entier nul si chaîne1 et chaîne2 sont égales (on a alors chaî[Link](chaîne2)),
• un entier positif si chaîne1 arrive après chaîne2.
10 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
La classe String : modification
La classe String dispose de quelques méthodes qui, à l’instar de l’opérateur +, créent
une nouvelle chaîne obtenue par transformation de la chaîne courante.
La méthode replace crée une chaîne en remplaçant toutes les occurrences d’un
caractère donné par un autre. Par exemple :
String ch = "bonjour" ;
String ch1 = [Link](’o’, ’a’) ; //ch1=banjaur
La méthode substring permet de créer une nouvelle chaîne en extrayant de la chaîne
courante :
soit tous les caractères depuis une position donnée,
soit tous les caractères compris entre deux positions données
(la première incluse, la seconde exclue) :
String ch = "anticonstitutionnellement" ;
String ch1 = [Link] (5) ; // "onstitutionnellement"
String ch1 = [Link] (4, 16) ; // constitution
11 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
La classe String : modification
La méthode toLowerCase crée une nouvelle chaîne en remplaçant toutes les
majuscules par leur équivalent en minuscules
La méthode toUpperCase fait l’inverse.
String ch = "LanGaGE_3" ;
String ch1 = [Link]() ;
La méthode trim crée une nouvelle chaîne en supprimant les éventuels séparateurs
de début et de fin (espace, tabulations, fin de ligne) :
String ch = " \n\tdes separateurs avant, pendant\t\n et apres \n\t " ;
String ch1 = [Link]() ; // "des separateurs avant, pendant\t\n et apres"
12 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
La classe String : conversion
Conversion d’un type primitif en une chaîne
la méthode statique valueOf est surdéfinie avec un argument des
différents types primitifs. Par exemple, pour le type int :
int n = 427 ;
String ch = [Link](n) ;
ch = "" + n ;
Les conversions d’une chaîne en un type primitif
Il faut alors recourir à une méthode de la classe enveloppe associée au
type primitif : Integer pour int ou Float pour float.
String ch = "3587" ;
int n = [Link](ch) ;
13 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
La classe String et tableau de caractères
On peut construire une chaîne à partir d’un tableau de caractères :
char mot [] = {’b’, ’o’, ’n’, ’j’, ’o’, ’u’, ’r’} ;
String ch = new String (mot) ;
String ch1 = new String (mot, 2, 4) ; // ch1 est construite en prélevant 4
caractères du tableau mot, à partir de celui de rang 2 ; ch1 contient la
chaîne "onjo"
On peut transformer un objet chaîne en un tableau de caractères, grâce à
la méthode toCharArray
String ch = "bonjour" ;
char mot [] ;
mot = [Link]() ;
14 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
La classe StringBuffer
Java dispose d’une classe StringBuffer destinée elle aussi à la manipulation de
chaînes, mais dans laquelle les objets sont modifiables.
On peut créer un objet de type StringBuffer à partir d’un objet de type String.
Il existe des méthodes :
• de modification d’un caractère de rang donné : setCharAt,
• d’accès à un caractère de rang donné : charAt,
• d’ajout d’une chaîne en fin : la méthode append accepte des arguments de
tout type primitif et de type String,
• d’insertion d’une chaîne en un emplacement donné : insert,
• de remplacement d’une partie par une chaîne donnée : replace,
• de conversion de StringBuffer en String : toString.
15 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
La classe StringBuffer
Exemple :
16 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
La classe StringBuffer
int capacity () : retourne la capacity de la chaine
void ensureCapacity (int n) : cette méthode redimensionne le tableau si
nécessaire de façon que la capacity de la chaine soit au moins de capacity
égale à n.
String substring (int i) : retourne la sous chaine depuis le rang i jusqu’à la
fin.
String substring (int i, int l) : retourne la chaine qui commence depuis
l’indice i et qui une longueur l.
StringBuffer delete (int s, int e) : enlève tous les caractères compris entre
les indices « s » et « e »
StringBuffer deleteCharAt (int i) : enlève le caractère à l’indice i.
17 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
La classe StringBuffer
18 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
La classe StringTokenizer
La classe StringTokenizer permet de découper une chaine en jetons. Le
résultats du découpage est donnée comme énumération.
Le constructeur StringTokenizer(String s) permet de découper la chaine s
en utilisant les délimiteurs par défaut : \t\n\r\f
Le constructeur StringTokenizer(String s , String delim) permet de
découper la chaine s en utilisant le délimiteur delim.
public boolean hasMoreTokens() : retourne true s’il reste des jetons dans
la chaine et false sinon.
public String nextToken () : retourne le jeton suivant s’il existe et lève une
exception NoSuchElementException sinon.
19 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
La classe StringTokenizer
20 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
Énumérations
21 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
Énumérations
Il est possible de définir en Java un type dont on choisit explicitement les identificateurs
des constantes.
Il s’agit de types dont les valeurs, en nombre fini, sont définies par des identificateurs
comme dans :
enum Jour { lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche }
On peut alors définir classiquement des objets de type Jour
Jour courant, debut ;
courant = [Link] ;
debut = [Link] ;
Il existe également dans la classe des Enum, une méthode nommée ordinal qui fournit le
rang d’une valeur donnée dans la liste des constantes du type ; la première valeur est de
rang 0.
Ainsi [Link]() vaut 1.
Après l’affectation :
courant = mercredi ;
[Link]() vaut 2
22 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
Énumérations
23 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
Énumérations
Une énumération peut avoir des membres, des constructeurs et des méthodes. Les constructeurs
sont obligatoirement privés pour empêcher la création d’aucune nouvelle instance.
enum Couleur {
ROUGE(255, 0, 0, true),
VERT(0, 255, 0, true),
BLEU(0, 0, 255, true);
int red, green, blue; private boolean primary;
private Couleur (int red, int green, int blue, boolean primary){
[Link]=red; [Link]=green; [Link]=blue; [Link]=primary;
}
public boolean isPrimary() {
return primary;
}
//getter et setter
}
24 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
Énumérations
public class TestEnum {
public static void main(String[] args){
Couleur c = [Link];
if ([Link]()) [Link](« cette couleur est
primaire »);
else [Link]( « cette couleur n’est pas
primaire »);
[Link](c);
}
}
25 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
Manipulation des dates
26 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
La classe [Link]
Cette classe encapsule, sous la forme d'une variable de type long, un point dans le
temps qui est représenté par le nombre de millisecondes écoulées entre le 1
janvier 1970 à 00 heure 00 GMT et l'instant concerné.
La classe possède les méthodes suivantes:
getTime() : nombre de secondes écoulées depuis 01-01-1970
before(Date d) : retourne un booléen si la date concernée est supérieure à la date d.
after(Date d) : la cas contraire
setTime(long l) : modifie le point dans le temps encapsulé par la date par le nombre
passé en paramètre.
Date d = new Date();
[Link]([Link]());
Thu Nov 23 [Link] GMT 2017
27 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
La classe [Link]
La classe Calendar encapsule un point dans le temps (une Date sous la
forme d'une variable de type long) et permet une représentation et une
manipulation dans un calendrier et un fuseau horaire.
La classe Calendar définit des constantes de type int pour le nom de ces
propriétés.
28 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
La classe [Link]
La classe Calendar propose trois façons de manipuler la date qu'elle encapsule en agissant sur
les éléments qui la composent :
set() : permet de modifier un élément de la date
add() : permet de modifier un élément de la date en tenant compte des impacts sur les autres
éléments qui composent la date
roll() : identique à la méthode add() mais sans affecter les autres éléments de la date
Calendar cal = [Link]();
[Link]([Link]());
[Link]( Calendar.DAY_OF_MONTH, 15);
[Link]( [Link], 2);
[Link]( [Link], 1); Si l’on remplace add par roll()
[Link]([Link]());
Thu Nov 23 [Link] GMT 2017 Thu Nov 23 [Link] GMT 2017
Fri Feb 08 [Link] GMT 2019 Mon Jan 08 [Link] GMT 2018
29 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
La classe [Link]
La classe [Link] est la seule implémentation concrète de
la classe Calendar fournie en standard. Cette implémentation correspond au
calendrier Grégorien.
La méthode isLeapYear() permet de savoir si l'année encapsulée par la classe
est bissextile.
30 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
TimeZone et SimpleTimeZone
La classe abstraite TimeZone et sa sous-classe SimpleTimeZone encapsulent un
fuseau horaire.
Une instance de type TimeZone est utilisée par la classe Calendar pour déterminer la
date correspondant au point dans le temps qu'elle encapsule. Un même point dans le
temps correspond à des dates/heures différentes pour deux fuseaux horaires
différents.
La classe est une fabrique qui permet d'obtenir une instance de TimeZone à partir de
son identifiant en utilisant la méthode getTimeZone() ou celle correspondant à la
Locale courante en utilisant la méthode getDefault().
TimeZone t = [Link](); [Link]([Link]());
Ou
TimeZone t = [Link]("GMT");
La méthode String[] getAvailableIDs() permet d'obtenir les noms des TimeZones
définis en standard : par exemple avec Java 6, il y a 597 TimeZones fournis.
String[] str = [Link]();
for (int i = 0; i < [Link]; i++) [Link](str[i]);
31 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
La classe [Link]
La clase abstraite DateFormat propose les fonctionnalités de base pour
interpréter et formater une date sous la forme d'une chaîne de
caractères.
Quatre styles de formats sont définis par défaut : SHORT, MEDIUM,
LONG, et FULL. Avec une Locale et un style, la classe DateFormat peut
fournir un formatage standard de la date.
La classe DateFormat propose plusieurs méthodes pour obtenir le modèle
par défaut de la Locale courante:
getTimeInstance(style)
getDateInstance(style)
getDateTimeInstance(styleDate, styleHeure)
32 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
La classe [Link]
La méthode format() permet de formater une date en chaîne de caractères.
La méthode parse() permet d'extraire une date à partir de sa représentation sous
la forme d'une chaîne de caractères.
La Locale et le style de la classe DateFormat ne peuvent pas être modifiés après la
création de son instance.
Calendar cal = [Link]();
Date date = [Link]();
DateFormat df = [Link]();
[Link]([Link](date));
33 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
La classe [Link]
Calendar c = [Link]();
Date date = [Link]();
DateFormat df = [Link]([Link]);
[Link]([Link](date));
-----
DateFormat df = [Link]([Link],
[Link]);
34 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
La classe SimpleDateFormat
Permet de formater et d’analyser une date en tenant compte d’une
Locale. Elle hérite de DateFormat.
Il existe plusieurs constructeurs :
SimpleDateFormat(): utilise le modèle par défaut et les symboles de
formatage de dates de la Locale par défaut.
SimpleDateFormat(String pattern):utilise le model fourni et les symboles de
dates de la Locale par défaut.
SimpleDateFormat(String pattern, Locale loc):utilise le model fourni et les
symboles de dates de la Locale fournis.
SimpleDateFormat(String pattern, DateFormatSymbols dfs):utilise le model
et les symboles de dates fournis.
35 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
La classe SimpleDateFormat
Calendar cal = [Link]();
Date date = [Link]();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");
[Link]([Link](date));
36 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)
Des Questions ??
37 Classes Anonymes-Strings et Dates (YOUSEF EL MOURABIT / v1.1)