Présentation des objectifs Morinet-Lambert, Cadot, Pierron O-1 Introduction à l informatique : module d'algorithmique et programmation Université Henri Poincaré Nancy1 e-mail : Laurent.Pierron@loria.fr 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 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 Morinet-Lambert, Cadot, Pierron O-2 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) Binaire 0, 1 Assembleur LDI a, 45 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 else { Bloc d instructions1 } /* partie alors */ { 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 propriétés : 4 cotés quadrilatère 2 cotés parallèles égaux parallélogramme - diagonales égales - diagonales se coupent selon angle droit 4 cotés égaux rectangle carré losange
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) if ( cond ) {linstr1} else { linstr2 } Entrée (saisie) scanf("%d", &i); /*format, adr_variable*/ Sortie (affichage) : printf("%d\n",i); Commentaires : /* 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)
par défaut Les états du shell Morinet-Lambert, Cadot, Pierron O-26 éditeur rétroaction : 20-~> prompt affiché ctrl C return fin normale interpréteur rétroaction : les résultats ou rien application : interrompre un programme
< flux d entrée stdin (0) Flux et redirection Shell fichier ou périphérique Editeur et interpréteur de commandes : flux de sortie sortie erreur stdout (1) > fichier de sortie périphérique (écran) stderr (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 clavier Commande ls ls > liste ls Sortie : output écran 1) Le résultat s affiche à l écran liste 2) Le résultat est stocké dans le fichier (regarder le contenu de liste) On redirige l affichage Résultat de la commande sort é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 résultats (sorties) les flux d'informations
Détail (cf. machine Von Neumann simplifiée) Processeur (CPU) horloge Morinet-Lambert, Cadot, Pierron O-31 Mémoire ROM Unité de commande Traitement d'adresse registres Bus d'adresse instruction Bus de commande Zone de code Unité arithmétique et logique (traitement) donnée + résultat registres Bus de donnée Zone de données RAM