CSI 1502 Principes fondamentaux de conception de logiciels

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Au programme du jour …. Un peu plus de structures de données
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Hiver 2005Maj JGA Beaulieu & Capt MWP LeSauvage GEF 243B Programmation informatique appliquée Types, variables et constantes.
GEF 243B Programmation informatique appliquée Types dérivés, structures et tableaux §
Approfondissement du langage
(Classes prédéfinies – API Java)
Programmer en JAVA par Tama
Algorithme et structure de données
JAV - TD 6 Structures de données JAVA
Les attributions de valeur (le signe =). Dans cette présentation, nous allons tenter de représenter ce qui se passe dans la mémoire de lordinateur quand.
Algorithme et programmation
Principes de programmation (suite)
Structures collectives en Java
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
POO-L3 H. Fauconnier1 Tableau et héritage Y[] yA=new Y[3]; X[] xA=yA; //ok xA[0]=new Y(); xA[1]=new X(); //non xA[1]=new Z(); //non Object XX[]int[] YZY[]Z[]
1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Résumé du cours précédent.
Introduction à la programmation (Java)
Langage Oriente Objet Cours 2.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Structures de données IFT-2000
Révision des notions OO et Java Semaine 1 Jian-Yun Nie.
Une nouvelle structure de données : les tableaux
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
1 PHP 1.Langage PHP 1.1. Types de base, variables et constantes 1.2. Opérateurs et expressions 1.3. Instructions 1.4. Fonctions 2.Accès aux bases de données:
IFT 6800 Atelier en Technologies d’information
1 Les paquetages («packages»). 2 L'objectif avec les paquetages («packages») est de rendre accessibles aux utilisateurs des classes définies par d'autres.
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
COURS DE PROGRAMMATION ORIENTEE OBJET :
COURS DE PROGRAMMATION ORIENTEE OBJET :
Standard Template Library
CSI 1502 Principes fondamentaux de conception de logiciels
CSI1502 Principes fondamentaux en conception des logiciels
Java, les objets : tout de suite ! Rassembler, grouper les objets
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
Tableaux Introduction aux tableaux à une dimension. Déclaration, stockage, initialisation et accès en lecture ou en écriture aux composantes d’un tableau.
Structures de données IFT-2000
Une introduction à Java
Les méthodes en java • Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. • Une méthode pour être utilisée.
Animateur : Med HAIJOUBI
Cours 7 Divers et exceptions. Chapitre V Enumeration, tableaux, conversion de types, noms.
4 Introduction des objets. Les chaînes et tableaux
Programmation en Java Tableaux NGUYEN Thi Minh Tuyen
Cours 61 6 La sécurité, Portée, Visibilité Programmer avec sécurité.
Cours 9 Exceptions (fin) Généricité. POO-L3 H. Fauconnier2 Chaînage d'exceptions  Une exception peut être causée par une autre.  il peut être utile.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 6 – Exceptions.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 1 – Objets et Classes Master 1 SIGLIS1Java Lecteur - Chapitre 1 Objets et classes.
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
Réaliser par: Sadok Amel Cheboui hassiba
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 3 – Classes et objets en Java Master 1 SIGLIS1 Java Lecteur - Chapitre 3 Classes et objets en Java.
Strings et Tableaux en Java
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
CSI 1502 Principes fondamentaux de conception de logiciels
Cours LCS N°4 Présenté par Mr: LALLALI
IUT du Limousin L.U.P Michel Vergnaud Programmation Objet - Java.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Les bases de l’algorithmique
Philippe Gandy - 22 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Philippe Gandy – 10 novembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Philippe Gandy – 17 novembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
BlueJ_III 1 Java, les objets : tout de suite ! Interaction entre objets Notes de cours associées au chapitre 3 tutorial BlueJ
LES CLASSES ET LES OBJETS
C++ BY AURÉLIEN MODULO MARION. PLAN DES TROIS PRÉSENTATIONS C++ avancé C++ orienté objet Bases de C++
Chapitre 6: Tableaux et Vecteurs Présentation pour Java Software Solutions Foundations of Program Design Second Edition by John Lewis et William Loftus.
Université Paul Sabatier - Toulouse 3 Accueil des nouveaux personnels – Promotion 2007 IUT A – Service Direction – 19 août Chapitre 1 Structures.
Transcription de la présentation:

CSI 1502 Principes fondamentaux de conception de logiciels Chapitre 6: Tableaux de données

Objectifs d'apprentissage: Tableaux de données Comprendre comment faire les activités suivantes: Declarer et utiliser des tableaux de données Passer des tableaux de données et des éléments de tableaux de données comme paramètres Declarer et utiliser des tableaux d'objets Trier les éléments dans un tableau: Tri par sélection et tri par insertion Partie B: Après la semaine d'étude Tableaux à plusieurs dimensions La classe ArrayList Polygones et polylignes; types de bouton

Tableaux de données: Liste ordonnée de valeurs Le tableau en entier a un nom Chaque valeur a un index numérique 0 1 2 3 4 5 6 7 8 9 79 87 94 82 67 98 87 81 74 91 notes Un tableau de taille N est indexé de zéro à N-1 Ce tableau contient 10 valeurs qui sont indexées de 0 à 9

Tableaux de données (suite) On réfère à une valeur particulière dans le tableau à l'aide du nom du tableau suivi par l'index entre paranthèses carrées Par exemple, the expression notes[2] réfère à la valeur 94 (qui est la 3ieme valeur dans le tableau) Dans Java, le tableau est un objet Alors le nom du tableau est une variable référence à un objet, et le tableau doit être instancier

Exemples de tableaux notes[2] = 89; int premier = 5; notes[premier] = notes[premier] + 2; moyenne = (notes[0] + notes[9])/2; System.out.println ("Max = " + notes[5]);

Tableaux de données (suite) Un tableau contient plusieurs valeurs du même type Ce type peut être un type primitif ou une référence à object Alors, on peut créer un tableau d'entiers, ou un tableau de caractères, ou un tableau d'objets String, etc. Le tableau notes peut être déclaré comme suit int[] notes = new int[10];

Declarer des tableaux: Exemples float[] prix = new float[500]; boolean[] drapeaux; drapeaux = new boolean[20]; char[] codes = new char[1750];

Vérification de bornes: Vérification d'erreurs Lorsqu'un tableau est créé, il est de taille fixe Un index utilisé dans une référence de tableau doit spécifier un élément valide Voulant dire, l'index doit être dans les bornes (0 à N-1) L'interpréteur Java déclenche l'exception ArrayIndexOutOfBoundsException si l'index du tableau est hors des bornes Ceci est la vérification de bornes automatisée

Vérification de bornes: Un exemple Par exemple, si un tableau codes contient 100 valeurs, il peut seulement être indexé de 0 à 99 Si compteur a la valeur 100, alors la référence qui suit va déclencher une exception: System.out.println (codes[compteur]); Il est commun d'introduire des erreurs off-by-one quand on utilise des tableaux problême for (int index=0; index <= 100; index++) codes[index] = index*50 + epsilon;

Vérification de bornes : Utiliser length Chaque objet tableau a une constante publique appelée length qui stocke la taille du tableau Elle est référencée utilisant le nom du tableau (comme tout autre objet): notes.length Notez que length contient le nombre d'éléments, et non pas le plus grand index, i.e., la valeur de length est plus grand index + 1

Vérification de bornes: Extrait de ReverseOrder.java (p.325) { double[] numbers = new double[10]; System.out.println(“Size :” + numbers.length); for (int index = 0; index < numbers.length; index++) { System.out.println(“Enter number “ + (index + 1) + “ : “); numbers[index] = Keyboard.readDouble()); } // print in reverse order for (int index = numbers.length-1; index >= 0; index--) System.out.println(numbers[index] + “ “);

Syntaxe alternative pour la déclaration de tableau: Pas nécessaire! Les paranthèses carrées du type de tableau peuvent être associé au type d'élément ou au nom du tableau Alors les deux déclarations suivantes sont équivalentes: float[] prix; float prix[]; Le premier format est généralement plus lisible!!!

