60
Informatique, Algorithmique et Programmation Concepts généraux et présentation du langage de programmation Java Anthony Fleury ([email protected]) Département Informatique et Automatique (Bureau 3136)

Informatique, Algorithmique et Programmation · décomposer et de faire exécuter une tâche, c'est ... Pourquoi un cours d’algorithmique et programmation ? Vous serez un profil

Embed Size (px)

Citation preview

Informatique, Algorithmique et Programmation

Concepts généraux et présentation du langage de programmation Java

Anthony Fleury ([email protected])

Département Informatique et Automatique (Bureau 3136)

Objectifs des Enseignements informatique à l’école

Sans être « informaticien », tout ingénieur doit disposer de connaissances informatique lui permettant :

d'avoir une vision claire des outils informatiques disponibles sur le marche et répondant à ses besoins,

d'être maître d'ouvrage pour le développement d'outils informatiques spécifiques,

de pouvoir ponctuellement mettre en oeuvre des traitements informatiques simples et efficaces dans le cadre de son activité

Intérêt de l’informatique dans votre parcours

L’informatique n’est pas réservé aux informaticiens ! Il vous sera utile d’avoir des notions d’informatique acquises en 1A pour :

Utiliser des logiciels métiers complexes ayant leur propre langage de programmation intégré

Automatiser des tâches répétitives ou très gourmandes en temps

Rendre votre travail plus efficace et faire des choix adaptés à la demande de votre entreprise

Etre en mesure de comprendre ne serait-ce qu’un minimum ce qu’un technicien vous expliquera et/ou les chiffres/explications qui vous seraient donnés dans le cas de gestion de projets.

La plateforme campus

Présentation

Campus est la plateforme de cours en ligne de l'école. En informatique vous y trouverez :

Diverses informations utiles à la compréhension du cours.

Les cours en format pdf (les slides que vous verrez cette séance)

Les TDs et les TPs avec si besoin des compléments ou des corrections

Vous utiliserez la plateforme pour rendre les TPs notés.

Inscription aux cours

Ce cours est désigné comme Informatique : Module 1 : Algorithmique et programmation dans l'UE4 du tronc commun de la formation (FI1).

Inscription obligatoire pour recevoir les informations données par l'intermédiaire de la plateforme et pour rendre vos devoirs.

La plateforme campus

Ce cours

Informations datées sur les nouveautés

Contenu (logiciels, slides, sujets, corrections

Format du cours

Un cours en « classe inversée » : ensemble des cours sur campus à travailler par vous même

Une séance de travail sous forme d’un « amphi libre » pour répondre à vos questions

Une disponibilité également par mail pour vous aiguiller

Plus de séances de TD pour mieux travailler les concepts avec vous.

IDEM EN SGBD : cours à travailler pour fin janvier (cf mail).

Quelques liens

L'informatique de A à Z : http://interstices.info/abc

Les métiers de l'informatique : http://assopascaline.fr/mdocuments/SYNTEC_Pascaline_plaquette-Vdef.pdf

Organisation de ce module

Ce module comprend : 2 heures de cours (+ 2h d’amphi libre) 12 heures de TD (6 séances) 24 heures de TP (6 séances, site Lahure)

Evaluation : DS (1h) pour l’assimilation du cours TP noté, en binôme DS (2h) sur papier

Pour les TPs, vous pouvez travailler en binôme ou seuls si vous amenez vos portables.

Apprenons à vous connaître

Qui a déjà ???

Apprenons à vous connaître

Qui a déjà ???

Cuisiné bien sûr, pas mangé !!!!!

Apprenons à vous connaître

Qui a déjà ???

Apprenons à vous connaître

Qui a déjà ???Logiquement tout le monde, en Python !!

Pourquoi un cours d’algorithmique et programmation ?

Programmation omniprésente dans l'ingénierie quelque soit le secteur d'activité

Sans être informaticien, un ingénieur peut être amené à participer au développement d'un logiciel ou diriger une équipe qui le fera : il doit donc savoir ce qu'il est possible de programmer ou non

Un ingénieur doit être capable d'analyser, de décomposer et de faire exécuter une tâche, c'est cette démarche intellectuelle que présente ce cours

Pourquoi un cours d’algorithmique et programmation ?

Vous serez un profil très recherché !!!

Des appels ont été lancés par des industriels qui recherchent des profils d’ingénieurs compétents dans leur domaine et qui savent résoudre des problèmes relatifs à ce domaine.

Ce cours vous donne un minimum de connaissances en programmation et en algorithmique, et vous aurez les connaissances du fait de votre option afin de résoudre des problèmes de vos domaines de compétence.

Objectifs pédagogiques du module

Être capable de comprendre un algorithme. Savoir implémenter un algorithme donné dans un langage de programmation. Face à un problème, savoir proposer un schéma de résolution adapté. Être capable d'exprimer un schéma de résolution d'un point de vue algorithmique. Être capable de déterminer si un algorithme est correcte ou non. Savoir évaluer les performances de différents algorithmes pour un même problème.

1 - Introduction à la programmationConcepts généraux, langages et méthode

Sommaire

Qu’est-ce que l’algorithmique ?

Définition

L’art de « faire faire »

Comment concevoir des algorithmes ?

Les langages de programmation

Qu’est-ce que l’algorithmique

Définitions

Définition généraliste : Un algorithme se définit comme la description non-ambigüe de la résolution d'un problème en un nombre fini d'étapes.

Définition mathématique : Un algorithme est une suite finie de calculs aboutissant à la solution

d'un problème donné.

Définition informatique : Un algorithme est une séquence d'opérations élémentaires (exécutables

par un ordinateur) permettant de réaliser un traitement particulier.

