Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parAmandine Georges Modifié depuis plus de 10 années
1
CSI 3525, Noms etc., page 1 Noms, attachement, porté, vérification de type Noms, variables Attachement Porté Constantes Initialisation des variables Vérification de type Compatibilité de type Plan:
2
CSI 3525, Noms etc., page 2 Points à discuter: Quest-ce qui nécessite un nom? Une variable, en tant que six-tuplet
3
CSI 3525, Noms etc., page 3 Un nom est un descripteur pour une entitée dans un programme. On réfère aux entitées par leur nom, quand on veut les créer, les utiliser, les modifier et les détruire. Déclaration, usage, durée de vie et porté des noms: ces propriétés sont importantes pour les langages de programmation.
4
CSI 3525, Noms etc., page 4 Pourquoi a-ton besoin de noms? constantes, variables, opérateurs, étiquettes « label », types, procédures, fonctions, modules, programmes, fichiers, disques, commandes, items dun menu, ordinateurs, réseaux, utilisateurs (login).
5
CSI 3525, Noms etc., page 5 Noms et Identificateurs Un nom est dénoté par un identificateur. En générale, les identificateurs sont formes de lettres, chiffres et traits de soulignement « underscore ». Prolog, Perl et Scheme permettent plus. Une discussion de la forme des identificateurs: manuel, Section 5.2.
6
CSI 3525, Noms etc., page 6 Les mots clefs (e.g. for, if, int, new…) servent de balises syntaxique dans un programme. Considérez: if ( C ) S1 else S2 En fait, ce nest quun triplet: C - S1 - S2, qui aurait aussi bien pu être défini comme: If C then S1 else S2 end if; ou{C -> S1 ; S2} en autant que le compilateur et les programmeurs comprennent tous deux son sens profond. De même, while ( C ) S ou while C do S est essentiellement un paire: C - S.
7
CSI 3525, Noms etc., page 7 Dun autre coté, les mots clefs déterminent le style dun langage. Ils permettent de rendre un programme lisible. Il serait très facile de substituer les mots clefs dun langage: ça serait une modification triviale de lanalyseur lexical, par exemple, de lui faire reconnaître: si C alors S1 sinon S2 fin si; Au lieu de if C then S1 else S2 end if;
8
CSI 3525, Noms etc., page 8 Variables Une variable, dans un langage impératif, est un six-tuplet: nom, adresse, valeur, type, durée de vie, porté Par exemple: int x; on décide le nom et le type de x. Lendroit ou la déclaration se trouve dans un programme détermine où et combien longtemps x est disponible (porté, durée de vie). Son adresse est déterminée lors de lexécution. Finalement, lutilisation de x dans une instruction décidera de sa valeur.
9
CSI 3525, Noms etc., page 9 Un problème pour plusieurs langages de programmation: un même nom peut être utilisé dans différents contextes, et dénoter différentes entités: void a(){ int b;... } void b(){; int a;... } Différent types, adresses et valeurs peuvent être associés aux différentes occurrences du nom. Chaque occurrence a une différente durée de vie (quand et pour combien longtemps est- elle créée, et une différente porté (où peut-elle être utilisée).
10
CSI 3525, Noms etc., page 10 Valeur dune variable Le concept de valeur est plus générale: l-value (l pour « left ») et r-value (r pour « right ») représentent la source et la destination dune assignation. exemple: x = y; La l-value est ladresse de x, et la r-value est la valeur de y. Ceci devient compliqué pour les éléments de tableaux dénoté par des indexes devant être évaluée: T[i*2+1] = y; Cet index adresse dépend de la valeur courante de i.
11
CSI 3525, Noms etc., page 11 Attachement « binding » Points: Une présentation informelle Attachement en différent temps Attachement dune variable Porté
12
CSI 3525, Noms etc., page 12 Attachement Lattachement nest pas formellement défini. Intuitivement, on associe (ou attache) un attribut à un objet. Les attributs peuvent être des noms, types, valeurs. Lattachement peut se faire à différent moments. On considère normalement trois périodes: À la compilation (en fait, à la traduction, parce que lattachement se fait dans les compilateurs et les interpréteurs); Au chargement (Lorsque le code objet est préparé pour lexécution, quand le code nécessaire aux instructions prédéfinies du langage ou aux librairies utilisées est obtenu); À lexécution (Lors de lexécution du programme).
13
CSI 3525, Noms etc., page 13 Attachement Statique et Dynamique On distingue aussi deux types dattachement selon sa durée: Attachement statique est permanent, pour la durée du programme; Attachement dynamique effectif durant certaines parties de lexécution seulement.
14
CSI 3525, Noms etc., page 14 Assigner des propriétés aux variables variable nom À la compilation –Décrit dans les déclarations variable adresse Au chargement et à lexécution (e.g. C), à lexécution (e.g. Smalltalk) –Habituellement fait implicitement variable type À la compilation (e.g. Java), à lexécution (e.g. Scheme) –décrit dans la déclaration
15
CSI 3525, Noms etc., page 15 variable valeur à lexécution, Au chargement (initialisation) –Spécifié dans les instructions, surtout les assignations variable durée à la compilation –Décrit dans la déclaration variable porté à la compilation –Exprimé par lemplacement des déclarations
16
CSI 3525, Noms etc., page 16 Durée de vie Lattribution de la mémoire pour un objet se fait au chargement. Deux classes de variables peuvent être distinguées: Variables statique Variables dynamiques
17
CSI 3525, Noms etc., page 17 Variables statiques Lattribution se fait une seul fois, avant le début du programme. Fortran IV est un langage important ou cest la seul façon dattribuer la mémoire aux objets. Ceci est désuet, trop rigide, mais conceptuellement simple et peux coûteux. Ceci rend la récursivité impossible.
18
CSI 3525, Noms etc., page 18 Variables dynamiques Lattribution se fait après le début du programme, lors de son exécution. Deux possibilités dattribution dynamique: Attribution et libération Explicite, cest à dire que le programmeur doit le faire. Cest ce qui est fait quand on utilise des pointeurs. Par exemple, en Pascal on attribue avec new(p), et libère avec dispose(p). En C on utilise malloc(). Attribution implicite (quand on entré dans un bloc) et libération implicite (quand on en sort).
19
CSI 3525, Noms etc., page 19 Porté Blocs et structures de bloc Blocs anonymes Diagrammes dimbrication Graphes dappels Porté dynamique
20
CSI 3525, Noms etc., page 20 Blocs On regroupe des déclarations et des instructions pour: - regrouper les étapes dune même activité (e.g.,les étapes dun algorithme de trie), - assurer une interprétation correcte des noms. Les Noms sont attaches à divers éléments dun programme. On fait référence à ces noms dans des instructions. La porté dun nom N signifie lensemble des endroits dans un programme où N dénote le même objet.
21
CSI 3525, Noms etc., page 21 Les blocs peuvent être imbriqués. Les noms introduit dans un bloc sont appelé attachements locaux. Un nom utilisé sans avoir été déclaré dans un même bloc, doit avoir été déclaré dans un bloc englobant ce bloc.
22
CSI 3525, Noms etc., page 22 Les blocs peuvent être imbriqués. Les noms introduit dans un bloc sont appelé attachements locaux. Un nom qui est utilisée, sans avoir été déclaré dans un même bloc, doit avoir été déclaré dans un bloc englobant ce bloc. Limbrication des blocs est possible en Pascal, Ada et (sous certaines formes) en C. Elle nest pas permise en Fortran. Un programme, une procédure ou une fonction consiste en une entête et un bloc nommé. Par rapport aux blocs anonymes disponible en Algol 60, Algol 68, PL/I, Ada et C – mais pas en Pascal.
23
CSI 3525, Noms etc., page 23 Blocs anonymes Un bloc anonyme est comme une procédure définie (sans nom) et appelé immédiatement et une seule fois. De tels blocs sont utiles quand un calcul est nécessaire une seule fois, et des variables auxiliaires sont nécessaires pour ce calcul. On ne veut pas déclarer ces variables à lextérieur du bloc (une procédure aurait pu être utilisé pour parvenir au même résultat)
24
CSI 3525, Noms etc., page 24 Diagrammes dimbrication En C: main P(){ int X; void A(){ char Y; void B(){ float Z; S B } S A } void C(){ int Z; S C } S P } P XACXAC SASA A YBYB B SBSB Z C SCSC Z SPSP
25
CSI 3525, Noms etc., page 25 Graphes dappels Montre quel unités du programme peuvent appeler quel autres unités. Les flèches pointant vers lunité doù elles proviennent montrent la possibilité de récursivité. P B AC
26
CSI 3525, Noms etc., page 26 Visibilité, lenvironnement de référence P A B S B P.X, P.A.Y, P.A.B.Z S A P.X, P.A.Y C S C P.X, P.C.Z S P P.X P.X signifie "variable X déclarée dans P".
27
CSI 3525, Noms etc., page 27 Trous dans la porté (variables cachées): le même nom est utiliser dans un bloc et dans un bloc imbriqué à lintérieur de celui-ci. Les variables visible dans S P : P.X, P.Y Les variables visible dans S A : P.A.X, P.Y, P.A.Z Les variables visible dans S B : P.X, P.B.Y, P.B.Z Donc, P.X est visible partout dans P sauf dans S A, où P.A.X la cache en devenant elle même visible. Et, P.Y est visible partout dans P sauf dans S B, où P.B.Y la cache en devenant elle même visible. Il ny a pas de trous dans la porté de P.A.Z ou P.B.Z car elles ont des régions de visibilité disjointes. P XYABXYAB A XZXZ SASA SPSP B YZYZ SBSB
28
CSI 3525, Noms etc., page 28 Genres de porté Jusquici on a parlé de porté statique (ou porté lexicale). Celle-ci permet de déterminer lusage des variables de façon statique, avant lexécution. La Porté Dynamique est une alternative aux avantages qui ne sont pas claire. Lidée est de chercher le nom dans une chaîne des procédures qui sont appelé, en commencent par le programme principale. Cette chaîne est construite selon les règles de visibilités, mais en ignorant limbrication des procédures.
29
CSI 3525, Noms etc., page 29 Exemple de porté main P(){ int X; void A(){ X = X + 1; print(X); } void B(){ int X; X = 17; A(); } X = 23; B(); } Le programme appel B, puis B appel A. Quand A utilise X, Lequel des X est-ce? Avec la porté statique, cest le X de P, le bloc dans lequel A est imbriquée. Le résultat est 24. Avec la porté dynamique (où la recherche est faite dans la chaîne dappels), cest le X de B, le bloc le plus récemment appelé contenant une déclaration de X. Le résultat est 18.
30
CSI 3525, Noms etc., page 30 Porté dynamique La règle de porté dynamique a été utilisée dans APL, SNOBOL-4 et le Lisp classique. Elle est peu utilisée aujourdhui. Même Common Lisp, une version plus récente de Lisp a adopter la porté statique. La règle de porté dynamique est plus facile à implémenter, mais: Il est impossible de savoir, à la compilation, à quel objet réfèrent les variables, donc la vérification des types est impossible. Les variables internes ne sont plus protégées. Dans lexemple, X est locale dans B, mais peut être accédé à partir de A.
31
CSI 3525, Noms etc., page 31 Constantes et Initialisation de variables Les points importants peuvent être trouvé dans le manuel aux sections 5.11-5.12.
32
CSI 3525, Noms etc., page 32 Vérification des Type Points Opérations et opérandes Typage fort Conversion et conversion implicite
33
CSI 3525, Noms etc., page 33 Types dopérations Sauf certaines exceptions, les opérations dun langage de programmation nécessitent des opérandes (paramètres) bien défini, et dun type spécifique. Exemples dopérations Booléennes (comparaison, et, ou, etc), Arithmétiques (+, -, *, /, sin, tan, exp etc.), De chaînes de caractères (concaténation, sous-chaînes etc.), Assignations (une opération avec deux opérandes), La transmission dun paramètre à une procédure.
34
CSI 3525, Noms etc., page 34 Vérification de type La vérification de type assure que lorsquun opérateur est utilisé, il reçoit des paramètres dun type quil peut traiter. La vérification de type peut être faite à la compilation ou à lexécution. Une erreur de type se produit lorsquun paramètre de type inapproprié est passé à une opération. Ceci peut également être signalé à la compilation ou à lexécution.
35
CSI 3525, Noms etc., page 35 Typage fort Un langage de programmation utilise le typage fort quand toutes les erreurs de type peuvent être découverte à la compilation. Ceci nest pas facile, même dans un langage très stricte tel que Pascal. Le problème: les sous-types des types énumérés. type day = (mo,tu,we,th,fr,sa,su); workday = (mo,tu,we,th,fr); var x : day; y : workday; {...} y := x; {???} Il y a aussi les enregistrements qui ont des variantes. (dont des exemples seront présentés plus tard).
36
CSI 3525, Noms etc., page 36 Typage fort (2) Une définition moins stricte du typage fort: toutes les erreurs de types peuvent être détectés, et préférablement à la compilation. Il est intéressant de noter quaucun langage populaire inclus le typage fort parfait. Il y a toujours des petites exceptions. Java a peu de telles dexceptions.
37
CSI 3525, Noms etc., page 37 Mais… Le typage stricte des opérandes est élégant et désirable, quoi que possiblement peu pratique. Que faire quand deux opérandes possible ont un sens compatible? Example: var x : real; n: integer; {...} n := 2; {...} x := n * 3.14; Cette multiplication sera rejetée par un compilateur stricte. Il faudrait utiliser une conversion « type casting ». x := float(n) * 3.14;
38
CSI 3525, Noms etc., page 38 Forçage de type On peut aussi utiliser une conversion implicite: le changement automatique de la forme dune opérande avec un type légèrement inapproprié. Pour lexemple précédant, la valeur de n peut être représentée comme un float, et cette nouvelle valeur peut être utilisé pour la multiplication. C et Perl sont des exemples de langages ou la conversion implicite est utilisé de façon exagérée.
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.