Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages
Introduction à lHéritage
La classe Object La classe Object est la classe mère dont héritent toutes les autres classes Toute classe définie en Java, que ce soit par lutilisateur ou dans un package de lAPI, hérite de la classe Object Ainsi, toute classe hérite demblée des méthodes de la classe Object
Méthodes de la classe Object int hashCode() renvoie un code utilisé pour stocker dans une Hashtable boolean equals(Object o) attention, == teste les références. Mais compare les références des attributs (=> redéfinir) Object clone() : crée une copie de lobjet. Mais copie les références des attributs (=> redéfinir) String toString() renvoie une String décrivant l'objet. Par défaut, renvoie le type et ladresse de stockage (=> redéfinir)...
Exemple La classe Point contient tout ce qu'il y a de commun à PointColore et Point3D Point contient la gestion de labscisse et de lordonnée PointColore ne contient que ce qu'il y a de spécifique en plus : la couleur Point3D: le troisième axe Point PointColorePoint3D
Objectif de l'héritage On souhaite ne décrire qu'une seule fois le même traitement lorsqu'il s'applique à plusieurs classes Evite de recopier (notamment les modifications) On crée une classe plus générique à laquelle s'applique le traitement Toutes les classes plus spécifiques, héritant de cette classe, héritent de ce traitement, elles peuvent l'exécuter Le traitement n'est décrit qu'au niveau de la classe mère Les classes filles contiennent d'autres traitements plus spécifiques
Usage de l'héritage (suite) Un objet de type PointColore peut utiliser toutes les méthodes de la classe Point Il doit disposer dune valeur pour tous les attributs de la classe Point A tout moment, une méthode qui utilise un objet de type Point peut manipuler un objet de type PointColore en guise de Point (on ne pourra pas accéder à la couleur) Cette dernière propriété est le polymorphisme.
Exemple : une classe Point class Point { protected int x,y; public Point(int a, int b){x=a; y=b;} public Point(){x=0; y=0;} public void moveTo (int a, int b){x=a; y=b;} public String toString() {return ( + x +, + y + ));} public double distanceToOrigin() { return Math.sqrt(x*x +y*y); }
Exemple : classe PointCol (oré) class PointColore extends Point { protected String couleur; public PointColore (int abs, int ordo, String c) {super(abs,ordo); couleur=c;} public PointColore (String c){couleur=c;} // appel implicite de super() public PointColore(){super(); couleur= blanc ;} public String getColor(){return couleur;} public String toString() { return super.toString()+ couleur + couleur; } ArrayList lesPoints;
Bilan sur lhéritage Usage du super Usage de protected : visibilité identique des variables dinstances dans la classe fille que dans la classe mère. Polymorphisme : une liste de Point peut contenir aussi des points colorés On considérera tous les points comme des points (pas dacces aux spécificités) On ne peut pas mettre des Point dans des Points colorés
Livraison dun projet
Usage dun code Un code est destiné à être utilisé Il doit être documenté 2 documentations : à destination des usagers de la classe : ils ne doivent pas connaître limplémentation. Ils doivent uniquement connaître : La façon dinstaller et dexécuter Les fichiers.class et leur emplacement Et la documentation de linterface de la classe : javadoc à destination des développeurs qui doivent faire évoluer votre code: ils doivent connaître limplémentation. Livraison des.java Et Documentation de limplémentation de la classe : UML, cahier des charges, spécifications détaillées, commentaires dans le code
Livraison Rappel Javadoc
Javadoc et classe POUR UNE CLASSE Class comment: /** * The Responder class represents a response * generator object. It is used to generate an * automatic response. * Michael Kölling and David J. Barnes 1.0 (1.Feb.2002) */
JAVADOC et méthode Commentaire pour une méthode /** * Read a line of text from standard input (the text * terminal), and return it as a set of words. * prompt A prompt to print to screen. A set of Strings, where each String is * one of the words typed by the user */ public HashSet getInput(String prompt) {... }
Comment générer la javadoc : page HTML javadoc ClasseATester.java OPTION -help Donne en ligne les différentes options Génération du fichier ClasseATester.html pour en savoir plus ts/
Livraison Rappel sur les tests
Un Main pour les Tests Exemple : Pour tester la classe ClasseATester Ecrire le contenu du main dans une classe TestDEClasseAtester (condition réelle de lusage) de sorte quil y ait : Création dinstances de cette classe : (Tests des constructeurs) Affichage des instances créées (Tests des constructeurs et de la méthode toString) Appels des méthodes en faisant varier la valeur des paramètres sur ces instances (Test des méthodes publiques) Affichage des retours des méthodes pour voir les tests
Comment faire et utiliser des packages ?
Vous connaissez déjà…. Organisation par packages Quels sont les packages que vous connaissez ? java.util java.lang Où pouvez vous trouver la classe String ? La classe ArrayList ? Quels sont les packages qui pourront vous servir ?
Comment travaille-t-on avec des packages ? Les classes dun package (bibliothèque de classes) doivent être importées (comme des livres que lon emprunte…) Utilisation de la clause import Pour importer une seule classe : import java.util.ArrayList; Pour importer toutes les classes dun package : import java.util.*; Importation inutile pour les classes de java.lang (tout le monde a ces livres ). Une fois importées les classes ont toutes la même visibilité En cas de conflit, mettre le nom complet de la classe java.util.ArrayList Ex : la classe MaClasse existe dans 2 packages : monnompackage et autrenompackage On peut les distinguer à laide des noms complets : monnompackage.MaClasse ou autrenompackage.MaClasse
Packaging dun code Implication dans chaque classe de cette bibliothèque package nompackage; Instruction à ajouter au début des classes appartenant au package Implication sur lorganisation des fichiers Mettre les classes à compiler sous un répertoire de nom nompackage Compiler (placé au dessus du répertoire de nom nompackage) javac nompackage/ClassePackagée.Java Exécuter (placé au dessus du répertoire de nom nompackage) java nompackage.ClassePackagee
Comment organiser le code Des packages : pour une meilleure livraison, pour regrouper les classes utilisées dans le même contexte Une organisation des répertoires src : les classes doc : la documentation bin : les binaires tests : les tests