Les méthodes Java et encapsulation

Documents pareils
Premiers Pas en Programmation Objet : les Classes et les Objets

Programme Compte bancaire (code)

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

as Architecture des Systèmes d Information

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Programmer en JAVA. par Tama

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Projet de programmation (IK3) : TP n 1 Correction

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Java Licence Professionnelle CISII,

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Tp 1 correction. Structures de données (IF2)

Programmation Objet Java Correction

Héritage presque multiple en Java (1/2)

Plan du cours. Historique du langage Nouveautés de Java 7

TP1 : Initiation à Java et Eclipse

Généralités sur le Langage Java et éléments syntaxiques.

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Chapitre 2. Classes et objets

RMI le langage Java XII-1 JMF

Utilisation d objets : String et ArrayList

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

Une introduction à Java

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Package Java.util Classe générique

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Apprendre Java en 154 minutes

Langage Java. Classe de première SI

Chapitre 10. Les interfaces Comparable et Comparator 1

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

TD3: tableaux avancées, première classe et chaînes

Programmation avec des objets : Cours 7. Menu du jour

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

Programmation en Java IUT GEII (MC-II1) 1

Java c est quoi? Java pourquoi?

INITIATION AU LANGAGE JAVA

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Création d objet imbriqué sous PowerShell.

ACTIVITÉ DE PROGRAMMATION

Java DataBaseConnectivity

Initiation à JAVA et à la programmation objet.

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Java Licence Professionnelle CISII,

Programmation par les Objets en Java

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Développement Logiciel

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Programmation Orientée Objet

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Chapitre VI- La validation de la composition.

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

TP, première séquence d exercices.

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

2 e édition JAVA 5 et 6. Jérôme Bougeault. TSoft et Groupe Eyrolles, 2003, 2008, ISBN :

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

TP1. Outils Java Eléments de correction

TD/TP PAC - Programmation n 3

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Corrigé des exercices sur les références

Cours 14 Les fichiers

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Derrière toi Une machine virtuelle!

Gestion distribuée (par sockets) de banque en Java

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Introduction au langage Java

Flux de données Lecture/Ecriture Fichiers

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

PROGRAMMATION PAR OBJETS

Le prototype de la fonction main()

Les chaînes de caractères

TD/TP PAC - Programmation n 3

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Cours d initiation à la programmation en C++ Johann Cuenin

Programmation C++ (débutant)/instructions for, while et do...while

et Programmation Objet

Cours 1: Java et les objets

Remote Method Invocation Les classes implémentant Serializable

Le langage C. Séance n 4

Objets et Programmation. origine des langages orientés-objet

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

Java RMI. Arnaud Labourel Courriel: Université de Provence. 8 mars 2011

Projet gestion d'objets dupliqués

Bases Java - Eclipse / Netbeans

Corrigés des premiers exercices sur les classes

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Solutions du chapitre 4

Transcription:

Année 2008-2009 Les méthodes Java et encapsulation Nicolas Baudru mél : nicolas.baudru@esil.univmed.fr page web : nicolas.baudru.perso.esil.univmed.fr 1

