Cours 3 : Encapsulation et tests



Documents pareils
Programmer en JAVA. par Tama

Environnements de développement (intégrés)

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

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

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

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Cours 1: Java et les objets

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Chapitre 10. Les interfaces Comparable et Comparator 1

Programmation avec des objets : Cours 7. Menu du jour

Premiers Pas en Programmation Objet : les Classes et les Objets

Programmation Par Objets

Corrigé des exercices sur les références

Programmation par les Objets en Java

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

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

TD/TP PAC - Programmation n 3

Java Licence professionnelle CISII,

TD/TP PAC - Programmation n 3

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

Java Licence Professionnelle CISII,

TP1 : Initiation à Java et Eclipse

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

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

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Auto-évaluation Programmation en Java

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

Une introduction à Java

Langage Java. Classe de première SI

Corrigés des premiers exercices sur les classes

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

ACTIVITÉ DE PROGRAMMATION

2. Comprendre les définitions de classes

LOG4430 : Architecture logicielle et conception avancée

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

Initiation à JAVA et à la programmation objet.

Package Java.util Classe générique

INITIATION AU LANGAGE JAVA

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Programmation en Java IUT GEII (MC-II1) 1

Programmation Objet Java Correction

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

Chapitre 2. Classes et objets

Création d objet imbriqué sous PowerShell.

Synchro et Threads Java TM

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

as Architecture des Systèmes d Information

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

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

Arbres binaires de recherche

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

Classe Interne, Anonyme & Enumération

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Projet de programmation (IK3) : TP n 1 Correction

Bases Java - Eclipse / Netbeans

Programme Compte bancaire (code)

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)

RMI le langage Java XII-1 JMF

Design patterns. Design patterns - définition. Design patterns - avantages

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

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

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

TP1. Outils Java Eléments de correction

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

Support de cours et TD Programmation Orientée Objet

Un ordonnanceur stupide

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

PROGRAMMATION PAR OBJETS

Chapitre VI- La validation de la composition.

Programmation Orientée Objet application au langage Java Version Novembre 2007

Java c est quoi? Java pourquoi?

Création d un service web avec NetBeans 5.5 et SJAS 9

Remote Method Invocation (RMI)

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

Dis papa, c est quoi un bus logiciel réparti?

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 )

Programmation par composants (1/3) Programmation par composants (2/3)

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

ETUDE DE CAS en UML : GESTION DES COMMANDES DE PIECES FABRIQUEES PAR LA SOCIETE C

Développement Logiciel

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

OpenPaaS Le réseau social d'entreprise

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

Les frameworks au coeur des applications web

Langage à objets : JAVA (1)

Solutions du chapitre 4

Utiliser Java sans BlueJ

LOG4430 : Architecture logicielle et conception avancée

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

La plate-forme DIMA. Master 1 IMA COLI23 - Université de La Rochelle

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

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Création d une application JEE

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

Transcription:

DUT Informatique S3 - Programmation Java Jean-Claude MARTIN MARTIN@LIMSI.fr Cours 3 : Encapsulation et tests Plan Divers Paquetages : intérêt, utilisation des packages existants, créer un package Encapsulation : principe et intérêts Visibilité et accessibilité des classes, attributs et méthodes Test junit : junit.org Divers Tester 1 classe à la fois : d'abord client, puis CompteCourant,... noms de variables commençant par une minuscule tostring () => à quoi cela sert? est-ce obligatoire? indenter attribut initialisés à des valeurs par défaut, pas les variables locales numclient, numcompte => utiliser plutot "numero" dans toutes les classes NullPointerException => à expliquer en amphi Paquetages Définition : un paquetage ( package en anglais) est un regroupement de classes qui ont une fonction similaire ; par exemple classes permettant de gérer les entrées-sorties (java.io). Intérêt : Utilisation d un paquetage existant Cf javadocs Pour utiliser une classe qui est dans un package donné, il faut : - Soit - Soit Exception : La classe System est dans le paquetage java.lang Pourquoi peux-t on tout de meme l utiliser?.. import java.io.* ; class ExPaquetageExistant { public static void main (String arg[]) { 1

System.out.println ("Exemple d'utilisation d'un paquetage existant"); System.out.println ("2 puissance 3 = " + Math.pow (2,3)); System.out.println ("Affichage du dossier "); File f = new File ("."); String dossier [] = f.list (); // enhanced for loop for (String s : dossier) { System.out.println ("-- " + s); Spécifier un paquetage pour une nouvelle classe Mettre en début de fichier package nom ; Mettre la source dans un dossier nom Encapsulation Pourquoi protéger les attributs des classes?. L encapsulation consiste à permettre à un utilisateur d utiliser un objet sans qu il ne se soucie des détails internes. Un objet sert alors de conteneur / capsule pour regrouper et protéger l accès aux attributs et aux méthodes. Capsule = protection + entrées contrôlées dans la capsule Schéma d une capsule L encapsulation permet de cacher certains attributs des objets. Pour accéder à ces attributs, un programmeur est alors obligé de passer par des méthodes qui peuvent alors contrôler les accès. Visibilité / accessibilité d une classe class C (par défaut) o cette classe est accessible depuis toutes les autres classes de ce paquetage public class C : o cette classe est accessible depuis toutes les autres classes Visibilité / accessibilité des attributs et des méthodes public : accessible par tous les objets private : accessible seulement par cette classe (et les classes imbriquées) protected : accessible par cette classe et les sous-classes par défaut : accessible aux classes du même package 2

Accesseurs Pour permettre tout de même d accéder à des attributs que l on a mis en private, il faut ajouter des méthodes qui permettent d y accéder : ce sont des accesseurs : getx () => récupérer la valeur de l attribut setx(val) => donner une valeur à l attribut Exemple : classe Action, mot de passe pour accéder au solde, affichage des opérations, CLASSE ENCAPSULEE: Action class Action { private double montant = 100; void setmontant (double val) { if (val > 10 * montant) { System.out.println ("Tentative de magouille?"); else montant = val ; double getmontant () { return montant ; CLASSE QUI EST MAINTENANT OBLIGEE DE PASSER PAR LES ACCESSEURS POUR ACCEDER AUX ATTRIBUTS DE Action : class Magouille { public static void main (String args[]) { // On recupere un ensemble d'action Action a = new Action (); System.out.println ("Montant initial : " + a.getmontant()); // Modifier le montant (personne ne s'en apercoit!) a.setmontant(10000) ; // On sauvegarde ces objets dans les fichiers System.out.println ("Montant apres magouille : " + a.getmontant()); 3

Tests junit junit.org http://www.jmdoudoux.fr/java/dejae/chap011.htm http://www-igm.univ-mlv.fr/~dr/xpose2003/junit_tour/ JUnit est un framework open source pour réaliser des tests unitaires sur du code Java. Le principal intérêt est de s'assurer que le code répond toujours au besoin même après d'éventuelles modifications. Le but est d'automatiser les tests. Ceux ci sont exprimés dans des classes sous la forme de cas de tests avec leurs résultats attendus. JUnit exécute ces tests et les comparent avec ces résultats. Spécification de la librairie dans Eclipse (cf doc Eclipse) Avec Junit, l'unité de tests est une classe dédiée qui regroupe des cas de tests. Ces cas de tests exécutent les tâches suivantes : création d'une instance de la classe et de tout autre objet nécessaire aux tests appel de la méthode à tester avec les paramètres du cas de test comparaison du résultat obtenu avec le résultat attendu : en cas d'échec, une exception est levée Il faut compléter la classe générée selon les besoins : par exemple, ajouter un attribut qui va contenir une instance de la classe à tester, ajouter l'instanciation de cette classe dans la méthode setup() et libérer cette instance dans la méthode teardown(). Il faut ajouter les traitements nécessaires dans les méthodes testxxx() en utilisant l'api de JUnit. Exemple d encapsulation: concevoir un jeu de test avec Junit. On n a pas vu le code (qui n existe peut-être pas encore) on écrit un test seulement en fonction de la spécification. La classe «Argent» spécification La classe Argent représente une somme d argent dans une monnaie déterminée. Elle contient un constructeur (avec un montant et le nom d une monnaie il fabrique l objet qui représente la somme d argent), deux accesseurs (accès au montant et à la monnaie) et une méthode ajoute qui permet de créer la somme d argent résultant de l ajout à la somme d argent courante, une autre somme de la même monnaie. Deux sommes d argent sont identiques si elles représentent le même montant dans la même monnaie. 4

Les prototypes sont les suivants: public Argent(double d, String s); public double montant(); public String monnaie(); public Argent ajoute(argent a); La classe de test d «Argent» import junit.framework.testcase; public class ArgentTest extends TestCase { Argent huiteuros, deuxeuros; public ArgentTest(String name) { super(name); protected void setup() throws Exception { super.setup(); huiteuros= new Argent(8,"euros"); deuxeuros= new Argent(2, "euros"); public final void testajoute() { Argent attendu=new Argent(10, "euros"); Argent resultat= huiteuros.ajoute(deuxeuros); assertequals(attendu.montant(), resultat.montant()); assertequals(attendu.monnaie(), resultat.monnaie()); assertequals(attendu, resultat); La classe «Argent» conception public class Argent { private double montant; private String monnaie; public Argent(double d, String s){ montant=d; monnaie=s; public double montant(){ return montant; public String monnaie(){ return monnaie; public Argent ajoute(argent a){ return new Argent( montant()+a.montant(), monnaie()); 5