16
Types abstraits ? IFT2015 H2020 ? UdeM ? Miklós Csűrös T YPES ABSTRAITS ( DE DONNÉES )

TYPES ABSTRAITS DE DONNÉES - WordPress.com › 2020 › 01 › ift2015h20-01prez-tad.pdf(Java SE 1.6.0_51, 64 bits, MacOS) 24Ð40 24 24 8 (adresse m moire sur 64 bits) 8 4 8 4 2 2

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: TYPES ABSTRAITS DE DONNÉES - WordPress.com › 2020 › 01 › ift2015h20-01prez-tad.pdf(Java SE 1.6.0_51, 64 bits, MacOS) 24Ð40 24 24 8 (adresse m moire sur 64 bits) 8 4 8 4 2 2

Types abstraits ? IFT2015 H2020 ? UdeM ? Miklós Csűrös

TYPES ABSTRAITS (DE DONNÉES)

Page 2: TYPES ABSTRAITS DE DONNÉES - WordPress.com › 2020 › 01 › ift2015h20-01prez-tad.pdf(Java SE 1.6.0_51, 64 bits, MacOS) 24Ð40 24 24 8 (adresse m moire sur 64 bits) 8 4 8 4 2 2

Abstraction de données

Types abstraits ? IFT2015 H2020 ? UdeM ? Miklós Csűrös ii

Déf. Un type est un ensemble (possiblement infini) de valeurs et d’opérations surcelles-ci.

�type = domaine + opérations

Déf. Un type abstrait (TA) est un type accessible uniquement à travers une in-terface.

�TA = type + interface

client : le programme qui utilise le TAinterface : contrat entre client et l’implémentationimplémentation : le programmme qui spécifie le TA

? fondations : nombres, caractères, chaînes, . . .? objets : temps, fichier, forme géométrique, . . .? collections d’éléments � étudier les structures de données pour les implémenter

? graphes, réseaux � choisir la bonne structure pour son algorithme

Page 3: TYPES ABSTRAITS DE DONNÉES - WordPress.com › 2020 › 01 › ift2015h20-01prez-tad.pdf(Java SE 1.6.0_51, 64 bits, MacOS) 24Ð40 24 24 8 (adresse m moire sur 64 bits) 8 4 8 4 2 2

Java et Type Abstrait

Types abstraits ? IFT2015 H2020 ? UdeM ? Miklós Csűrös iii

� la philosophie orientée objet de Java est proche de notre abstraction� avec quelques différences

abstraction programmation OO (Java)

client code qui utilise le type (classe ou interface)

interface (contrat)

