• Aucun résultat trouvé

Cours informatique implémentation des structures de données – Cours et formation gratuit

N/A
N/A
Protected

Academic year: 2022

Partager "Cours informatique implémentation des structures de données – Cours et formation gratuit"

Copied!
13
0
0

Texte intégral

(1)

L. Nerima Faculté des lettres - Université de Genève - mars 2005 1 - 0

Cours d’informatique II

2ème partie

Luka Nerima

semestre d’été 2005

“Structures de données”

PLAN

0. Notion de type de données ...

1. La référence ...

2. Architecure de logiciel ...

3. Objets et classes ...

4. Les structures de données ...

5. Implémentation des structures de données ...

Bibliographie ...

(2)

Bibliographie

Ouvrages conseillés:

MÖSSENBÖCK H., Object-Oriented Programming in Oberon-2, Springer, 1994.

Abstraction de données. Concepts de base de la programmation Objet. Applications typique des objets: types abstraits, com- posantes génériques, structure de données hétérogènes, etc. Con- ception orientée objet. Le modèle MVC (modèle - vue contrôleur).

Etude de cas: système de fenêtres.

WEISS, M. A., Data Structures & Problem Solving Using Java, , Addison- Wesley, 1998.

Survol de Java. Objets et classes. Analyse de complexité des algo- rithmes. Structures de données: pile, queue, liste chaînée, arbre, ar- bre de recherche binaire, table de hachage, queue prioritaire, graphe. Algorithme sur les structures de données. Applications.

(3)

L. Nerima Faculté des lettres - Université de Genève - mars 2005 1 - 2

Chapitre 0. Notion de type de données

Langage de programmation typé:

Impose que les variables du progamme soient explicitement définies avec un type de données

Le typage des variables garantit que, pendant l’exécution du programme, les variables prendront uniquement des valeurs appartenant au domaine caractérisé par le type

Les langages typés proposent:

des types de bases, prédéfinit dans le langage

des constructeurs syntaxiques (ARRAY, RECORD, POINTER) qui permettent à l’utilisateur de définir ses propres types par combinaison des types de base et/

ou des types définit par l’utilisateur

(4)

Les types de base (ou types primitifs) en Oberon

Il y a 10 types de base en Oberon (BB):

Type Domaine de valeurs Opérations

INTEGER -2147483648..2147483647

BYTE -128..127 + - * DIV MOD DEC INC

SHORTINT -32768..32767 op. relationnels: = # < <= >= >

LONGINT -9.2E18..9.2E18

SHORTREAL -3.4E38..3.4E38 op. relationnels: = # < <= >= >

REAL -1.8E308..1.8E308 + - * /

BOOLEAN FALSE, TRUE & OR ~ op. relationnels: = #

CHAR 0X..FFFFX CAP op. conversion: ORD CHR

SHORTCHAR 0X...FFX op. relationnels: = # < <= >= >

SET set of 0..31 + - * / IN INCL EXCL

Remarque:

- ce tableau n’est pas exhaustif en ce qui concerne les opérations (il manque notamment les

procedures de conversion de type)

(5)

L. Nerima Faculté des lettres - Université de Genève - mars 2005 1 - 4

A quoi servent les types de données ?

En résumé, un type de données définit:

(1) le domaine des valeurs possibles

(2) les opérations applicables à ces valeurs

(6)

Type de base <-> type structuré:

type de base: une valeur par variable

type structuré une collection de valeurs par variable Exemples:

VAR k: INTEGER; (* k peut contenir 1 valeur entière *) tab: ARRAY 10 OF INTEGER; (*tab peut contenir 10

valeurs entières *) rec: RECORD (* rec peut contenir

r: REAL; une valeur de type réel

i: INTEGER; et une valeur de type entier *) END

(7)

L. Nerima Faculté des lettres - Université de Genève - mars 2005 1 - 6

Type statique <-> type dynamique

statique: la place mémoire est allouée à l’initialisation.

dynamique (pointeur): la mémoire est allouée à la demande, en cours d’exécution du programme (avec l’opération NEW)

une structure de type dynamique peut croître

“infiniment” pendant l’exécution du programme; elle peut se réduire aussi

chaque variable allouée dynamiquement est référencée par une variable de type pointeur

(8)

Déclaration d’une variable de type pointeur et création de la variable dynamique

la déclaration d’une variable de type pointeur indique de quel type sera la variable allouée dynamiquement (appelé “type de base”). Exemple:

La déclaration ne crée pas la variable dynamique elle- même. La création doit se faire explicitement avec l’instruction

NEW(p)

La variable ainsi crée n’est pas désignée par un identificateur: elle est anonyme. Pour y accéder, on utilisera la variable de type pointeur (p)

On appelles plus simplement les variables de type pointeur “pointeurs” ou “références”

TYPE String = ARRAY 32 OF CHAR;

VAR p: POINTER TO PERSONNE;

PERSONNE = RECORD nom, prénom: String; END;

(9)

L. Nerima Faculté des lettres - Université de Genève - mars 2005 1 - 8

Chapitre 1. La référence

Référence ≡ variable de type pointeur (POINTER)

La référence contient l’adresse mémoire où réside un enregistrement ou, en toute généralité, une unité

d’information

