Vous êtes sur la page 1sur 42

Concepts des langages objet

Classes internes

Programmations Orientées Objet - JAVA


Chap 3 : concepts P.O.O

Pr. Laila AMIR

Licence SIR
(Systèmes informatiques Répartis)

Année universitaire 2021/2022

Laila AMIR Programmations Orientées Objet 1 / 42


Concepts des langages objet
Classes internes

Plan

1 Concepts des langages objet


La classe, le constructeur, l’objet, le finaliseur
Les packages
Les modificateurs d’accès
Les variables de classe : mot clé static

2 Classes internes
Classe interne statique, et non statique
La variable this

Laila AMIR Programmations Orientées Objet 2 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Plan

1 Concepts des langages objet


La classe, le constructeur, l’objet, le finaliseur
Les packages
Les modificateurs d’accès
Les variables de classe : mot clé static

2 Classes internes
Classe interne statique, et non statique
La variable this

Laila AMIR Programmations Orientées Objet 3 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

La classe

Une classe modélise la structure statique (données membres) et le


comportement dynamique (méthodes) des objets associés à cette
classe.

Une classe est la description d’un objet. Chaque objet est créé à
partir d’une classe (avec l’opérateur new).

Les classes sont déclarées à l’aide du mot-cle class, suivi du nom de


la classe déclarée, suivi du corps de la classe entre accolades.

Laila AMIR Programmations Orientées Objet 4 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Déclaration

Par convention, un nom de classe commence par une majuscule.

public class Vehicule {


// corps de la classe
}

Le fichier contenant cette déclaration doit avoir pour extension .java et


nom Vehicule.java.

Remarque :
Un fichier peut contenir plusieurs déclarations de classes, mais il ne peut
contenir qu’une seule classe dite publique (dont le mot-clef class est
précédé de public, comme dans l’exemple ci-dessus). Le fichier doit
obligatoirement porter le même nom que cette classe publique.
Laila AMIR Programmations Orientées Objet 5 / 42
La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Exemple

public class Vehicule {


int age ;
float poids ;
boolean moteur ;
float getWeight()
{
return(poids) ;
}
}

Trois ”variables membre” : age, poids et moteur


Une ”méthode membre” : getWeight() => poids d’un véhicule

Laila AMIR Programmations Orientées Objet 6 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Le constructeur

Chaque classe doit définir une ou plusieurs méthodes particulières


appelées des constructeurs.
Un constructeur est une méthode invoquée lors de la création d’un
objet. Cette méthode, qui peut être vide, effectue les opérations
nécessaires à l’initialisation d’un objet.
Chaque constructeur doit avoir le même nom que la classe où il est
défini et n’a aucune valeur de retour.

La définition de cette fonction membre spéciale n’est pas obligatoire


(si vous ne souhaitez pas initialiser les données membres par exemple)
dans la mesure où un constructeur par défaut est défini par le
compilateur Java si la classe n’en possède pas.

Laila AMIR Programmations Orientées Objet 7 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Le constructeur

Exemple: constructeur sans paramètres

public class Vehicule {


int age ;
float poids ;
boolean moteur ;
Vehicule() {
age = 0 ;
poids = 0.0F ;
moteur = false ;
}
float getWeight() { return(poids) ; }
}

Laila AMIR Programmations Orientées Objet 8 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Le constructeur

On peut surcharger le constructeur, autrement, définir un ou plusieurs


constructeurs.
Exemple: constructeur avec paramètres

public class Vehicule {


int age ;
float poids ;
boolean moteur ;
Vehicule(int a,float p,boolean m) {
age = a ;
poids = p ;
moteur = m ;
}
}

Laila AMIR Programmations Orientées Objet 9 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

L’objet

L’opérateur new permet d’instancier une classe en utilisant l’un des


constructeurs de la classe.

Il fait appel à la machine virtuelle pour obtenir l’espace mémoire


nécessaire à la représentation de l’objet puis appelle le constructeur
pour initialiser l’objet dans l’emplacement obtenu. Il renvoie une
valeur qui référence l’objet instancié.

Si l’opérateur new n’obtient pas l’allocation mémoire nécessaire, il


