CSI 1502 Principes fondamentaux de conception de logiciels

  • Slides: 29
Download presentation
CSI 1502: Principes fondamentaux de conception de logiciels Chapitre 12: Structures de données

CSI 1502: Principes fondamentaux de conception de logiciels Chapitre 12: Structures de données

Objectif d'apprentissage: Structures de données n n Quelques techniques pour l'organisation et la gestion

Objectif d'apprentissage: Structures de données n n Quelques techniques pour l'organisation et la gestion d'information Comprendre: n Collections dans Java n Type de donnée abstraite / Abstract Data Types (ADTs) n Structures dynamiques et listes chaînées n Structures de données linéaires: queues et piles 2

Qu'est-ce une Collection? n n Une collection est un objet qui sert à stocker

Qu'est-ce une Collection? n n Une collection est un objet qui sert à stocker autres objets, n e. g. collection d'étudiants, CD, magazines, nourriture Une collection offre des services tels que l'addition, l'enlèvement, et la gestion des éléments qu'elle contient n Parfois les éléments dans une collection sont ordonnés, parfois ils ne sont pas n Parfois les collections sont homogènes, parfois elles sont hétérogènes 3

Abstract Data Types: Implementing a collection n n Un type de donnée abstraite (ADT)

Abstract Data Types: Implementing a collection n n Un type de donnée abstraite (ADT) est n une collection d'information organizée et n un ensemble d'opérations utilisé pour gérer cette information L'ensemble d'opérations définit l'interface à l'ADT On implémente un ADT utilisant une structure de donnée dynamique n Une structure de donnée dynamique grandit et rétrécit lors de l'exécution comme nécessaire n Une structure de donnée dynamique est implémentée avec des chaînes Question: Est-ce qu'un Array est une structure de donnée dynamique? 4

Références d'objet: Utilisé pour les ADTs n n Une référence d'objet est une variable

Références d'objet: Utilisé pour les ADTs n n Une référence d'objet est une variable qui stocke l'adresse de l'objet n Une référence peut être appelé un pointeur Les références sont souvent représentées comme diagramme: student John Smith 40725 3. 58 Student john = new Student(“John Smith…”); 5

Références d'objet comme chaînes n Supposons que la classe Student contient une référence à

Références d'objet comme chaînes n Supposons que la classe Student contient une référence à un autre objet Student John Smith 40725 3. 57 Jane Jones 58821 3. 72 class Student { STRecord info; // info about the student Student next; // link to another Student object } Student john = new Student(“John Smith…”, null); Student jane = new Student(“Jane Jones. . ”, null); john. next = jane; 6

Références comme chaînes: La liste chaînée n Les références peuvent être utilisé pour créer

Références comme chaînes: La liste chaînée n Les références peuvent être utilisé pour créer une variété de structures chaînées, tel qu'une liste chaînée: student. List 7

Le contenu des noeuds (nodes) intermédiaires n n n Les objets stockés ne devraient

Le contenu des noeuds (nodes) intermédiaires n n n Les objets stockés ne devraient pas avoir besoin de se concerner des détailles des structures de données dans lesquelles ils sont stockés n Par exemple, la classe Student ne devrait pas avoir besoin de stocker le lien ou la chaîne au prochain objet Student object dans la liste Au lieu, on peut utiliser des classes noeuds (node class) séparées avec deux parties: n 1) une référence à un objet indépendant et n 2) un lien au prochain noeud dans la liste La représentation interne devient une liste chaînée de noeuds 8

Exemple: Une Collection de Magazines n n n Voici un exemple d'une collection d'objet

Exemple: Une Collection de Magazines n n n Voici un exemple d'une collection d'objet Magazine La collection est gérée par la classe Magazine. List, qui contient une classe interne nommée Magazine. Node Puisque Magazine. Node est private à Magazine. List, les méthodes de Magazine. List peuvent accéder directement aux informations de Magazine. Node sans violer l'encapsulation info next 9

Magazine. Rack. java public class Magazine. Rack { // Creates a Magazine. List object,

Magazine. Rack. java public class Magazine. Rack { // Creates a Magazine. List object, adds several magazines to the // list, then prints it. public static void main (String[] args) { Magazine. List rack = new Magazine. List(); rack. add (new Magazine("Time")); rack. add (new Magazine("Woodworking Today")); rack. add (new Magazine("Communications of the ACM")); rack. add (new Magazine("House and Garden")); rack. add (new Magazine("GQ")); } } System. out. println (rack); 10

Magazine. List. java public class Magazine. List { private Magazine. Node list; // Sets

Magazine. List. java public class Magazine. List { private Magazine. Node list; // Sets up an initially empty list of magazines. Magazine. List() { list = null; } Continued…. 11

Magazine. List. java // Creates a new Magazine. Node object and adds it to

Magazine. List. java // Creates a new Magazine. Node object and adds it to the end of the linked list. public void add (Magazine mag) { Magazine. Node node = new Magazine. Node (mag); Magazine. Node current; if (list == null) list = node; else { current = list; while (current. next != null) current = current. next; current. next = node; } } // we are at the list’s beginning // walk through the list to the end 12 Continued….

Magazine. List. java // Returns this list of magazines as a string. public String

Magazine. List. java // Returns this list of magazines as a string. public String to. String () { String result = ""; Magazine. Node current = list; while (current != null) { result += current. magazine + "n"; current = current. next; } } return result; Continued…. 13

Magazine. List. java public class Magazine. List // An inner class that represents a

Magazine. List. java public class Magazine. List // An inner class that represents a node in the magazine list. // The public variables are accessed by the Magazine. List class. private class Magazine. Node { public Magazine magazine; public Magazine. Node next; } } //-------------------------------// Sets up the node //-------------------------------public Magazine. Node (Magazine mag) { magazine = mag; next = null; } 14

Magazine. java public class Magazine { private String title; //--------------------------------// Sets up the new

Magazine. java public class Magazine { private String title; //--------------------------------// Sets up the new magazine with its title. //--------------------------------public Magazine (String new. Title) { title = new. Title; } } //--------------------------------// Returns this magazine as a string. //--------------------------------public String to. String () { return title; } 15

Collection Magazine n Une méthode appelée insert peut être défini pour ajouter un noeud

Collection Magazine n Une méthode appelée insert peut être défini pour ajouter un noeud n'importe où dans la liste, pour la garder trié, par exemple info next newnode info next 16

Collection Magazine n Une méthode appelée delete peut être défini pour enlever un noeud

Collection Magazine n Une méthode appelée delete peut être défini pour enlever un noeud de la liste info next 17

Autres représentations pour listes dynamiques n Parfois c'est convénient d'implémenter une liste comme une

Autres représentations pour listes dynamiques n Parfois c'est convénient d'implémenter une liste comme une liste chaînée double, avec des références next et previous list 18

Autres implémentations pour listes dynamiques n Parfois c'est convénient d'utiliser un header node séparé,

Autres implémentations pour listes dynamiques n Parfois c'est convénient d'utiliser un header node séparé, avec un count et des références à la tête (front) et la queue (rear) de la liste list count: 4 front rear 19

Autres implémentations pour listes dynamiques n n n Une liste chaînée peut être une

Autres implémentations pour listes dynamiques n n n Une liste chaînée peut être une liste circulaire, où le dernier élément de la liste est lié au premier élément de la liste Si la liste chaînée est doublement chaînée, le premier élément dans la liste est aussi lié au dernier élément de la liste Choix pour faire les liens: n La représentation doit n faciliter les opérations et n les rendre facile à implémenter 20

Autres structures de donnée classiques n n n Structures de donnée linéaires classiques, les

Autres structures de donnée classiques n n n Structures de donnée linéaires classiques, les queues et les piles Structures de donnée non-linéaires classiques, y compris les arbres, les arbres binaires, les graphes et les digraphes CSI 2514 présente les structures de donnée en plus de détailles 21

Structure de donnée linéaire 2: Queues n n n Une queue est similaire à

Structure de donnée linéaire 2: Queues n n n Une queue est similaire à une liste mais ajoute des éléments seulement à la fin de la liste et enlève des éléments seulement au début de la liste Ce s'appelle une structure de donnée FIFO: First-In, First. Out Analogie: n une ligne d'attente à la banque Utilisé très souvent dans les systèmes opérationnelles Les queues sont souvent utiles dans les simulations ou les situations où des éléments sont sauvegardés en attendant d'être traité enqueue dequeue 22

Queues (suite) n n On peut définir des opérations pour la queue n enqueue

Queues (suite) n n On peut définir des opérations pour la queue n enqueue - ajoute un élément à la fin de la queue n dequeue (ou serve) - enlève un élément du début de la queue n empty - retourne vrai (true) si la queue est vide Une queue peut être représenté par une liste chaînée simple (singly-linked list); c'est plus performant si les références sont liées du début vers la fin de la queue 23

Structure de donnée linéaire 2: Piles n n n Un type de donnée abstraite

Structure de donnée linéaire 2: Piles n n n Un type de donnée abstraite pile est aussi linéaire, comme une liste ou une queue Les éléments sont ajoutés et enlevés d'un bout de la pile seulement C'est donc LIFO: Last-In, First-Out push n pop Analogies: n une pile d'assiettes dans un placard, n une pile de factures à payer, n ou une pile de balles de foin dans une grange 24

Piles (suite) n n n Quelques opérations pour les piles: n push - ajoute

Piles (suite) n n n Quelques opérations pour les piles: n push - ajoute un élément au sommet de la pile n pop - enlève un élément du sommet de la pile n peek (or top) - extrait l'élément au sommet de la pile sans l'enlever de la pile n empty - retourne vrai (true) si la pile est vide Le package java. util contient une classe Stack Voir Decode. java (page 649) 25

Decode. java import java. util. Stack; import cs 1. Keyboard; public class Decode {

Decode. java import java. util. Stack; import cs 1. Keyboard; public class Decode { // Decodes a message by reversing each word in a string. { public static void main (String[] args) Stack word = new Stack(); String message; int index = 0; System. out. println ("Enter the coded message: "); message = Keyboard. read. String(); System. out. println ("The decoded message is: "); Continued… 26

Decode. java (cont) while (index < message. length()) { // Push word onto stack

Decode. java (cont) while (index < message. length()) { // Push word onto stack while (index < message. length() && message. char. At(index) != ' ') { word. push (new Character(message. char. At(index))); index++; } } // Print word in reverse while (!word. empty()) System. out. print (((Character)word. pop()). char. Value()); System. out. print (" "); index++; System. out. println(); Enter the coded message: Hello world The decoded message is: olle. H dlrow 27

Structures de donnée en Java: Classes Collection n La librairie standard de Java contient

Structures de donnée en Java: Classes Collection n La librairie standard de Java contient plusieurs classes pour représenter des collections, souvent référé comme Java Collections API n n Leur implémentation est sous-entendue dans les noms de classes tels que Array. List et Linked. List Plusieurs interfaces sont utilisées pour définir les opérations sur les collections, telles que List, Set, Sorted. Set, Map, et Sorted. Map 28

Sommaire: Chapitre 12 n Comprendre: n Collections dans Java n Type de donnée abstraite

Sommaire: Chapitre 12 n Comprendre: n Collections dans Java n Type de donnée abstraite / Abstract Data Types (ADTs) n Structures dynamiques et listes chaînées n Structures de donnée linéaires: queues et piles 29