Les classes et les objets en Java L. Nerima Université de Genève.

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

Spécialisation/généralisation Héritage Polymorphisme.
Spécialisation/généralisation Héritage Polymorphisme
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Introduction à la programmation objet Langage Java
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
(Classes prédéfinies – API Java)
C.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Les attributions de valeur (le signe =). Dans cette présentation, nous allons tenter de représenter ce qui se passe dans la mémoire de lordinateur quand.
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
Leçon 3 : Héritage IUP 2 Génie Informatique
Introduction à la POO: Les classes vs les objets
Principes de programmation (suite)
Programmation orientée objet
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Langage Oriente Objet Cours 4.
IFT1025, Programmation 2 Jian-Yun Nie
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java et les Exceptions Peter Van Roy Département dIngénierie Informatique,
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Classes abstraites et Interfaces
POO : Objets et classes (Rappels)
Introduction à la programmation (Java)
Langage Oriente Objet Cours 2.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Introduction à la programmation objet Langage Java
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
Introduction au paradigme orienté-objet (suite)
POO-L3 H. Fauconnier1 Supplément gratuit…. POO-L3 H. Fauconnier2 Entrée-sortie public static void main(String[] args) { // sortie avec printf ou double.
IFT 6800 Atelier en Technologies d’information
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Cours 4 Héritage (suite).
COURS DE PROGRAMMATION ORIENTEE OBJET :
COURS DE PROGRAMMATION ORIENTEE OBJET :
CSI1502 Principes fondamentaux en conception des logiciels
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
Procédures et fonctions
4 Introduction des objets. Les chaînes et tableaux
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
La notion de type revisitée en POO
11/04/ L'héritage Cours 7 Cours 7.
Tutorat en bio-informatique
Tutorat en bio-informatique Le 14 novembre Au programme… Les objets –Propriétés (attributs) –Constructeurs –Méthodes.
Réaliser par: Sadok Amel Cheboui hassiba
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 3 – Classes et objets en Java Master 1 SIGLIS1 Java Lecteur - Chapitre 3 Classes et objets en Java.
Strings et Tableaux en Java
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Cours du 5 novembre.
IUT du Limousin L.U.P Michel Vergnaud Programmation Objet - Java.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Héritage Conception par Objet et programmation Java
22 Concepts de base du langage Java. 2-2 Objectifs A la fin de ce cours, vous serez capables de : Identifier les éléments essentiels de Java Identifier.
Philippe Gandy - 8 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
BlueJ_III 1 Java, les objets : tout de suite ! Interaction entre objets Notes de cours associées au chapitre 3 tutorial BlueJ
Transcription de la présentation:

Les classes et les objets en Java L. Nerima Université de Genève

ISIISI Automne L. NerimaClasses 2 Références  * Conception objet en Java avec BlueJ, David Barnes et Michael Kölling, 4 e édition, Pearson Education, 2009  * Bersini, Hugues, La programmation orientée objet, 5e édition, Eyrolles,  JAVA: de l’esprit à la méthode, Michel Bonjour, Gilles Falquet, Jacques Guyot et André Legrand, 2e édition, Vuibert, 1999 (Chapitre 6)  Programmer en Java, Claude Delannoy, 8e édition, Eyrolles, * Idées de lecture pour la semaine d’études !

ISIISI Automne L. NerimaClasses 3 Plan  La modélisation orientée objet  Les classes en Java (rappels sur les classes)  Classe et instances (objets)  Déclaration de classes en Java  Exemples de classe: rectangle, cercle, …  Les classes dans l'environnement BlueJ  Création d’instances  Invocation de méthodes sur un objet  Assignation et compatibilté des types  Sous-classes  La référence

ISIISI Automne L. NerimaClasses 4 La modélisation orientée objet Approche centrée sur les objets et les classes d’objets (regroupement d’objets de même type). Tout est objet: le système informatique sera constitué (uniquement) d’objets. Les objets communiquent entre eux et avec l’extérieur (p.e. interface utilisateur) Les objets sont:  Les objets du domaine de l’application  les objets du monde (réel perçu) du domaine d’application donneront lieu à des objets informatique  Les artefacts du système informatique:  fenêtres, menus, boîtes de dialogue, …  événements, transactions, règles

ISIISI Automne L. NerimaClasses 5 Les classes en Java - rappels Tout ce que nous avons vu concernant les classes et les objets en UML (voir cours BD) et Component Pascal demeure vrai en Java (sauf la syntaxe), à savoir:  la notion de classe étend celle de type de données  une classe est un moule pour fabriquer des objets de même structure et de même comportement  un objet est une instance d’une et d’une seule classe  une méthode définit une action élémentaire que l’on peut effectuer sur un objet  un message est une demande d’exécution d’une méthode à un objet

ISIISI Automne L. NerimaClasses 6 Classes et instances (objets) Rectangle largeur hauteur perimetre() surface() diagonale() doubler() Disque rayon perimetre() surface() doubler() r1:Rectangle r2:Rectangle r3:Rectangle d1:Disque d2:Disque CLASSES INSTANCES (OBJETS)

ISIISI Automne L. NerimaClasses 7 Déclaration de classes en Java  En Java, la déclaration d’une classe s’écrit: class Rectangle { … }  Une classe peut posséder des variables d’instance (propre à chaque instance): class Rectangle { double largeur, hauteur; … }  Une classe peut posséder des variables (ou constantes) de classe, qui ne seront pas créées dans ses instances. La déclaration est précédée du mot static: class Disque { static final double pi= ; … }

ISIISI Automne L. NerimaClasses 8 Déclaration de classes en Java (suite)  Les méthodes de classe détermine le comportement des instances (objets). La déclaration d’une méthode est composées des éléments suivants:  Le type du résultat, ou void si la méthode ne produit pas de résultat  Le nom de la méthode  Le type et le nom des paramètres entre ()  Le bloc d’instruction délimité par {}  Exemples double perimetre() {return 2*(largeur+hauteur);} double surface() {return largeur*hauteur;} double diagonale() { return Math.sqrt(largeur*largeur+hauteur*hauteur)} void doubler() {largeur*=2; hauteur*=2;}

ISIISI Automne L. NerimaClasses 9 Constructeur de classe v Le constructeur de classe est une méthode spéciale qui indique comment initialiser une instance v Règle de nommage: le constructeur doit porter le même nom que la classe class Rectangle { double largeur, hauteur; Rectangle(double initL, double initH){// constructeur d'objets largeur=initL; hauteur=initH; } … } v Ce constructeur initialise les deux variables d’instance largeur et hauteur v Constructeur par défaut: si aucun constructeur n’est définit pour une classe, implicitement Java en crée un mais qui n’initialise aucune variable d’instance

ISIISI Automne L. NerimaClasses 10 La classe Rectangle complète public class Rectangle { double largeur, hauteur; public Rectangle(double initL, double initH){// constructeur d'objets largeur=initL; hauteur=initH; } double perimetre() {return 2*(largeur+hauteur);} double surface() {return largeur*hauteur;} double diagonale() { return Math.sqrt(largeur*largeur+hauteur*hauteur)} void doubler() {largeur*=2; hauteur*=2;} }

ISIISI Automne L. NerimaClasses 11 La classe Disque class Disque { double diametre; static final double pi= ; Disque(double initD) {diametre=initD;} double perimetre() {return pi*diametre;} double surface() {return (pi*diametre*diametre)/ 4;} double rayon() {return diametre/2;} void doubler() {diametre*=2;} }

ISIISI Automne L. NerimaClasses 12 Les classes dans l’environnement BlueJ La commande New Class de BlueJ génère automatiquement public class Rectangle { private int x; // une variable d ’instance public Rectangle() // un constructeur d ’objets Rectangle { x=0; } public int sampleMethod(int y) //un exemple de méthode { return x + y; }

ISIISI Automne L. NerimaClasses 13 Création d’instances en Java  Pour créer une instance (objet), on invoque un constructeur avec l’instruction new. P.e. : new Rectangle(5, 10);// création d’un rectangle de larg. 5, haut. 10  Pour se référer à l’objet créé, nous avons besoin d’une référence (ou variable). La déclaration d’une référence se fait comme pour les types de base (int, char, bool,…) en faisant précéder le nom de la référence par le nom de la classe: Rectangle r1, r2;// déclaration de deux rectangles  L’assignation se fait au moment de la création de l’instance r1 = new Rectangle(5, 10); r2 = new Rectangle(2, 2);  Il est possible de déclarer la référence et d’assigner l’objet en même temps: Rectangle r1 = new Rectangle(5, 10)  Dans BlueJ on peut créer des instances « à la main » : click droit sur le rectangle de la classe > new nomConstructeur(param)

ISIISI Automne L. NerimaClasses 14 Invocation des méthodes sur une instance  L’invocation d’une méthode se fait en désignant l’instance (par la référence) et en la faisant suivre du nom de la méthode et des paramètres effectifs données sous forme d’expression, s’il y a lieu: instance.méthode(expr1, expr2, …)  Par exemple, pour obtenir la surface du rectangle r1, on écrira: r1.surface()  Si la méthode possède des paramètres, les expressions passées en paramètre sont évaluées puis affectées aux paramètres correspondants de la méthode  Si l’on veut invoquer une méthode sur l’instance courante, on écrira: this.méthode(expr1, expr2, …)

ISIISI Automne L. NerimaClasses 15 Un exemple de programme complet class TestRectDisk1{ public static void main (String args[]) { Rectangle r1=new Rectangle(2,4); Rectangle r2=new Rectangle(3,4); System.out.println("diagonale de r1: "+r1.diagonale()); System.out.println("périmètre de r2: "+r2.perimetre()); r2.doubler(); System.out.println("périmètre de r2: "+r2.perimetre()); Disque d1,d2; d1=new Disque(2); d2=new Disque(4); System.out.println("rayon de d1: "+d1.rayon()); System.out.println("périmètre de d2: "+d2.perimetre()); d2.doubler(); System.out.println("périmètre de d2: "+d2.perimetre()); }}

ISIISI Automne L. NerimaClasses 16 Déclaration de plusieurs constructeurs  Il est parfois pratique de proposer plusieurs constructeurs pour une même classe (permettant plusieurs formes de représentations selon les utilisateurs)  Pour se faire il suffit de définir un nouveau constructeur deavnt se distinguer des autres par le nombre et / ou le type de ses paramètres  Par exemple, pour la classe Rectangle nous pouvons ajouter un constructeur qui construit un rectangle à partir du coin supérieur gauche (x1,y1) et du coin inférieur droit (x2, y2) class Rectangle { double largeur, hauteur; Rectangle(double initL, double initH){ largeur=initL; hauteur=initH; } Rectangle(double x1, double y1, double x2, double y2){ largeur=Math.abs(x2-x1); hauteur=Math.abs(y2-y1); } … }

ISIISI Automne L. NerimaClasses 17 Méthodes de classe  Nous avons vu qu’il était possible de déclarer des variables de classe  Il est également possible de déclarer des méthodes de classe  Ces méthodes sont destinées à agir sur la classe (plutôt que sur les instances)  Tout comme pour les variables de classe, la déclaration des méthodes de classe est précédée du mot static  L’invocation à une méthode de classe se fait en faisant précéder le nom de la méthode par celui de la classe nom_de_la_classe.méthode(expr1, expr2, …)  Exemple: class Rectangle { static double echelle=1.0;// variable de classe double largeur, hauteur; static void modifierEchelle(double e) {// méthode de classe echelle=e; }  Invocation: Rectangle.modifierEchelle( 4 )

ISIISI Automne L. NerimaClasses 18 Méthodes de classe: commentaires  La « célèbre » méthode main que nous avons utilisé jusqu’à maintenant pour écrire nos programmes était en fait une méthode de classe  Déclaration: static void main(String args[])  La programmation avec des classes qui contiennent exclusivement des variables de classes et des méthodes de classes nous ramème dans le paradigme de la programmation procédurale

ISIISI Automne L. NerimaClasses 19 Défintion de sous-classes en Java  En Java le mot réservé extends permet de déclarer une sous- classe à partir d’une classe de base ou super-classe  La sous-classe hérite de tout ce qui a été défini dans la super- classe (variables et méthodes)  Exemple de déclaration: class Carre extends Rectangle { … }  Le constructeur de la sous-classe peut utiliser le constructeur de la super classe en invoquant super(…)

ISIISI Automne L. NerimaClasses 20 Exemple: Carre extension de Rectangle class Carre extends Rectangle{ Carre(double initC){ super(initC,initC); } double cote() {return this.hauteur;} } vsuper est utilisée pour atteindre le constructeur de la super-classe Rectangle

ISIISI Automne L. NerimaClasses 21 Utilisation de la classe « Carre » class TestRectDisk4{ public static void main (String args[]) { Carre c1=new Carre(4); System.out.println("dimension c1: "+c1.largeur+"/"+c1.hauteur); System.out.println("surface c1: "+c1.surface()); System.out.println("coté de c1 "+c1.cote()); }} vSortie: dimension c1: 4/4 surface c1: 16 coté de c1: 4

ISIISI Automne L. NerimaClasses 22 Assignation et compatibilité des types vAffectation des objets: supposons qu’une variable (référence) soit de type (classe) C; on peut alors lui affecter un objet de la classe C ou d’une sous- classe de C vExemple: Rectangle r; r = new Carre(4); vPar contre, l’inverse n’est pas possible: Carre c; c = new Rectangle(5, 0);// Erreur à la compilation !!! vLorsqu’on est sûr du type, on peut le changer (garde de type): Rectangle r; Carre c; r = new Carre(4);// r désigne bien un carré … c = (Carre) r; // c = r aurait été refusé à la compilation vAttention: à l’exécution un contrôle de type est exécuté et si r n’est pas de type carré, un erreur d’exécution se produira

ISIISI Automne L. NerimaClasses 23 Exercice de déclaration de classe vEcrire une classe « tamagotchi » t.q. vun tamagotchi est caractérisé par (variables d’instance) vun nom (String) vun âge (entier) vun âge de sagesse (entier) vun niveau d’énergie (entier) vune variable de classe (c-à-d static) v min énergie valable pour tous les tamagotchis v1 constructeur qui initialise: vle nom (passé en paramètre) vl’âge (à 0) vl’âge de sagesse (de 20 à 30, passé en paramètre) vle niveau d’énergie (à 8) vune méthode manger (qui augmente l’énergie) vune méthode vieillir (qui augmente l’âge et diminue l’énergie) vvoir l’énoncé complet : série 3, exercice 4

ISIISI Automne L. NerimaClasses 24 Rappel de la référence vEn Java: v8 types primitifs: boolean, char, int, float, double… vtous les autres types sont des types « référence », comprenant les classes (comme les chaînes de caractères) et les tableaux (array) vle but d’une variable référence et de référencer un objet, c’est-à- dire un moyen de désigner un objet vune variable de type référence stocke l ’adresse mémoire où un objet réside von appelle plus simplement « référence » une variable de type référence vsi une référence ne se réfère à aucun objet, sa valeur est « null »

ISIISI Automne L. NerimaClasses 25 La référence : exemple vDéclaration de la classe Tamagotchi (voir exercice p.14) public class Tamagotchi { String nom; // variable d ’instance Int age;// ‘’ … public Tamagotchi(String n) // constructeur de tamagotchi … } vdéclaration de trois références et instanciations de deux objets: Tamagotchi t1 = new Tamagotchi(‘’Louis‘’); Tamagotchi t2 = new Tamagotchi(‘’Louis‘’); Tamagotchi t3 = t1;

ISIISI Automne L. NerimaClasses 26 La référence : exemple (suite) vAprès ces instructions, il y a en mémoire: 3 références (t1, t2 et t3) 2 objets de type tamagotchi (avec le même nom: Louis) t1 et t3 se réfèrent tous les deux au premier objet tamagotchi t2 se réfère au deuxième objet tamagotchi

ISIISI Automne L. NerimaClasses 27 Opérateurs pour les références vEn Java, il existe seulement 3 opérateurs pour les références: v= pour l ’affectation v== et != pour tester l ’égalité resp. l ’inégalité v Toutes les autres opérations souhaitées sont à définir avec des méthodes vException: les références de type String possède deux opérateurs supplémentaires: + et += (concaténation de chaînes de caractères)

ISIISI Automne L. NerimaClasses 28 Référence: la signification de = vLa signification de = (affectation) pour les références est exactement la même que pour les types primitifs: la valeur contenue dans la référence de droite est recopiée dans la référence de gauche vcomme la référence contient l ’adresse mémoire où réside l ’objet référencé, c ’est cette adresse qui est recopiée dans la référence affectée (et non les valeurs stockées dans l ’objet !)

ISIISI Automne L. NerimaClasses 29 Référence: la signification de == et != vL ’expression t1==t2 vteste si la valeur (référence) contenue dans la variable t1 est égale à la valeur contenue dans t2 vComme les valeurs sont des références adresses mémoire d ’objets, cela revient à tester si d1 et d2 se réfèrent au même objet vL’opérateur != teste l ’inégalité

ISIISI Automne L. NerimaClasses 30 Référence: la signification de == et != (suite) vPour tester l ’égalité du contenu de deux objets, on utilise la méthode equals définie sur dans la classe Object

ISIISI Automne L. NerimaClasses 31 Exemple vSoit les déclarations: Tamagotchi t1 = new Tamagotchi(‘’Louis‘’); Tamagotchi t2 = new Tamagotchi(‘’Louis‘’); Tamagotchi t3 = t1; vque valent les expressions suivantes ? t1 == t2// rép: t1 != t2// rép: t1 == t3// rép: t1.equals(t2)// rép:

ISIISI Automne L. NerimaClasses 32 Exemple vSoit les déclarations: Tamagotchi t1 = new Tamagotchi(‘’Louis‘’); Tamagotchi t2 = new Tamagotchi(‘’Louis‘’); Tamagotchi t3 = t1; vque valent les expressions suivantes t1 == t2// rép: faux car t1 et t2 référencent des objets diff. t1 != t2// rép: vrai t1 == t3// rép: vrai car t1 et t3 référencent le même objet t1.equals(t2)// rép: vrai car l’objet référencé par t1 et l ’objet // référencé par t2 contiennent la même valeur // (dans la variable nom)