Typage statique

Infos
Typage statique

Définition

Le typage statique est une technique utilisée dans certains langages de programmation impératifs (C++, Java, Pascal, par exemple) pour associer à un symbole dénotant une variable le type de la valeur dénotée par la variable ; et dans certains langages de programmation fonctionnels (ML, Objective Caml, Haskell, etc.) pour associer à une fonction (un calcul) le type de son paramètre et le type de la valeur calculée. Une telle association présente les bénéfices potentiels suivants :
- un compilateur de langage à typage statique détecte les erreurs de types avant que le programme ne soit exécuté (on obtient ainsi la sûreté du typage),
- le même compilateur peut tirer parti de l'information sur les types pour réaliser certaines optimisations du code objet,
- enfin, puisque les types des objets manipulés sont connus, le compilateur peut éliminer cette information du code objet produit, avec pour principal avantage un gain de mémoire par rapport aux systèmes à typage dynamique.

Langages à objets et typage statique

(déplacer vers nouvel article : le problème de la covariance/contravariance) Les langages à objets en particulier peuvent tirer parti du typage statique, afin de détecter avant l'exécution des erreurs de types (comme par exemple la tentative d'additionner un entier avec une chaîne de caractères). Toutefois, la sûreté du typage et la programmation orientée objet sont parfois en contradiction, parce que le typage sûr va à l'encontre de la modélisation « naturelle » du problème à résoudre avec l'approche objet (redéfinition contravariante du type des paramètres des méthodes pour la sûreté du typage vs. redéfinition covariante dans l'approche objet). Pour éclaircir la dernière phrase, nous travaillons sur un exemple. Considérons en Java l'extrait de code suivant : Graphe mon_graphe = new Graphe ; Nœud n1, n2; n1 = new Nœud ; n2 = new Nœud ; Arête a = new Arête (n1, n2); mon_graphe.ajout_nœud (n1); mon_graphe.ajout_nœud (n2); mon_graphe.ajout_arête (a); Quatre objets sont déclarés et instanciés, précédés de leur type (respectivement Graphe, Nœud, Arête). Si le programmeur essaye d'instancier mon_graphe avec le type Nœud, le compilateur le lui interdit car mon_graphe a été déclaré comme étant de type Graphe (contrôle sur le type de retour). De même, si la méthode ajout_nœud de la classe Graphe a été définie comme ceci : boolean ajout_nœud (Nœud n) c'est-à-dire en spécifiant le type du paramètre reçu, le compilateur saura détecter une erreur d'appel (par exemple 'mon_graphe.ajout_nœud (a)') - (contrôle sur le type des paramètres).

Problèmes

C'est ce dernier point qui est le plus délicat. Supposons une dérivation de Graphe : la classe Réseau spécialise Graphe, Routeur spécialise Nœud et Lien spécialise Arête. En particulier, la méthode ajout_nœud est redéfinie dans Réseau : boolean ajout_nœud (Routeur r) //modélisation covariante conforme à l'intuition Considérons alors le code suivant : Réseau res = new Réseau; Nœud n = new Nœud; res.ajout_nœud (n); //Boum ! Le compilateur refuse ceci. En fait, pour garantir la sûreté du typage, il faut que le type des paramètres de la méthode ajout_nœud de Réseau soit un super-type du paramètre de la méthode ajout_nœud de Graphe. De façon schématique : Soient des classes A et B telles que B < A (« B spécialise A ») et B
Sujets connexes
Compilateur   Eiffel (langage)   Haskell   ML   Objective Caml   Optimisation de code   Polymorphisme (informatique)   Programmation orientée objet   Surcharge des opérateurs   Symbole   Sûreté du typage   Typage dynamique   Type (informatique)   Variable  
#
Accident de Beaune   Amélie Mauresmo   Anisocytose   C3H6O   CA Paris   Carole Richert   Catherinettes   Chaleur massique   Championnat de Tunisie de football D2   Classement mondial des entreprises leader par secteur   Col du Bonhomme (Vosges)   De viris illustribus (Lhomond)   Dolcett   EGP  
^