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
|
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
|
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
|
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).
|
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
|
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
|
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
|
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
|
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
|
(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,
|
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.
|
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)
|
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
|
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
|
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,
|
pensée rationnelle sur l'art de programmer et permet au programmeur d'effectuer les bons choix,
|
||||||
en connaissance de sa discipline.
|
en connaissance de sa discipline.
|
||||||
|
|
||||||
Le lien est fait ensuite avec le plus bas niveau grâce une implémentation effective
|
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
|
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,
|
programmation indépendant de l'état de la mémoire de l'ordinateur,
|
||||||
ils sont indépendant même du système d'exploitation.
|
ils sont indépendant même du système d'exploitation.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,30 @@
|
||||||
Les langages de programmation
|
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
|
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 de programmation système et réseau
|
||||||
- le modèle **Dev Ops** et les méthodes de développement virtualisés
|
- le modèle **Dev Ops** et les méthodes de développement virtualisés
|
||||||
- les langages présentant des **fonctionnalités agiles**
|
- 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
|
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
|
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
|
classes, en particulier l'héritage permet de définir une classe par extension
|
||||||
d'une autre.
|
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
|
Comparaison entre les deux paradigmes
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
@ -55,31 +64,31 @@ Structuration et sûreté d'exécution
|
||||||
La preuve de programme
|
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
|
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
|
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
|
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
|
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
|
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.
|
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
|
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
|
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
|
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
|
(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
|
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
|
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
|
(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
|
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
|
perdre des millions, voire des milliards d'euros à une banque. Le programme ne doit tout simplement pas
|
||||||
bugger).
|
bugger).
|
||||||
|
|
||||||
Le model checking
|
Le model checking
|
||||||
~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Le model checking, l'analyse statique et l'interprétation abstraite procèdent d'une méthodologie
|
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
|
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
|
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
|
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é.
|
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
|
C'est sont les tests unitaires et fonctionnels
|
||||||
|
|
||||||
|
|
||||||
Très utilisés dans l'industrie, les tests unitaires et fonctionnels ne testent que certaines
|
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.
|
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.
|
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
|
Les méthodologies agiles
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
La manière dont le code est produit importe énormément. Par exemple, une
|
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é
|
méthodologie ou le **refactoring** (réécriture de code) est permis et même conseillé
|
||||||
a plus de chance de produire du code organisé.
|
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 :
|
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
|
- Du logiciel fonctionnel plutôt que de la documentation exhaustive
|
||||||
- La réponse au changement plutôt que le suivi d'un plan
|
- La réponse au changement plutôt que le suivi d'un plan
|
||||||
- Le logiciel fonctionnel est la principale mesure d'avancement
|
- 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é
|
conception améliore l'agilité
|
||||||
- La simplicité est essentielle (il est facile de faire, il est
|
- La simplicité est essentielle (il est facile de faire, il est
|
||||||
difficile de faire simple)
|
difficile de faire simple)
|
||||||
|
|
||||||
Le principe de base de la méthodologie Scrum par exemple est de focaliser l'équipe de façon
|
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
|
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
|
à 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
|
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
|
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
|
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.
|
résoudre les problèmes non techniques de l'équipe.
|
||||||
|
|
||||||
|
|
||||||
|
@ -143,3 +152,23 @@ Les Outils de linting (validation)
|
||||||
|
|
||||||
Exemple en python : pylint
|
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
|
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
|
- une procédure peut prendre des paramètres
|
||||||
- elle modifie l'état courant du système
|
- 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 des paramètes
|
||||||
- Déclaration du corps
|
- 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
|
.. raw:: latex
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue