au programme du jour …. introduction à lhéritage un concept important de la programmation objet...

23
Au programme du jour …. Introduction à l’héritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages

Upload: lunete-bigot

Post on 03-Apr-2015

104 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages

Au programme du jour ….

Introduction à l’héritage Un concept important de la programmation

objet

Livraison de code Organisation des répertoires et packages

Page 2: Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages

Introduction à l’Héritage

Page 3: Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages

La classe ObjectLa 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 l’utilisateur ou dans un package de l’API, hérite de la classe Object

Ainsi, toute classe hérite d’emblée des méthodes de la classe Object

Page 4: Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages

Méthodes de la classe Méthodes de la classe Object 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 l’objet. 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 l’adresse de stockage (=> redéfinir)

...

Page 5: Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages

Exemple

La classe Point contient tout ce qu'il y a de commun à PointColore et Point3D

Point contient la gestion de l’abscisse et de l’ordonnée PointColore ne contient que ce qu'il y a de spécifique en

plus : la couleur Point3D: le troisième axe

Point

PointColore Point3D

Page 6: Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages

Objectif de l'héritageObjectif 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

Page 7: Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages

Usage de l'héritage Usage de l'héritage (suite)(suite)

Un objet de type PointColore peut utiliser toutes les méthodes de la classe Point

Il doit disposer d’une 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.

Page 8: Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages

Exemple : une classe Exemple : une classe PointPoint

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);}

}

Page 9: Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages

Exemple : classe Exemple : classe PointCol (oré)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<Point> lesPoints;

Page 10: Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages

Bilan sur l’héritageUsage du superUsage de protected : visibilité identique des

variables d’instances 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 d’acces aux spécificités)

On ne peut pas mettre des Point dans des Points colorés

Page 11: Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages

Livraison d’un projet

Page 12: Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages

Usage d’un 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 l’implémentation.

Ils doivent uniquement connaître : La façon d’installer et d’exécuter Les fichiers .class et leur emplacement Et la documentation de l’interface de la classe : javadoc

à destination des développeurs qui doivent faire évoluer votre code: ils doivent connaître l’implémentation.

Livraison des .java Et Documentation de l’implémentation de la classe : UML, cahier

des charges, spécifications détaillées, commentaires dans le code

Page 13: Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages

Livraison

Rappel Javadoc

Page 14: Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages

Javadoc et classe POUR UNE CLASSE

Class comment: /** * The Responder class represents a response * generator object. It is used to generate an * automatic response. * * @author Michael Kölling and David J. Barnes * @version 1.0 (1.Feb.2002) */

Page 15: Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages

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. * * @param prompt A prompt to print to screen. * @return A set of Strings, where each String is * one of the words typed by the user */ public HashSet getInput(String prompt) { ... }

Page 16: Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages

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 http://java.sun.com/j2se/javadoc/

writingdoccomments/

Page 17: Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages

Livraison

Rappel sur les tests

Page 18: Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages

Un Main pour les Tests

Exemple : Pour tester la classe ClasseATesterEcrire le contenu du main dans une classe TestDEClasseAtester (condition réelle de l’usage) de sorte

qu’il y ait:

Création d’instances 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

Page 19: Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages

Comment faire et utiliser des packages?

Page 20: Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et 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 ?

Page 21: Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages

Comment travaille-t-on avec des packages ?

Les classes d’un package (bibliothèque de classes) doivent être importées (comme des livres que l’on emprunte…) Utilisation de la clause import

Pour importer une seule classe : import java.util.ArrayList; Pour importer toutes les classes d’un 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 à l’aide des noms complets :

monnompackage.MaClasse ou autrenompackage.MaClasse

Page 22: Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages

Packaging d’un code Implication dans chaque classe de cette

bibliothèque package nompackage;

Instruction à ajouter au début des classes appartenant au package

Implication sur l’organisation 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

Page 23: Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages

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