lève l’exception OutOfMemoryError.

Laila AMIR Programmations Orientées Objet 10 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Exemple de création d’un objet

Exemple :
Création d’un objet V1 de type Vehicule avec le constructeur par
défaut :
Vehicule V1 = new Vehicule() ;

Création d’un objet V2 avec le constructeur avec paramètres :


Vehicule V2 = new Vehicule(2,1.5F,true);

Laila AMIR Programmations Orientées Objet 11 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Remarque sur les objets de type String

Un objet String est automatiquement créé lors de l’utilisation


d’une constante chaı̂ne de caractères.

String chaine1 = ”bonjour”;


String chaine2 = ”bonjour”;
chaine1 et chaine2 représentent la même instance de la chaine.

Pour obtenir une seconde instance de la chaine, il faut explicitement


demander sa création en utilisant l’opérateur new.

String chaine1 = ”bonjour”;


String chaine2 = new String(”bonjour”);

Laila AMIR Programmations Orientées Objet 12 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

La durée de vie d’un objet

Les objets ne sont pas des éléments statiques et leur durée de vie ne
correspond pas forcément à la durée d’exécution du programme.

La durée de vie d’un objet passe par trois étapes :


la déclaration de l’objet et l’instanciation grâce à l’opérateur new;
l’utilisation de l’objet en appelant ses méthodes;
la suppression de l’objet : elle est automatique en Java grâce à la
machine virtuelle. La restitution de la mémoire inutilisée est prise en
charge par le récupérateur de mémoire (garbage collector). Il
n’existe pas d’instruction delete comme en C++.

Laila AMIR Programmations Orientées Objet 13 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

La création d’objets identiques

MaClasse m1 = new MaClasse();


MaClasse m2 = m1;

m1 et m2 contiennent la même référence et pointent donc tous les deux


sur le même objet.
Pour créer une copie d’un objet, il faut utiliser la méthode clone() : cette
méthode permet de créer un deuxième objet indépendant mais identique à
l’original. Cette méthode est héritée de la classe Object qui est la classe
mère de toutes les classes en Java.
MaClasse m1 = new MaClasse();
MaClasse m2 = m1.clone();

m1 et m2 ne contiennent plus la même référence et pointent donc sur des


objets différents.
Laila AMIR Programmations Orientées Objet 14 / 42
La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Les finaliseurs

Le ramasse-miettes (garbage-collector) se charge de récupérer


automatiquement l’espace mémoire utilisé par les objets (dès que
ces derniers ne sont plus référencés). Le programmeur n’a pas à
se soucier de cet aspect.

Cependant, si l’objet contient d’autres types de ressources


(fichiers ouverts, connexions réseau, transactions dans une base de
données, etc) il peut être nécessaire d’écrire du code de finalisation
qui devra s’exécuter avant que l’objet disparaisse.

Laila AMIR Programmations Orientées Objet 15 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Les finaliseurs

Un finaliseur est une méthode d’instance héritée de la classe Object


dont le nom est finalize()
qui ne possède aucun paramètre
qui ne retourne aucune valeur (void)

La méthode finalize() (si elle a été définie) sera invoquée


automatiquement par le Garbage collector avant la destruction de
l’objet.

Laila AMIR Programmations Orientées Objet 16 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Les packages

Un package regroupe un ensemble de classes sous un même espace de


”nomage”.

Les noms des packages suivent le schéma : name.subname

L’instruction package au début d’un fichier indique à quel package


appartient ses classes

En dehors du package, les noms des classes de ce package sont :


packageName.className

Laila AMIR Programmations Orientées Objet 17 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Les packages

Le fichier à inclure dans une extension(package) doit contenir le mot-clé


package suivi du nom de l’extension. Ce nom peut être composé de
plusieurs mots séparé par un point ( . ).

Exemple :
Pour inclure la classe Toto dans l’extension ’Packages.sousPack1’, il faut
écrire au début du fichier Toto.java :
package Packages.sousPack1;
La structure des répertoires doit suivre le nom de l’extension, c’est-à-dire
que le fichier Toto.java doit se situer dans un sous-répertoire
Packages/sousPack1/Toto.java.

