Vous êtes sur la page 1sur 41

Chapitre 1 - Introduction

INF1007 : Introduction à la
programmation
Chapitre 1 : Introduction

Génie informatique et génie logiciel Benjamin De Leener 1 H2022


Chapitre 1 - Introduction

Plan du cours

1. Environnement informatique
2. Méthodologie de programmation
1. Algorithmique
2. Conception d’un programme
3. Programmation
1. Brève histoire de la programmation
2. Types de langages et niveaux d’abstraction
3. Langages interprétés versus compilés
4. Environnement de programmation

Génie informatique et génie logiciel Benjamin De Leener 2 H2022


Chapitre 1 - Introduction

Environnement informatique

L’informatique se définit comme la science du traitement automatique


de l’information.
Le traitement de l’information se résume aux opérations suivantes :

Prise de Traitement Résultats


données à réaliser désirés

Génie informatique et génie logiciel Benjamin De Leener 3 H2022


Chapitre 1 - Introduction

Environnement informatique

Du point de vue matériel, le cheminement de l’information s’effectue


à travers les unités suivantes:

Unité
Unité Unité de
centrale de
d’entrée traitement sortie

Génie informatique et génie logiciel Benjamin De Leener 4 H2022


Chapitre 1 - Introduction

Qu’est-ce que la programmation?

Un ordinateur est un outil pour l’informaticien, au même titre que le


télescope est un outil pour l’astronome.
Un ordinateur est une machine universelle qui a le pouvoir de réaliser
n’importe quelle tâche, et dépend uniquement de l’imagination du
programmeur et de sa capacité à décrire cette tâche avec
suffisamment de détails.
Création d’un programme : design, analyse et expérimentation
Nous n’avons pas besoin de comprendre en détail le fonctionnement
de l’ordinateur pour pouvoir écrire un programme. Cependant,
comprendre le fonctionnement de certains composants de la
machine peut nous aider à écrire des programmes plus
performants.

Génie informatique et génie logiciel Benjamin De Leener 5 H2022


Chapitre 1 - Introduction

Environnement informatique
Un ordinateur n’est pas une machine pensante
et intelligente.
Un ordinateur stocke et manipule des
informations sous le contrôle d’un programme.

Entrée Sortie
(clavier, Mémoire (écran,
etc.) etc.)

Bus

Unité
Unité de
arithmétique Registres
contrôle
et logique

UCT (en anglais CPU)


Génie informatique et génie logiciel Benjamin De Leener 6 H2022
Chapitre 1 - Introduction

Environnement informatique
Deux types de mémoire : la mémoire vive ou RAM (Random Access
Memory) et la mémoire morte (disque dur).
L’Unité de Contrôle et de Traitement (UCT) est le « cerveau » de
l’ordinateur et peut effectuer des opérations logiques et arithmétiques
de base.
Entrée Sortie
Les données entrent et
(clavier, Mémoire (écran, sortent de l’ordinateur à
etc.) etc.)
l’aide de périphériques
d’entrée et de sortie.
Bus L’information est transférée
d’une unité à l’autre à
l’aide d’un bus.
Unité
Unité de
arithmétique Registres
et logique
contrôle Que se passe-t-il lorsqu’on
exécute un programme?
UCT (en anglais CPU)
Génie informatique et génie logiciel Benjamin De Leener 7 H2022
Chapitre 1 - Introduction

Programmation – Niveaux d'abstraction


Il serait fantastique de pouvoir dire à l’ordinateur quoi faire simplement
en le lui disant en langage d’humain. Malheureusement, la
compréhension et l’interprétation du langage est un domaine de
recherche toujours actif, simplement parce que ce langage est plein
d’ambiguïté et d’imprécision.
Le niveau d'abstraction d’un langage décrit sa proximité avec le
langage humain ou le langage machine.