méthodes visibles (public/protected/) + variables (de classe et d'instance) visibles+ contrat dans la documentation (p.e., restrictions sur les arguments)

typevaleuropération

classe ou interfaceinstance (objet)méthode

implémentation classe

Page 4: TYPES ABSTRAITS DE DONNÉES - WordPress.com › 2020 › 01 › ift2015h20-01prez-tad.pdf(Java SE 1.6.0_51, 64 bits, MacOS) 24Ð40 24 24 8 (adresse m moire sur 64 bits) 8 4 8 4 2 2

Java et Type Abstrait

Types abstraits ? IFT2015 H2020 ? UdeM ? Miklós Csűrös iv

� la philosophie orientée objet de Java est proche de notre abstraction� avec quelques différences

? Java impose des contraintes de syntaxe sur la spécification de l’interface duTA (API = interface de programmation)

? clients avec droits différentspublic class C{

public void yksi (C arg){...} // tous les clientsprotected void kaksi(C arg){...} // sous-classes et même package

void kolme(C arg){...} // même package...

}

? l’interface abstrait du Java n’est pas l’interface (du TA) de notre défini-tion(p.e. il ne définit pas le syntaxe des constructeurs)

? implémentation et interface souvent dans le même fichier(la classe qui déclare et définit une méthode)

Page 5: TYPES ABSTRAITS DE DONNÉES - WordPress.com › 2020 › 01 › ift2015h20-01prez-tad.pdf(Java SE 1.6.0_51, 64 bits, MacOS) 24Ð40 24 24 8 (adresse m moire sur 64 bits) 8 4 8 4 2 2

Structure de données

Types abstraits ? IFT2015 H2020 ? UdeM ? Miklós Csűrös v

si on veut implanter un type abstrait :? il faut décider comment stocker la valeur

(pour une collection, «valeur» = ensemble d’éléments dans la collection),? il faut décider sur les algorithmes pour les opérations spécifiées par l’inter-

face,? et encoder l’atout (dans ce cours, en Java)� objet avec variables privées pour stocker la valeur� méthodes d’instance et de classe pour implanter les algorithmes

structure de données

= implémentation d’un type abstrait (collection)= spécification du stockage des données et des algorithmes qui performent les opé-rations

Page 6: TYPES ABSTRAITS DE DONNÉES - WordPress.com › 2020 › 01 › ift2015h20-01prez-tad.pdf(Java SE 1.6.0_51, 64 bits, MacOS) 24Ð40 24 24 8 (adresse m moire sur 64 bits) 8 4 8 4 2 2

File

Types abstraits ? IFT2015 H2020 ? UdeM ? Miklós Csűrös vi

File généralisée (TA) = collection d’éléments avec deux opérations :

1. injection d’un élément : ajouter / insérer / enfiler / empiler / . . .

2. éjection d’un élément : retirer / supprimer / défiler / dépiler / . . .

il existe beaucoup de variantes selon la politique d’injection/éjection, ainsi quel’interface pour le TA (= comment spécifie-t-on l’«élément» ?)

Page 7: TYPES ABSTRAITS DE DONNÉES - WordPress.com › 2020 › 01 › ift2015h20-01prez-tad.pdf(Java SE 1.6.0_51, 64 bits, MacOS) 24Ð40 24 24 8 (adresse m moire sur 64 bits) 8 4 8 4 2 2

Pile — abstraction

Types abstraits ? IFT2015 H2020 ? UdeM ? Miklós Csűrös vii

Le type abstrait pile (stack ) :abstraction d’une pile d’objets : empilés l’un sur l’autre, on ne peut accéder qu’àl’élément le plus récemment empilé

opérations du TA : «empiler» (push) et «dépiler» (pop)

push("premier"),push("2e"),push("dernier")pop() → dernier

pop() → 2e

pop() → premier

� la structure de données doit assurer la logique LIFO (last-in first-out) de push/pop

� on a le droit de stocker les éléments comme on veut car il n’y a pas d’autre opération d’accès

Page 8: TYPES ABSTRAITS DE DONNÉES - WordPress.com › 2020 › 01 › ift2015h20-01prez-tad.pdf(Java SE 1.6.0_51, 64 bits, MacOS) 24Ð40 24 24 8 (adresse m moire sur 64 bits) 8 4 8 4 2 2

Queue — abstraction

Types abstraits ? IFT2015 H2020 ? UdeM ? Miklós Csűrös viii

Le type abstrait queue ou file FIFO (queue en anglais) :abstraction de file d’attente : objets rangés un après l’autre, on peut enfiler à la finou défiler au début

opérations du TA : «enfiler» (enqueue) et «défiler» (dequeue)

enqueue("premier"), enqueue("2e"), enqueue("dernier")dequeue() → premier

dequeue() → 2e

dequeue() → dernier

� la structure de données doit assurer la logique FIFO (first-in first-out) de enqueue/dequeue

� on a le droit de stocker les éléments comme on veut car il n’y a pas d’autre opération d’accès

Page 9: TYPES ABSTRAITS DE DONNÉES - WordPress.com › 2020 › 01 › ift2015h20-01prez-tad.pdf(Java SE 1.6.0_51, 64 bits, MacOS) 24Ð40 24 24 8 (adresse m moire sur 64 bits) 8 4 8 4 2 2

Pile et queue

Types abstraits ? IFT2015 H2020 ? UdeM ? Miklós Csűrös ix

importance fondamentale en informatique

pile : permet de sauvegarder et rétablir l’état? exécution d’appel de procédures, récursivité (variables locales stockées sur

la pile)? analyse syntaxique, compilation (appariement d’éléments syntaxiques t.q.

parèntheses ouvrante et fermante)� syntaxe = grammaire hors-contexte = reconnu par automate à pile

queue : permet de syncroniser production et consommation en respectant l’ordre? lecture et écriture de fichiers, streaming? requête et exécution de tâches : serveur Web, print queue, ordonnancement

des processus

Page 10: TYPES ABSTRAITS DE DONNÉES - WordPress.com › 2020 › 01 › ift2015h20-01prez-tad.pdf(Java SE 1.6.0_51, 64 bits, MacOS) 24Ð40 24 24 8 (adresse m moire sur 64 bits) 8 4 8 4 2 2

TAs classiques

Types abstraits ? IFT2015 H2020 ? UdeM ? Miklós Csűrös x

opérations principales

sac (bag)

pile (stack)

queue

files

vide?

+

parcourir

+

-

ajouter retirer

add

push

enqueue

rechercher

-pop

dequeue

dictionnaire ordonné(sorted dictionary)

min

-

ensemble (set)

+

-

add

deleteou -

+file à priorités(priority queue) deleteMin

+

contains

getdeletetable de symboles

(symbol table / map)

TAs

+/- addou -

add

-

structurestypiques

tableau ou liste chaînée

tas (heap)

tableau de hachage

arbre binaire de recherche

- -

Page 11: TYPES ABSTRAITS DE DONNÉES - WordPress.com › 2020 › 01 › ift2015h20-01prez-tad.pdf(Java SE 1.6.0_51, 64 bits, MacOS) 24Ð40 24 24 8 (adresse m moire sur 64 bits) 8 4 8 4 2 2

Types en Java

Types abstraits ? IFT2015 H2020 ? UdeM ? Miklós Csűrös xi

Java est un langage fortement typé (toute variable a un type déclaré)? types primitifs (int, double, boolean, . . . )? types agrégés (tableaux, et ceux définis par les classes et les interfaces)

Déf. variable = abstraction d’un emplacement en mémoire (von Neumann)

composants d’une variable :

1. nom

2. adresse (lvalue)

3. valeur (rvalue)

4. type

5. portée / visibilité

? En Java, la valeur d’une variable de type agrégé est une référence.? Une référence (ou pointeur) est soit null soit l’adresse d’un emplacement

mémoire contentant une valeur typée.

Page 12: TYPES ABSTRAITS DE DONNÉES - WordPress.com › 2020 › 01 › ift2015h20-01prez-tad.pdf(Java SE 1.6.0_51, 64 bits, MacOS) 24Ð40 24 24 8 (adresse m moire sur 64 bits) 8 4 8 4 2 2

Mémoire en Java

Types abstraits ? IFT2015 H2020 ? UdeM ? Miklós Csűrös xii

overhead (info sur classe, syncronisation,

ramasse-miette)

variables d'instance

arrondi à 8k octets

int n=1000;Object x = new MonObjet(); int[] T = new int[n];

x référence

boolean

byte

char

int

long

float

doubleréférence

Object

Integer

short

Node<Object>taille en octets

(Java SE 1.6.0_51, 64 bits, MacOS)

24–40

24

24

8 (adresse mémoire sur 64 bits)

8

4

8

4

2

2

1

1

T référenceen-tète

16 octets

16-24 octets

n×t octets

n valeur

Tas (heap) d'allocation d'objets

Pile (stack) de variables locales

padding

Page 13: TYPES ABSTRAITS DE DONNÉES - WordPress.com › 2020 › 01 › ift2015h20-01prez-tad.pdf(Java SE 1.6.0_51, 64 bits, MacOS) 24Ð40 24 24 8 (adresse m moire sur 64 bits) 8 4 8 4 2 2

Java Collections

Types abstraits ? IFT2015 H2020 ? UdeM ? Miklós Csűrös xiii

Interfaces fondamentales dans le package java.util :

java.util.List : accès par indice d’élémentjava.util.Map =table de symboles = dictionnaire : recherche par cléjava.util.Deque : file avec accès aux deux extrémités

Page 14: TYPES ABSTRAITS DE DONNÉES - WordPress.com › 2020 › 01 › ift2015h20-01prez-tad.pdf(Java SE 1.6.0_51, 64 bits, MacOS) 24Ð40 24 24 8 (adresse m moire sur 64 bits) 8 4 8 4 2 2

Multiples implémentations

Types abstraits ? IFT2015 H2020 ? UdeM ? Miklós Csűrös xiv

1/12/19, 5:17 PMCollections Framework Overview

Page 3 of 4https://docs.oracle.com/javase/10/docs/api/java/util/doc-files/coll-overview.html

can result in an exception. Some restricted collections permit this usage.

Collection ImplementationsClasses that implement the collection interfaces typically have names in the form of <Implementation-style><Interface>. The general purpose implementations are summarized in the following table:

General purpose implementations

Interface HashTable

ResizableArray

BalancedTree

LinkedList

Hash Table + LinkedList

Set HashSet TreeSet LinkedHashSetList ArrayList LinkedList Deque ArrayDeque LinkedList Map HashMap TreeMap LinkedHashMap

The general-purpose implementations support all of the optional operations in the collection interfacesand have no restrictions on the elements they may contain. They are unsynchronized, but theCollections class contains static factories called synchronization wrappers that can be used to addsynchronization to many unsynchronized collections. All of the new implementations have fail-fastiterators, which detect invalid concurrent modification, and fail quickly and cleanly (rather than behavingerratically).

The AbstractCollection, AbstractSet, AbstractList, AbstractSequentialList and AbstractMapclasses provide basic implementations of the core collection interfaces, to minimize the effort required toimplement them. The API documentation for these classes describes precisely how each method isimplemented so the implementer knows which methods must be overridden, given the performance of thebasic operations of a specific implementation.

Concurrent CollectionsApplications that use collections from more than one thread must be carefully programmed. In general,this is known as concurrent programming. The Java platform includes extensive support for concurrentprogramming. See Java Concurrency Utilities for details.

Collections are so frequently used that various concurrent friendly interfaces and implementations ofcollections are included in the APIs. These types go beyond the synchronization wrappers discussedpreviously to provide features that are frequently needed in concurrent programming.

These concurrent-aware interfaces are available:

BlockingQueueTransferQueueBlockingDequeConcurrentMapConcurrentNavigableMap

déclarer le type des variables par l’interface et initialiser par l’implantation choisie

Map<Long,String> M = new HashMap<>();// tableau de hachageSet<Number> S = new TreeSet<>();// arbre binaire de recherche

(types paramétrisés !)

Page 15: TYPES ABSTRAITS DE DONNÉES - WordPress.com › 2020 › 01 › ift2015h20-01prez-tad.pdf(Java SE 1.6.0_51, 64 bits, MacOS) 24Ð40 24 24 8 (adresse m moire sur 64 bits) 8 4 8 4 2 2

java.util.Collection

Types abstraits ? IFT2015 H2020 ? UdeM ? Miklós Csűrös xv

public interface Collection<E> extends Iterable<E>// contient des éléments de type E

{// opérations de baseint size();boolean isEmpty();boolean contains(Object element);boolean add(E element); //optionnelleboolean remove(Object element); //optionnelleIterator<E> iterator();

// opérations de masseboolean containsAll(Collection<?> c);boolean addAll(Collection<? extends E> c); //optionnelleboolean removeAll(Collection<?> c); //optionnelleboolean retainAll(Collection<?> c); //optionnellevoid clear(); //optionnelle

// opérations de tableauxObject[] toArray();<T> T[] toArray(T[] a);

}

Page 16: TYPES ABSTRAITS DE DONNÉES - WordPress.com › 2020 › 01 › ift2015h20-01prez-tad.pdf(Java SE 1.6.0_51, 64 bits, MacOS) 24Ð40 24 24 8 (adresse m moire sur 64 bits) 8 4 8 4 2 2

java.util.AbstractCollection

Types abstraits ? IFT2015 H2020 ? UdeM ? Miklós Csűrös xvi

génie logiciel économique : afin d’implémenter Collection, il suffit de définirune sous-classe de AbstractCollection— il ne reste que deux méthodes à coder !

public abstract class AbstractCollection<E>implements Collection<E>

{public abstract Iterator<E> iterator(); // à implémenterpublic abstract int size(); // à implémenter

public boolean isEmpty(){ return size()==0;} // par défaut

public boolean contains(Object obj){

Iterator iter = iterator();// parcours de la collection, comparer avec obj

}...

� l’implémentation par défaut est non-fonctionnelle (UnsupportedOperationException)

ou inefficace pour toute méthode intéressante