L’algorithmique : l’art de faire faire

On conçoit rarement un algorithme pour soi-même. Cela implique deux rôles :

• le concepteur de l'algorithme

• l'exécutant de l’algorithme

L’algorithmique : l’art de faire faire

On conçoit rarement un algorithme pour soi-même. Cela implique deux rôles :

• le concepteur de l'algorithme

• l'exécutant de l'algorithme

Dans le cadre de ce cours, vous concevrez les algorithmes et l'ordinateur les exécutera.

L'ordinateur : un exécutant infatigable mais pas très

intelligent

Attention aux méprises sur ses aptitudes : l'ordinateur est dépourvu d'intelligence l'ordinateur est infatigable l'ordinateur n'a aucun recul sur ce qu'il fait l'ordinateur est incapable de lever la moindre ambigüité l'ordinateur n'émet aucun jugement de valeur

L'ordinateur : un exécutant infatigable mais pas très

intelligent

Attention aux méprises sur ses aptitudes : l'ordinateur est dépourvu d'intelligence l'ordinateur est infatigable l'ordinateur n'a aucun recul sur ce qu'il fait l'ordinateur est incapable de lever la moindre ambigüité l'ordinateur n'émet aucun jugement de valeur

Attention à ne pas nous dire que ce n’est pas votre faute mais celle de l’ordinateur !!!!

caractéristiques attendues...

Caractéristiques attendues... pour une recette de cuisine

C

Comment reconnaître une bonne recette de cuisine ??

Précise : Aucune ambigüité sur les ingrédients, les dosages, etc.

Correcte : Doit donner au final le plat attendu Doit être réalisable en un temps correct et indiqué Doit être bon ! !

Efficace : Réalisable en un temps raisonnable Pas d'étape inutile, optimisation de l'ordre des étapes pour ne rien perdre et pouvoir utiliser au mieux les ingrédients

Suffisamment détaillée : Décomposée en une séquence d'étapes détaillées pour pouvoir être fait par une personne ne l'ayant pas écrite

Caractéristiques attendues... pour une recette de cuisine

Précis : L'algorithme doit être non-ambigu

Correct : L'algorithme doit répondre aux spécifications établies L'algorithme doit répondre en un temps fini L'algorithme doit s'arrêter

Efficace : Un algorithme doit être exploitable en un temps raisonnable Un algorithme doit comporter des séquences de calculs minimales, non-redondantes et optimisées

Suffisamment détaillé : L'algorithme doit être décomposé en séquences d'instructions élémentaires

Caractéristiques attendues... pour un algorithme

Conception d’algorithmes

Conception d’algorithmes et de programmes

Plusieurs étapes successives sont nécessaires a l'obtention d'un programme :

