MDLP 0

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 70

Méthodologie de la Programmation

Palus Jean-Pascal

Licence IV - L1 - Semestre I

Bureau A180 - [email protected]

Séance 0

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 1 / 70


Présentation du cours

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 2 / 70


Présentation du cours

▶ 10 semaines de cours

▶ Pause pédagogique : semaine du 31 octobre 2021

▶ Récupération : les semaines du 5 et du 12 décembre 2021

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 3 / 70


Notation

Moyenne = mean(Top_3(5TP)) ∗ 25//100 + Projet ∗ 75//100

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 4 / 70


Programme du cours

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 5 / 70


Programme du cours

▶ Apprendre (un peu) à programmer

▶ Aborder quelques notions théoriques élémentaires

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 6 / 70


Programme du cours

▶ Apprendre (un peu) à programmer

▶ Aborder quelques notions théoriques élémentaires

▶ Shell script

▶ Python

▶ LATEX

▶ C

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 7 / 70


Ce qui est attendu
▶ Correctement écrire du code :
• Indentation propre
• Nommage cohérent
• Organisation modulaire des fichiers
▶ Savoir gérer un projet seul ou à plusieurs :
• Utiliser git pour gérer les versions du code source et la collaboration
• Utiliser Make pour gérer la compilation modulaire
▶ Savoir utiliser les bons outils :
• Connaître les forces et faiblesses de différents langages et paradigmes
de programmation
• Savoir chercher efficacement dans une documentation
• Utiliser un debugger voire un profiler
▶ Savoir communiquer sur vos projets :
• Utiliser LATEXpour écrire des rapports.
Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 8 / 70
L’Informatique

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 9 / 70


▶ Une science
• Théorique
• Mathématiques discrètes
• Théorie de l’information
• Méthodes formelles / Théorie des langages
• Sciences de la computation
• Ingénierie
• IA
• Réseaux
• Architecture
• Data
• Sécurité
• Vision / Informatique graphique
• Systèmes distribués
• ...
• Appliquée
• Calcul scientifique
Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 10 / 70
▶ Un ensemble de technologies et d’outils
• Hardware
• Différentes architectures
• Différents vecteurs

• Software

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 11 / 70


Brève histoire de l’informatique
Avant 1900

▶ Abaques / Bouliers (3000 AEC-...)

▶ John Napier (1550-1617)

▶ Blaise Pascal (1623-1662)

▶ Gottfried Wilhelm Leibniz (1646-1716)

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 12 / 70


Brève histoire de l’informatique
Avant 1900

▶ Joseph Marie Jacquard (1752-1834)

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 13 / 70


Brève histoire de l’informatique
Avant 1900

▶ Charles Babbage (1791-1871)

▶ Augusta Ada King, Countess of Lovelace (1815-1852)

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 14 / 70


Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 15 / 70
Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 16 / 70
Brève histoire de l’informatique
1900 - 1950

▶ Developpement des mathématiques modernes


• David Hilbert (1862-1943) - Complétude / Consistance / Décidabilité
• Kurt Gödel (1906-1978)
• Alan Turing (1912-1954) - Entscheidungsproblem

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 17 / 70


Brève histoire de l’informatique
1950 - ...

▶ Developpement de ordinateurs modernes


• John Bardeen (1908-1991) & al. - Premiers transistors (1947)
• Jay Forrester (1918-2016) - Mémoire à tores magnétiques (1949)

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 18 / 70


Brève histoire de l’informatique
1950 - ...

▶ Developpement de ordinateurs modernes


• Grace Hopper (1906-1992) - Premier compilateur (1951) → COBOL
• John Backus (1924-2007) & IBM - FORTRAN (1957)
• John Kemeny (1926-1992) et Thomas Kurtz (1928-...) - BASIC (1964)
• Douglas C. Engelbart (1925-...) - Invention de la souris (1968)
• Donald Knuth (1928-...) - TAoCP volume I (1968)
• Ken Thompson (1943-...) et Dennis Ritchie (1941-2011) - Unix
• Brian Kernighan (1942) et Dennis Ritchie - C

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 19 / 70


Brève histoire de l’informatique
1950 - ...

▶ Developpement de l’informatique moderne


• John von Neumann (1909-1957) - Premier virus (1949)
• Premier réseau TCP/IP - ARPANET (1969)
• Bjarne Stroustrup (1950-...) - C++ (1985)
• Premier antivirus - Anti4us / Flushot (1987)
• Premier FAI - Naissance d’Internet (1989)
• Guido van Rossum (1956-...) - Python (1991)
• Linus Torvalds (1969-...) - Linux (1991)
• Deep Blue vs Garry Kasparov - 4 : 2 (1997)
• Donald Knuth publie son tome II (1997)...

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 20 / 70