Laila AMIR Programmations Orientées Objet 18 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Les packages

Lorsqu’ensuite on désire utiliser la classe Toto, il faudra au préalable


écrire :
import Packages.sousPack1.Toto;

ou lorsqu’ on désire importer toutes les classes de l’extension


Packages.sousPack1
import Packages.sousPack1.*;

ou utiliser directement une référence au package :


Packages.sousPack1.Toto toto = new Packages.sousPack1.Toto();

Laila AMIR Programmations Orientées Objet 19 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Les packages
Un grand nombre de classes (forment l’API), fournies par Java SE,
implémentent des données et traitements génériques utilisables par un
grand nombre d’applications. Une documentation en ligne pour l’API java
est disponible à l’URL : http://docs.oracle.com/javase/15/docs/api/
Toutes ces classes sont organisées en packages dédiés à un thème
précis. Parmi les packages les plus utilisés, on peut citer :
Package Description
java.awt Classes graphiques et de gestion d’interfaces
java.io Gestion des entrées/sorties
java.lang Classes de base (importé par défaut)
java.util Classes utilitaires
javax.swing Autres classes graphiques

Pour accéder à une classe d’un package donné, il faut préalablement


importer cette classe ou son package.
Laila AMIR Programmations Orientées Objet 20 / 42
La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Exemple
Par exemple, la classe Date appartenant au package java.util qui
implémente un ensemble de méthodes de traitement sur une date peut
être importée de deux manières :
une seule classe du package est importée : import java.util.Date ;
toutes les classes du package sont importées (même les classes non
utilisées) : import java.util.* ;
Le programme suivant utilise cette classe pour afficher la date actuelle :
import java.util.Date ;
public class DateMain {
public static void main(String[] args) {
Date today = new Date();
System.out.println(”Nous sommes le ” + today.toString());
}
}
Laila AMIR Programmations Orientées Objet 21 / 42
La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Les modificateurs d’accès

Dans les exemples précédents, le mot-clé public apparaı̂t parfois au début


d’une déclaration de classe ou de méthode sans qu’il ait été expliqué
jusqu’ici. Ce mot-clé autorise n’importe quel objet à utiliser la classe
ou la méthode déclarée comme publique.

La portée de cette autorisation dépend de l’élément à laquelle elle


s’applique :
Elément Autorisations
Variable Lecture et écriture
Méthode Appel de la méthode
Classe Instanciation d’objets de cette classe
et accès aux variables et méthodes de classe

Laila AMIR Programmations Orientées Objet 22 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Les modificateurs d’accès


En Java, la déclaration d’un élément (classe/méthode/attribut ou
variable) peut être précédée par un modificateur d’accès qui indique si les
autres classes de l’application pourront accéder ou non à cet élément. Ces
modificateurs sont :
public : toutes les classes peuvent accéder à l’élément
protected : seules les classes dérivées (cf. héritage) et les classes du
même package peuvent accéder à l’élément
private : l’élément est seulement accessible depuis l’intérieur de la
classe où il est défini.
(par défaut) : sans modificateur d’accès, seules les classes du même
package peuvent accéder à l’élément.
Exception
Les classes ne peuvent pas être private, non plus protected.
Laila AMIR Programmations Orientées Objet 23 / 42
La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Les modificateurs d’accès

public protected défaut private


Dans la même classe Oui Oui Oui Oui
Dans une classe du Oui Oui Oui Non
même package
Dans une sous-classe d’un Oui Oui Non Non
autre package
Dans une classe quelconque Oui Non Non Non
d’un autre package

Laila AMIR Programmations Orientées Objet 24 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Exemples : modificateur d’accès private

Laila AMIR Programmations Orientées Objet 25 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Exemples : modificateur d’accès private


L’utilisation du modificateur private est la meilleure façon d’encapsuler
un objet en cachant son implémentation au monde extérieur.

On ne peut pas accéder au membre (attribut ou méthode) private en


dehors de sa classe.
Laila AMIR Programmations Orientées Objet 26 / 42
La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Assesseurs et mutateurs

