test dans les objets andrés farias – [email protected]@emn.fr
TRANSCRIPT
Test dans les objetsTest dans les objets
Andrés Farias – [email protected]://www.emn.fr/farias/dessgl
PlanPlan
IntroductionQu’est-ce qu’un objet?Qu’est-ce qu’une classe?
Descriptions comportementaux Méthodologies formelles
Propriétés d’intérêt Les test dans les objet avec une
description comportemental.
Des procédures aux objetsDes procédures aux objets
Programmation dirigée par les traitements :Ecole de programmation Algol (1968)
• programme = {procédures} {données} avec = Méthodes d’analyses = décomposition modulaire en
arbrechaque module étant isolé des autres (boîte noire)
Inconvénients :Couplage fort entre structures de données et procédures
analyse d’impact au moindre changement de contexteMéthode de développement figé
analyse conception développement testsCycle de développement long, répercussion des erreurs
de conception
Qu’est-ce qu’un objet?Qu’est-ce qu’un objet?
Intuition :« Nous manipulons des objets matériels complexes dont nous connaissons uniquement le mode d’emploi sans se soucier des principes physiques,théoriques, techniques nécessaires à leur réalisation. Nous savons utiliser des outils pour effectuer une tâche quelconque. Nous savons créer de nouveaux outils par assemblage ou combinaison d’outils préexistants. La notion d’objet informatique permet la transposition de ce que nous savons faire dans la vie de tous les jours à l’univers informatique. »
(Jean-François Perrot)
Qu’est-ce qu’un objet?Qu’est-ce qu’un objet?
Avantages :Mécanismes intellectuels partagés par le
plus grand nombre d’utilisateursTraitement = collaboration (échange de
messages) entre les objets (représentation informatique des objets réels)• Couplage faible traitement / objets • Analyse d’impact localisé dans les objets (ou les
groupes d’objets)• Développement incrémental, cycle raccourci
Programmation dirigée par les données
Qu’est-ce qu’un objet? Qu’est-ce qu’un objet? Réponse :Réponse :
Entité individuelle repérée par une adresse unique
Formé de plusieurs champsvariables d’instances en Smalltalkdonnées membres en C++attributs en Java
A chaque champ est associée une valeur, valeurs des champs = état de l’objet
Reçoit des messages et les traite en activant la procédure correspondante. des messages auxquels un objet peut répondre = comportement de l’objet
Qu’est-ce qu’un objet?Qu’est-ce qu’un objet?
METHODES CHAMPS
INTERFACE OBJET• abstraction de données :
encapsulation représentation interne et implantation
• modularité / maintenance lieu unique évolution structurelle / comportementale
• réutilisabilitétel quel, par spécialisation, par composition
• lisibilité / compréhensionCode moins chargé et plus naturel...
Les langages à objets à classesLes langages à objets à classes
Exemple un objet anonyme représentant un point à l’écran
x
y
getX():IntegergetY():IntegersetX(Integer):voidsetY(Integer):void
Accesseurs
Modifieurs, setteurs ?
voir():void {display(.,x,y);}centrer():void {this.setX(0); this.setY(0);}avancer():void {this.setX(this.getX()+1);}descendre():void {this.setY(this.getY()-1);}
Les langages à objets à classesLes langages à objets à classes
Comment interagir avec un objet ? La métaphore de l’envoi de messagesPenser envoi de messages et non activation
de procédures style de programmation et de conception plus souple
Point p = new Point (3, 4); Point q = new Point(3, 5); Point origine = new Point(0,0);boolean val = p.estOrigine(); % Faux val = origine.estOrigiine(); % Vraival = q.estIsole(); % Faux
Langages à objets : trois Langages à objets : trois principesprincipes
Recours à la simulation : notion d’objetexécution du programme par activation du modèlealgorithme <> animation d’un modèle réduit
Distinction entre concept (abstrait) et instance (concrète)définition / exemple, classe / instance
Classification de concepts, relation de généralisation / spécialisation caractéristique majeure de la programmation par
objets ?Ne fontionne pas comme espéré… (réalisation
informatique délicate)
Les langages à objetsLes langages à objets
Algol
SimulaC Pascal Ada
Lisp
Smalltalk
Eiffel
Self
CLOS
C++Objective C
Ada 95
Java
Object Pascal
Delphi
Qu’est-ce qu’une classe ?Qu’est-ce qu’une classe ?
Texte structuré qui contient :Le nom des champs communs à toutes les instances
de la classe.Une liste de procédures agissant sur ces champsLes seules variables libres (n’ayant pas encore de
valeur) sont les variables d’instance
Création d’un objet instanciation par moulage (structure de données dupliquée)valeurs propres à l’objet stocké par celui-cimodèle et liste de procédures stockés par la classe lien à l’exécution : chaque objet instance d’une classe
contient l’adresse du code compilé de sa classe.
Les langages à objets à Les langages à objets à classesclasses
Qu’est-ce qu’une classe ? Représentation de la classe Position et de quelques instances.
x
ygetX():IntegergetY():IntegersetX(Integer):voidsetY(Integer):void
voir():void {display(.,x,y);}centrer():void {this.setX(0); this.setY(0);}estIsole ():boolean {this.setX(this.getX()+1);}estOrigine():boolean {this.setY(this.getY()-1);}
Class Position
13 P
42 Q
26 R
Les langages à objets à Les langages à objets à classesclasses
Conclusion provisoire sur les classes.Instances <<concrètes>> versus
classes <<abstraites>>• Types de données abstrait, clusters,
paquetage en Ada.Intension et extension d’une class:
• Extension d’une classe = ensemble des instances de cette classe
• Intension d’une classe = description intensionnel des instances de cette classe (un ensemble de programmes)
Les langages à objets à Les langages à objets à classesclasses
Polymorphisme (1er niveau) :
comportement polymorphe des objets <<dessinables>> / méthode voir()
Point p;Rectangle r;Cercle c;// activation procédure voir() sur classe Pointp.voir(); // activation procédure voir() sur classe Rectangler.voir(); // activation procédure voir() sur classe Cerclec.voir();
Les langages à objets à Les langages à objets à classesclasses
Qu’est-ce que l’héritage ? classe A hérite de classe B Point de vue intensionnel (héritage statique)
• Attributs(B) Attributs(A)• Si Protocole(C) = ensemble des méthodes auquel
un objet c instance de C sait répondre alors Protocole(B) Protocole(A)
Intension(B) Intension(A) un moyen efficace de réutiliser du code ! On écrit que ce qui est supplémentaire ou les comportements qui changent.
Les langages à objets à Les langages à objets à classesclasses
Qu’est-ce que l’héritage ? classe A hérite de classe B Point de vue extensionnel (héritage
dynamique)• Toute instance de A est une instance de B
(Attention la réciproque est fausse !) Extension(A) Extension(B)
A est sous-classe de B, B est super-classe de A• Relation d’héritage est une relation d’ordre, le
diagramme de Hasse de cette relation s ’appelle le graphe d ’héritage (en général un arbre)
Les langages à objets à Les langages à objets à classesclasses
La classe PointColoré étends (spécialise) la classe Point
xy
voir():void {display(.,x,y);}centrer():void {this.setX(0); this.setY(0);}avancer():void {this.setX(this.getX()+1);}descendre():void {this.setY(this.getY()-1);}
Class Point
xy
voir():void {display(.,x,y);}centrer():void {this.setX(0); this.setY(0);}avancer():void {this.setX(this.getX()+1);}descendre():void {this.setY(this.getY()-1);}Blanchir():void {this.setColor = « blanch »;}
Class PointColoré color
Tests dans les objetsTests dans les objets
Les tests dans les objets servent a vérifier si l’objet fait effectivement ce qu’il est sensé de faire.
Transformer chaque spécification fait au niveau de la documentation en un test pour vérifier la spécification.
Lancer le test.
Tests dans les objets (2)Tests dans les objets (2)
Création de test est difficile: Pour créer des tests il faut transformer
des spécifications qui sont par fois informelles en méthodes qui vont tester un objet.
Le domaine des valeurs d’entré pour le test seront probablement des objets (et par fois du même type a celui qui est testé) :• Domaine infini.• Génération des objets difficile.
Tests dans les objets (3)Tests dans les objets (3)
Réduction des tests:Étant donné que la réalisation des test
est difficile est elle n’est pas exhaustif nous proposons de diminuer les test à faire.
Déplacement des spécifications dans la documentation: Prend des spécification d’un certain
type et étudier l’impact dans le modèle objet lors de leur intégration.