Brève histoire de l’informatique
1950 - ...

▶ L’informatique moderne
• Séquençage du génome humain (2003)
• Donald Knuth publie son tome IV (2011)...
• Ian Goodfellow (1985-...) - GAN (2014)
• AlphaGo vs Lee Sedol - 4 : 1 (2016)
• AlphaGo Zero vs AlphaGo - 100 : 0 (2017)
• AlphaZero vs AlphaGo Zero - 60 : 40 (2017)

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 21 / 70


L’Ordinateur

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 22 / 70


Brève histoire de l’informatique
1950 - ...

▶ Machine programmable permettant de faire des opérations


arithmétiques et logiques de manière automatisée.
▶ Capable de faire que deux choses :
• Faire des calculs
• Mémoriser les résultat de ces calculs

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 23 / 70


L’Ordinateur

▶ Machine programmable permettant de faire des opérations


arithmétiques et logiques de manière automatisée.
• Ordinateur de bureau
• Laptop
• Smartphone
• Consoles de jeu
• Électroménager
• Disques durs
• Périphériques
• Voitures
• Montres
• Maisons

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 24 / 70


L’Ordinateur électronique

▶ Différentes architectures.
• Hybride
• Harvard
• von Neumann
• RISC
• Apple
• MIPS
• ARM (Arduino, Raspberry Pi, consoles Nintendo, smartphones)
• CISC
• x86
• AMD64

• ...

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 25 / 70


L’Ordinateur électronique
▶ Hardware d’un ordinateur "classique" :
• Processeur - Le cerveau de la machine
• Mémoire principale - Information pouvant être utilisées par le
processeur
• Bus d’extension - Mémoire, cartes de calcul, périphériques d’entrée /
sortie, ...

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 26 / 70


L’Ordinateur électronique

▶ Software :
• Ensemble de séquences d’instructions interprétables par une machine et
jeu de données nécessaires à ces opérations.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 27 / 70


L’Ordinateur électronique

▶ Software :
• Ensemble de séquences d’instructions interprétables par une machine et
jeu de données nécessaires à ces opérations.

▶ Par qui sont écrit les programmes ?

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 28 / 70


L’Ordinateur électronique

▶ Software :
• Ensemble de séquences d’instructions interprétables par une machine et
jeu de données nécessaires à ces opérations.
▶ Par qui sont écrit les programmes ?
• Développeurs ∼ sources
• D’autres programmes ∼ binaires

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 29 / 70


Software

▶ Deux grandes catégories de programmes :


• Système
• Application

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 30 / 70


Software

▶ Programmes système
• Se lance (presque) en premier lors de l’allumage de la machine.
• Offre des services au logiciels applicatifs.
• Fait le lien entre le matériel et les logiciels applicatifs.

▶ Programmes applicatifs
• Tout le reste...

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 31 / 70


Programmes système

▶ Exemples de programmes système :

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 32 / 70


Programmes système

▶ Exemples de programmes système :


• Loaders
• Pilotes
• Systèmes d’exploitation

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 33 / 70


Systèmes d’exploitation

▶ Exemples systèmes d’exploitation :


• Windows 98 (Microsoft)
• Mac OS X (Apple)
• Plan 9 (Bell)
• Horizon (Nintendo)
• BSD (Berkeley University) et ses dérivés...
• Unix (Bell labs, Kernigan & Ritchie) et ses dérivés...

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 34 / 70


Systèmes d’exploitation dérivés/inspirés d’Unix/BSD

▶ Caractéristiques :
• Multi-utilisateur
• Séparation entre le processus kernel et utilisateurs
• Multitasking préemptif
• Tout est fichier

▶ De nombreux dérivés :
• Tru64
• FreeBSD
• MacOS
• Solaris
• Linux

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 35 / 70


Linux

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 36 / 70


Linux

▶ 1969 - Unix écrit au Bell Labs d’abors en ASM puis en C par K&R.

▶ Unix se répand grâce à sa licence et à son langage.

▶ 1983 - Projet GNU (et Hurd) de Richard Stallman (1953-...)

▶ 1987 - Andrew Tanenbaum (1944-...), professeur à l’université


d’Asterdam écrit MINIX pour illustrer son cours.
▶ 1989 - Linus Torvalds, utilisateur de MINIX à l’université d’Helsinki,
écit Linux (sur MINIX).
▶ 1991 - Intégration de Linux au projet GNU, sous licence GPL.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 37 / 70