Assesseurs et mutateurs
Pour accéder au contenu ou modifier le contenu d’une variable private en
dehors de sa classe, il faut prévoir des interfaces (méthodes) publiques :
un assesseur ( getter) et un mutateur ( setter) pour chaque variable
private. Sans ces interfaces publiques, il n’ya aucune manière d’accéder à
une variable private en dehors de sa classe.

getNomVariable() : un getter est une méthode publique qui renvoie la


valeur d’une variable private.
setNomVariable(parametre) : un setter est une méthode publique qui
permet de modifier la valeur d’une variable private.

Laila AMIR Programmations Orientées Objet 27 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Assesseurs et mutateurs

Laila AMIR Programmations Orientées Objet 28 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Méthode private
Parfois, une méthode peut fournir une fonctionnalité qui n’est
utile qu’à l’intérieur de sa classe, mais pas en dehors. Alors pour
éviter qu’elle soit utilisée en dehors de sa classe, on la déclare private
Déclarer un constructeur private signifie que seule la classe dans
laquelle le constructeur est déclaré peut instancier un objet de
cette classe. Toute autre classe ne pourra pas le faire.

Laila AMIR Programmations Orientées Objet 29 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Exemples : modificateur d’accès default

Le modificateur d’accès default est celui qui est appliqué lors que ne
nous déclarons pas explicitement un des trois autres modificateurs
d’accès : public ou private ou protected.

Dans ce cas, une classe, une méthode ou un attribut est accessible


uniquement aux autres classes du même paquetage (package).

Laila AMIR Programmations Orientées Objet 30 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Exemples : modificateur d’accès protected


Un modificateur d’accès protected permet aux membres (attributs ou
méthodes) d’une classe d’être accessibles dans la classe, dans les
classes dérivées et dans les classes du même paquetage.
Mêmes si les classes dérivées sont dans un paquetage différent de
celui de leur classe mère, ont accès aux membres protected de celle-ci.

Laila AMIR Programmations Orientées Objet 31 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Exemples : modificateur d’accès public

Le modificateur public est le plus permissif des modificateurs


d’accès.
Un attribut, une méthode ou une classe public est accessible dans
tous les paquetages de votre programme et partout ailleurs.

Laila AMIR Programmations Orientées Objet 32 / 42


La classe, le constructeur, l’objet, le finaliseur
Concepts des langages objet Les packages
Classes internes Les modificateurs d’accès
Les variables de classe : mot clé static

Les variables de classe : mot clé static

Une variable ou une fonction membre déclarée static dans une classe est
commune à toute les instances de cette classe. Une telle variable ou
méthode yyy de la classe Xxxx pourra être utilisée en faisant directement
référence à Xxxx.yyy.

class Vehicule {
static float taxation ;
static float Taxation() {
return(taxation) ;
}
}

Vehicule.taxation = 100.0F ;
System.out.println(Vehicule.Taxation()) ;

Laila AMIR Programmations Orientées Objet 33 / 42


Concepts des langages objet Classe interne statique, et non statique
Classes internes La variable this

Plan

1 Concepts des langages objet


La classe, le constructeur, l’objet, le finaliseur
Les packages
Les modificateurs d’accès
Les variables de classe : mot clé static

2 Classes internes
Classe interne statique, et non statique
La variable this

Laila AMIR Programmations Orientées Objet 34 / 42


Concepts des langages objet Classe interne statique, et non statique
Classes internes La variable this

Classe interne

Définition
Une classe interne est déclarée à l’intérieur d’une autre classe. Elle peut
donc accéder aux membres de la classe externe.

Laila AMIR Programmations Orientées Objet 35 / 42


Concepts des langages objet Classe interne statique, et non statique
Classes internes La variable this

Classe interne statique


