1 Cours 6 Définitions de nouvelles procédures Transmissions de données/résultats Déclarations globales/locales Visibilités Interface/implementation
2 Procédures rappel : les procédures générées automatiquement exécutées sur évènement ou sur appel explicite pourquoi définir des procédures répartir les tâches diviser la difficulté regrouper les instructions d’une même étape
3 Définition de procédure en-tête; déclarations internes; begin instructions end; en-tête : Procedure nomprocédure(paramètres);
4 Paramètres ils représentent les données et/ou résultats on dit aussi arguments formels les types doivent déjà exister 3 catégories de transmission : a) valeur b) adresse c) constante
5 Déclarations internes déclaration de constantes, types et variables, comme déclarations déjà rencontrées ce sont des noms utilisables uniquement par la procédure : locaux si un nom identique est défini en dehors, il est invisible par la procédure
6 Instructions les mêmes qu’ailleurs : affectation, si, boucles,... le nom de la procédure ne contient pas de valeur par contre, l’utilisation de son nom à l’intérieur d’une procédure la relance ! c’est la récursivité
7 Utilisation d’une procédure une instruction complète pour faire appel : nomprocédure(paramètres)... les paramètres fournis sont appelés arguments effectifs ce sont les valeurs transmises à la procédure constantes ou variables ou expressions et/ou les résultats renvoyés par la procédure variables uniquement (adresse transmise)
8 Exemple complet clic sur bouton Traitement : Calculs de 2 suite de valeurs (abscisses et ordonnées de points) Extrêmes des abscisses, Extrêmes des ordonnées
9 Déclarations globales const NbMax=200; type TValeurs=array[1..NbMax] of real; On pourra “remplir” jusqu’à 200 éléments dans les variables de type TValeurs éventuellement moins, pas plus, numérotés de 1 à 200 on peut utiliser NbMax pour limiter plus loin…
10 procedure Calculs(Var V1,V2 :Tvaleurs ; Nb :integer) ; var n :integer ; begin for n :=1 to Nb do begin V1[n] :={expression de calcul pour chaque valeur de V1} V2[n] :={expression de calcul pour chaque valeur de V2} end ; procedure Tform1.bnTraitementClick(Sender : Tobject) ; var X,Y :Tvaleurs ; Xmin,Xmax,Ymin,Ymax :real ; begin Calculs(X,Y,200) ;
11 Scénario d’exécution de bnTraitementClick Lancement de Calculs L'adresse de X est transmise pour que V1 soit logé au même endroit que X Idem pour Y : V2 occupe la même zone que Y Par contre Nb occupe une nouvelle zone qui lui est propre
12 procedure MinMax(Const V :Tvaleurs ;Nb :Integer ; Var Vmin,Vmax :real) ; var n :integer ; begin Vmin :=V[1] ; Vmax :=V[1] ; for n :=2 to Nb do if V[n]<Vmin then Vmin :=V[n] else if V[n]>Vmax then Vmax :=V[n] ; end ; procedure Tform1.bnTraitementClick(Sender : Tobject) ;... begin... MinMax(X,200,Xmin,Xmax) ;
13 Lancement de MinMax pour X L’adresse de X est transmise pour que V occupe la même zone de mémoire que X mais const interdit les modifs de V Nb occupe lui aussi une nouvelle zone L'adresse de XMin est transmise pour que VMin soit logé au même endroit que Xmin Idem pour Xmax : Vmax occupe la même zone que XMax
14 Lancement de MinMax pour Y L’adresse de X est transmise pour que V occupe la même zone de mémoire que X mais const interdit les modifs de V Nb occupe lui aussi une nouvelle zone L'adresse de YMin est transmise pour que VMin soit logé au même endroit que Ymin Idem pour Ymax : Vmax occupe la même zone que YMax
15 Paramètres (2) a) on ne met rien devant un paramètre “donnée” b) on met var devant les paramètres “résultats” c) on met const devant les paramètres “données” si on ne veut pas utiliser une nouvelle zone de mémoire
16 Positions des déclarations et des sous-programmes dès le début de la partie implementation ils sont alors utilisables dans tout ce qui suit
17 Déclarations globales et locales const, type, var et sous-programmes globales : en dehors de tout sous- programme locales : internes à un sous-programme
18 Visibilité des éléments déclarés globaux : de partout sauf redéclaration interne locaux : à l’intérieur mais pas à l’extérieur
19 Cas de sous-programmes déclarés dans un autre ils sont visibles par le parent ils peuvent accéder aux éléments du parent mais le parent ne peut accéder aux éléments déclarés dans ses enfants
20 Interface et implementation interface : ce qui est visible en dehors de l’unité implementation : définitions des éléments propres à l’unité ces définitions sont invisibles en dehors