Linux

▶ Écrit en C

▶ POSIX

▶ ∼ 700 distribs

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 38 / 70


Linux
▶ ∼ 700 distribs :
• Debian
• Ubuntu, Xubuntu, Ubuntu server, Ubuntu Core ...
• Knoppix
• Linux Mint
• Fedora
• Red hat, CentOS, Oracle, ...

• Arch Linux
• Kali Linux
• Chrome OS
• Android
• Raspberry Pi OS
• OpenWrt

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 39 / 70


Système de fichiers Linux

▶ Windows : L’utilisateur standard à tous les droits d’administration

▶ Linux : Seul le root est super-utilisateur

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 40 / 70


Système de fichiers Linux

▶ Windows : Périphériques considérés comme des entités à part (devices)

▶ Linux : Tout est fichier

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 41 / 70


Linux

▶ Windows : Environnement de bureau standard


▶ Linux : Serveur X11 + Environnement de bureau
• KDE
• GNOME
• Xfce
• Mate
• i3
• ...

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 42 / 70


Système de fichiers Linux

▶ Windows : Insensible à la casse

▶ Linux : Sensible à la casse

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 43 / 70


Système de fichiers Linux

▶ Windows : Arborescence au niveau du disque de stockage. C :, D :, ...

▶ Linux : Arborescence à partir de root "/"

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 44 / 70


Système de fichiers Linux

▶ Arborescence standardisée :
• /bin - Binaires essentiels utilisateur
• /sbin - Binaires essentiels su
• /usr/bin - Binaires non essentiels
• /boot - Fichiers statiques de boot
• /dev - Devices
• /dev/sda
• /dev/null
• /dev/random

• /etc - Fichiers de configuration

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 45 / 70


Système de fichiers Linux

▶ Arborescence standardisée :
• /home
• /root
• /lib - Bibliothèques partagées
• /var - logs et tout ce qui ne va pas dans /usr
• /opt - Packages add-ons
• /proc - Kernel et fichiers processeurs
• /run - FIchiers utilisés par les processus en cours (process IDs, sockets,
etc...)

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 46 / 70


La Programmation

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 47 / 70


La Programmation

▶ Programmer consiste donc à écrire le code source de programmes.

▶ "L’ordinateur" n’est capable que d’exécuter des instructions simples.

▶ Ces instructions, une série de signaux binaires, ne sont généralement


pas intelligibles pour l’Humain.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 48 / 70


La Programmation

▶ Programmer consiste donc à écrire le code source de programmes.

▶ "L’ordinateur" n’est capable que d’exécuter des instructions simples.

▶ Ces instructions, une série de signaux binaires, ne sont généralement


pas intelligibles pour l’Humain.

Exemple : Code machine x86

0x6A 0x14 (01101010 00010100)

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 49 / 70


La Programmation

▶ Première étape pour rendre le code lisible, et donc écrivable,


l’assembleur.
▶ Chaque architecture à son propre langage asm.

▶ Il est donc dépendant du matériel et peu portable.

▶ Traduit en code objet grâce à un assembleur.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 50 / 70


La Programmation

Exemple : Code machine x86

0x 60 00 00 80
0x A4 00 00 00
0x 60 01 00 84
0x A4 01 01 00
0x 60 02 00 00
0x 60 03 00 04
0x 60 04 00 00
0x 60 05 00 01
0x 08 00 00 02
0x 20 00 00 03
0x 20 04 04 05
0x 11 20 04 01

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 51 / 70


La Programmation

Exemple : Code asm x86

IMM R0, 0x80


LOAD R0, R0
IMM R1, 0x84
LOAD R1, R1
IMM R2, 0x0
IMM R3, 0x4
IMM R4, 0x0
IMM R5, 0x1
STORE R0, R2
ADD R0, R0, R3
ADD R4, R4, R5
BNE 0x20, R4, R1

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 52 / 70


Margaret Hamilton (1936-...)

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 53 / 70


La Programmation

▶ L’asm permet une abstraction par rapport au code machine, mais est
toujours pénible à lire.
▶ Les "mnémoniques" asm sont toujours très courtes simples, et
correspondent à un très petit nombre d’instructions processeur.
▶ Un niveau d’abstraction supplémentaire est necéssaire pour pouvoir
écrire rapidement et efficacement des programmes.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 54 / 70


Les languages de programmation

▶ Turing complets

▶ Différents niveau d’abstraction

▶ Différents paradigmes

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 55 / 70