Une classe interne statique ne peut accéder qu’aux membres statiques
de sa classe externe.
Exemple :
public class ClasseExterne {
La compilation du fichier ClasseEx- private int compteur = 0;
terne.java produit 2 fichiers compilés: private static String nom = ”exter”;
static class ClasseInterne {
private int index = 0;
ClasseExterne.class contient la
public ClasseInterne(){
classe ClasseExterne uniquement System.out.println(”Création
d’un objet ”+nom);
ClasseExterne$ClasseInterne.class // ici on ne peut pas acceder
contient la classe ClasseInterne au compteur
}
}

Laila AMIR Programmations Orientées Objet 36 / 42


Concepts des langages objet Classe interne statique, et non statique
Classes internes La variable this

Classe interne non statique


Une classe interne non statique peut accéder aux membres
statiques de la classe ainsi qu’aux membres de l’objet qui l’a
créée.
Exemple :
Une telle classe interne
(Classe non statique globale)
peut-être déclarée de manière
globale dans l’objet; elle sera public class ClasseExterne {
accessible par l’ensemble des private int compteur = 0;
class ClasseInterne {
méthodes de l’objet. Elle peut
private int index = 0;
aussi être déclarée de manière public ClasseInterne() {
locale à une méthode de l’objet. compteur++;
Elle sera alors accessible depuis }
cette seule méthode. }
}

Laila AMIR Programmations Orientées Objet 37 / 42


Concepts des langages objet Classe interne statique, et non statique
Classes internes La variable this

Classe interne non statique

Depuis la classe interne,


dans le cas où plusieurs
variables ou méthodes public class ClasseExterne {
portent le même nom private int compteur = 10;
dans la classe interne et class ClasseInterne {
la classe externe, le poin- private int compteur = 0;
teur this seul désigne public void count() {
l’instance de la classe in- this.compteur++; // 1
ClasseExterne.this.compteur- -; // 9
terne, tandis que le poin-
}
teur this précédé du }
nom de la classe externe }
désigne l’instance de la
classe externe.

Laila AMIR Programmations Orientées Objet 38 / 42


Concepts des langages objet Classe interne statique, et non statique
Classes internes La variable this

Le mot-clé this désigne, dans une classe, l’instance courante de la


classe elle-même. Il sert à référencer dans une méthode l’instance de
l’objet en cours d’utilisation. Il est utilisé à différentes situations
décrites dans les sections suivantes :

Désambiguiser
S’auto-désigner comme référence
Désigner l’instance de la classe qui encadre

Laila AMIR Programmations Orientées Objet 39 / 42


Concepts des langages objet Classe interne statique, et non statique
Classes internes La variable this

this : désambiguiser

Il peut être utilisé pour rendre le code explicite et non ambigu. Par
exemple, si dans une méthode, on a un paramètre ayant le même nom
qu’un attribut de la classe dont la méthode fait partie, on peut désigner
explicitement l’attribut grâce à this :

public class Calculateur {


protected int valeur;
public void calcule(int valeur) {
this.valeur = this.valeur + valeur;
}
}

Dans cet exemple, on additionne le paramètre valeur à l’attribut valeur et


on stocke le résultat dans l’attribut valeur. L’attribut a été désigné
explicitement par le mot-clé this.
Laila AMIR Programmations Orientées Objet 40 / 42
Concepts des langages objet Classe interne statique, et non statique
Classes internes La variable this

this : s’auto-désigner comme référence

Le mot-clé this peut être utilisé pour passer une référence à l’instance
elle-même comme paramètre d’une méthode.

Par exemple : s’enregistrer comme écouteur d’évènement :

source.addListener(this);

Laila AMIR Programmations Orientées Objet 41 / 42


Concepts des langages objet Classe interne statique, et non statique
Classes internes La variable this

this : désigner l’instance de la classe qui encadre


Dans le cas où une classe interne utilise l’instance de la classe externe, le
mot-clé this préfixé du nom de la classe externe permet de désigner
l’instance de la classe externe. S’il n’est pas préfixé, il désigne l’instance
de la classe interne.
public class Livre {
String titre = ”Le livre”;
class Chapitre {
String titre = ”Chapitre 1”;
public String toString(){
return Livre.this.titre // ”Le livre”
+ ”/” +
this.titre ; // ”Chapitre 1”
// ou Chapitre.this.titre ; // ”Chapitre 1”
} // -> ”Le livre/Chapitre 1”
}
}

Laila AMIR Programmations Orientées Objet 42 / 42

Vous aimerez peut-être aussi