Test dans les objets Andrés Farias –
Plan Introduction Quest-ce quun objet? Quest-ce quune classe? Descriptions comportementaux Méthodologies formelles Propriétés dintérêt Les test dans les objet avec une description comportemental.
Des procédures aux objets Programmation dirigée par les traitements : Ecole de programmation Algol (1968) programme = {procédures} {données} avec = Méthodes danalyses = décomposition modulaire en arbre chaque module étant isolé des autres (boîte noire) Inconvénients : Couplage fort entre structures de données et procédures analyse dimpact au moindre changement de contexte Méthode de développement figé analyse conception développement tests Cycle de développement long, répercussion des erreurs de conception
Quest-ce quun objet? Intuition : « Nous manipulons des objets matériels complexes dont nous connaissons uniquement le mode demploi 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 doutils préexistants. La notion dobjet informatique permet la transposition de ce que nous savons faire dans la vie de tous les jours à lunivers informatique. » (Jean-François Perrot)
Quest-ce quun objet? Avantages : Mécanismes intellectuels partagés par le plus grand nombre dutilisateurs Traitement = collaboration (échange de messages) entre les objets (représentation informatique des objets réels) Couplage faible traitement / objets Analyse dimpact localisé dans les objets (ou les groupes dobjets) Développement incrémental, cycle raccourci Programmation dirigée par les données
Quest-ce quun objet? Réponse : Entité individuelle repérée par une adresse unique Formé de plusieurs champs variables dinstances en Smalltalk données membres en C++ attributs en Java A chaque champ est associée une valeur, valeurs des champs = état de lobjet Reçoit des messages et les traite en activant la procédure correspondante. des messages auxquels un objet peut répondre = comportement de lobjet
Quest-ce quun objet? METHODESCHAMPS INTERFACEINTERFACE 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éhension Code moins chargé et plus naturel...
Les langages à objets à classes Exemple un objet anonyme représentant un point à lécran x y getX():Integer getY():Integer setX(Integer):void setY(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 à classes Comment interagir avec un objet ? La métaphore de lenvoi de messages Penser 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();% Vrai val = q.estIsole();% Faux
Langages à objets : trois principes Recours à la simulation : notion dobjet exécution du programme par activation du modèle algorithme <> animation dun 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 à objets Algol Simula CPascalAda Lisp Smalltalk Eiffel Self CLOS C++ Objective C Ada 95 Java Object Pascal Delphi
Quest-ce quune classe ? Texte structuré qui contient : Le nom des champs communs à toutes les instances de la classe. Une liste de procédures agissant sur ces champs Les seules variables libres (nayant pas encore de valeur) sont les variables dinstance Création dun objet instanciation par moulage (structure de données dupliquée) valeurs propres à lobjet stocké par celui-ci modèle et liste de procédures stockés par la classe lien à lexécution : chaque objet instance dune classe contient ladresse du code compilé de sa classe.
Les langages à objets à classes Quest-ce quune classe ? Représentation de la classe Position et de quelques instances. x y getX():Integer getY():Integer setX(Integer):void setY(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 1 3 P 4 2 Q 2 6 R
Les langages à objets à classes Conclusion provisoire sur les classes. Instances > versus classes > Types de données abstrait, clusters, paquetage en Ada. Intension et extension dune class: Extension dune classe = ensemble des instances de cette classe Intension dune classe = description intensionnel des instances de cette classe (un ensemble de programmes)
Les langages à objets à classes Polymorphisme (1er niveau) : comportement polymorphe des objets > / méthode voir() Point p; Rectangle r; Cercle c; // activation procédure voir() sur classe Point p.voir(); // activation procédure voir() sur classe Rectangle r.voir(); // activation procédure voir() sur classe Cercle c.voir();
Les langages à objets à classes Quest-ce que lhéritage ? c lasse 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 à classes Quest-ce que lhéritage ? c lasse 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 dhéritage est une relation dordre, le diagramme de Hasse de cette relation s appelle le graphe d héritage (en général un arbre)
Les langages à objets à classes La classe PointColoré étends (spécialise) la classe Point x y 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 x y 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 objets Les tests dans les objets servent a vérifier si lobjet fait effectivement ce quil 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) 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 dentré 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) Réduction des tests: Étant donné que la réalisation des test est difficile est elle nest pas exhaustif nous proposons de diminuer les test à faire. Déplacement des spécifications dans la documentation: Prend des spécification dun certain type et étudier limpact dans le modèle objet lors de leur intégration.