Chrisvendes
Motivations
• Dans le chapitre précédent, les classes servaient à regrouper des données liées entre elles
– héritage mis à part, c’est l’équivalent du « record » de Fortran et Pascal ou « struct » de C et C++
Chapitre 10: L’approche Orientée Objet (suite)
Jarle Hulaas Chargé de cours SIN Jarle.Hulaas@epfl.ch
• Mais les classes servent surtout à regrouper les traitements (opérations, méthodes) spécifiques à ces données
Exemples
Voiture marque couleur immatriculation accélérer() freiner() tourner() Personne nom âge baptiser() vieillir() toString() afficher() Vecteur taille éléments lireElém() écrireElém() additionner() toString() afficher() Compte numéro titulaire solde créditer() débiter() consulter() bloquer()
Exemple: méthodes de Personne public class Personne { public String nom; public int age;
...
public void vieillir(){ age += 1; } public void baptiser(String nom){ this.nom = nom; } public String toString(){ return "Je m'appelle " + nom + ", j'ai " + age + " ans"; }
// non "static"
// non "static"
// non "static"
(les éventuels paramètres des méthodes ont ici été omis)
public void afficher(){ // non "static" System.out.println(this.toString()); } }
Héritage des méthodes
• Toutes les sous-classes de Personne héritent automatiquement les méthodes non statiques • On peut donc invoquer les méthodes de la classe Personne sur toute instance de ses sous-classes autre aspect du polymorphisme
Héritage des méthodes: exemple public static void main(String[] args) { Enfant anne = new Enfant("Anne", 6, …); Personne p = anne; // invocation de 'vieillir': p.vieillir(); // invocation parfaitement équivalente: anne.vieillir(); }
Situation en mémoire
Après p.vieillir() anne
«référence»
Notation et terminologie
• Une méthode d’instance (i.e. non static) est toujours invoquée sur un objet précis, celui qui préfixe l’appel P.ex.: anne.vieillir(); • Cet objet