au programme du jour …. un peu plus de structures de données un peu plus dalgorithmique : la...

38
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

Upload: francois-bouchard

Post on 03-Apr-2015

102 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

Au programme du jour ….Un peu plus de structures de donnéesUn peu plus d’algorithmique : la récursivité

Livraison de code Organisation des répertoires et packages

Page 2: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

IPA – Catherine Faron Zucker 2

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 par liste plus simple

Page 3: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

IPA – Catherine Faron Zucker 3

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(){}

}

Page 4: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

IPA – Catherine Faron Zucker 4

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(){}

}

Page 5: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

IPA – Catherine Faron Zucker 5

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

Page 6: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

IPA – Catherine Faron Zucker 6

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

Page 7: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

IPA – Catherine Faron Zucker 7

Sets

ensemble non ordonné d'objets, de taille variableHashSet<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”);

Page 8: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

IPA – Catherine Faron Zucker 8

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...

Page 9: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

IPA – Catherine Faron Zucker 9

Structures de données

listes chaînées : cf. td simplement, doublement

arbres arbres binaires arbres binaires de recherche graphes

à suivre...

Page 10: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

Attentiontypes primitifs / Objets

Les wrappersLes wrappers

Page 11: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

Les classes Les classes « enveloppe » (1)« 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)

Page 12: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

Les classes Les classes « enveloppe » (2)« 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() ...

Page 13: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

Conception d’algorithmes

Itératif / récursifItératif / récursif

Page 14: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

IPA – Catherine Faron Zucker

14

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 combiner les solutions des sous-problèmes

Page 15: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

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

Page 16: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

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)=...

Page 17: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

IPA – Catherine Faron Zucker

PGCD(a, b) récursif

Si b=0

Alors retourner a //terminaison

Sinon retourner pgcd(a, a mod b)

finSi

Page 18: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

IPA – Catherine Faron Zucker

Fac(n) Relation de récurence

fac(n) = n * fac(n-1), n>0

fac(0) = 1

AlgorithmeSi n = 0

Alors retourner 1

Sinon retourner n * fac(n-1)

FinSi

Page 19: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

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

Page 20: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

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?

Page 21: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

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

Page 22: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

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)

Page 23: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

IPA – Catherine Faron Zucker

Recherche dichotomique Version itérative vue en TD

Version récursive ?

Page 24: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

Livraison d’un projet

Pour vos futurs rendus

Page 25: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

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

Page 26: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

Livraison

Javadoc

Page 27: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

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 28: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

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 29: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

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 30: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

Livraison

Rappel sur les tests

Page 31: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

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 32: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

Comment faire et utiliser des packages?

Page 33: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

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 34: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

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 35: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

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

Page 36: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

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 : CLASSPATHOPTION DE COMPILATION ET D’EXECUTION : -cpAUTRE OPTION PRATIQUE -d

Page 37: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

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

Page 38: Au programme du jour …. Un peu plus de structures de données Un peu plus dalgorithmique : la récursivité Livraison de code Organisation des répertoires

Cours en lignehttp://users.polytech.unice.fr/~pinna/Java/

Cours Intro : IntroJava2009.pptCours 2 : Cours2Java2009.PPTCours Algo : algo2009.pptCours Algo suite : algoSuite2009.ppt