La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

CSI 3525, sous-programmes, page 1 Sous-programmes Concepts généraux Passage de paramètres Fonctions Sous-programmes en tant que paramètre.

Présentations similaires


Présentation au sujet: "CSI 3525, sous-programmes, page 1 Sous-programmes Concepts généraux Passage de paramètres Fonctions Sous-programmes en tant que paramètre."— Transcription de la présentation:

1 CSI 3525, sous-programmes, page 1 Sous-programmes Concepts généraux Passage de paramètres Fonctions Sous-programmes en tant que paramètre

2 CSI 3525, sous-programmes, page 2 Concepts généraux Originalement, les sous-programmes (procédures et fonctions) étaient un mécanisme de réutilisation du code, une façon déviter la répétition. Maintenant, on pensent aux sous-programmes comme un mécanisme dabstraction. Un sous-programme est un bloc nommé (avec une porté locale) qui encapsule un algorithme. Sémantiquement, un sous-programme est une opération complexe qui peut être initiée (appelée) comme si elle était une opération de base. On dénomme ce mécanisme, labstraction de processus.

3 CSI 3525, sous-programmes, page 3 Un sous-programme… est défini au moyen dopérations de bas niveau, possède un nom, incorpore un moyen daccepter des paramètres et de retourner des résultats (le passage de paramètres et la communication via des objets non- locales), est exécuté figeant lunité du programme ayant appelé ce sous-programme, puis en exécutant les instructions du bloc, avant de revenir à lunité layant appelé.

4 CSI 3525, sous-programmes, page 4 Lentête dun sous-programme: nom, mode de passage des paramètres, le type des valeurs retournées (si le sous programme est une fonction). Le corp dun sous-programme: une séquence dinstructions. Une procédure étend le langage de programmation: elle devient une nouvelle instruction. De façon similaire, une fonction est une nouvelle opération.

5 CSI 3525, sous-programmes, page 5 Paramètres Un paramètre dun sous-programme est la généralisation dun objet manipulé par les instructions du bloc correspondant un sous- programme devrait fonctionner de la même manière, peu importe la valeur des paramètres. On les appel aussi dummy variables. Le passage de paramètres signifie le replacement des entités généralisées dans la déclaration dun sous-programme (paramètres formels) par des objets concrets.

6 CSI 3525, sous-programmes, page 6 Passage de Paramètres Le mode de passage de paramètres détermine comment les arguments seront transmis au sous- programme: la valeur seulement ladresse seulement ladresse et la valeur et les restrictions sur lusage de ces arguments: lecture seulement écriture seulement lecture/écriture.

7 CSI 3525, sous-programmes, page 7 Un modèle simplifié dune procédure Une procédure est une boite noire qui lit des données en entré et /ou écrit des les résultats en sortie. in out in out

8 CSI 3525, sous-programmes, page 8 Passage par valeur Le Passage par valeur est grandement utilisé: paramètres in dAda; paramètres value de Pascal; tout les paramètres de Algol-68, C. Seul la valeur dun paramètre est donnée au sous- programme. Pour conserver cette valeur, on utilise une variable locale (qui devient ladresse du paramètre). Ceci est normalement implémenté en copiant la valeur du paramètre dans un espace mémoire appartenant au sous- programme. Ceci peut être coûteux si les paramètres sont des objets de grande taille, comme des tableaux.

9 CSI 3525, sous-programmes, page 9 Passage par résultat Le passage par résultat est une façon de transmettre les sorties dun sous programme. En Ada: paramètre out Ladresse (et non la valeur) du paramètre est envoyée au sous-programme mais en lui donnant accès pour lécriture seulement (« write-only »). Techniquement, on a un objet local qui ne peut apparaître dans des expressions.

10 CSI 3525, sous-programmes, page 10 Passage par valeur-résultat En Ada: paramètres in out Appelé aussi passage par copie. Quand le sous-programme est activé, la valeur des paramètres est copiée dans un objet local. Après lexécution du sous- programme, la valeur finale de cet objet est recopiée dans le paramètre.

11 CSI 3525, sous-programmes, page 11 Exemple de passage par valeur-résultat -- procedure P(in out X: someType); -- un bloc Q appel P(Z), Z vient de Q begin X := Z; -- le corp de P utilise X Z := X; end; Cette méthode, et le passage par résultat peuvent dans in certaines situations bizarres dépendre de lordre dans lequel les paramètres sont évalués (voir le manuel).

12 CSI 3525, sous-programmes, page 12 Passage par référence paramètres var en Pascal; Tout paramètres en Fortran (anciennes versions). Ladresse et la valeur sont toute deux disponible dans les instructions du sous-programme. Ceci est implémenté par ladresse indirecte: le paramètre est en effet ladresse dune variable de lunité ayant appelée le sous-programme. Aucune copie nest nécessaire.

13 CSI 3525, sous-programmes, page 13 Exemple de passage par référence -- procedure P(var X: someType); -- un bloc Q appel P(Z), Z vient de Q begin -- le corp de P utilise Z end; Tout changement de Z à lintérieur de P est préservé après que P soit terminé, et sera visible dans Q.

14 CSI 3525, sous-programmes, page 14 program P; var J: integer; A: array [1..10] of integer; procedure SWAP( MODE X,Y: integer); var TMP: integer; begin TMP := X; X := Y; Y := TMP; end; begin J := 3; A[J] := 6; SWAP(J, A[J]); write(J, A[3]); end. MODE = in: J = 3, A[3] = 6 (aucun changement) MODE = out: impossible (on ne peut lire la valeur de X) MODE = ref ou in out: J = 6, A[3] = 3 Exemple de passage de paramètres: Pascal

15 CSI 3525, sous-programmes, page 15 À considérer… Un problème important du passage par référence peut être la dénomination (« aliasing »). Une situation possible: passer la même variable en tant que deux paramètres différent. Une autre possibilité: une variable non-locale à laquelle on fait référence dans le sous-programme qui est également un paramètre. Un paramètre passé par résultat, valeur-résultat ou référence doit être une variable. Comment le passage par référence est-il différent du passage par valeur-résultat?

16 CSI 3525, sous-programmes, page 16 La classification des modes de passage de paramètres basé sur les adresses et valeurs est raisonnable pour les langages impératifs ayant des variables pouvant être modifiées. Cependant, elle ne sapplique pas à Prolog, où les adresses ne sont jamais disponibles (en particulier, il ny a pas dassignations). append([a], [b], Result) in in out append(First, Second, [a,b]) out out in append([X,b], [c,Y], [a,P,Q,d]) ni in ni out Prolog est différent

17 CSI 3525, sous-programmes, page 17 Fonctions Une fonction produit une valeur, retournée par une instruction spéciale telle que return someValue; ou assignée au nom de la fonction (comme en Pascal). Quand les fonctions sont utilisées dans des expressions, elles enrichissent le langage. On peut les traiter comme des opérateurs. Par exemple, si EXP(X, Y) a été défini pour calculer X Y, on peut lutiliser dans une expression: Z := 2.0 * EXP(A, N); malgré que lexposant nétait originalement pas défini dans le langage.

18 CSI 3525, sous-programmes, page 18 Les effets secondaires des fonctions sont un problème. Idéalement, seul les paramètres in (et aucun effet secondaire) ne devrait être permis dans une fonction mathématiquement correcte. Si des effets secondaires sont nécessaires, une procédure devrait être utilisée avec un paramètre réservé pour transmettre la valeur qui aurait été retournée par la fonction. Un choix de conception (concernant lorthogonalité!): restreindre le type des objets pouvant être retourné par les fonctions. Fonctions (2)

19 CSI 3525, sous-programmes, page 19 Sous-programmes en tant que paramètres Le concept est simple: un algorithme qui dépend dun autre algorithme. Scheme est conçu parfaitement de ce coté; les langages impératifs le sont moins. Considérez lexemple dune intégration numériquetrouver laire sous la courbe définie par une fonction mathématique.

20 CSI 3525, sous-programmes, page 20 function DEFINITE_INTEGRAL( function F(ARG: real): real; LOW, HIGH: real): real; const N_INTERVALS = 1000; var DELTA, SUM, X: real; I: integer; begin DELTA := (HIGH - LOW) / N_INTERVALS; X := LOW; SUM := F(X); for I := 1 to N_INTERVALS - 1 do begin X := X + DELTA; SUM := SUM * F(X) end; X := X + DELTA; SUM := SUM + F(X); DEFINITE_INTEGRAL := 0.5 * DELTA * SUM end; Sous-programmes en tant que paramètres: Pascal

21 CSI 3525, sous-programmes, page 21 Nimporte quel fonction real real peut être passé à cette méta-fonction: function SQ( A: real ): real; begin SQ := A * A end; {...} x := DEFINITE_INTEGRAL(SQ, 0.0, 9.0); Cet appel retourne (environs) Sous-programmes en tant que paramètres: Pascal (2)


Télécharger ppt "CSI 3525, sous-programmes, page 1 Sous-programmes Concepts généraux Passage de paramètres Fonctions Sous-programmes en tant que paramètre."

Présentations similaires


Annonces Google