Ordinateur Humain
Bas niveau Haut niveau
r a
le
u C v o n t la b de
b a ge J a
y
h
t a -c
o
em g P M o
s s
La
n
e ud
A Ps
Génie informatique et génie logiciel Benjamin De Leener 8 H2022
Chapitre 1 - Introduction

Pensée informatique = algorithmique

Objectif :
Décrire une tâche de sorte à ce qu’elle soit facilement
programmable
Moyens :
• Identifier les différentes opérations et préciser la séquence qui
exprime la tâche
• Préciser les répétitions en regroupant les opérations à répéter
• Préciser les décisions en regroupant les opérations
dépendantes d’une condition à vérifier.

Génie informatique et génie logiciel Benjamin De Leener 9 H2022


Chapitre 1 - Introduction

Pensée informatique – Opérations élémentaires

Nous décrivons les tâches à réaliser à partir d’une série


d’opérations élémentaires que l’ordinateur peut
comprendre :
• Lire • Additionner
• Afficher • Soustraire
• TANT QUE condition FAIRE • Multiplier
• SI condition ALORS – SINON • Diviser
• Affecter = • …

Génie informatique et génie logiciel Benjamin De Leener 10 H2022


Chapitre 1 - Introduction

Langage informatique

De part sa nature déterministe, l’ordinateur a besoin, pour exécuter


un programme, d’instructions claires et sans ambiguïtés.
Chaque langage de programmation est défini par une forme (sa
syntaxe) et un sens (sa sémantique) précis. Tous les langages de
programmation partagent une caractéristique commune : ils sont
bien définis, et disposent d’une syntaxe et d’une sémantique sans
ambiguïté.
De ce fait, si un programme ne fonctionne pas, à qui la faute?

Génie informatique et génie logiciel Benjamin De Leener 11 H2022


Chapitre 1 - Introduction

Langage informatique – traduction pour la machine

Un ordinateur ne peut comprendre que des instructions simples et


limités (le langage machine). Un langage de haut-niveau doit donc
être traduit pour que la machine puisse la comprendre et l’exécuter.
Par exemple, additionner deux nombres est très simple en Python,
mais parait très compliqué pour la machine :

Charge le nombre de l’emplacement de la


mémoire 2001 dans le CPU
Charge le nombre de l’emplacement de la
mémoire 2002 dans le CPU c = a + b
Additionne les deux nombres dans le CPU
Stocke le résultats dans l’emplacement de
la mémoire 2003

Génie informatique et génie logiciel Benjamin De Leener 12 H2022


Chapitre 1 - Introduction

Langage interprétés versus compilés


Deux façons de traduire un programme de haut-niveau :
interprétation et compilation.
Python est un langage de programmation interprété, c'est-à-dire qu'il
n'est pas nécessaire de le compiler avant de l'exécuter.

Code Source Données d’entrée

Données d’entrée
Compilateur
Code Source Interpréteur

Code binaire Système d’exploitation

Données de sortie
Données de sortie

Génie informatique et génie logiciel Benjamin De Leener 13 H2022


Chapitre 1 - Introduction

Le langage Python

1991 2000 Python 2.0


Python est langage de est publié.
script du système
Amoeba. Développé par
Guido Von Rossim et
nommé par rapport au 2001 La Python Software
Monthy Python’s Flying Foundation est créé
Circus. Python 0.9.0 est Python 2.1 & 2.2
publié.

1999 2008 Python 2.6 & 3.0


Le projet Computer Programming for
https://pythonclock.org/
Everyone (CP4E) est lancé par le CNRI et la
DARPA et utilise Python comme langage
d’enseignement de la programmation. IDLE 2021 Python 3.10
est créé. Python 1.5 est publié.

Génie informatique et génie logiciel Benjamin De Leener 14 H2022


Chapitre 1 - Introduction

Simplicité d’écriture – « Hello World! »


C++ Python
#include <iostream>
int main() {
std::cout << "Hello World!\n"; print("Hello World!")
return 0;
}

JAVA
class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!"); }
}

Génie informatique et génie logiciel Benjamin De Leener 15 H2022


Chapitre 1 - Introduction

Caractéristiques du langage
• Python est portable, non seulement sur les différentes variantes d'Unix, mais aussi sur les OS
propriétaires : Mac OS, BeOS, NeXTStep, MS-DOS et les différentes variantes de Windows. Un
nouveau compilateur, baptisé JPython, est écrit en Java et génère du bytecode Java. La librairie Numba permet de compiler sur
CPU ou GPU du code python (les performances sont apprécionnantes).

• Python est gratuit, mais on peut l'utiliser sans restriction dans des projets commerciaux.

• Python convient aussi bien à des scripts d'une dizaine de lignes qu'à des projets complexes de
plusieurs dizaines de milliers de lignes.

• La syntaxe de Python est très simple et, combinée à des types de données évolués (listes,
dictionnaires...), conduit à des programmes à la fois très compacts et très lisibles. À fonctionnalités
égales, un programme Python (abondamment commenté et présenté selon les canons standards) est
souvent de 3 à 5 fois plus court qu'un programme C ou C++ (ou même Java) équivalent, ce qui
représente en général un temps de développement de 5 à 10 fois plus court et une facilité de
maintenance largement accrue.

• Python gère ses ressources (mémoire, descripteurs de fichiers...) sans intervention du programmeur,
par un mécanisme de comptage de références (proche, mais différent, d'un garbage collector).

• Il n'y a pas de pointeurs explicites en Python.

• Python est (optionnellement) multi-threadé et peut être utilisé sur GPU (avec la librairie Numba).

Génie informatique et génie logiciel Benjamin De Leener 16 H2022


Chapitre 1 - Introduction

Caractéristiques du langage
• Python est orienté-objet. Il supporte l'héritage multiple et la surcharge des opérateurs. Dans son
modèle objets, et en reprenant la terminologie de C++, toutes les méthodes sont virtuelles.

• Python intègre, comme Java ou les versions récentes de C++, un système d'exceptions, qui
permettent de simplifier considérablement la gestion des erreurs.

• Python est dynamique (l'interpréteur peut évaluer des chaînes de caractères représentant des
expressions ou des instructions Python), orthogonal (un petit nombre de concepts suffit à engendrer
des constructions très riches), réflectif (il supporte la métaprogrammation, par exemple la capacité
pour un objet de se rajouter ou de s'enlever des attributs ou des méthodes, ou même de changer de
classe en cours d'exécution) et introspectif (un grand nombre d'outils de développement, comme
le debugger ou le profiler, sont implantés en Python lui-même).

• Comme Scheme ou SmallTalk, Python est dynamiquement typé. Tout objet manipulable par le
programmeur possède un type bien défini à l'exécution, qui n'a pas besoin d'être déclaré à l'avance.

• Python possède actuellement deux implémentations. L'une, interprétée, dans laquelle les
programmes Python sont compilés en instructions portables, puis exécutés par une machine virtuelle
(comme pour Java, avec une différence importante : Java étant statiquement typé, il est beaucoup
plus facile d'accélérer l'exécution d'un programme Java que d'un programme Python). L'autre génère
directement du bytecode Java.

Génie informatique et génie logiciel Benjamin De Leener 17 H2022


Chapitre 1 - Introduction

Caractéristiques du langage
• Python est extensible : comme Tcl ou Guile, on peut facilement l'interfacer avec des bibliothèques C
existantes. On peut aussi s'en servir comme d'un langage d'extension pour des systèmes logiciels
complexes.

• La bibliothèque standard de Python, et les paquetages contribués, donnent accès à une grande
variété de services : chaînes de caractères et expressions régulières, services UNIX standards
(fichiers, pipes, signaux, sockets, threads...), protocoles Internet (Web, News, FTP, CGI, HTML...),
persistance et bases de données, interfaces graphiques.

• Python est un langage qui continue à évoluer, soutenu par une communauté d'utilisateurs
enthousiastes et responsables, dont la plupart sont des supporters du logiciel libre. Parallèlement à
l'interpréteur principal, écrit en C et maintenu par le créateur du langage, un deuxième interpréteur,
écrit en Java, est en cours de développement.

Génie informatique et génie logiciel Benjamin De Leener 18 H2022


Chapitre 1 - Introduction

Python, c’est vieux! Est-ce qu’il va bientôt mourir?


Python est utilisé dans de nombreuses applications que vous utilisez tous
les jours et par beaucoup d’entreprises.

Génie informatique et génie logiciel Benjamin De Leener 19 H2022


Chapitre 1 - Introduction

Types de paradigmes de programmation

Programmation …
• impérative : série de commandes explicites
• structurée : code avec des structures propres, claires et imbriquées
• procédurale : contient une série d’étapes à réaliser

• orientée objet : définition et assemblage de concepts


• déclarative : déclare uniquement le résultat
• descriptive : expressivité réduite, essentiellement structurelle
• fonctionnelle : un programme est une fonction mathématique

• évènementielle, séquentielle, concurrente, etc.

Génie informatique et génie logiciel Benjamin De Leener 20 H2022


Chapitre 1 - Introduction

Environnement de programmation
Un IDE ou un Environnement de développement (Integrated Development
Environment) est un environnement de programmation complet qui se
présente sous la forme d'une application.
Il se compose généralement
• d’un éditeur de code,
• d'un compilateur,
• d'un débogueur,
• d’un système d’aide et
• d'un générateur d'interface graphique.

Génie informatique et génie logiciel Benjamin De Leener 21 H2022


Chapitre 1 - Introduction

Distribution Python – un environnement préinstallé

Génie informatique et génie logiciel Benjamin De Leener 22 H2022


Chapitre 1 - Introduction

Environnement de programmation - Pycharm


https://www.jetbrains.com/pycharm/

Génie informatique et génie logiciel Benjamin De Leener 23 H2022


Chapitre 1 - Introduction

Introduction à l’algorithmique

Algorithme: procédure décrivant, étape par étape, une méthode


permettant de résoudre un problème. C’est la base de tout
programme informatique.

Vérification

Programmation
Programme
informatique
Analyse du problème Algorithme

Problème

Génie informatique et génie logiciel Benjamin De Leener 24 H2022


Chapitre 1 - Introduction

Résolution de problèmes – Étapes

1. La définition du problème
2. L’analyse du problème
3. La conception des algorithmes
4. La mise au point du programme dans un langage de
programmation (ex: Python)
5. La vérification du programme

Génie informatique et génie logiciel Benjamin De Leener 25 H2022


A2019
Chapitre 1 - Introduction

Résolution de problèmes – Définition du problème

Répondre à QUI? QUE? QUOI? QUAND? OU?

• Identifier les entités à manipuler


• Identifier les traitements à effectuer
• Identifier les résultats attendus

Génie informatique et génie logiciel Benjamin De Leener 26 H2022


A2019
Chapitre 1 - Introduction

Résolution de problèmes – Analyse du problème

Répondre à COMMENT?
• Créer et réfléchir à diverses solutions possibles.
• Il faut s'attendre à envisager plusieurs possibilités avant
de trouver la bonne.
• En programmation, il n'y a pas de solution unique.
Choisir celle avec laquelle vous êtes le plus à l'aise. Pas
nécessairement la plus performante ou la plus courte ou
celle du professeur.
• Il n'y a pas de fonctions Python magiques. Elles ont
toutes des avantages et des inconvénients.
• On a chacun notre style de programmation, mais il y a
des règles communes à respecter.
Génie informatique et génie logiciel Benjamin De Leener 27 H2022
A2019
Chapitre 1 - Introduction

Résolution de problèmes – Analyse du problème


Voici trois solutions possibles pour le problème qui
consiste à déterminer les nombres premiers compris
entre 50 et 100.
1. Pour chaque nombre de 50 à 100 on vérifie tous les
diviseurs possibles, c.à.d. de 2 à lui-même. Si on trouve
une division sans reste, ce n’est pas un nombre premier.
2. Pour chaque nombre de 50 à 100 on vérifie les diviseurs
possibles, mais du moment qu’une division est sans reste,
on conclut tout de suite que ce nombre n’est pas premier.
3. Pour chaque nombre de 50 à 100 on vérifie les diviseurs
de deux jusqu’à la racine carrée de lui-même. Cependant
si une division est sans reste, on conclut tout de suite que
ce nombre n’est pas premier.

Génie informatique et génie logiciel Benjamin De Leener 28 H2022


A2019
Chapitre 1 - Introduction

Résolution de problèmes – Conception des algorithmes

• Écrire dans l’ordre les opérations déduites de


l’analyse
• Faire ressortir la structure de base
• les structures de décision
• les structures de répétition
• Utiliser adéquatement le pseudo-code schématique

Génie informatique et génie logiciel Benjamin De Leener 29 H2022


A2019
Chapitre 1 - Introduction

Qu’est-ce qu’un algorithme ?

Un algorithme est une suite finie d’instructions vérifiant:


• Chaque étape est décrite de façon précise
• Chaque étape est déterministe: produit des résultats
uniques
• L’algorithme s’arrête après un nombre fini d’instructions
• Reçoit des données en entrée
• Produit des données en sortie
• Généralité : Applicable à des ensembles différents de
données d’entrée.

Génie informatique et génie logiciel Benjamin De Leener 30 H2022


Chapitre 1 - Introduction

Propriétés d’un algorithme

lisible : l'algorithme doit être compréhensible même par un non-


informaticien
de haut niveau : l'algorithme doit pouvoir être traduit en n'importe
quel langage de programmation, il ne doit donc pas faire appel à
des notions techniques relatives à un programme particulier ou
bien à un système d'exploitation donné
précis : chaque élément de l'algorithme ne doit pas porter à
confusion, il est donc important de lever toute ambiguïté
concis : un algorithme ne doit pas dépasser une page. Si c'est le
cas, il faut décomposer le problème en plusieurs sous-problèmes
structuré : un algorithme doit être composé de différentes parties
facilement identifiables

Génie informatique et génie logiciel Benjamin De Leener 31 H2022


Chapitre 1 - Introduction

Différence entre problème et instance du problème

Exemple d’un problème: Tri d’un ensemble d’éléments


Entrée: Suite de n éléments a1,…an
Sortie: La suite réordonnée

Instances du problème:
Suite de nombres: 475, 787, 34, 245, 56, 350
Suite de noms: Pierre, Christine, Sylvie, Samuel, Fabien

Génie informatique et génie logiciel Benjamin De Leener 32 H2022


Chapitre 1 - Introduction

Exemple d’un algorithme: maximum entre trois valeurs

1. x = a;
2. Si b > x, alors x = b;
3. Si c > x, alors x = c;
Quelques définitions :
Le symbole = représente l’opérateur d’assignation
x = a signifie « copie la valeur de a dans x ».
La valeur de a reste inchangée
Paramètres d’entrée : a, b, c
Valeur de sortie : x = max (a, b, c)

Génie informatique et génie logiciel Benjamin De Leener 33 H2022


Chapitre 1 - Introduction

Résolution de problèmes – Mise au point du programme


• Faire en sorte que le programme fonctionne bien
• Trois types d’erreur :
• syntaxiques (faciles à repérer et corriger)
for
if a=b
• logiques (plus difficiles)
a = 10
while a < 20:
a = a - 1
end
• de données (plus difficiles)
a = 10
b = a[3] + 10
Génie informatique et génie logiciel Benjamin De Leener 34 H2022
A2019
Chapitre 1 - Introduction

Raffinement graduel

Lors de l’élaboration d’un algorithme il est parfois utile


d’envisager un processus de raffinement graduel.
Il s’agit dans un premier temps d’énumérer les opérations
« évidentes » qui réalisent l’application désirée.
Ces opérations évidentes ne sont pas nécessairement des
opérations élémentaires.
Par la suite, il suffit de détailler les opérations non
élémentaires à l’aide d’opérations élémentaires.
Génie informatique et génie logiciel Benjamin De Leener 35 H2022
Chapitre 1 - Introduction

Subdivision d’un problème en sous-problèmes

Problème: Trouver le plus petit nombre premier


strictement supérieur à un entier positif donné

• Procédure pour déterminer si un entier m est un


nombre premier. Il suffit de tester si m est divisible
par un entier entre 2 et m/2

• Utiliser cette procédure pour trouver le plus petit


nombre premier p supérieur à un entier n.

Génie informatique et génie logiciel Benjamin De Leener 36 H2022


Chapitre 1 - Introduction

Subdivision d’un problème en sous-problèmes


Entrée: Un entier positif m Entrée: Un entier positif n
Sortie: Vrai si m est premier, Faux si non. Sortie: Le plus petit nb premier m > n

Procédure est-premier (m) Procédure premier-plus-grand (n)


Pour i = 2 à ENT(m/2) Faire m = n+1;
Si m mod i = 0 alors # i divise m Tant que est-premier(m) est Faux Faire
Retourne (Faux) m = m+1;
Retourne (Vrai) Retourne(m)
Fin est-premier Fin est-premier

Trace de premier-plus-grand pour n=8: Trace


Trace
de de
est-premier
est-premier
pour
pour
m=9:
m=11:
m=10:
i=2 11
9 mod
10mod
mod222===110
m=9 m = 10 m = 11 i=3 9 mod 3 = 0
i=5 11 mod 5 = 1

Génie informatique et génie logiciel Benjamin De Leener 37 H2022


Chapitre 1 - Introduction

Résolution de problèmes – Vérification du programme

Pour s'assurer que son programme fonctionne bien et


découvrir les erreurs de logique et de données.
Ø Vérifier le programme avec des données tests
• Données usuelles;
• Données de cas habituellement problématique: Liste,
matrices, nombres très grands ou très petits, nombres
positifs, nombres négatifs.
• Données pour vérifier les conditions
if a>10 & b=='allo',
tester les combinaisons :
a=13 et a=3, b='allo' et b='rien'.

Génie informatique et génie logiciel Benjamin De Leener 38 H2022


A2019
Chapitre 1 - Introduction

Débogage d’un programme


L’activité de débogage consiste à identifier les
erreurs dans un programme et à les corriger.
Pour détecter les erreurs, autres que syntaxiques, il
faut tester le programme, manuellement ou
automatiquement, et vérifier que la sortie
correspond bien à vos attentes.
Le test peut montrer que la sortie de votre
programme est incorrecte, mais il ne vous donne
en revanche généralement aucun indice sur la
partie de votre code à l’origine du problème. C’est
à ce niveau qu’intervient le débogage.
Les analyseurs de programmes permettent aussi
parfois de trouver des erreurs.

Génie informatique et génie logiciel Benjamin De Leener 39 H2022


Chapitre 1 - Introduction

Le meilleur débogage se fait au moment de coder

• Définissez bien le DTR (données à traitements à


résultats)
• Analysez correctement le problème (schéma, scénario
écrit, etc.)
• Codez de manière claire
• Respect des niveaux d'abstractions
• Une fonction fait une opération

• Faites relire et tester votre code!

Génie informatique et génie logiciel Benjamin De Leener 40 H2022


Chapitre 1 - Introduction

Plan du cours

1. Environnement informatique
2. Méthodologie de programmation
1. Algorithmique
2. Conception d’un programme
3. Programmation
1. Brève histoire de la programmation
2. Types de langages et niveaux d’abstraction
3. Langages interprétés versus compilés
4. Environnement de programmation

Génie informatique et génie logiciel Benjamin De Leener 41 H2022

Vous aimerez peut-être aussi