diveres définitions de la programmation
This commit is contained in:
parent
3915b852d4
commit
55234742c5
|
@ -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.
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
=========== ============
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue