Introduction à l`informatique : algorithmique et programmation

publicité
Présentation des objectifs
© Morinet-Lambert , Cadot, Pierron O-1
Introduction à l’informatique : module d'algorithmique et
programmation
Université Henri Poincaré Nancy1
e-mail : [email protected]
Dernières modifications : 28/09/04
© 2003 J. Morinet Lambert & Martine Cadot
© 2004 L. Pierron
Aucune diffusion autorisée en dehors du module d’enseignement
Objectifs de la programmation
procédurale
© Morinet-Lambert , Cadot, Pierron O-2
•
• Minimiser le temps de développement
– Génération automatique de code :
• Spécifications précises
• Langages de haut niveau
– Réutilisation de code :
• Généricité du code
• Documentation
• Minimiser la maintenance des programmes
– Lisibilité et simplicité du code : langages de haut niveau
– Documentation technique
Programmes : des exemples
© Morinet-Lambert , Cadot, Pierron O-3
•
Le programme essentiel pour fonctionner :
– le système d’exploitation : Linux
– un éditeur interpréteur de commande : le shell (in console)
– une interface graphique : le "bureau" (desktop)
•
Des logiciels :
– éditeurs : de texte (emacs), d’images (gimp), de sons...
– applications : traitement de texte, navigateur (FireFox) ...
•
Des environnements de programmation
– Turbo Pascal, C, C++, Lisp, ADA...
– compilateur, éditeur, debugger, bibliothèques
•
Des programmes de commandes : les scripts
– liste de commandes : mode batch
Informatisation : les transformations
© Morinet-Lambert , Cadot, Pierron O-4
• Départ : Cahier des charges sur papier ou verbal
• Explicitation comment faire : texte informel
– Schémas : organigramme
– Phrases en langage naturel : retrouver dans les
commentaires
• Formalisation : texte ou schéma formel
– Identification (recherche de nom de variables) des
informations à traiter, typage
– Organisation (liens : composé de, liste de)
– Données : Entrées - Résultats : sorties
– Traitements (procédures)
• profils des procédures : rôles, données, résultats
• Implantation : réalisation du programme dans un langage
• Tests : jeux d'essais et consolidation
Algorithme - programmation
© Morinet-Lambert , Cadot, Pierron O-5
• Phase 1 : Trouver un algorithme
– exprimer la demande sous une forme facilitant son traitement
électronique
• C'est aussi spécifier le problème
– réflexion initiale obligatoire
• prendre un exemple et le traiter pas à pas
• Phase 2 : Passer à la réalisation programmation
– Choisir un langage adapté au problème à traiter
• cf. les catégories de langage
– Traduction de la spécification dans le langage
Transposition computationnelle
© Morinet-Lambert , Cadot, Pierron O-6
• programmer c'est transposer une réalité dans une machine
• réduire le cahier des charges à ce qui est automatisable
facilement
– réduire les coûts et le temps de développement
• facilement 60%, difficilement : 90%
• reste : 10 % très difficile (exceptions)
• trouver les représentations les plus proches : déformer
– risques d'erreurs ou d'imprécision
• limites des programmes
Quels sont les langages existants
© Morinet-Lambert , Cadot, Pierron O-7
• On ne parle que de langage de programmation
– Permet de donner des instructions pour traiter des données
– à différencier des langages : de formatage (permettant de
décrire les données : html, pdf, LaTeX…), de commandes
(OS Unix), d'interrogation (SQL)…
• De niveaux variables (de machine vers langage naturel)
0, 1
– Binaire
LDI a, 45
– Assembleur
– Programmation : choix nombreux adaptés
• aux traitements : Cobol, Fortran, PHP...
• aux méthodes de développement (IA) : Lisp, PROLOG, LOO…
– [Spécification : Uniform Modeling Langage]***
Assembleur
© Morinet-Lambert , Cadot, Pierron O-8
• Un programme
– Est une suite d'instructions que l'on fournit au processeur d'une
machine
• Une instruction
– Est une commande que sait interpréter le processeur pour la faire
passer d'un état dans un autre
– On travaille avec des registres contenant des valeurs chargées
depuis la mémoire
• Exemple : Load A, 215
• L'assembleur est le seul niveau de langage qui peut se traduire
directement en binaire compréhensible par le processeur
Programmation structurée ou classique
© Morinet-Lambert , Cadot, Pierron O-9
• Un programme est constitué d'instructions regroupées en blocs
ou en procédures, chaque procédure est une séquence
d'instructions qui manipule un ensemble de données pour
obtenir des résultats
• Il faut donc identifier les données : les typer et les déclarer
IF condition { Bloc d ’instructions1 } /* partie alors */
else
{ Bloc d ’instructions 2} /* partie sinon */
Exemples de langages
© Morinet-Lambert , Cadot, Pierron O-10
• orientés gestion : cobol
– édition d'états
• orienté traitement mathématique : fortran
– efficacité des calculs, gestion des très grands nombres
• orienté type abstrait, généricité, temps réel et traitement des
exceptions : ada
• orienté pédagogie : python
– lisibilité des instructions
• orienté programmation machine : C
• orienté Web : php, Javascript
– intégration modèle de document [X]HTML
Programmation fonctionnelle
© Morinet-Lambert , Cadot, Pierron O-11
• Un programme est une suite d'application de fonctions qui
associe des valeurs de sortie à des valeurs d'entrées
• Exemple : scheme, lisp, caml
• Utilisation : systèmes déductifs à base de règles, moteurs
d'inférence…
Programmation logique
© Morinet-Lambert , Cadot, Pierron O-12
• Un programme est un ensemble de relations logiques, et son
exécution est une preuve de la déductibilité d'une formule
logique
• Exemple : Prolog
• Utilisation: preuve de programme, traitement des langues
Programmation objet***
© Morinet-Lambert , Cadot, Pierron O-13
• Une application est un ensemble d'objets possédant
– des propriétés et
– des méthodes pour définir le comportement de ces objets,
– ceux ci peuvent interagir et communiquer via des messages
– héritage de comportement
• Exemple : C++, Java, Python, Delphi (pascal objet)…
Exemple progOO : interfaces graphiques
© Morinet-Lambert , Cadot, Pierron O-14
• décrire les objets : fenêtres, boutons…
– fenêtre composée de cadre, barre de menu, zone d'édition…
• leur propriétés
– fenêtre : nom, état : active, iconifiée,
• quel comportement sur les évènement souris
– clic sur la barre ? : on active
• passe en premier plan
• on ouvre si iconifiée
– drag barre ? : on déplace
– et sur les évènements clavier ?
– etc.
Héritage : un exemple de classes
© Morinet-Lambert , Cadot, Pierron O-15
quadrilatère
propriétés :
4 cotés
2 cotés parallèles égaux
- diagonales égales
- diagonales se coupent
selon angle droit
parallélogramme
rectangle
losange
4 cotés égaux
carré
Problèmes en programmation
© Morinet-Lambert , Cadot, Pierron O-16
• Comment s'assurer qu'un programme fait ce qu'on attend de lui ?
– jeux d'essais exhaustifs ? impossibilité
– utiliser un langage de preuve
• Portabilité des programmes
– code exécutable sur une plate-forme
– à recompiler pour un autre environnement
idée : Développer dans un langage abstrait
indépendant de la station : machine virtuelle java
• Lisibilité et maintenance
– rester proche du problème à traiter
– décrire en langage proche langage naturel moins les
ambiguïtés : langage de spécification UML
Objectifs de la formation***
© Morinet-Lambert , Cadot, Pierron O-17
• Analyser un cahier des charges
– du cahier des charges (donné)
– à la spécification
• les objets du problème et les variables qui les représentent
• les traitements à appliquer : algorithmes
• Programmer proprement
– commentaires (taux =30%)
– lisibilité des sources (noms de variables significatifs)
– réutilisation (types de données, modules)
• quel que soit le langage support
– ici : le langage C
Méthode de travail
© Morinet-Lambert , Cadot, Pierron O-18
• cours : noter
– les concepts et techniques de programmation
• td en salle : réfléchir, écrire
– analyser les problèmes (exemples courts de difficulté
croissante)
– développer les programmes
– exécuter "sur papier" (simuler) avec des jeux d'essai
• td machines :
– réaliser les programmes
– exécuter
• travail personnel + libre service machine (4h/sem)
Types de problèmes traités dans ce cours
© Morinet-Lambert , Cadot, Pierron O-19
• on donne des informations
• on attend des résultats
• on décrit les transformations
• allure d'un programme
– [étape 0 : choisir ce qu'on veut faire (menu) ]
– étape 1 : saisir les données
– étape 2 : traiter les données
– étape 3 : afficher les résultats
Programmation procédurale
© Morinet-Lambert , Cadot, Pierron O-20
• chaque étape de traitement peut se décomposer en sous étapes
• chaque sous étape correspond à l'enchaînement de morceaux de
programmes (procédures) auxquels on "passe" les informations
nécessaires et dont on récupère les résultats
saisir les produits achetés
calculer une facture
calculer les montants dus
éditer la facture
Développer une application
© Morinet-Lambert , Cadot, Pierron O-21
• Structurer les instructions en blocs, procédures
– Remplissant un rôle, une fonction
• Représenter/décrire les informations/objets
– Variables avec des noms significatifs
– UNE variable par objet requis : note, somme, moy, nbelev...
– Et non pas une variable réutilisée pour représenter des
objets différents
– préciser la catégorie : définir les types
– Définir les propriétés d'un objet dans des champs de l'objet
(cf. cours sur les structures)
– Leur associer des procédures/méthodes pour décrire leur
comportement : créer des bibliothèques
premiers pas vers la programmation "objet"
Points développés dans le cours
© Morinet-Lambert , Cadot, Pierron O-22
• algorithmique
• représentations des informations
– typage et définition de types par le programmeur
– types abstraits : bibliothèques
• méthodologies de programmation
– réutilisation : procédures
– portabilité
– maintenance de programme
• langage support
Langage C : imposé
© Morinet-Lambert , Cadot, Pierron O-23
• de type fonctionnel
• en bloc d'instructions
– instructions se terminent par ;
– bloc marqué par {….}
• des procédures
– appelées fonctions
• proche du système d'exploitation
– permet de développer le noyau de commandes de UNIX
• syntaxe des instructions semblable en
– java (programmation objet cf. cours en IUP2)
– javascript (programmation objet pour le web)
Principales instructions
© Morinet-Lambert , Cadot, Pierron O-24
Quel que soit le langage utilisé il faut connaître les instructions :
– Une instruction se termine par le caractère ;
– Affectation
a = 4; som =a+b; n = n+1; cond = (age<18);
– Répétition Itération
sur nombre for ( i = valeurInit ; i<=valeurFinale; i ++) { linstr }
sur condition
do { linstr} while ( encore ) ;
while ( encore ) { linstr }
– Condition (test)
– Entrée (saisie)
– Sortie (affichage) :
– Commentaires :
if ( cond ) {linstr1} else { linstr2 }
scanf("%d", &i); /*format, adr_variable*/
printf("%d\n",i);
/* texte en clair */
L'environnement de programmation
© Morinet-Lambert , Cadot, Pierron O-25
• Un navigateur (Netscape)
cours et documents via le web à consulter
• Un éditeur de texte (emacs)
– créer les programmes en C
• Le shell Linux (fenêtre terminal)
– pour compiler les programmes et les exécuter
• exemple : gcc prog.c -o prog
– gérer l'espace disque (10Mo alloués par user : du -sm ~/*)
• Le gestionnaire de fichiers Konqueror
– pour organiser les documents sur le serveur ou les
périphériques de stockage
• Aide en ligne (bouée, xman + références C)
Les états du shell
© Morinet-Lambert , Cadot, Pierron O-26
par défaut
rétroaction :
20-~>
prompt affiché
éditeur
ctrl C
fin normale
return
interpréteur
rétroaction :
les résultats ou rien
application : interrompre un programme
Flux et redirectiontie
>
r
o
s
fichier de
e
d
x
)
sortie
1
lf u
(
ut
o
td
s
Editeur et
flux d’entrée
périphérique
interpréteur de
(écran)
stdin (0)
commandes :
so
<
rtie
Shell
err
eu
fichier ou périphérique
r
st
de
rr
(2
)
exemple : exécuter un programme C
fichier
/dev/null
Application
© Morinet-Lambert , Cadot, Pierron O-28
• exécuter un programme en C
• fournir des données depuis d'un fichier donnees.txt
• stocker des résultats dans un fichier resultats.txt
• exemple :
– soit l'exécutable prog*
– la commande est :
prog <donnees.txt >resultats.txt
rien ne s'affiche à l'écran
contrôler les résultats : more resultats.txt
Filtres ou redirections ?
Donnée : input
Commande
clavier
ls
ls > liste
ls
Résultat de la commande
Sortie : output
écran
liste
| sort
1) Le résultat s’affiche à l’écran
2) Le résultat est stocké dans le fichier
(regarder le contenu de liste)
On redirige l’affichage
écran
3) Le résultat est retraité pour être trié par ordre alphabétique
sur la première colonne
On retraite le flux de données
Architecture fonctionnelle
© Morinet-Lambert , Cadot, Pierron O-30
périphériques
données
(entrées)
CPU
ROM
RAM
Eprom
les flux d'informations
résultats
(sorties)
Détail (cf. machine Von Neumann simplifiée)
© Morinet-Lambert , Cadot, Pierron O-31
Processeur (CPU)
Mémoire
ROM
horloge
Traitement d'adresse
Unité
registres
de
commande
instruction
Zone de code
Bus d'adresse
Bus de commande
donnée
Unité arithmétique
et logique
(traitement)
Bus de donnée
+
résultat
registres
Zone de données
RAM
Téléchargement