1 / 17

CSI3525: Concepts des Langages de Programmation

CSI3525: Concepts des Langages de Programmation. Notes # 11: Sous-Programmes ( Lire Chapitre 8 ). Introduction. Au depart, les sous-programmes (procedures et fonctions) ont ete concus comme un mecanisme de re-utilisation de code.

mercury
Download Presentation

CSI3525: Concepts des Langages de Programmation

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CSI3525:Concepts des Langages de Programmation Notes # 11: Sous-Programmes ( Lire Chapitre 8 )

  2. Introduction • Au depart, les sous-programmes (procedures et fonctions) ont ete concus comme un mecanisme de re-utilisation de code. • Maintenant, ils sont consideres comme un mecanisme fondamental d’abstraction. • Un sous-programme est un bloc nomme, ayant une porte locale et encapsulant un algorithme. • Au niveau semantique, un sous-programme est une operation complexe qui peut etre initiee (appelee) comme une operation elementaire. • On parle d’abstraction de processus.

  3. Elements d’un Sous-Programme I Un sous-programme: • est defini grace a des operations de plus bas niveau, • a un nom, • a une methode qui lui permet d’accepter des arguments et de delivrer des resultats (passage de parametres et communications a travers des objets non-locaux). • est evalue en suspendant le programme d’appel, en executant les instructions du bloc et en retournant au programme d’appel.

  4. Elements d’un Sous-Programme II • L’ entete d’un sous-programme est representee par: • un nom, • des modes de passage de parametres, • un type correspondant au type de valeur qu’il retourne si le sous-programme est une fonction. • Le corps d’un sous-programme est represente par: • une sequence d’instructions. • Un sous-programme peut etre defini (ou declare), mais jamais appele. Par ailleur, il peut aussi etre appele tres souvent et meme rcursivement.

  5. Vue Abstraite des Sous-Programmes • Une procedure etend le langage: c’est un nouveau type d’instruction. De meme, une fonction est un nouveau type d’operation. • Les parametres d’un sous-programme sont la generalization d’objets manipules par les instructions du sous-programme: un sous-programme doit fonctionner de la meme facon pour toutes les valeurs parametriques. On parle aussi de “dummy variables”. • Lorsqu’on parle de passage de parametre, on veut dire remplacement d’entites generalisees dans la declaration du sous-programme (parametres formels) avec des objets existants (parametres actuels).

  6. Passage de Parametre • Le mode de passage d’un parametre determine: • Quelle partie de l’argument est donnee au sous-programme: • Seulement sa valeur • Seulement son addresse • Et sa valeur et son addresse. • Quelles restrictions sont appliquees sur l’usage de l’argument: • Permission de lire • Permission d’ecrire • Permission de lire et d’ecrire.

  7. Passage par Valeur • Seule la valeur du parametre est donnee au sous-programme. Pour sauvegarder cette valeur, on utilise une variable locale qui devient son addresse. • Ceci est implemente en calculant et copiant la valeur du parametre actuel dans l’espace de memoire du sous-programme. • Ceci peut couter cher si le parametre est un obet large tel qu’un tableau. • Le passage par valeur est utilise en Ada par le parametre “in”, par le parametre-valeur du Pascal; et par tous les parametres en Algol-68 et en C.

  8. Passage par Resultat • L’addresse (mais pas la valeur) du parametre est rendue disponible au sous-programme seulement pour acces par ecriture. • En principe, ce parametre est considere comme un objet local qui ne peut pas apparaitre dans des expressions. • Le passage par resultat est utilise en Ada par le parametre “out”; il n’est pas disponible en Pascal.

  9. Passage par Valeur-Resultat (egalement: Passage par Copie) • Lorsque le sous-programme est active, la valeur du parametre est copie dans un objet local. La valeur finale de cet objet est re-copiee dans le parametre. • Le passage par valeur-resultat est utilise en Ada par le parametre “in-out”; il n’est pas disponible en Pascal. • Note: Les passages par resultat et par valeur-resultat peuvent, dans des situations assez bizarres, etre sensitifs a l’ordre dans lesquels les parametres sont evalues.

  10. Passage par Reference I . (egalement Passage par Addresse) • Aussi bien les addesses que les valeurs sont disponibles aux instructions du sous-programme. • Ceci est implemente par reference indirecte: le parametre actuel est l’addresse d’une variable dans le programme d’appel. Il n’est pas necessaire de copier la valeur. • L’un des grands problemes causes par le passage par reference est la declaration d’alias. Par exemple, on peut passer la meme variable comme deux parametre actuels differents. De meme, une variable non-locale referenciee dans le sous-programme et passee comme parametre.

  11. Passage par Reference II . (egalement Passage par Addresse) • Le passage par reference est utilise en Pascal par le parametre “var”; il est utilise par tous les parametres dans le “vieux” FORTRAN; il n’est pas disponible en Ada. • Note 1: En quoi le mode de passage par reference differe du passage par valeur-resultat? • Note 2: Un parametre passe par resultat, valeur-resultat et reference doit etre une variable.

  12. Model Simplifie de Procedures • in  •  out • in-out   in-out • reference   reference • Note: la classification de parametres formels basee sur les addresses et les valeurs n’est significative que dans les langages a variables modifiables. Exemple: elle n’est pas applicable au Prolog ou les addresses ne sont jamais disponibles (puisqu’il n’y a pas d’affectation).

  13. Passage par Nom . (egalement: Evaluation Delayee) • Le parametre actuel remplace le parametre formel: imagine la modification du sous-programme en inserrant le parametre actuel plutot que le parametre formel. • Si la location d’un parametre est necessaire (exemple: pour une affectation), elle est re-evaluee a chaque reference. • Si la valeur d’un parametre est necessaire, elle est aussi re-evaluee a chaque fois qu’elle apparait dans le corps modifie du sous-programme. • L’evaluation delayee d’une expression demande l’acces a ses variables (i.e., son environement)

  14. Fonctions I • Une fonction produit une valeur, retournee par une instruction telle que: return expression ou assignee au nom de la fonction (comme en Pascal). • Lorsqu’une fonction est utilisee dans une expression, elle enrichie le langage en introduisant (dans un certain sens) de nouveaux operateurs.

  15. Fonctions II • Les effets secondaires dans les fonctions sont problematiques. • Le mieux serait de ne permettre que des parametres “in” et aucun effet secondaires. Cela refleteraient vraiement les fonctions Mathematiques. • Si des effets secondaires sont reellement necessaires, une procedure devrait etre utilisee avec un parametre reserve pour la transmission de la valeur que la fonction retournerait. • Probleme de Conception: Quels types d’objets devraient-on permettre a une fonction de retourner?

  16. Passage de Sous-Programmes comme Parametres • L’idee est simple: un algorithme qui depend d’un autre algorithme. • L’example typique est celui de l’integration. Il consiste a trouver la surface contenue sous la courbe decrite par une fonction. • Le sous-programme “integration” doit etre capable de calculer l’integrale de n’importe quelle fonction. • Voir l’example.

  17. Les Sous-Programmes Surcharges • Ceci est similaire a l’idee de surchargement d’operateurs. • En particulier, une procedure ou une fonction peut etre definie plusieures fois avec le meme nom du moment que le type de tous les parametres ne sont pas les memes. • Ceci est permis en Ada et en C++. • Voir l’exemple.

More Related