Académique Documents
Professionnel Documents
Culture Documents
Département d’Informatique
Master 1: Enseignante :
Réseaux et Systèmes Distribués (RSD) K.KHETTABI
2022-2023
Chapitre 1: Concepts de base
Valeurs et type
1. Types
Une valeur est toute entité qui peut être manipulée par un programme.
Les valeurs peuvent être évaluées, stockées, transmises comme arguments, retournées
comme résultats de fonctions, etc.
Un ou plusieurs types primitifs Autoriser les programmes à définir leurs Dans un type primitif discret les valeurs ont
sont intégrés à chaque langage de propres types d'entiers et de virgule une relation de un à un avec une plage
programmation. flottante, en indiquant explicitement la d'entiers.
Booléen = {faux, vrai} (2.1) plage et/ou la précision souhaitée pour Exemple par ADA
Caractère = {. . . , 'a', . . . , ‘z', . . chaque type. Cette approche est adoptée type Month is (jan, feb, mar, apr, may, jun,
. , '0', . . . , '9', . . . , '?', . . .} par ADA. jul, aug, sep, oct, nov, dec);
Integer = {. . . ,-2,-1, 0,+1,+2, . . Exemple : length: array (Month) of Natural :=(31, 28,
.} type Population : plage 0 ... 1e10; 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
)Flottant = {. . . ,-1.0, . . . , 0.0, . countryPop : Population ; for mth in Month loop
. . ,+1.0, . . .} worldPop : Population ; put(length(mth));
Exemple: Le type entier défini l'ensemble de end loop;
JAVA fournit byte {-128, . . . ,+127} valeurs suivant : Les indices du tableau length sont des valeurs de type
Month. De même, la variable de contrôle de la boucle
Population = {0, . . . , 1010 }
mth prend une séquence de valeurs de type Month.
Chapitre 1: Concepts de base
Valeurs et type
1. Types
1.2. Types composites
• Une valeur composite (ou structure de données) est une valeur composée de valeurs
plus simples.
• Un type composite est un type dont les valeurs sont composées.
Tuples
Enregistrements
Tableaux
Types algébrique
Objets
Listes
Arbres
Fichiers
Chapitre 1: Concepts de base
Valeurs et type Types composites
Dans un produit cartésien, les valeurs de plusieurs types sont regroupées en tuples.
(x, y) désigner le premier composant est x et le second composant est y.
S × T désigner l'ensemble des paires (x, y) telles que x est choisi dans l'ensemble S et y est choisi dans l'ensemble T.
Formellement : S × T = {(x, y) | x ∈ S ; y ∈ T}
Le mappage est en fait à la base de deux caractéristiques du langage : les tableaux et les fonctions.
On écrit : m : S → T
Si m fait correspondre la valeur x de l'ensemble S à la valeur y de l'ensemble T ,on écrit y = m(x). La valeur y est
appelée l'image de x sous m.
Formellement : S → T = {m | x ∈ S ⇒ m(x) ∈ T}
Chapitre 1: Concepts de base
Valeurs et type Types composites
Mappings, tableaux et fonctions
Tableau
Un tableau est une séquence indexée de composants.
• Il possède un composant de type T pour chaque valeur de type S, de sorte que le tableau lui-même a le type S
→ T.
• La longueur du tableau est son nombre de composants.
• S est toujours une plage de valeurs consécutives, que l'on appelle la plage d'index du tableau.
• Les opérations de base sur les tableaux
La construction
L'indexation
Chapitre 1: Concepts de base
Valeurs et type Types composites
Mappings, tableaux et fonctions
Tableau
Union disjointe, permet de choisir une valeur dans l'un plusieurs ensembles (généralement différents).
S + T un ensemble de valeurs d'union disjointe, chacune d'entre elles étant composée d'une balise et d'une
Les opérations de base sur les valeurs de disjoint-union dans S + T sont les suivantes :
• Construction d'une valeur de disjoint -union, en prenant une valeur dans S ou T et en l'étiqueter en conséquence.
Le langage fonctionnel HASKELL possède des types algébriques que l'on peut comprendre en termes d'unions disjointes.
En fait, la notation HASKELL est très proche de notre notation mathématique des unions disjointes.
Chapitre 1: Concepts de base
Valeurs et type Types composites
Unions disjointes, enregistrements discriminés et objets
Listes
Une liste est une séquence de valeurs.
Les opérations de liste
Longueur
Test de vide
Sélection de la tête
Sélection de queue
Concaténation.Supposons que l'on souhaite définir un type de listes d'entiers, dont les valeurs sont des
listesd'entiers.
Chapitre 1: Concepts de base
Valeurs et type
Listes
• Liste d'entiers : une valeur soit vide soit une paire constituée d'un entier (sa tête) et d'une autre
liste d'entiers (sa queue).
• Une chaîne de caractères peut avoir un nombre quelconque de caractères, et même aucun.
• Le nombre de caractères est appelé la longueur de la chaîne. La chaîne unique ne contenant aucun caractère est
• Les chaînes de caractères sont prises en charge par tous les langages de programmation modernes.
• Les opérations typiques des chaînes de : - longueur- comparaison - sélection de caractères- sélection de sous-chaînes -
concaténation.
Chapitre 1: Concepts de base
Valeurs et type
1.3. Types récursifs
Chaînes de caractères
• Dans un langage de programmation qui prend en charge les listes, l'approche la plus naturelle consiste à traité les chaînes
de caractères comme des listes de caractères. Cette approche rend toutes les opérations de liste habituelles
automatiquement applicables aux chaînes de caractères. Les opérations utiles spécifiques aux chaînes de caractères
doivent être fournies en plus des opérations générales de la liste. Exemple, HASKELL et PROLOG adoptent cette approche.
Chapitre 1: Concepts de base
Valeurs et type
1.3. Types récursifs
Chaînes de caractères
• Dans un langage orienté objet, l'approche la plus naturelle est de traiter les chaînes de caractères comme des objets.
Cette approche permet de doter les chaînes de caractères avec des méthodes fournissant toutes les opérations
souhaitées et évite les inconvénients de traiter les chaînes de caractères comme des cas particuliers de tableaux ou
Un type récursif est un type défini en fonction de lui-même. Les valeurs d'un type récursif sont composées de valeurs du
même type.
En général, l'ensemble des valeurs d'un type récursif, R, est défini par une équation d'ensemble récursive de la forme :
R = . . . + (. . .R. . .R. . .)
Exemple
def countdown(n):
print(n)
if n > 0:
countdown(n - 1)
Chapitre 1: Concepts de base
Valeurs et type
1.4. Systèmes de types
Eviter des opérations illogiques, comme la multiplication d'une chaîne de caractères par un booléen.
Chapitre 1: Concepts de base
Valeurs et type
1.4. Systèmes de types
Typing statique vs dynamique
• Langage à type statique, chaque variable et chaque expression possède un type fixe ( indiqué par le programmeur ou le
compilateur). Tous les opérandes peuvent être vérifiés au moment de la compilation.
• Exemple: SMALLTALK, LISP, PROLOG.
Chapitre 1: Concepts de base
Valeurs et type
1.4. Systèmes de types
Typing statique vs dynamique
• Langage à typage dynamique, les valeurs ont des types fixes, mais les variables et les expressions n'ont pas de
types fixes.
Chaque fois qu'une opérande est calculée, elle pourrait donner une valeur d'un type différent. Les opérandes
doivent donc être vérifiés après leur calcul, mais avant d'effectuer l'opération , au moment de l'exécution.
Exemple: PERL ,PYTHON
Chapitre 1: Concepts de base
Valeurs et type
1.4. Systèmes de types
Équivalence type
Considérons une opération qui attend un opérande de type T1. Supposer que on lui donne à la place un opérande
dont le type devient T2. Ensuite, nous devons vérifier si T1 est équivalent à T2, noté T1 ≡ T2.
Définition
Equivalence de type est l'équivalence structurelle :
T1 ≡ T2 si et seulement si T1 et T2 ont le même ensemble de valeurs.
Chapitre 1: Concepts de base
Valeurs et type
1.4. Systèmes de types
Équivalence type
Règles
• Si T1 et T2 sont tous deux primitifs, alors T1 ≡ T2 si et seulement si T1 et T2 sont identiques.
Par exemple :
Integer ≡ Integer
Entier /≡Float
• Si T1 = A1 × B1 et T2 = A2 × B2, alors T1 ≡ T2 si et seulement si A1 ≡ A2 etB1 ≡ B2.
Par exemple :Entier × Flottant ≡ Entier × Flottant
Integer × Float /≡Float × Integer
• Si T = A1 → B1 et T2 = A2 → B2, alors T1 ≡ T2 si et seulement si A1 ≡ A2et B1 ≡ B2.
Par exemple :Entier → Flottant ≡ Entier → Flottant
Integer → Float /≡Integer → Boolean
Chapitre 1: Concepts de base
Valeurs et type
1.4. Systèmes de types
Équivalence type
Règles
• Si T1 = A1 + B1 et T2 = A2 + B2, alors T1 ≡ T2 si et seulement si
Soit A1 ≡ A2 et B1 ≡ B2, ou A1 ≡ B2 et B1 ≡ A2
Par exemple :Entier + Flottant ≡ Entier + Flottant
Entier + Flottant ≡ Flottant + Entier
Integer + Float /≡Integer + Boolean
Chapitre 1: Concepts de base
Valeurs et type
1.4. Systèmes de types
Équivalence type
Exemple:
le call ''show(today);'' passerait son contrôle de type, que le langage
struct Position { int x, y; }; adopte l'équivalence structurelle ou de nom.
struct Position pos;
struct Date { int m, d; }; En revanche, l'appel ''show(pos);'' ne passerait son contrôle de type que
struct Date today; si le langage adopte l'équivalence structurelle.
void show (struct Date d);
Chapitre 1: Concepts de base
Valeurs et type
1.4. Systèmes de types
Complétude des types
Les concepteurs de langage doivent garder à l'esprit, car les restrictions tendent à réduire le pouvoir expressif d'un
langage de programmation. Parfois, les restrictions sont justifiées par d'autres considérations de conception
contradictoires.
Cependant, il y a très peu de justification pour la restriction de PASCAL sur les types de résultats de; des
langages plus modernes permettent aux résultats de fonctions d'être de n'importe quel type.
Chapitre 1: Concepts de base
Valeurs et type
1.5. Expressions
Une expression est une construction qui sera évaluée pour produire une valeur.
Exemple
type Month is (jan, feb, mar, apr, may, jun,jul, aug, sep, oct, nov,
dec);
type Day_Number is range 1 .. 31; Construit une valeur du type Date, les valeurs
type Date is qui la composent doivent être des littéraux.
record
m: Month;
d: Day_Number;
end record;
Chapitre 1: Concepts de base
Valeurs et type
1.5. Expressions
Appels de fonction
Un appel de fonction calcule un résultat en appliquant une procédure de fonction (ou méthode) à un ou plusieurs arguments.
L'appel de fonction a généralement la forme ''F(E)''
• F détermine la procédure de la fonction à appliquer,
• Expression E est évaluée pour déterminer l'argument.
Expressions conditionnelles
Une expression conditionnelle calcule une valeur qui dépend d'une condition. Elle a deux ou plusieurs sous-expressions,
parmi lesquelles une seule est choisie pour être évaluée.
Tous les langages de programmation fournissent des expressions conditionnelles.
C, C++ et JAVA fournissent des expressions if.
HASKELL, Python fournit des expressions if et des expressions case.
Chapitre 1: Concepts de base
Valeurs et type
1.5. Expressions
Expressions itératives
Une expression itérative est une expression qui effectue un calcul sur une série de valeurs ( tableau ou , liste) pour obtenir
un résultat.