From 813a09034a5abf5d5b721b0323f40c15cfefd297 Mon Sep 17 00:00:00 2001 From: gwen Date: Thu, 6 Apr 2017 14:55:36 +0200 Subject: [PATCH] =?UTF-8?q?diveres=20d=C3=A9finitions=20de=20la=20programm?= =?UTF-8?q?ation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- algorithmique/cours/fondement.txt | 31 +++++++---- algorithmique/cours/langage.txt | 45 +++++++++++++++ algorithmique/cours/modularite.txt | 89 ++++++++++++++++++++---------- algorithmique/cours/programme.txt | 11 +++- 4 files changed, 133 insertions(+), 43 deletions(-) diff --git a/algorithmique/cours/fondement.txt b/algorithmique/cours/fondement.txt index af45b06..e7ce4c1 100644 --- a/algorithmique/cours/fondement.txt +++ b/algorithmique/cours/fondement.txt @@ -1,6 +1,15 @@ Présentation de l'art de programmer ==================================== +Qu'est-ce que la programmation ? +-------------------------------- + +programmation + + Description d’un calcul (traitement) dans + un langage compréhensible par la machine + (langage de programmation) + Le processus d'abstraction -------------------------- @@ -18,18 +27,18 @@ explication du fonctionnement d'une machine abstraite de bas niveau, puis en allant de plus en plus haut, mais étant sous-entendu qu'il faut rester connecté au bas niveau (comprendre comment ça se passe derrière la scène). -Dans ces deux cas, il est sous-entendu qu'on apprend plus de choses et plus rapidement en mettant -les mains dans le cambouis, ce qui vrai bien sûr. Mais cela sous-entend qu'un développeur doit -rester le nez dans le guidon. Qu'il doit être un expert de son domaine en accumulant des technos -sans aucun recul. Bie sûr il se doit d'être un expert du système dans lequel il évolue -(connaissance du système d'exploitation, binding avec le C, du ramasse miette (garbage -collector), interaction avec les différentes librairies, gestion et optimisation de la mémoire, +Dans ces deux cas, il est sous-entendu qu'on apprend plus de choses et plus rapidement en mettant +les mains dans le cambouis, ce qui vrai bien sûr. Mais cela sous-entend qu'un développeur doit +rester le nez dans le guidon. Qu'il doit être un expert de son domaine en accumulant des technos +sans aucun recul. Bie sûr il se doit d'être un expert du système dans lequel il évolue +(connaissance du système d'exploitation, binding avec le C, du ramasse miette (garbage +collector), interaction avec les différentes librairies, gestion et optimisation de la mémoire, architecture par microservices, threads...) mais il doit aussi être capable de prendre du recul. -L'approche algorithmique (algorithmique de pseudo code, algorithmique algébrique et modulaire) -est un véritable moyen pour le programmeur de prendre du recul : elle commence par se placer du -côté de l'esprit humain et de ses capacités de compréhension et d'abstraction, elle autorise une -pensée rationnelle sur l'art de programmer et permet au programmeur d'effectuer les bons choix, +L'approche algorithmique (algorithmique de pseudo code, algorithmique algébrique et modulaire) +est un véritable moyen pour le programmeur de prendre du recul : elle commence par se placer du +côté de l'esprit humain et de ses capacités de compréhension et d'abstraction, elle autorise une +pensée rationnelle sur l'art de programmer et permet au programmeur d'effectuer les bons choix, en connaissance de sa discipline. Le lien est fait ensuite avec le plus bas niveau grâce une implémentation effective @@ -98,5 +107,3 @@ plus efficace. langages ne dépent plus de la machine, et ils implémentent des paradigmes de programmation indépendant de l'état de la mémoire de l'ordinateur, ils sont indépendant même du système d'exploitation. - - diff --git a/algorithmique/cours/langage.txt b/algorithmique/cours/langage.txt index ae4b948..4aac45f 100644 --- a/algorithmique/cours/langage.txt +++ b/algorithmique/cours/langage.txt @@ -1,6 +1,30 @@ Les langages de programmation ============================= +langage + + Un langage de + programmation + doit permettre d' écrire des + programmes de bonne qualité + +Un programme doit être : + +- correct +- robuste +- lisible, bien documenté +- facile à modifier, extensible + +Un langage de programmation doit permettre : + +- la programmation structurée +- la structuration avec les types +- proposer un mécanisme d’exceptions +- présenter des caractères de généricité, de polymorphisme et de surcharge + +.. important:: La structuration et l'organisation modulaire sert à maintenir de grands programmes, + Elles sont une nécessité + Approche historique et chronologique ------------------------------------- @@ -287,3 +311,24 @@ en retour les langages. On reconnaît aujourd'hui : - Le modèle de programmation système et réseau - le modèle **Dev Ops** et les méthodes de développement virtualisés - les langages présentant des **fonctionnalités agiles** + +Conclusion +----------- + +Les langages de haut niveau sont caractérisés par +des concepts tels que : + +- déclaration de valeurs, types, expressions, portée +- expressions, variables, instructions, structures de contrôle +- fonctions, procédures, fermetures +- encapsulation, modules, objets + +=========== ============ +Paradigmes Concepts +=========== ============ +impératif variables, procédures, modules +objets classes, méthodes, héritage, surcharge +fonctionnel fonctions, fermetures, modules +logique prédicats, modules +concurrent tâche/processus, communication +=========== ============ diff --git a/algorithmique/cours/modularite.txt b/algorithmique/cours/modularite.txt index d102a7f..e1ca7b8 100644 --- a/algorithmique/cours/modularite.txt +++ b/algorithmique/cours/modularite.txt @@ -1,6 +1,12 @@ L'organisation d'un programme ============================= + +Un langage de programmation doit permettre la programmation structurée. + +.. important:: La structuration et l'organisation modulaire sert à maintenir de grands programmes, + Elles sont une nécessité + Structuration d'un programme ----------------------------- @@ -33,6 +39,9 @@ les données. La structuration d'un programme provient des relations entre classes, en particulier l'héritage permet de définir une classe par extension d'une autre. +En programmation objet, un **programme** est une collection d’objets qui communiquent +entre eux par **message**, le **résultat** est un message envoyé à un objet particulier + Comparaison entre les deux paradigmes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -55,31 +64,31 @@ Structuration et sûreté d'exécution La preuve de programme ~~~~~~~~~~~~~~~~~~~~~~ -Le niveau maximum de sûreté d'exécution d'un programme est la preuve. Qu'est-ce que la preuve -formelle d'un programme ? Selon la définition de Wikipédia, ce sont "des techniques permettant de -raisonner rigoureusement, à l'aide de logique mathématique, sur des programmes informatiques ou -du matériel électroniques, afin de démontrer leur validité par rapport à une certaine -spécification." Bref c'est un raisonnement logique sur un programmme qui permet d'être sûr que le +Le niveau maximum de sûreté d'exécution d'un programme est la preuve. Qu'est-ce que la preuve +formelle d'un programme ? Selon la définition de Wikipédia, ce sont "des techniques permettant de +raisonner rigoureusement, à l'aide de logique mathématique, sur des programmes informatiques ou +du matériel électroniques, afin de démontrer leur validité par rapport à une certaine +spécification." Bref c'est un raisonnement logique sur un programmme qui permet d'être sûr que le programme est valide et ne va pas planter. -La preuve de programme est très peu utilisée dans l'industrie, car très coûteuse et très -difficile à mettre en place. Elle quand même utilisée, mais dans des secteurs où le risque doit -absolument être évacué et où il n'y a aucun droit à l'erreur. Par exemple, le secteur médical -(informatique en bloc opératoire), militaire (peu d'informations nous parviennent dans ce -domaine), l'aviation civile (le logiciel Astrée pour Airbus), la fusée Ariane (depuis le bug qui -avait fait crasher Ariane 5 ces questions sont prises très au sérieux), et le milieu bancaire -(surtout le domaine des décisions boursières : un programme chargé de lancer des décisions -d'achat ou de vente à la bourse qui comporte un bug peut en quelque centièmes de secondes faire -perdre des millions, voire des milliards d'euros à une banque. Le programme ne doit tout simplement pas +La preuve de programme est très peu utilisée dans l'industrie, car très coûteuse et très +difficile à mettre en place. Elle quand même utilisée, mais dans des secteurs où le risque doit +absolument être évacué et où il n'y a aucun droit à l'erreur. Par exemple, le secteur médical +(informatique en bloc opératoire), militaire (peu d'informations nous parviennent dans ce +domaine), l'aviation civile (le logiciel Astrée pour Airbus), la fusée Ariane (depuis le bug qui +avait fait crasher Ariane 5 ces questions sont prises très au sérieux), et le milieu bancaire +(surtout le domaine des décisions boursières : un programme chargé de lancer des décisions +d'achat ou de vente à la bourse qui comporte un bug peut en quelque centièmes de secondes faire +perdre des millions, voire des milliards d'euros à une banque. Le programme ne doit tout simplement pas bugger). Le model checking ~~~~~~~~~~~~~~~~~~ -Le model checking, l'analyse statique et l'interprétation abstraite procèdent d'une méthodologie -moins lourde de validation des programmes. Ces méthodes analysent exhaustivement l'évolution du -système lors de ses exécutions possibles et permetent de dire si globalement, dans un contexte -donné, le programme va fonctionner correctement. Encore très lourdes, ces techniques ne sont +Le model checking, l'analyse statique et l'interprétation abstraite procèdent d'une méthodologie +moins lourde de validation des programmes. Ces méthodes analysent exhaustivement l'évolution du +système lors de ses exécutions possibles et permetent de dire si globalement, dans un contexte +donné, le programme va fonctionner correctement. Encore très lourdes, ces techniques ne sont utilisées que dans un contexte industriel de haute sécurité. @@ -89,8 +98,8 @@ Les tests d'acceptation C'est sont les tests unitaires et fonctionnels -Très utilisés dans l'industrie, les tests unitaires et fonctionnels ne testent que certaines -parties du programme et permettent de dire que le programme va marcher grosso-modo à peu près. +Très utilisés dans l'industrie, les tests unitaires et fonctionnels ne testent que certaines +parties du programme et permettent de dire que le programme va marcher grosso-modo à peu près. Beaucoup moins coûteux à installer, ce sont des éléments cléfs des méthodes agiles. @@ -110,27 +119,27 @@ cher à payer. Les méthodologies agiles ~~~~~~~~~~~~~~~~~~~~~~~~ -La manière dont le code est produit importe énormément. Par exemple, une -méthodologie ou le **refactoring** (réécriture de code) est permis et même conseillé +La manière dont le code est produit importe énormément. Par exemple, une +méthodologie ou le **refactoring** (réécriture de code) est permis et même conseillé a plus de chance de produire du code organisé. -Les méthodologies agiles produisent en général du code mieux organisé. Ce sont les +Les méthodologies agiles produisent en général du code mieux organisé. Ce sont les méthodes de travail les plus en vogue aujourd'hui, elles mettent l'accent sur : - Du logiciel fonctionnel plutôt que de la documentation exhaustive - La réponse au changement plutôt que le suivi d'un plan - Le logiciel fonctionnel est la principale mesure d'avancement -- Une attention continue à l'excellence technique et à une bonne +- Une attention continue à l'excellence technique et à une bonne conception améliore l'agilité - La simplicité est essentielle (il est facile de faire, il est difficile de faire simple) -Le principe de base de la méthodologie Scrum par exemple est de focaliser l'équipe de façon -itérative sur un ensemble de fonctionnalités à réaliser, dans des itérations de durée fixe de une -à quatre semaines, appelées **sprints**. Chaque sprint possède un but à atteindre, défini par le -responsable de produit, à partir duquel sont choisies les fonctionnalités à implémenter dans ce -sprint. Un sprint aboutit toujours sur la livraison d'un produit partiel fonctionnel. Pendant ce -temps, le facilitateur a la charge de réduire au maximum les perturbations extérieures et de +Le principe de base de la méthodologie Scrum par exemple est de focaliser l'équipe de façon +itérative sur un ensemble de fonctionnalités à réaliser, dans des itérations de durée fixe de une +à quatre semaines, appelées **sprints**. Chaque sprint possède un but à atteindre, défini par le +responsable de produit, à partir duquel sont choisies les fonctionnalités à implémenter dans ce +sprint. Un sprint aboutit toujours sur la livraison d'un produit partiel fonctionnel. Pendant ce +temps, le facilitateur a la charge de réduire au maximum les perturbations extérieures et de résoudre les problèmes non techniques de l'équipe. @@ -143,3 +152,23 @@ Les Outils de linting (validation) Exemple en python : pylint +Les modules +----------- + +Il s'agit de décomposer un grand programme en +morceaux (**modules**) connectés entre eux par des **interfaces** bien +définies. + +Ces modules doivent être aussi indépendants que possible. + +module + + ensemble de ressources liées sémantiquement + +interface + + mode d’emploi du module + +Les interfaces + +- principe de masquage des informations (partie publique, partie secrète) diff --git a/algorithmique/cours/programme.txt b/algorithmique/cours/programme.txt index 692f7b5..52d57ff 100644 --- a/algorithmique/cours/programme.txt +++ b/algorithmique/cours/programme.txt @@ -154,6 +154,9 @@ Canal de transmission:: Description d'une procédure ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +En programmation impérative, un programme est une suite d’instructions qui font +évoluer l’état mémoire, le résultat est dans l’état final de la mémoire. + - une procédure peut prendre des paramètres - elle modifie l'état courant du système @@ -258,7 +261,13 @@ en cours d'exécution ni ne réalise d'effets de bord. Elle renvoie - Déclaration des paramètes - Déclaration du corps -- Appel de la procédure +- Appel de la fonction + +En programmation fonctionnelle, programme est un ensemble de définitions de fonctions, +un résultat est l'application d’une fonction à une structure de données effective. + +- composant de base : la fonction +- opération de base : l’application .. raw:: latex