30
Hiver 2010 JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Embed Size (px)

Citation preview

Page 1: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

GEF 243BProgrammation informatique

appliquée

Fonctions

Page 2: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Revue

• Quels sont les trois opérateurs logiques en C?• Quelle est la précédence entre ces opérateurs?• Quel est le problème avec l’optimisation des

expressions logiques en C?

Page 3: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Synopsis

• Attaquer la complexité• Décomposition fonctionnel• Fonctions

NomsTypeParamètres DéclarationDéfinitionAppelCommunications inter-fonctions

Page 4: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Attaquer la complexité

• Jusqu’à maintenant, nous avons seulement vue des exemples de programmes forts simples.

• Mais le monde n’est une place simple où l’on peut vivre, en fait, il est très complexe

• Nos programmes appliqués doivent vivre dans le vrai monde

• Les humains se servent de trois concepts de base pour faire face à la complexitéDécompositionHiérarchieAbstraction

Page 5: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Décomposition

• Décomposition nous aide à séparer un problème complexe en plus petits problèmes qui sont plus facile à gérer.

• Les bénéfices les plus important dans la décomposition sont: Distribution de la charge de travail à d’autre travailleurs Réutilisation des parties d’une solution pour en résoudre un autre Augmentation de l’extensibilité (habilité qu’un système a de

grandir sans une augmentation exponentielle des efforts) Simplification des tests Coûts réduits Augmentation de la qualité …

• Le premier niveau de décomposition que nous allons étudier est celui des fonctions (notre premier regard au design)

Page 6: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Séparation fonctionnelle

• Pour résoudre un problème dans un langage structurel comme C, nous prenons une approche de haut en bas pour décomposer notre problème d’une grosse fonction, main(), à de plus petites fonctions

• En prenant une approche haut en bas, nous séparons nos fonctions en hiérarchie. Quelle sorte?

• Une hiérarchie fonctionnelle

Page 7: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Séparation fonctionnelle

• Dans une approche de haut en bas, chaque fonction doit exécuter seulement une fonction.

• Si la fonction fait plus d’une tâche, il y a une forte probabilité que:Elle est compliquée et non cohésive (pas certain de ce

que la fonction fait ou son but principal)Sera difficile à vérifier (trop d’effets)Pas facilement réutilisable (ne fait pas seulement une

tâche)Elle a trop de paramètres (besoin de trop d’information)

Page 8: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Séparation fonctionnelle• Les séparations fonctionnelles (functional breakdowns)

sont normalement représentées dans des graphes de structure (structure charts)Cela montre une hiérarchie fonctionnelle

Page 9: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Séparation fonctionnelle

• Vous continuez à séparer vos fonctions jusqu’à ce que chaque fonction représente un but simple qui peut être facilement comprit.

• Ce processus est appelé factorisation Ex.: Vous devez écrire un programme qui lit un fichier,

et qui donne un estimé du nombre moyen de lettres par mots.

• La prochaine diapositive vous montre une structure possible pour ce programme

Page 10: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Séparation fonctionnelle

NombreMoyenMain()

OuvreFichier LitMots ImprimeRésultats

CompteAuProchEspace

Statistiques

ImprimeEntête

ImprimeStats

FermeFichier

Graphe de structure

Page 11: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Séparation fonctionnelle

• Nous avons parlé de deux des trois concepts pour attaquer la complexité: Décomposition et hiérarchie.

• Nous allons maintenant regarder le troisième concept: Abstraction

• Croyez le ou non, mais nous avons déjà créé des abstractions: les fonctions.

Page 12: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Séparation fonctionnelle

• Pourquoi est-ce que les fonctions sont des abstractions?Les humains sont excellents pour faire des

abstractions; nos cerveaux sont des filtres passe-bas (Puis y’en a que ça passe plus bas que d’autre…)

Nous ne voulons pas savoir touts les détails sur tout, nous voulons seulement utiliser l’information qui établie un niveau de connaissances confortable pour la tâche qui nous intéresse

Page 13: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Séparation fonctionnelle

• Une abstraction d’une automobile pour Homer:

Accélérateur

Pédale de freinsVolant

Miroirs Odomètre

Porte-gobelets

Klaxon

Clignotants (optionnels)

Page 14: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Fonctions – Ce que nous savons jusqu’à maintenant

• Les fonctions sont au plus bas niveau de la décomposition d’un problème

• Chaque fonction devrait avoir un seul but ou tâche à exécuter

• Les fonctions sont représentées dans un graphe de structure qui est une hiérarchie (fonctionnelle)

• Une fonction est une abstraction parce qu’elle peut cacher les détails d’une tâche et elle réduit l’interface à des paramètres et une valeur de retour. (Il ne faut pas oublier que les fonctions peuvent avoir des effets secondaires.)

Page 15: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Fonctions – Avantages

• Les fonctions nous permettent de factoriser nos problèmes en parties gérables et compréhensibles

• Elles facilitent la distribution du travail• Elles permettent la réutilisation du code –

bibliothèques et fonctions définies par les programmeurs de systèmes

• Elles nous permettent de protéger de l’information en dedans de chaque fonction (visibilité)

• Et encore plus…

Page 16: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Fonctions – L’origine

