algoSuite2009

publicité
Au programme du jour ….
Un peu plus de structures de données
Un peu plus d’algorithmique : la récursivité
Livraison de code

Organisation des répertoires et packages
Piles et Files

Ordonnancements particuliers des
éléments d'un tableau ou d'une liste

Pile : empiler/dépiler des éléments
 statique
ou dynamique selon qu'on
utilise un tableau ou une liste

File : enfiler /défiler des éléments
 implémentation
IPA – Catherine Faron Zucker
par liste plus simple
2
Piles
public class Pile{
private Object[] table;
private int hauteur;
public void empiler(Object o)
{table[hauteur]=o; hauteur++;}
public Object depiler()
{hauteur--; return table[hauteur];}
public Object sommet(){}
public boolean vide(){}
public boolean pleine(){}
IPA – Catherine Faron Zucker
}
3
Files
public class File{
private ArrayList<Object> liste;
private int longueur;
public void enfiler(Object o)
{liste.add(o); longueur++;}
public Object defiler()
{longueur--; return liste.remove(0);}
public Object tete(){}
public Object queue(){}
public boolean vide(){}
IPA – Catherine Faron Zucker
}
4
Maps

collection de paires d'objets, de taille
variable
HashMap<String,String> surnoms;
surnoms = new HashMap<String,String>();

paires clé/valeur, clés uniques

ajout d'un couple clé/valeur :
surnoms.put(“tartampion”, “dupont”);

suppression d'un couple clé/valeur :
surnoms.remove(“tartampion”);
IPA – Catherine Faron Zucker
5
Maps

plus de premier, dernier, i ième élément,
récupération d'une valeur associée à une
clé : String nom = surnoms.get(“tartampion”);

récupération directe de

la valeur associée à une clé : get

de l'information de présence/absence

d'une valeur: surnom.containsKey(“dupont”);

d'une clé : surnom.containsValue(“tartampion”);
IPA – Catherine Faron Zucker
6
Sets

ensemble non ordonné d'objets, de taille
variable
HashSet<String> surnoms;
surnoms = new HashSet<String>();

ajout d'un élément : surnoms.put(“tartampion”);

suppression : surnoms.remove(“tartampion”);

test direct de la présence d'un élément :
surnoms.contains(“tartampion”);
IPA – Catherine Faron Zucker
7
Maps et Sets

Les structures de Maps et de Sets ne supportent
que les opérations de dictionnaire:
insérer, rechercher, supprimer

HashMap et HashSet sont des implémentations à
base de tables de hachage qui permettent de
réduire le coût de ces opérations.
à suivre...
IPA – Catherine Faron Zucker
8
Structures de données

listes chaînées : cf. td

simplement, doublement

arbres

arbres binaires

arbres binaires de recherche

graphes
à suivre...
IPA – Catherine Faron Zucker
9
Attention
types primitifs / Objets
Les wrappers
Les classes « enveloppe » (1)
Problème : les types de base (int, float,
double, boolean… ne sont pas des
objets)
 On ne peut pas les stocker tels quels
dans les conteneurs
 C’est à cela que servent les classes
enveloppes (Wrappers)

Les classes « enveloppe » (2)
Permettent de représenter des types de
base sous forme d’objets
 int entier => Integer n
 Integer n = new Integer(entier);
 entier = n. intValue();
 double =>Double, boolean =>
Boolean…
 intValue(), doubleValue() ...

Conception d’algorithmes
Itératif / récursif
Conception d'un algorithme

Stratégie de résolution d'un problème

Approche incrémentale


itérer jusqu'à obtention du résultat souhaité
Approche récursive

diviser pour régner:

diviser en sous-problèmes

régner sur les sous-problèmes

14
combiner les solutions
des sous-problèmes
IPA – Catherine Faron Zucker
PGCD(a, b) itératif
n <- a; m <- b;
TantQue m != 0 Faire
r <- n mod m
n <- m
m <- r
FinTantQue
retourner n
IPA – Catherine Faron Zucker
PGCD(a, b) récursif

diviser: pgcd(a,b) = pgcd(b, a mod b)
semblable au problème initial
de taille moindre

régner: pgcd(a,0) = a

combiner: pgcd(a,b)= pgcd(b,a mod b)=...
IPA – Catherine Faron Zucker
PGCD(a, b) récursif
Si b=0
Alors retourner a //terminaison
Sinon retourner pgcd(a, a mod b)
finSi
IPA – Catherine Faron Zucker
Fac(n)

Relation de récurence
fac(n) = n * fac(n-1), n>0
fac(0) = 1

Algorithme
Si n = 0
Alors retourner 1
Sinon retourner n * fac(n-1)
FinSi
IPA – Catherine Faron Zucker
Fac(n)
Complexité

opération élémentaire : *

nbre de fois où elle est effectuée

fonction de n: M(n)

relation de récurence:
M(n) = 1 + M(n-1) pour n>0 et M(0) = 0
en développant, on a M(n) = M(n-i) – i pour tout i
pour i=n, on obtient M(n) = M(O) + n = n
cf. module Maths discrètes
IPA – Catherine Faron Zucker
Tours de Hanoï

n disques de tailles décroissantes sur une
tige

Problème: comment faire passer les n
disques sur une autre tige, en utilisant une
tige intermédiaire afin qu'un disque ne soit
jamais empilé sur un plus petit?
IPA – Catherine Faron Zucker
Tours de Hanoï

Algorithme (récursif):

faire passer n-1 disques sur la tige 2

faire passer le plus grand disque sur la tige
3

reste à faire passer les n-1 disques de t2 à
t3
IPA – Catherine Faron Zucker
Tours de Hanoï

Complexité

on compte le nbre de déplacements

il est fonction du nombre de disques

M(n) = M(n-1) + 1 + M(n-1) pour n>1 et
M(1)=1

M(n) = 2*M(n-1)+1 = ... = 2n -1 (algo
exponentiel)
IPA – Catherine Faron Zucker
Recherche dichotomique

Version itérative vue en TD

Version récursive ?
IPA – Catherine Faron Zucker
Livraison d’un projet
Pour vos futurs rendus
Usage de votre code



Votre code est destiné à être utilisé
VOUS DEVEZ Documenter votre code
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
Livraison
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.
*
* @author Michael Kölling and David J. Barnes
* @version 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.
*
* @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)
{
...
}
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/writingdoccommen
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 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
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 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
Packaging de votre 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
Packaging de votre code et compilation
ATTENTION
A LA COMPILATION D’UNE CLASSE
Les classes utilisées doivent être déjà compilées et visibles
ORDRE de Compilation important
VISIBILITE importante
Désignation des répertoires où sont stockés les classes possibles
VARIABLE D’ENVIRONNEMENT : CLASSPATH
OPTION DE COMPILATION ET D’EXECUTION : -cp
AUTRE OPTION PRATIQUE -d
Packaging de votre code

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
Cours en ligne
http://users.polytech.unice.fr/~pinna/Java/
Cours
Cours
Cours
Cours
Intro : IntroJava2009.ppt
2 : Cours2Java2009.PPT
Algo : algo2009.ppt
Algo suite : algoSuite2009.ppt
Téléchargement