Dans ce cours... Nous avons vu qu'une instance d'une classe (un objet d'un type donné) possède : des variables d'instances qui correspondent à l'état de l'objet. des méthodes qui correspondent au comportement de l'objet. En pratique le comportement modie l'état et l'état modie le comportement. Autrement dit, les méthodes doivent aecter les variables d'instances et les variables d'instance doivent aecter les résultats des méthodes. Nous allons donc voir en détail comment procéder en Java. 2

Rappels Une classe est un patron d'objets. Elle décrit comment la JVM doit fabriquer un objet de ce type. On sait que deux objets A et B d'un même type, i.e. construit à partir d'une même classe, ont les mêmes variables d'instance. Nous savons aussi que la valeur des variables d'instance de A et B peut diérer. Le comportement de deux objets d'une même classe est-t-il le même? 3

Exemple class Chien { int taille ; String nom ; void aboyer () { if ( taille > 60) { System. out. println (" Grrr Grrr " ); else if ( taille > 15) { System. out. println (" Ouaf Ouaf " ); else { System. out. println (" Kai Kai " ); 4

Exemple class TestChien { public static void main ( String [] args ){ Chien mirza = new Chien (); mirza. taille = 30; Chien fido = new Chien (); fido. taille = 10; mirza. aboyer (); fido. aboyer (); On compile puis on lance l'exécution de notre programme : % javac Chien. java % javac TestChien. java % java TestChien Ouaf Ouaf Kai Kai 5

Paramètres des méthodes Il est possible de transmettre des valeurs aux méthodes : class Chien { int taille ; String nom ; void aboyer ( int nbfois ) { while ( nbfois > 0) { System. out. println (" Ouaf " ); nbfois = nbfois - 1; class TestChien { public static void main ( String [] args ){ Chien fido = new Chien (); fido. aboyer (3); // demande à fido d aboyer 3 fois 6

Paramètres des méthodes Un code appelant transmet des arguments à une méthode. Ces arguments sont en fait des valeurs (comme un entier) ou des références. fido. aboyer (3); // demande à fido d aboyer 3 fois Les arguments transmis à la méthode sont copiés dans les paramètres de cette méthode. Un paramètre n'est rien d'autre qu'une variable (avec un nom et un type) qui prend comme valeur celle passée en argument lors de l'appel de la méthode : void aboyer ( int nbfois ) { // après l ' appel de aboyer (3) nbfois vaudra 3 while ( nbfois > 0) { System. out. println (" Ouaf " ); nbfois = nbfois - 1; 7

Paramètres multiples Exemple : Un appel à une méthode doit avoir autant d'arguments que le nombre de paramètre de cette méthode. Chaque argument doit avoir le même type que celui du paramètre correspondant et être transmis dans le bon ordre. class Operation { void soustraire ( int x, int y) { int z = x - y; System. out. println (" Le résultat est " + z ); class TestOperation { public static void main ( String [] args ){ int n = 7; Operation t = new Operation (); t. soustraire (n,3); // x <--n et y < - -3 System. out. println (" La valeur de n est " + n ); 8

Passage par valeur Exemple : class Operation { void soustraire_ 2 ( int x) { x = x - 2; System. out. println (" Le résultat est " + x ); class TestOperation { public static void main ( String [] args ){ int n = 7; Operation t = new Operation (); t. soustraire_2 (n ); // x <--n System. out. println (" La valeur de n est " + n ); Quelle est la valeur de n à la n de l'exécution de ce programme? 9

Passage par valeur (suite) 1 On déclare une méthode avec deux paramètres de type int :... void soustraire_2 ( int x ) {... 2 On déclare une variable de type int et on lui aecte la valeur 7 :... int n = 7;... 3 On appelle la méthode soustraire() en lui passant en paramètres n. Les bits contenus dans n sont copiés dans x :... t. soustraire_2 (n)... 4 On modie la valeur de x. Celle de n ne change pas!... x = x - 2;... 00000111 3 copie de n 00000111 00000111-00000010 4 2 n int x et n ne sont pas liés x int 1 10

Types de retour Toute méthode a un type de retour qui correspond au type renvoyé par la méthode. Si rien n'est renvoyé alors le type est void. Parler du polymorphisme class Operation { int soustraire_ bis ( int x, int y) { int z = x - y; retourn z; class TestOperation { public static void main ( String [] args ){ int n = 7; int res ; Operation t = new Operation (); res = t. soustraire_ bis (n, 3); System. out. println (" La valeur de res est " + res ); 11

Quelques questions Que se passe-t-il si l'argument est un objet? Qu'est ce qu'une méthode doit retourner? Une méthode peut-elle retourner plusieurs valeurs? Que faire de la valeur de retour d'une méthode? 12

L'encapsulation Dans tout ce que nous avons vu jusqu'ici les données n'étaient pas protégées. Exemple : dans la classe chien, tout le monde peut modier la taille du chien à l'aide de l'opérateur. et aecter des valeurs non pertinantes, voire même des valeurs pouvant faire bugguer votre programme : fido. taille = 0; Pour résoudre ce problème, deux choses à faire : protéger les variables d'instance d'une classe A à l'aide du modicateur d'accès private : seules les méthodes de la classe A peuvent dorénavent modier ces variables d'instances. créer des méthodes permettant de manipuler ces variables d'instances tel que vous le souhaitez, appelées accesseurs (get) et mutateurs (set), et les rendre accéssibles à tout le monde en utilisant le modicateur d'accès public. 13

L'encapsulation (suite) Exemple : Dans la classe Chien : encapsulez toutes les variables et créez les méthodes accesseurs et mutateurs associées : class Chien { private int taille ; private String nom ; public void settaille ( int t ){ if ( t > 9 ) { taille = t; public int gettaille (){ return taille ; public void setnom ( String n ){ nom = n; public String getnom (){ return nom ; void aboyer ( int nbfois ) {... 14

L'encapsulation (suite) Exemple : A l'extérieur de la classe Chien : Au lieu d'utiliser directement les variables d'instances de la classe Chien, utiliser les accesseurs et les mutateurs. class TestChien { public static void main ( String [] args ){ Chien c = new Chien (); c. settaille (60); c. setnom (" Fido " ); c. aboyer (3); // demande à fido d aboyer 3 fois system. out. println (" la taille de " + c. getnom () + " est :" + c. gettaille ()); 15

L'encapsulation (encore) Exemple : Avec un tableau : public class TestChien { public static void main ( String [] args ){ Chien [] meute = new Chien [3]; meute [0] = new Chien (); meute [1] = new Chien (); meute [2] = new Chien (); meute [0]. setnom (" Beethoven " ); // meute [0]. nom = " Beethove meute [1]. setnom (" Médor " ); // meute [1]. nom = " Médor "; meute [2]. setnom (" Mirza " ); // meute [2]. nom = " Mirza "; int i = 0; while ( i < meute. length ) { meute [i ]. aboyer (); i = i + 1; 16

Initialisation de variables d'instance class Chien { private int taille ; private String nom ; public int gettaille (){ return taille ; public String getnom (){ return nom ; class TestChien { public static void main ( String [] args ){ Chien c = new Chien (); system. out. println (" Nom du chien :" + c. getnom ()); system. out. println (" Sa taille :" + c. gettaille ()); Ce programme compile-t-il? Si oui, quel est le résultat de ce programme? 17

Initialisation de variables d'instance (suite) Il n'est pas nécessaire d'initialiser les variables d'instance, car elles ont toujours une valeur par défaut : type valeur par défaut entiers 0 décimaux 0.0 booléens false références null Si la valeur par défaut n'est pas celle que vous souhaitez, alors il faut initialiser la variable d'instance en même temps que sa déclaration : class Chien { private int taille = 54; private String nom = " Mirza ";... 18

Et pour les variables locales Les variables d'instance sont déclarées dans une classe. Les variables locales sont déclarées dans une méthode. Contrairement aux variables d'instance, une variable locale doit toujours être initialisée avant usage. Les variables locales n'ont pas de valeur par défaut. class Foo { public void go () { int x; int z = x + 3; Ce programme ne compilera pas. Et pour les paramètres des méthodes? 19

Ce que nous avons vu... Les méthodes d'une classe A peuvent modier les variables d'instance de A. Inversement les variables d'instance de A peuvent modier le résultat des méthodes de A. Les méthodes peuvent être paramètrées. Dans ce cas, l'appel d'une méthode doit être réalisée avec des arguments correspondant aux paramètres de la méthodes. Les arguments sont passés par valeur. Encapsulez vos classe : les variables d'instance doivent être protégées (modicateur private), les accesseurs et mutateurs doivent être publics (modicateur public). Les variables d'instances sont initialisées par défaut. Les variables locales doivent être explicitement initialisées. 20