Telechargé par Service Vérificationcoupon

Chapitre 2 Aspects avancés des classes (Partie 1) (1)

publicité
1
ASPECTS AVANCÉS DES
CLASSES EN JAVA
(PARTIE 1)
Plan
2

Classe immuable

Classe membre statique

Classe interne/ Classe membre

Classes utilitaires: java.time

Collections
Classe immuable
3

Dorra ZAIBI
Cours POO/JAVA


Un objet immuable (ou non-modifiable) est un objet dont
l'état ne peut pas être modifié pendant toute sa durée
de vie.
Une classe immuable est une classe dont les instances
sont immuables par conception et implémentation. La
classe Java la plus communément présentée comme
exemple d'immuabilité est java.lang.String.
Les méthodes d’un objet immuable sont en lecture
seule, elle ne devrait jamais inclure de méthodes
modifiant l’état interne de l’objet.
Classe immuable
4

Dorra ZAIBI
Cours POO/JAVA


Pour construire l’API d’un objet immuable, nous devons garantir
que son état interne ne changera pas, peu importe la façon dont
nous utilisons son API.
Notez que Java nous garantit que la valeur de amount ne changera
pas, c’est le cas de toutes les variables de type primitif.
Cependant, dans notre exemple, nous ne pouvons que garantir
que currency ne changera pas. Nous devons donc nous fier à
l’API Currency pour se protéger des modifications ** .
final class Money {
Classe immuable
5


La plupart du temps, nous avons besoin des attributs d’un objet
pour contenir des valeurs personnalisées, et l’emplacement pour
initialiser l’état interne d’un objet immuable est son constructeur:
Comme mentionné, pour répondre aux exigences d’une API
immuable, notre classe Money ne dispose que de méthodes en
lecture seule.
Dorra ZAIBI
Cours POO/JAVA
final class Money {
Classe immuable
6
Avantages
Dorra ZAIBI
Cours POO/JAVA

Puisque l’état interne d’un objet immuable reste
constant dans le temps , nous pouvons le partager en
toute sécurité entre plusieurs threads (lors de
l’exécution des tâches simultanément).
Classe immuable: Consignes
7
Pour rendre un objet immuable, il faut respecter plusieurs consignes lors de
l'écriture de sa classe :

Dorra ZAIBI
Cours POO/JAVA





elle doit être final pour empêcher la création d'une classe fille qui permettrait
de modifier son état en ajoutant ou en redéfinissant des méthodes
tous les champs doivent être private pour empêcher l'accès aux données
sans passer par une méthode de la classe
tous les champs devraient être final pour éviter toute modification après
leur initialisation
elle ne doit pas proposer de setter ni de méthodes qui pourraient modifier
l'état de l'objet
il faut toujours renvoyer une nouvelle instance pour une méthode qui
modifie les données de la classe
il faut que les getter d'une propriété de type objet renvoient une version
immuable ou une autre instance qui soit une copie
Dorra ZAIBI
Cours POO/JAVA
Exemple
8
Plan
9

Classe immuable

Classe membre statique

Classe interne/ Classe membre

Classes utilitaires: java.time

Collections
Classe membre statique
10



Une classe membre statique est une classe java définie dans la
partie déclaration des membres d'une autre classe qui la contient
(nommée classe englobante), puis qualifiée par le modificateur
static.
Une classe membre statique est instanciable.
Une classe membre statique ne peut pas être associée à un objet
instancié de la classe englobante .
Syntaxe :
public class Enveloppe {
< membres genre attributs >
< membres genre méthodes >
< membres genre classes membres statiques >
}
Classe membre statique: Exemple
Dorra ZAIBI
Cours POO/JAVA
11
Classe membre statique
12
Dorra ZAIBI
Cours POO/JAVA


On peut dans une autre classe, instancier un objet de classe
statique, à condition d'utiliser le qualificateur de visibilité qui est le
nom de la classe englobante afin d'accéder à la classe interne.
On peut aussi instancier un objet local Obj1 dans une méthode de
la classe Autre :
Classe membre statique
13

Une classe membre statique accède à tous les membres
statiques de sa classe englobante qu'ils soient publics ou privés,
sans nécessiter d'utiliser le nom de la classe englobante pour
accéder aux membres (raccourcis d'écriture)
 Quatre façons pour appeler la méthode
meth12( ): ils différent uniquement par
l'utilisation ou la non utilisation de
raccourcis d'écriture.
public static class clasMembStat1 {
public void meth( ){
meth12(a1);
Enveloppe1.meth12(a1);
meth12(Enveloppe1.a1);
Enveloppe1.meth12(Enveloppe1.a1);
}
}
Classe membre statique
14
Dorra ZAIBI
Cours POO/JAVA

Une classe membre statique n'a pas accès aux membres
d'instance de la classe englobante
Plan
15

Classe immuable

Classe membre statique

Classe interne/ Classe membre

Classes utilitaires: java.time

Collections
Classe interne
16


Une classe membre, appelée aussi classe interne (inner classe) est
une classe java définie dans la partie déclaration des membres d'une
autre classe qui la contient (nommée classe englobante). Une classe
membre est instanciable.
Une classe membre est associée à un objet instancié de la classe
englobante .
Syntaxe :
public class Enveloppe {
< membres genre attributs >
< membres genre méthodes >
< membres genre classes membres statiques >
< membres genre classes membres >
}
Classe interne
17
Dorra ZAIBI
Cours POO/JAVA

Une classe membre se déclare d’une manière identique à une classe
membre statique et aux autres membres de la classe englobante
Classe interne : Remarque
18

Dorra ZAIBI
Cours POO/JAVA

Il est possible d'imbriquer plusieurs classes internes.
Si plusieurs classes internes sont imbriquées, il n'est pas possible
d'utiliser un nom pour la classe qui soit déjà attribué à une de ses
classes englobantes. Le compilateur génèrera une erreur à la
compilation.
Classe interne
19

On peut dans une autre classe, instancier un objet de classe membre, à condition d'utiliser
le qualificateur de visibilité qu'est le nom de la classe englobante afin d'accéder à la classe
interne. Une classe membre se comporte en fait comme une classe ordinaire relativement
à l'instanciation
class Autre{
Enveloppe2.classeMembre obj0 = new Enveloppe2.classeMembre ();
}

On peut aussi instancier un objet local Obj1 dans une méthode de la classe Autre :
class Autre{
Enveloppe2.classeMembre obj0 = new Enveloppe2.classeMembre ();
void meth(){
Enveloppe2.classeMembre obj1 = new Enveloppe2.classeMembre ();
}
}
Classe interne: Exemple
Dorra ZAIBI
Cours POO/JAVA
20
Classe interne
21
Remarque:
Dorra ZAIBI
Cours POO/JAVA
Les classes membres ont les mêmes fonctionnalités syntaxiques que
les classes membres statiques.
La différence notable entre ces deux genres de classes se situe dans
l'accès à l'instance d'objet de classe englobante : Un objet de classe
interne non statique comporte une référence à l'objet de classe
externe qui l'a créé, alors qu'il n'en est rien pour une classe membre
statique.
L'accès a lieu à travers le mot clé this qualifié par le nom de la classe
englobante : "ClasseEnveloppe.this" .
Classe interne: Exemple
22
Dorra ZAIBI
Cours POO/JAVA
On utilise le mot clé this à la fois pour obtenir la référence de l'objet de
classe classeMembre et Enveloppe2.this pour obtenir la reférence sur
l'objet externe de classe englobante
Plan
23

Classe immuable

Classe membre statique

Classe interne/ Classe membre

Classes utilitaires: java.time

Collections
Classes utilitaires java.time
24

Dorra ZAIBI
Cours POO/JAVA

Depuis Java 8, une nouvelle API a été introduite pour
représenter les dates, le temps et la durée. Toutes ces
classes ont été regroupées dans la package java.time.
Parmi les sous-packages:
java.time : contient les classes de bases, immuables
qui encapsulent des données temporelles
 java.time.format : contient les classes pour analyser
et formater des dates/heures

API Date/Time
25

Les Dates
Les classes LocalDate, LocalTime et LocalDateTime permettent de
représenter respectivement une date, une heure, une date et une
heure.
Dorra ZAIBI
Cours POO/JAVA


On peut facilement passer d’un type à une autre. Par exemple la
méthode LocalDate.atTime() permet d’ajouter une heure à une
date, créant ainsi une instance de LocalDateTime. Toutes les
instances de ces classes sont immutables.
Si on veut avoir l’information de la date ou de l’heure d’aujourd’hui,
on peut créer une instance grâce à la méthode now()
API Date/Time
26


Il existe plusieurs méthodes comme: now() , of(), parse()
Autres méthodes utilitaires retournant le jour, le mois, l'année,
l’heure, la min
Dorra ZAIBI
Cours POO/JAVA
getMonth(), getDayOfMonth(), getYear(), getHour(), getMinute(),
getSecond()
API Date/Time: Exemple 1
27

Résultat:
Date et heure courante :
2018-01 19T09:29:44.150862600
Date courante : 2018-01-19
Mois: JANUARY, jour: 19, heure: 9
Autre façon de faire : 2023-12-25
Date parsée : 20:15:30
API Date/Time: Exemple 2
28
Plusieurs méthodes pour exécuter des calculs sur les dates
● plus(), plusDay(), plusMonth(), plusWeek(),plusYear()
Dorra ZAIBI
Cours POO/JAVA
● minus(), minusDay(), minusMonth(), minusWeek(), minusYear()
API Date/Time
29
Dorra ZAIBI
Cours POO/JAVA

Les classe Year et YearMonth permettent de manipuler les dates et
d’obtenir des informations intéressantes à partir de l’année ou du
mois et de l’année.
API Date/Time: Exemple
30
Dorra ZAIBI
Cours POO/JAVA

Pour déterminer si une année est bissextile, vous pouvez
invoquer la méthode isLeap() sur une instance de la
classe java.time.Year. Cette méthode retourne true si le
test réussit et false dans le cas contraire.
API Date/Time
31
Remarque:
Dorra ZAIBI
Cours POO/JAVA
Les classes LocalDate, LocalTime, LocalDateTime, Year,
YearMonth
et Instant implémentent
toutes les
interfaces Temporal
Classe Instant
32
Dorra ZAIBI
Cours POO/JAVA

La classe Instant représente un point dans le temps. Contrairement
aux classes précédentes qui permettent de représenter les dates
pour les humains, la classe Instant est adaptée pour réaliser des
traitements de données temporelles.
Période et durée
33
Dorra ZAIBI
Cours POO/JAVA

Il est possible de définir des périodes grâce à des instances de la
classe Period. Une période peut être construite directement ou à
partir de la différence entre deux instances de type Temporal. Il est
ensuite possible de modifier une date en ajoutant ou soustrayant
une période.
Période et durée: Exemple
34
Dorra ZAIBI
Cours POO/JAVA

Calculer son âge à partir d'une date
Période et durée
35
Dorra ZAIBI
Cours POO/JAVA

La durée est représentée par une instance de la classe Duration.
Elle peut être obtenue à partir de deux instances de Instant.
Formatage des dates
36

Dorra ZAIBI
Cours POO/JAVA

Pour formater une date pour l’affichage, il est possible d’utiliser la
méthode format déclarée dans les classes LocalDate, LocalTime,
LocalDateTime, Year et YearMonth.
Le format de représentation d’une date et/ou du temps est défini par
la classe DateTimeFormatter.
Formatage des dates: Exemple
Dorra ZAIBI
Cours POO/JAVA
37
Lecture des dates
38

Dorra ZAIBI
Cours POO/JAVA

Pour transformer une chaîne de caractères en date (notamment
pour obtenir une date à partir de la saisie d’un utilisateur ou de la
lecture d’un fichier), il est possible d’utiliser la méthode parse
déclarée dans les classes LocalDate, LocalTime, LocalDateTime,
Year et YearMonth.
Le format d’une date et/ou du temps est défini par la
classe DateTimeFormatter.
Lecture des dates: Exemple
Dorra ZAIBI
Cours POO/JAVA
39
Plan
40

Classe immuable

Classe membre statique

Classe interne/ Classe membre

Classes utilitaires: java.time

Collections
Les collections
41
Structures de données
C'est l'organisation efficace d'un ensemble de données, sous la forme de
tableaux, de listes, de piles etc. Cette efficacité réside dans la quantité
mémoire utilisée pour stocker les données, et le temps nécessaire pour
réaliser des opérations sur ces données
Utilisation de collections pour
Dorra ZAIBI
Cours POO/JAVA
- stocker, rechercher et manipuler des données
- transmettre des données d ’une méthode à une autre
Exemples :
- un dossier de courrier : collection de mails
-


un répertoire téléphonique : collection d’associations noms/numéros de
téléphone.
Le JDK fournit d’autres types de collections sous la forme de classes et
d’interfaces
Ces classes et interfaces sont dans le paquetage java.util
Les collections
42
Dorra ZAIBI
Cours POO/JAVA
Collections = structures de données

Listes

Ensembles

Tableaux

Arbres

Tables de hashage

La plupart des opérations sur un tableau (parcours, recherche,
ajout, suppression, etc.) sont déjà implémentées => On parle de
Java Collections Framework (JCF)
Les collections
43
Dorra ZAIBI
Cours POO/JAVA
Le framework Collections a une architecture hiérarchique
pour représenter toutes les collections qui contiennent ou
héritent des interfaces, implémentations et méthodes comme le
tri des objets.
Les collections sont composées d’une hiérarchie d'interfaces.
Celles-ci encapsulent la majeure partie des méthodes utilisables
avec toutes les implémentations concrètes.
Les interfaces sont divisées en deux groupes:
 L'interface de base est java.util.Collection.
 L'autre interface est java.util.Map.
Les collections en java
Dorra ZAIBI
Cours POO/JAVA
44
Les collections
Dorra ZAIBI
Cours POO/JAVA
45
Ces structures sont complexes à implanter
(⇒ Efficacité)
 Ordonnées ou non
 Doublons ou non
 Accès aux données indexé ou non
 Recherche
 Tris
Quelques structures de données classiques comme:
ArrayList, Vector, HashSet.
Les collections en Java
46
Dorra ZAIBI
Cours POO/JAVA

Les collections Java contiennent des éléments de type
Object
Les collections: Interfaces
47
Des interfaces dans deux hiérarchies principales :
- Collection<E>
Dorra ZAIBI
Cours POO/JAVA
- Map<K,V>
1)
Collection, correspond aux interfaces des collections proprement
dites
2)
Map, correspond aux collections indexées par des clés ; un élément
de type V d’une map est retrouvé rapidement si on connaît sa clé de
type K (comme les entrées d’un dictionnaire ou les entrées de l’index
d’un livre)
Les collections: Hiérarchie des interfaces
Dorra ZAIBI
Cours POO/JAVA
48
Les collections: Interfaces
49
Ces interfaces ont des particularités correspondant à des besoins spécifiques
Exemple:

Cours POO/JAVA

Dorra ZAIBI




Collection : interface qui est implémentée par la plupart des objets qui gèrent
des collections.
Map : interface qui définit des méthodes pour des objets qui gèrent des
collections sous la forme clé/valeur
Set : interface pour des objets qui n'autorisent pas la gestion des doublons
dans l'ensemble
List : interface pour des objets qui autorisent la gestion des doublons et un
accès direct à un élément
SortedSet : interface qui étend l'interface Set et permet d'ordonner l'ensemble
SortedMap : interface qui étend l'interface Map et permet d'ordonner
l'ensemble
Les collections: Classes
50

Dorra ZAIBI
Cours POO/JAVA

Classes abstraites : AbstractCollection<E>, AbstractList<E>,
AbstractMap<K,V>,… qui implantent les méthodes de base
communes aux collections (ou map)
Classes
concrètes
:
ArrayList<E>,
LinkedList<E>,
HashSet<E>, TreeSet<E>, HashMap<K,V>, TreeMap<K,V>,…
qui héritent des classes abstraites ; elles implantent, en
particulier, les méthodes d’accès aux données (get, put, add,…)
Les collections: Classes concrètes
51
Dorra ZAIBI
Cours POO/JAVA

Classes concrètes qui implémentent les interfaces
Les collections: Exemple de List
Dorra ZAIBI
Cours POO/JAVA
52
Remarque
53

Dorra ZAIBI
Cours POO/JAVA


Les collections de java.util ne peuvent contenir de
valeurs des types primitifs
Avant le JDK 5, il fallait donc utiliser explicitement les
classes enveloppantes des types primitifs, Integer par
exemple
A partir du JDK 5, les conversions entre les types
primitifs et les classes enveloppantes peuvent être
implicite avec le « boxing » /« unboxing »
Les collections: Exemple avec boxing
Dorra ZAIBI
Cours POO/JAVA
54
Interface COLLECTION<E>
Dorra ZAIBI
Cours POO/JAVA
55
COLLECTION <E>: Implémentations
Dorra ZAIBI
Cours POO/JAVA
56
Interface COLLECTION<E>
57

Dorra ZAIBI
Cours POO/JAVA

L’interface Collection <E> correspond à un objet qui
contient un groupe d’objets de type E
JDK ne fournit pas une implémentation directe de cette
interface mais pour des interfaces plus spécifiques
telles que Set et List
COLLECTION <E>: Méthodes communes
héritées de Collection
Dorra ZAIBI
Cours POO/JAVA
58
COLLECTION <E>: Notion de méthode
optionnelle
59
Dorra ZAIBI
Cours POO/JAVA
Il peut exister de nombreux cas particuliers de collections ;
par exemple
- collections composées d’objets non modifiables
- collections de taille fixe,
- collections dont on ne peut enlever des objets
Plutôt que de fournir une interface pour chaque cas
particulier, l'API sur les collections comporte la notion de
méthode optionnelle.
COLLECTION <E>: Constructeurs
60
Dorra ZAIBI
Cours POO/JAVA
Il n’est pas possible de donner des constructeurs dans une
interface ; mais la convention donnée par les concepteurs
des collections est que toute classe d’implantation des
collections doit fournir au moins 2 constructeurs :


un constructeur sans paramètre
un constructeur qui prend une collection d’éléments de
type compatible en paramètre
COLLECTION <E>: Transformation en
tableau
61

Dorra ZAIBI
Cours POO/JAVA

toArray() renvoie une instance de Object[] qui contient les
éléments de la collection
Si on veut un tableau d'un autre type, il faut utiliser la méthode
paramétrée <T>: T [ ] toArray(T [ ] tableau) à laquelle on passe un
tableau du type voulu
=>
•

si le tableau est assez grand, les éléments de la collection sont
rangés dans le tableau
sinon, un nouveau tableau du même type est créé pour recevoir les
éléments de la collection
COLLECTION <E>: Transformation en
tableau
62

•

Dorra ZAIBI
Cours POO/JAVA
•

Forme simple : sans paramètre
Object [ ] a = c.toArray();
Pour obtenir un tableau de type String [ ]:
String [ ] tableau =collection.toArray(new String[0]);
Remarque : si la collection est vide, toArray renvoie un
tableau de taille 0 (pas la valeur null)
Les Types de Collections
63


Dorra ZAIBI
Cours POO/JAVA

Les Collections de type List
Les Collections de type Set
Les Collections de type Map
Les Classes de Collections
64


Dorra ZAIBI
Cours POO/JAVA

Interface java.util.Set<E>
Interface java.util.List<E>
Interface java.util.Map<E>
Résumé
65
Dorra ZAIBI
Cours POO/JAVA
Résumé
66
Téléchargement
Explore flashcards