1. Spécification

2. Analyse

3. Conception

4. Implémentation

5. Compilation

6. Debuggage

1 - Spécifications : Se poser les bonnes questions

• Quelles tâches doit réaliser mon programme ? / Quels problèmes doit-il résoudre ?

• Ces problèmes admettent-ils toujours une solution ? Quels sont les cas particuliers / les cas limites ?

• Dois-je trouver une solution exacte ou une solution approchée à ces problèmes ? Est-ce calculable en un temps raisonnable ?

• Quelles sont les données à traiter par le programme ?

A l'issue de cette phase, nous avons identifié :

• Les différents problèmes à résoudre et donc les différents algorithmes à concevoir

• Les entrées et sorties de chaque algorithme

2- Analyse : Répondre à la question « comment faire ? »

Il s'agit ici de déterminer comment parvenir aux résultats recherches (sorties) à partir des données d'entrée.

Autrement dit, on énonce la ou les stratégies employées.

Durant cette étape, on ne formalise pas encore le ou les algorithmes. On se contente de poser sur papier des idées en langue naturelle.

3 - Conception : Répondre à la question « comment faire

faire ? »

Les stratégies décrites lors de la phase d'analyse sont ici formalisées de manière à être exécutables par un ordinateur.

Autrement dit, on va décortiquer chacune des stratégies en une succession de tâches (instructions) élémentaires que l'ordinateur est capable d'exécuter. Cette étape correspond à l'écriture des algorithmes requis par le programme.