Les languages de programmation

▶ Turing complets
▶ Différents niveau d’abstraction
• bas niveau : code objet, asm
• moyen niveau : FORTRAN, C, C++
• haut niveau : C++, Python, PHP, Swift, JS, Ruby
• Très haut niveau / spécialisés : Prolog, SQL

▶ Différents paradigmes

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 56 / 70


Les languages de programmation

▶ Turing complets

▶ Différents niveau d’abstraction


▶ Différents paradigmes
• Impérative
• Fonctinnelle
• Logique
• Objet
• Par contrainte
• Descriptive
• ...

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 57 / 70


Les paradigmes de programmation

▶ Impératif
• Utilise des commandes pour changer l’état d’un programme.
• Exécution du programme étape par étape.
• C, C++, C#, Python, Java, JS

▶ Fonctionnel

▶ Logique

▶ Objet

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 58 / 70


Les paradigmes de programmation

▶ Impératif
▶ Fonctionnel
• Tout est fonction
• Le résultat d’un calcul sert au calcul suivant, et ainsi de suite, jusqu’à
ce que toutes les fonctions aient produit un résultat
• (Idéalement) Pas d’effet de bord.
• Itération via la récursion
• Lisp (Common Lisp, Scheme, Racket, Emacs Lisp, ...), OcamL, Haskell

▶ Logique

▶ Objet

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 59 / 70


Les paradigmes de programmation

▶ Impératif

▶ Fonctionnel
▶ Logique
• Largement basée sur les concepts de la logique formelle.
• Un programme est une suite de phrases logiques exprimants des faits et
des règles d’inférences.
• Utilise les règles d’inférence pour explorer les mondes possibles à la
recherche d’une affirmation qui satisfait les prémisses.
• Prolog, Datalog, ASP

▶ Objet

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 60 / 70


Les paradigmes de programmation

▶ Impératif

▶ Fonctionnel

▶ Logique
▶ Objet
• Destiné à faciliter le découpage d’un grand programme en plusieurs
modules isolés les uns des autres.
• Un objet représente un concept, une idée ou toute entité du monde
physique.
• Il possède une structure interne et un comportement, et il sait interagir
avec ses pairs.
• Simula, C++, Python, Java, Swift

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 61 / 70


Le code source

▶ Le code source d’un programme est soit interprété soit compilé.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 62 / 70


Le code source

▶ Interprété à l’aide d’un interpréteur, qui est lui-même un programme


(généralement compilé).
▶ Pour chaque opération décrite dans le code source, l’interpréteur :
• Lit et analyse l’opération.
• L’évalue ou l’exécute.
+ Cycle de développement plus rapide, débuguage plus simple
− Optimisation, vitesse d’exécution du programme

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 63 / 70


Le code source

▶ Compilé à l’aide d’un compilateur, qui est lui-même un programme


(généralement compilé).
▶ Traduit le code source dans un autre langage.
• Langage machine
• Langage intermédiaire
+ Optimisation, vitesse d’exécution du programme.
− Cycle de développement plus lent, débuguage plus complexe.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 64 / 70


Le code source

▶ Compilé à l’aide d’un compilateur, qui est lui-même un programme


(généralement compilé).
▶ Traduit le code source dans un autre langage.
• Langage machine
• Langage intermédiaire
+ Optimisation, vitesse d’exécution du programme.
− Cycle de développement plus lent, débuguage plus complexe.
▶ Il existe des cas intermédiaires, notamment Python et Java.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 65 / 70


Shell

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 66 / 70


Shell

▶ Interpréteur en ligne de commande

▶ Expose les services du système d’exploitation à l’utilisateur


▶ C’est à la fois :
• Un langage de ligne de commande intéractif
• Un langage de script

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 67 / 70


Shell

▶ Il en existe de nombreuses implémentations


▶ La norme POSIX permet de rendre le passage de l’un à l’autre
(presque) transparent
• sh
• bash
• dash
• zsh

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 68 / 70


Shell

▶ L’interface graphique est pratique. Mais il y a certaines chose qu’il est


plus efficace de faire via le terminal.
▶ Notamment lorsqu’on travaille à travers le réseau.

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 69 / 70


Shell

▶ Le terminal (émulateur de terminal, console) est le programme qui


permet d’intéragir avec le shell.
▶ Il en existe également de nombreuses implémentations...
• gnome-terminal
• konsole
• Terminal

Palus Jean-Pascal (UP8) Méthodologie de la Programmation Séance 0 70 / 70

Vous aimerez peut-être aussi