• Originalement, les sous routines ou procédures furent crées pour permettre la réutilisation d’un bloc de code à différentes places dans un même programme

• Dans les années 1970 la programmation structurée et le raffinement par étapes (stepwise) sont devenues les méthodes de design préférées

• Le raffinement par étapes consiste en plusieurs itérations qui ont pour but de séparer les fonctions (sous routines) à l’intérieure d’un programme

Page 17: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Fonctions – Noms

• Une fonction doit avoir un nom qui reflète son butfloat CalculMoyenneClasse(float notes[], int etudiants); //oui

float CMC(float n[], int i); // non

• On se souvient des conventions de nommagePremière lettre des fonctions en majusculeNom descriptif, mots entiers pas d’abréviationsMajuscule au début de chaque mot

Page 18: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Fonctions - Type

• Une fonction a un type; donc une fonction doit être déclaré avec son type

• Le type de la fonction est déterminé par ce que la fonction retourne (la variable)

• Une fonction peut retourner seulement une valeurPlus sur cela plus tard

• Contrairement aux variables, une fonction peut avoir le type voidvoid MaFonction(void);

Page 19: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Fonctions - Type

• Une fonction void ne peut pas faire partie d’une expression d’assignation, elle peut seulement être un énoncé; Parce qu’elle retourne void (un zilchoctet de données)

• Si vous ne définissez pas le type explicitement, C assume qu’elle retourne un integerNe faites pas cela dans ce cours.

Page 20: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Fonction - Paramètres

• Il y a deux façons principales pour échanger de l’information entre les fonctionsVariables partagées (variables globales) –

Communication Informelle de données. Faites vous une faveur, évitez d’utiliser les variables globales a moins que cela soit absolument nécessaire *

Passage de paramètres – La déclaration formelle d’information nécessaire pour qu’une fonction rencontre son but

*Ce n’est jamais nécessaire .

Page 21: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Fonctions - Déclaration

• Une fonction est déclarée avec un prototypeNotez qu’il y a une différence entre déclaration et définition

• Le prototype de fonction consiste en un entête de fonction et un point-virgule.

Type_de_retour NomDeFonction (liste de paramètres formels);

Ex.:

void BonjourMonde(void); //Pas de retour pas de paramètres

int FactorialCalc(int number); //Peut être utilisé dans une

//expression

Page 22: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Classification de fonctions

• Nous pouvons classifier les fonctions dans 4 groupes

• Fonctions void sans paramètresvoid Bonjour (void); //Imprime pré-init

//bonjour

• Fonctions void avec paramètresvoid ImprimeInt (int x); //Imprime x à l’écran

• Fonction non-void sans paramètresint PrendQuantite (void); //Retourne une

//quantité du clavier

• Fonctions non-void avec paramètresint Racine (int x); //Retourne la racine

//de x

Page 23: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Fonctions - Définition

• La définition du code de la fonctionSon implémentation

• Notez que il n’y a pas de point-virgule dans l’entête de la fonction pour la définition alors qu’il y en a un pour la déclaration du prototype

Page 24: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Fonctions - Définition

Type_de_retour NomDeFonction (liste formelle de paramètres)

{

\*définitions locales*\

\*énoncés*\

} \\ nom de la fonction

entête

corps

Page 25: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Fonctions - Définition

Le type de cette fonctiondoit être explicite

Utilisez un return mêmesi vous retournez rien

Page 26: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Fonction - appel

• Une fonction est appelée dans le code en utilisant son nom et une liste de paramètres actuels

• Les noms de paramètres n’ont pas besoin d’être les mêmes que pour les paramètres formelsLes paramètres peuvent être passés par valeur ou par référence

(nous allons revenir à cela quand on va regarder les tableaux, opérateurs de pointeurs et d’adresses)

int Multiplie(int a, int b); //déclaration

int premierInt=10, secondInt=20;

produit = Multiplie(premierInt, secondInt);

Page 27: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Fonctions – Déclaration, Définition et Appel

• Le nom d’une fonction peut être utilisé de trois façons différentes dans un programmeDéclaration – fait avec un énoncé de prototype avec un

point-virgule Définition – l’élaboration (code) de la fonction sans le

point-virguleAppel – l’utilisation de la fonction dans un énoncé

Page 28: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

3g Inter-Function Communications

• Il y a trois stratégies de communications entre les fonctions appelées et appelantes :Vers le basVers le hautBi-directionnel

Page 29: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

3g Inter-Function Communications• Flot vers le bas:

Appels de fonctions envoie des données aux fonctions qui sont appelées en utilisant des paramètres

• Flot vers le haut: Les fonctions appelées envoient des données de retours vers les

fonctions qui appellent• Pour l’instant on considère que une valeur unique est envoyée

• Flot bi-directionnel : Les fonctions qui appellent les autres fonctions envoie des

paramètres et les fonctions appelées envoie des valeurs de retour.

• Les paramètres peuvent être passés par valeur ou référence On y revient plus tard

Page 30: Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions

Hiver 2010 JGA Beaulieu

Quiz Time

• Quelle est la différence entre une définition et une déclaration pour une fonction?

• Est-ce que les noms de paramètres sont requis dans le prototype de fonction?

• Pourquoi définit-on des fonctions comme programmeurs?