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