Listes d'initialisation: Affecter des valeurs Notez que lorsqu'on utilise une liste d'initialisation: l'opérateur new n'est pas utilisé la taille n'est pas spécifié La taille du tableau est déterminée par le nombre de valeurs dans la liste d'initialisation Une liste d'initialisation peut seulement être utilisé lors de la déclaration d'un tableau char[] letterGrades = {‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’};

Listes d'initialisation : Extrait de Primes.java (p.330) … int[] primeNums = {2, 3, 5, 7, 11, 13, 17, 19}; System.out.println(“Array length :” + primeNums.length); System.out.println(“The first prime numbers”); for (int scan = 0; scan < primeNums.length; scan++) System.out.println(primeNums[scan] + “ “);

Utiliser les tableaux comme paramètres Un tableau en entier peut être passé comme paramètre à une méthode Comme tout autre objet, la référence au tableau est passée, qui a comme effet que les paramètres formels et actuels sont des alias Changer un élément dans le tableau à l'intérieur de la méthode va changer l'original Un élément de tableau peut être passé à une méthode aussi, mais suit les règles de passage de paramètres qui applique au type de cet élément

Utiliser les tableaux d'objets La déclaration suivante réserve de l'espace pour 25 références à des objets de type String String[] words = new String[25]; Mais ne crée pas les objets String comme tel Chaque objet stocké dans un tableau doit être instancié séparément Voir GradeRange.java (page 332)

Tableaux d'objets : Extrait de GradeRange.java (pp.332) … int[] cutoff = {95, 90, 87, 83, 80}; String[] grades = (‘A+’, ‘A’, ‘A-’, ‘B+’, ‘B’); for (int level = 0; level < cutoff.length; level++) System.out.println(grades[level] + “ “ + cutoff[level]); Output A+ 95 A 90 A- 87 B+ 83 B 80

Arguments de ligne de commande: A propos Main (finalement!) La signature de la méthode main indique qu'elle prend un tableau d'objets String comme paramètre Ces valeurs parviennent des arguments de ligne de commande qui sont fournit lorsque l'interpréteur est invoqué Par exemple, l'exécution de la commande suivante passe un tableau de trois objets String à main: > java DoIt pennsylvania texas california Ces chaînes de caractères sont stockées dans le paramètre aux indexes 0-2

A propos Main (String[] args): NameTag.java (p.334) public class NameTag { public static void main (String[] args) System.out.println(); System.out.println(“ “ + args[0]); System.out.println(“My name is “ + args[1]); } > java NameTag Hello Sue Hello My name is Sue > java NameTag Hello James My name is James

Utiliser les tableaux d'objets Des objets peuvent avoir des tableaux comme variables d'instance Alors, plusieurs structures utiles peuvent être créé avec des tableaux et des objets Le concepteur de logiciel doit déterminer soigneusement une organisation des données et des objets qui est applicable à la situation Voir CD Collection example, p.335, 337-338

Programme CD Collection: diagramme UML Tunes CDCollection - collection : CD[] - count: int - totalCost: double + main (args : String[]) : void 1 + addCD (title: String, artist: String, cost: double, tracks:int): void + toString( ): String - increaseSize(): void CD n - title : String - artist : String - cost : String - tracks : int + toString() : String

Exemple CD Collection: Tunes.java (Programme pilote) public class Tunes { public static void main (String[] args) { CDCollection music = new CDCollection(); music.addCD("So far so good", "Bryan Adams", 14.96, 14); music.addCD("Enrique", "Enrique Iglesias", 15.96, 13); System.out.println(music); } }