Durant cette étape, il faut absolument garder à l'esprit les capacités limitées de l'exécutant (l'ordinateur).

4 - Implémentation : Du stylo au clavier

Cette étape permet donc de passer d'un algorithme décrit sur papier dans un certain formalisme à un code source écrit dans un langage de programmation sous la forme d'un fichier informatique.

Il ne s'agit ni plus ni moins que d'une traduction.

5 - Compilation : du code source à l’exécutable

Les langages de programmation ne sont pas directement compréhensibles par les ordinateurs qui ne savent interpréter que le langage machine.

La compilation est une traduction automatique du code source écrit dans un langage de programmation en un programme exécutable écrit en langage machine.

Lors de cette étape, le compilateur permet de détecter les erreurs de syntaxe et de grammaire commises lors de la phase d'implémentation.

6 - Debuggage : Comment obtenir un programme conforme au

cahier des charges

Il est extrêmement rare d'aboutir à l'issue de la compilation à un programme répondant exactement aux spécifications établies. De nombreuses erreurs ont pu être commises tout au long de la conception.

On distingue :

• Les erreurs d'implémentations (les plus simples a corriger)

• Les erreurs de logiques commises l'analyse ou de la conception

6 - debuggage : Faciliter dès le début la future recherche

d’erreur

Les éditeurs des langages de programmation sont accompagnés généralement d’un outil spécifique appelé debuggeur permettant de tracer le comportement de l'algorithme sur différents jeux de données, de vérifier les valeurs à certains moments précis et de suivre pas à pas l’exécution.

Par ailleurs, la recherche sera facilitée si le code source est : • Commenté et documenté • Lisible • Concis • Structuré

Prenez dès maintenant de bonnes habitudes !!!

Les langages de programmation

Qu’est-ce qu’un langage de programmation

Définition : Les langages de programmation sont des langages formels construits à partir d'un alphabet (liste de symboles) et d'une syntaxe précise (règles de grammaire). Chaque expression valide du langage est associée à une sémantique particulière traduisant une construction algorithmique.

Qu’est-ce qu’un langage de programmation

Attention, un ordinateur, ce n’est pas votre enseignant préféré qui corrige un rapport de stage :

• La moindre faute « d’orthographe ou de grammaire » est sanctionnée par un message d’erreur

• L’ordinateur ne corrigera jamais rien pour vous. Si une instruction finit par un « ; » que vous oubliez, il ne l’ajoutera pas !!!

• L’éditeur vous donnera par contre des indices sur de possibles erreurs que vous auriez faites lors de l’écriture.

Les étapes de la compilation

1. Une phase d'analyse lexicale chargée de vérifier que les symboles utilisés respectent bien l'alphabet du langage et de découper le code source en lexèmes (mots),

2. Une phase d'analyse syntaxique chargée de vérifier que la suite de lexèmes déterminée par l'analyse lexicale respecte bien les règles de grammaire du langage,

3. Une phase d'analyse sémantique permettant de vérifier le typage des données, la validité des instructions, etc.

4. Une phase de transformation du code source analysé en un code intermédiaire,

5. Une phase d'optimisation du code intermédiaire,

6. Une phase d'édition de liens et de génération de l'exécutable final.

Paradigmes de programmation

• Il existe de nombreux langages de programmation

• Chaque langage possède des spécificités qui lui sont propres

• Chaque langage s'inscrit dans un paradigme de programmation (i.e. style de programmation). De nombreux paradigmes existent : impératif, procédural, logique, fonctionnel, objet... et de nombreux langages par paradigmes (chaque langage pouvant ne pas être limité à un seul et unique paradigme.

• Chaque langage dispose d'outils de développement : compilateur, debuggeur, éditeur de texte dédié, etc.

Langages impératifs

Ils sont apparus à la fin des années 50 et s’oppose à la programmation déclarative (logique) ou fonctionnelle

Ils reposent sur le principe de modification d'états en mémoire de l'ordinateur (machine de Turing)

Ils s'appuient sur un jeu d'instructions (structures de contrôles) permettant de manipuler des données stockées en mémoire

L'affectation est l'opération élémentaire

Exemple de langages : C, Fortran, C++, Java, Objective-C...

Langages Orientés Objets

Ils sont apparus à la fin des années 60

Ils s'appuient sur une structuration d'un programme sous forme d'une ou plusieurs entités appelées objets

Un objet regroupe à la fois les données et les traitements associés à ces données (opérations...)

L'opération élémentaire est l'envoi de messages

Exemple de langages : C++, Java...

Présentation de JavaPremières discussions des 1990 dans les laboratoires de Sun MicroSystem autour d'un langage multi plates-formes

1994 : première version de Java

1996 : intégration de la machine virtuelle Java au navigateur Netscape

2011 : Java SE 7

Depuis, Java est le langage le plus utilisé (programmation de divers outils - Open Office, Matlab... -, sur tous les téléphones Android...)

Votre premier programme java

Un programme est toujours composé au minimum d'une class (un objet) contenant une méthode main :

public class MonPremierProgramme { public static void main(String [ ] args) { System.out. println ("Mon premier programme en Java..."); } }

Vous aurez TOUJOURS un objet et TOUJOURS une méthode main avec exactement cette déclaration. Des détails supplémentaires sur la programmation objet seront donnés par la suite.

2 - Construction algorithmiques et premiers

pas avec le langage JavaConcepts généraux, langages et méthode

Introduction

• Lors de l’apprentissage d’un langage, il faut apprendre le « minimum vital », soit l’écriture de certaines constructions toujours utilisées.

• Parmi elles :

• Écriture de l’en-tête décrivant un algorithme (une fonctionnalité de votre programme)

• Déclaration d’une variable, initialisation de celle-ci, etc.

• Faire une boucle (itération), une condition, etc.

Sommaire

• Objets

• En-tête d’algorithmes

• Variables

• Déclaration

• Utilisation

Les classes en java

Java est un langage orienté objet. Un objet modélise un concept. Ce concept sera représenté sous forme d’une classe qui va contenir des méthodes et des données. Comme montré précédemment, l’un de ces objets aura une méthode particulière, le main :

public class MonPremierProgramme { public static void main(String [ ] args) { System.out. println ("Mon premier programme en Java..."); } }

En-tête d’un algorithme

• Un algorithme sera représenté en général par une méthode, un ensemble d’instructions.

• L’en-tête de l’algorithme fournit :

• le nom de l'algorithme (choix du nom important !)

• les entrées et sorties de l'algorithme

• divers commentaires facilitant la compréhension de l'algorithme

Paramètres d’entrée et de sortie

Paramètre d’entrée : Un paramètre sera considéré comme paramètre d'entrée s'il est utilisé par l'algorithme sans être modifié.

Paramètre de sortie : Un paramètre sera considéré comme paramètre de sortie si sa valeur est calculée et modifiée par l'algorithme.

Pour chaque paramètre, il faut fournir son type.

Typage des données

• Toute donnée manipulée par un ordinateur est stockée en mémoire sous forme d’une suite de 0 et de 1

• Toutes les données n'occupent pas la même quantité d'espace mémoire

• Dans de nombreux langages, le choix a été fait de typer toutes les données pour faciliter l'allocation d'espace mémoire et le traitement des données

• Ce typage permet de : • Savoir de quelle manière interpréter la suite de 0 et de 1

associée à un espace mémoire (comme vu en TD de TICS) • Connaître la taille de cet espace mémoire.

Les types « de base » de Java

Java permet de manipuler entre autre les types suivants :

• le type int représentant les entiers relatifs (Z)

• le type long représentant les entiers relatifs longs (Z)

• le type float représentant les réels codes en simple précision (R)

• le type double représentant les réels codés en double précision (R)

• le type boolean représentant un booléen (Vrai ou Faux, 1 ou 0)

• le type char représentant l'ensemble des caractères alphabétiques, numériques, de ponctuation et des symboles

• le type String représentant une succession de caractères

Les méthodes : écrire une partie d'algorithme

• Une méthode permet donc de structurer mais permet aussi d'obtenir un code source plus concis en évitant la redondance.

• En général, le code encapsulé au sein d'une méthode correspondra à l'implémentation d'un algorithme ou d'une partie d'un algorithme donné.

Une méthode est une encapsulation de code possédant un nom et pouvant être réutilisée autant de fois que nécessaire dans le programme ou dans d'autres méthodes.

En-tête d’une méthode

Exemples : public static float calculAireCercle (float rayon) public static int max(int a, int b) public static void impressionNotes(float [] notesPromo, int nbEleves) public static void triNotes (float [] notesPromo, int nbEleves)

L’en-tête est de la forme : public static typeResultat nomMethode(type1 param1, type2 param2, ... , typen paramn) public typeResultat nomMethode(type1 param1, type2 param2, ... , typen paramn) La présence/absence de static vous sera expliquée par la suite. Le public décrit la visibilité d’une méthode (qui peut-être modifiée, cf. fin de ce cours). Une méthode ne retournant rien aura comme type de retour « void ».

Les variables

Un algorithme se compose généralement de calculs et de modifications d'états en mémoire. Il peut être utile de stocker le résultat de ces calculs ou ces états.

Définition d’une variable : Une variable est l'association d'un identifiant et d'un type à une adresse mémoire à laquelle peut être stockée une valeur. Cette valeur est accessible à tout moment et peut être modifiée au cours de l'exécution du programme.

Déclaration d’une variable

En Java, la déclaration d'une variable se fait sous cette forme

type nomVariable ;

Exemples :

String nomArticle;

boolean enPromo;

float prix ;

ATTENTION : ce « ; » termine toute instruction en java. La déclaration d’une variable est un exemple d’instruction.

Affectation

Le nom de la variable dans une expression permet d'accéder à sa valeur. La modification de cette valeur s'effectue au moyen d'un opérateur d'affectation symbolise par « = » en Java :

nomVariable = expression ;

Ici expression peut designer :

• une valeur Ex : rayonCercle = 10;

• une autre variable ou un calculEx : perimetreCercle = 2 * 3.1415 * rayonCercle;

• le résultat de l'appel d'une fonction Ex : resultat = calculAireCercle ( rayonCercle );

AffectationATTENTION : Les instructions : 10 = rayonCercle; et 2*3.1415*rayonCercle = perimetreCercle; n'ont aucun sens ! L'opérateur d'affectation « = »  n'est pas commutatif. Les instructions x = y; et y = x; ne sont pas équivalentes :

Dans l'exemple 1, au final, x et y valent 1 alors que dans l'exemple 2, x et y valent 2.

Exemple 1 : x = 1; y = 2; y = x;

Exemple 2 : x = 1; y = 2; x = y;

Votre second programme java

public class MonPremierProgramme { public static void main(String [] args) { System.out. println ("Périmètre du cercle de rayon 2 " + perimetreCercle(2));

} public static double perimetreCercle(double r) { double perim = 2 * 3.1415926535 * r; return perim; } }