Les types structurés



Généralités indépendantes du langage de programmation

Les concepts manipulés par l'être humain peuvent souvent être décrits par des attributs : un rectangle est caractérisé par sa largeur et sa longueur; un livre peut être décrit par son titre, son auteur, son année de publication; une voiture par sa marque, sa couleur, son kilométrage, sa puissance etc.

Pour pouvoir représenter informatiquement de tels concepts, les langages de programmation permettent de définir des types structurés. Contrairement à un type prédéfini du langage (entier, réels, booléen, etc) , le nom d'un type structuré est défini par le programmeur. Il pourra par exemple définir un type livre, puis déclarer ensuite des variables de ce type.

Declaration

Déclaration d'un type structuré

Prenons l'exemple du concept "Livre". Pour représenter informatiquement un livre dans un programme Pascal, on pourra définir un nouveau type de la manière suivante :

 Type Livre =
    record
      Titre : String;
      Auteur : String;
      AnneePublication : Integer;
    end ;

On a ainsi définit un nouveau type de variable nommé Livre. "Titre", "Auteur" et "AnneePublication" sont les champs de ce type.

Les champs représentent les attributs du concept que l'on veut définir. Chaque champs est défini par son type. Dans notre exemple, Titre et Auteur sont des chaînes de caractères et AnneePublication est un entier.

Déclaration de variables de type structuré

A partir du moment où un nouveau type a été défini, il est possible de déclarer des variables de ce type. Une variable de type structuré est appelée une structure ou un enregistrement. Cette déclaration se fait comme pour un type prédéfini.

Par exemple, pour déclarer deux variables l1, l2 de type livre on écrira :

  Var l1, l2 : Livre ;

Manipulation des champs d'une structure

Pour accéder au champ d'une structure, on utilise l'opérateur ".".

Par exemple, pour affecter la valeur 'Visual Basic 6 − Le Guide du programmeur' au titre du livre l1, on écrira :

  l1.Titre := 'Visual Basic 6 − Le Guide du programmeur'

Un champ se manipule exactement comme une variable du même type. Par exemple, l1.AnneePublication se manipule exactement comme un entier. Pour obtenir l'age du livre l1, on peut très bien écrire :

  Var Age : Integer;
  Age := AnneeActuelle − l1.AnneePublication ;

Définition de types complexes par combinaison

Il est possible de définir des types complexes en combinant tableaux et structures ou bien en combinant les types structurés entre eux. Donnons quelques exemples.

Tableaux de structures : les tables

Le type des éléments d'un tableau peut être quelconque. On peut donc définir un tableau dont les éléments sont des types structurés, ou autrement dit un tableau de structures.

Les tableaux de structures sont également appelé tables. Ils jouent un rôle important en informatique, puisqu'on les retrouvent dans les bases de données. Nous verrons ultérieurement qu'une base de données n'est rien d'autre qu'un ensemble de tables stockées dans des fichiers.

Pour représenter l'ensemble des livres présents dans une bibliothèque, on peut par exemple utiliser un tableau dont les éléments sont de type Livre :

   Var Bibliotheque : array [1 .. M ]  of Livre ;

La variable Bibliotheque est donc un tableau de structures. La notation

   Bibliotheque [ 6 ] . Auteur

représente alors l'auteur du 6ème livre.

Structure avec champs de type structuré

Enrichissons un peu notre représentation d'un livre. Pour la gestion d'une bibliothèque, il serait intéressant d'associer une date d'emprunt à chaque livre :

   Type Livre =
     record 
        Titre : String;
        Auteur : String;
        AnneePublication : Integer;
        DateEmprunt  : TDate ;
     end;

Le type TDate étant lui même un type structuré défini par :

  Type TDate =
     record
      Jour : Integer;
      Mois : Integer;
      Annee : Integer;
     end ; 

Supposons que L soit une variable de type livre. Pour définir la date d'emprunt de L comme le 27 Janvier 2009, on écrira :

   L.DateEmprunt.Jour := 27;
   L.DateEmprunt.Mois := 1;
   L.DateEmprunt.Annee := 2009;