Exemple: deux enregistrements représentant chacun une coordonnée (x,y) de l’écran; ils sont référencés par trois références: point1, point2 et point3:

Notion importante car elle concerne:

- les variables de type dynamique POINTER - les objets (que nous verrons au chapitre 3)

1000 1001

2100 2101 2102 2103

2100 2102

1 1 5 7 point1

point2

adresse mémoire

Représentation conceptuelle:

2100 1002

point1 1

1

point2 5

7 point3

point3

Représentation physique:

id. référence

(10)

Déclaration de la référence, création et suppression des enregistrements référencés

La déclaration d’une référence se fait de la même manière que celle des autres types de variable

Pour indiquer qu’il s’agit d’une référence on utilise le mot réservé POINTER

Aprés la déclaration de la référence, sa valeur est NIL

La création (allocation de la mémoire) d’un enregistrement référencé se fait à l’aide de la

procédure NEW; la valeur de la référence devient#NIL

Exemple:

Lorsqu’un enregistrement n’est plus référencé, il n’y a plus moyen d’y accéder; l’enregistrement est alors

TYPE Point = POINTER TO VAR point1: Point;

BEGIN

RECORD x, y: INTEGER END;

...

NEW(point1); point1

point1

...

NIL

(11)

L. Nerima Faculté des lettres - Université de Genève - mars 2005 1 - 10

L’opérateur flèche (^) et l’opérateur point (.)

L’opérateur flèche (^) sert à “déréférencer” la

référence, càd à accéder à l’enregistrement référencé.

Attention: la référence doit être # NIL

L’opérateur point (.) sert à accéder aux champs de l’enregistrement; nous verrons aux chap. 2 et 3 que les champs peuvent aussi représenter des méthodes

Pour alléger l’écriture, l’opérateur (^) est facultatif lorsqu’on accède aux champs d’un enregistrement référencé. On peut écrire point1.x au lieu de point1^.x

Exemple:

TYPE Point = POINTER TO RECORD x, y: INTEGER END;

VAR point1, point2, point3: Point;

BEGIN ...

NEW(point1);

point1.x:=1; point1.y:=1;

point3:=point1; (* affectation de la référence -> point3 se réfère au même enregistrement que point1*) NEW(point2);

point2^:=point1^; (* affectation de l’enregistrement *) ...

point1 1

1 point2

point3

1 1 Après l’exécution:

(12)

La signification de :=

Soit l’instruction d’affectation g:=d

L’affectation (:=) entre deux variables primitives, disons de type INTEGER, a pour effet de copier la valeur de la variable de droite dans la variable de gauche.

L’affectation entre deux références a exactement le même effet: la valeur de la variable de droite est

copiée dans la variable gauche. Comme la valeur est une adresse mémoire, après l’affectation la variable de gauche va se référer au même enregistrement (ou objet) que la variable de droite.

Les affectations ci-dessous sont-elles légales ?

point1 1

point3 1 P.e. après l’affectation p3:=p1

TYPE String = ARRAY 32 OF CHAR;

Noeud = RECORD clé: String; suivant: NoeudListe; END;

VAR liste: NoeudListe; noeud: Noeud;

NoeudListe = POINTER TO Noeud;

(13)

L. Nerima Faculté des lettres - Université de Genève - mars 2005 1 - 12

La signification de =

Deux références sont égale au sens de l’opérateur (=) si elles se réfèrent au même enregistrement (ou objet)

Mais deux références p1 et p2 qui se réfèrent à deux enregistrements différents ne sont pas égales, même si tous les champs des enregistrements sont égaux deux à deux

p1 p2 Exemple:

(* après cette affectation, l’expression p1 = p2 est vraie *) p2:=p1

Exemple:

p1.x:=9; p1.y:=17;

NEW(p1); NEW(p2);

p1 p2

(* après ces instructions, p1 = p2 est fausse*) p2.x:=9; p2.y:=17;

9 17 9 17

(* mais p1.x=p2.x & p1.y=p2.y est vraie (appelée“égalité profonde”)*)

Références

Documents relatifs

A l'heure actuelle, les deux implémentations les plus utilisées de Javascript, respectent la spécification d'ECMAScript, tout en y ajoutant des spécificitées

The Modula Series is available in multiple enclosure types: 32x32 enclosures for routing up to 32x32 per signal type, skewed enclosures that provide a cost-effective solution

Dans le cas où vous installez MySql ailleurs que dans le répertoire C:\MySql, n'oubliez pas de créer un fichier C:\MY.CNF, copie du fichier MY.INI en n'oubliant pas d'indiquer

Pour le dialogue entre le client et le serveur, nous utilisons deux objets : l'objet RESPONSE et

Lors de la cr´eation, les composantes d’un tableau sont initialis´ees avec des valeurs par d´efaut : – les composantes boolean sont initialis´ees `a false.. – les

&#34;On appelle algorithme une suite finie d’instructions indiquant de façon unique l’ordre dans lequel doit être effectué un ensemble d’opérations pour résoudre tous

La structure peut se limiter à SI…ALORS, si la condition est vrai on exécute la séquence A si elle est fausse on quitte la structure sans exécuter de séquence.

Exemple 3 (probabilités) : Proposons un algorithme qui simule le lancer d’un dé cubique équilibré un certain nombre de fois et affiche le nombre d’apparitions de