Exemple CD Collection: CDCollection.java public class CDCollection { private CD[] collection; private int count; private double totalCost; public CDCollection() // the constructor { collection = new CD[100]; count = 0; totalCost = 0.0; } //Adds a CD to the collection public void addCD(String title, String artist, double cost, int tracks) { if (count == collection.length) increaseSize(); collection[count] = new CD(title, artist, cost, tracks); totalCost += cost; count++; } Suite..

Exemple CD Collection: CDCollection.java (suite) // double the size of the collection private void increaseSize() { CD[] temp = new CD[collection.length * 2]; for (int cd = 0; cd < collection.length; cd++) temp[cd] = collection[cd]; collection = temp; } public String toString() { String report = " "; for (int cd = 0; cd < count; cd++) report += collection[cd].toString() + "\n"; return report; } }

Exemple CDCollection: CD.java public class CD { private String title, artist; private double cost; private int tracks; // The constructor public CD (String name, String singer, double price, int numTracks) { title = name; artist = singer; cost = price; tracks = numTracks; } // the toString for printing public String toString() { String description; description = title + "\t" + artist; return description; } }

Tri de tableaux Le triage est le processus d'ordonner une liste d'éléments Il y a plusieurs algorithmes pour trier une liste d'élements Ces algorithmes peuvent varier en performance Nous allons examiner deux algorithmes spécifiques: Tri par sélection Tri par insertion

Tri par sélection: En général L'approche pour le tri par sélection: Choisissez un item et placez-le dans sa position finale dans le tableau trié Répétez pour tous les autres items En plus de détailles: Trouvez le plus petit item dans la liste Échangez-le avec l'item dans la 1ere position Trouvez le prochain plus petit item dans la liste Échangez-le avec l'item dans la 2e position Répétez jusqu'à ce que tous les items soient dans la bonne ordre

Tri par sélection: La méthode Selection Sort Un exemple: original: 3 9 6 1 2 smallest is 1: 1 9 6 3 2 smallest is 2: 1 2 6 3 9 smallest is 3: 1 2 3 6 9 smallest is 6: 1 2 3 6 9 Voir SortGrades.java (page 342) Voir Sorts.java (page 343) -- la méthode selectionSort

Tri par sélection: La méthode selectionSort public static void selectionSort (int[] numbers) { int min, temp; for (int index = 0; index < numbers.length – 1; index++) min = index; for (int scan = index+1; scan < numbers.length; scan++) if (numbers[scan] < numbers[min]) min =scan; // Swap the values temp = numbers[min]; numbers[min] = numbers[index]; numbers[index] = temp; }

Tri par insertion: En général L'approche pour le tri par insertion: Choisissez un item et insérez-le dans la sous-liste triée dans la bonne ordre Répétez jusqu'à ce que tous les items soient insérés En plus de détailles: Considérez le 1er item comme étant la sous-liste triée (avec un item) Insérez le 2e item dans la sous-liste triée, en faisant décaler le 1er item si nécessaire pour pouvoir insérer le nouvel item Insérez le 3e item dans la sous-liste triée (de deux items), en faisant décaler les items comme nécessaire Répétez jusqu'à ce que tous les items soient insérés dans la bonne ordre

Tri de tableaux: Tri par insertion Un exemple: original: 3 9 6 1 2 insert 9: 3 9 6 1 2 insert 6: 3 6 9 1 2 insert 1: 1 3 6 9 2 insert 2: 1 2 3 6 9 Voir Sorts.java (page 343) -- la méthode insertionSort

Tri par insertion: La méthode insertionSort public static void insertionSort (int[] numbers) { for (int index = 1; index < numbers.length; index++) int key = numbers[index]; int position = index; while (position > 0 && numbers[position – 1] > key) numbers[position] = numbers[position – 1]; position --; } numbers[position] = key;

Comparaison de tri: Sélection et insertion Les tris par sélection and par insertion sont similaires en performance Ces deux tris ont une boucle extérieure qui fait l'analyse de tous les éléments et une boucle intérieure qui compare la valeur de la boucle extérieure avec presque toutes les valeurs de la liste Alors, il faut environ n2 comparaisons pour obtenir une liste triée de taille n Nous disons donc que ces tris sont d'ordre n2 Il y a autres tris qui sont plus efficaces: order n log2 n

Tri d'objets: Un exemple L'ordre d'une collection d'objets doit être défini par la personne qui définie la classe Rappelez-vous qu'une interface Java peut être utilisé pour guarantir qu'une classe particulière implémentera des méthodes particulières On peut utiliser l'interface Comparable et la méthode CompareTo pour développer un tri générique pour un ensemble d'objets Voir SortPhoneList.java et Contact.java (page 347-348)