La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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.

Présentations similaires


Présentation au sujet: "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."— Transcription de la présentation:

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 et packages

2 IPA – Catherine Faron Zucker2 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

3 IPA – Catherine Faron Zucker3 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(){} }

4 IPA – Catherine Faron Zucker4 Files public class File{ private ArrayList 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(){} }

5 IPA – Catherine Faron Zucker5 Maps collection de paires d'objets, de taille variable HashMap surnoms; surnoms = new HashMap (); 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);

6 IPA – Catherine Faron Zucker6 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);

7 IPA – Catherine Faron Zucker7 Sets ensemble non ordonné d'objets, de taille variable HashSet surnoms; surnoms = new HashSet (); 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);

8 IPA – Catherine Faron Zucker8 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...

9 IPA – Catherine Faron Zucker9 Structures de données listes chaînées : cf. td simplement, doublement arbres arbres binaires arbres binaires de recherche graphes à suivre...

10 Attention types primitifs / Objets Les wrappers

11 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 Cest à cela que servent les classes enveloppes (Wrappers)

12 Les classes « enveloppe » (2) Permettent de représenter des types de base sous forme dobjets int entier => Integer n Integer n = new Integer(entier); entier = n. intValue(); double =>Double, boolean => Boolean… intValue(), doubleValue()...

13 Conception dalgorithmes Itératif / récursif

14 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

15 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

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

17 IPA – Catherine Faron Zucker PGCD(a, b) récursif Si b=0 Alors retourner a //terminaison Sinon retourner pgcd(a, a mod b) finSi

18 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

19 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

20 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?

21 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

22 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) M(n-1) pour n>1 et M(1)=1 M(n) = 2*M(n-1)+1 =... = 2 n -1 (algo exponentiel)

23 IPA – Catherine Faron Zucker Recherche dichotomique Version itérative vue en TD Version récursive ?

24 Livraison dun projet Pour vos futurs rendus

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

26 Livraison Javadoc

27 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) */

28 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) {... }

29 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/

30 Livraison Rappel sur les tests

31 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

32 Comment faire et utiliser des packages ?

33 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 ?

34 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

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

36 Packaging de votre code et compilation ATTENTION A LA COMPILATION DUNE 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 DENVIRONNEMENT : CLASSPATH OPTION DE COMPILATION ET DEXECUTION : -cp AUTRE OPTION PRATIQUE -d

37 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

38 Cours en ligne Cours Intro : IntroJava2009.ppt Cours 2 : Cours2Java2009.PPT Cours Algo : algo2009.ppt Cours Algo suite : algoSuite2009.ppt


Télécharger ppt "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."

Présentations similaires


Annonces Google