Vous êtes sur la page 1sur 4

Règles de typage

R ÈGLE ` « Tableau »
Après une définition
Algorithmique UV2 type Des_Foos is array (Integer range <>) of τ
Cours 3 où τ est un type quelconque,
si ` e : Des_Foos et ` e0 : Integer alors ` e(e0 ) : τ
Didier Le Botlan
type Des_Foos is array (Integer range <>) of Integer ;
INSA Premier_Tableau : Des_Foos(1..200) ;
contact.lebotlan@insa-toulouse.fr
Compléter :
2nd semestre 2009–2010
` Des_Foos :
` Premier_Tableau : Des_Foos
http://wwwdgeinew.insa-toulouse.fr/~lebotlan/index.html ` Premier_Tableau(5) : Integer
` Premier_Tableau(2) := 120 : bloc

1 / 15 2 / 15

Vision ensembliste

nb_mots : integer ; Un type représente un ensemble de valeurs, par exemple :


taux_imposition : float ;
Un intervalle d’entiers
integer et float sont des types de données. Un intervalle de réels
Un ensemble énuméré de valeurs
Un type représente un ensemble de valeurs

Exemples d’ensembles énumérés


On trouve donc des similitudes entre les types et les ensembles :
Sous-ensemble ↔ Sous-type Les jours de la semaine : {Lun, Mar, Mer, Jeu, Ven, Sam, Dim}
Ensemble fini ↔ Type énuméré Des notes de musique : {Do, Re, Mi, Fa, Sol, La, Si}
Produit cartésien ↔ article (record) De la logique floue : {Oui, Non, Peut_Etre}
Produit cartésien homogène ↔ Type tableau Des entités particulières :
{Bouton_Gauche, Bouton_Droit, Bouton_Milieu, Molette}

Mais toutes les opérations ensemblistes n’existent pas (en Ada) sur les
types.

3 / 15 4 / 15
Type énuméré : déclaration L’exemple du poly

Cette procédure affiche son argument de type Un_Jour_Semaine


Définition : Déclaration d’un type énuméré On suppose que l’acteur Txt est défini.
type Un_Jour is (Lun, Mar, Mer, Jeu, Ven, Sam, Dim) ; procedure Afficher_Jour (Jour : Un_Jour_Semaine) is
begin
Se place avant le begin, avec les déclarations. case Jour is
when Lun => Txt . Put ( "Lundi, jour difficile" ) ;
when Mar | Mer | Jeu => Txt . Put ( "Milieu de la semaine" ) ;
Après cette déclaration, Lun, Mar, . . . , sont reconnus comme des when Ven => Txt . Put ( "Vendredi" ) ;
valeurs. when Sam | Dim => Txt . Put ( "Week end" ) ;
end case ;
end Afficher_Jour ;

5 / 15 6 / 15

Caractéristiques d’un type Les attributs

Un type représente un ensemble de valeurs.


+ Pour les valeurs de base (entier, flottants, ...), les seuls ensembles ’FIRST premier élément de l’intervalle
représentables sont les intervalles. ’LAST dernier élément
’RANGE représente l’intervalle
Les attributs permettent d’obtenir des informations sur un type
donné, par exemple les bornes de l’intervalle. ’SUCC(x) élément successeur de x
Grand : Integer := Integer’LAST ; Le plus grand entier Ada ’PRED(x) élément prédécesseur de x

nd ’VAL(x) l’élément numéro x de l’ensemble


Gra ’POS(x) la position de l’élément x
2147483647

7 / 15 8 / 15
Sous-ensemble Un Type Article

Un article (record) est un regroupement de plusieurs types.


Un type est un ensemble de valeurs. Déclaration de type
Attributs
Un sous-type permet de distinguer un sous-ensemble.
À placer avant le begin
Sous-type d’un type énuméré type Une_Duree is record
subtype Un_Jour_Ouvrable is Un_Jour range Lun . . Ven ; Heures : Natural ;
Minutes : Integer range 0 .. 59 ;
Sous-type entier Secondes : Float range 0.0 .. 59.99 ;
subtype Une_Heure is Integer range 0 . . 23 ; end record ; o
Fo
Heures = ...
Sous-type réel Foo : Une_Duree ; Minutes = . . .
subtype Un_Voltage is Float range -3.5 . . 3.5 ; Secondes = . . .

9 / 15 10 / 15

Représentation graphique Composition de structures

Une_Duree
Natural
Foo : Il est possible de composer les structures, réalisant ainsi des
Heures
. 1 structures de données plus complexes.

Un type pour ITunes


Integer range
type Un_Avis is (Trop_Bon, Bon, Moyen, Bof) ;
0..59
Minutes type Une_Musique is record
. 12 Titre : String(1..20) ; 20 caractères
Duree : Une_Duree ;
Annee : Integer ;
Float range Artiste : String(1..20) ; 20 caractères
0.0..59.99 Avis : Un_Avis ;
end record ;
Secondes
. 45.0

11 / 15 12 / 15
Représentation graphique Utilisation

Une_Musique String(1..20)
. Titre
...
L’initialisation se fait en respectant l’ordre des champs ou en
Integer
Une_Duree nommant les champs (comme d’habitude) :
. Duree
. Heures
1 Chanson : Une_Musique := (Titre => "Brothers in Arms ",
Duree => (0, 3, 10.0) , 3 min 10.0
0..59
Annee => 1984 ,
. Minutes
12 Artiste => "Dire Straits ",
Integer 0.0..59.99
Avis => Bon) ;

. Annee
2006 . Secondes
45.0 L’accès aux champs se fait par notation pointée (comme d’habitude
aussi) :
String(1..20)
Chanson.Annee := 1985 ; Brothers in Arms date de 1985
. Artiste
... Chanson.Duree.Minutes := 5 ; Il dure 5 min 10 !
Un_Avis Chanson.Avis := Trop_Bon ; Et c’est plus que bon.
. Avis
Bof

13 / 15 14 / 15

Un tableau d’articles

Déclaration
type Une_Collection is array (Integer range <>) of Une_Musique ;

Collection_Rock : Une_Collection(1..8000) ;
Collection_Tecktonik : Une_Collection(1..1000) ;

Accès
Collection_Rock (31).Titre := "Where the streets have no name" ;
Collection_Rock (31).Duree := (0, 5, 37.0) ; 5 min 37
Collection_Rock (31).Duree.Secondes := 38.0 ; En fait, 5 min 38
Collection_Rock (31).Artiste := "U2 ";

Quelles sont les règles de typage utilisées ?

15 / 15