28
1 22/9/2005 P. Van Roy, FSAB1402 1 FSAB 1402: Informatique 2 Introduction et Concepts de Base Peter Van Roy Département d’Ingénierie Informatique, UCL [email protected] Transparents inspirés par Christian Schulte et Seif Haridi 22/9/2005 P. Van Roy, FSAB1402 2 Résumé du premier cours Organisation du cours Résumé du cours Introduction aux concepts de base

Résumé du premier cours - UCLouvain

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Résumé du premier cours - UCLouvain

1

22/9/2005 P. Van Roy, FSAB1402 1

FSAB 1402: Informatique 2

Introduction et Concepts de Base

Peter Van RoyDépartement d’Ingénierie Informatique, UCL

[email protected]

Transparents inspirés par Christian Schulte et Seif Haridi

22/9/2005 P. Van Roy, FSAB1402 2

Résumé du premier cours

Organisation du cours

Résumé du cours

Introduction aux concepts de base

Page 2: Résumé du premier cours - UCLouvain

2

22/9/2005 P. Van Roy, FSAB1402 3

Organisation du cours

22/9/2005 P. Van Roy, FSAB1402 4

FSAB 1402

Séances magistrales et séances pratiques Cours magistraux pour introduire les concepts

Jeudi 8h30-10h30: BA93 Jeudi 10h45-12h45: BA91

Séances pratiques pour maîtriser les concepts Mercredi 8h30-10h30 (Bac FSA) Mardi 16h15-18h15 (Bac SINF)

Evaluation Deux piliers: la pratique (écrire des programmes) et la théorie

(définition précise des concepts, sémantique) Interrogation lundi 31 octobre Projet semaines 7-9 Examen à la fin

Page 3: Résumé du premier cours - UCLouvain

3

22/9/2005 P. Van Roy, FSAB1402 5

Equipe Titulaires

Peter Van Roy ([email protected]) Pierre Dupont ([email protected])

Assistants Raphaël Collet ([email protected]) Yves Jaradin ([email protected]) Boris Mejias ([email protected]) Luis Quesada ([email protected])

Etudiants/moniteurs Yannick Alsberge ([email protected]) Jean-Baptiste Escoyez ([email protected]) Benoît Frenay ([email protected]) Thibault Helleputte ([email protected]) Christophe Klopfert ([email protected]) Sébastien Mouthuy ([email protected]) Ariel Ouziel ([email protected]) Damien Saucez ([email protected])

22/9/2005 P. Van Roy, FSAB1402 6

Matière

Cours basé sur le livreConcepts, Techniques, and Models of ComputerProgramming, MIT Press, 2004

Disponibilité A la DUC et au SICI (livre de référence) A la bibliothèque INGI et la BSE (si vous ne voulez

pas acheter le livre)

Informations sur les TPs et des informationssupplémentaires disponibles à:

http://www.info.ucl.ac.be/notes_de_cours/FSAB1402/

Page 4: Résumé du premier cours - UCLouvain

4

22/9/2005 P. Van Roy, FSAB1402 7

Structure desséances magistrales

Rappel de la dernière séance

Résumé de ce qu’on va voir

Contenu

Résumé de ce qu’on a vu

Suggestions pour la lecture

22/9/2005 P. Van Roy, FSAB1402 8

Séances pratiques

Elles commencent la seconde semaine!

Pour les Bac FSA Semaine 2 et 3: Candix, DAO, IAO Autres semaines: Salles Mercator

Pour les Bac SINF Semaine 3: (sera affiché) Autres semaines: (sera affiché)

Page 5: Résumé du premier cours - UCLouvain

5

22/9/2005 P. Van Roy, FSAB1402 9

Séances pratiques

Buts Apprendre la pratique de la programmation Répéter la matière des cours magistraux Répondre aux questions sur la matière Approfondir votre compréhension

Exercices et problèmes Comprendre les concepts et les mettre en pratique Les encadrants vous aideront à trouver les réponses;

ils ne donneront pas les réponses eux-mêmes!

Une bonne préparation pour l’interro!

22/9/2005 P. Van Roy, FSAB1402 10

Horaire

Attention: l’horaire du cours a quelquespetites irrégularités Le site Web du cours contiendra toujours les

données exactes

Il y a deux semaines sans cours; il y a unesemaine avec deux cours

Page 6: Résumé du premier cours - UCLouvain

6

22/9/2005 P. Van Roy, FSAB1402 11

Suggestions de lecturepour le premier cours

Transparents sur le site Web du cours

Dans le livre Chapitre 1 (1.1, 1.2, 1.3) - Introduction aux concepts

de base

Chapitre 2 (2.1) - Définition des langages deprogrammation

Chapitre 2 (2.3) - Langage de base

Chapitre 2 (2.4.1) - Concepts de base (identificateurs,variables, environnement, portée, fonctions etprocédures)

22/9/2005 P. Van Roy, FSAB1402 12

Environnement deprogrammation

http://www.mozart-oz.org/ Langage: Oz Système: Mozart Éditeur: Emacs Système interactif

Disponible sur l’infrastructure FSA, sous Linux etWindows

Vous pouvez l’installer sur vos ordinateurspersonnels

Si vous avez un ordinateur portable, vous pouvezdéjà installer Mozart avant les séances pratiques

Page 7: Résumé du premier cours - UCLouvain

7

22/9/2005 P. Van Roy, FSAB1402 13

Des commentaires etsuggestions sont bienvenus!

Sur la structure ou le contenu du cours

N’hésitez pas à me contacter ou contacter unencadrant

Si vous voulez me contacter, prenez unrendezvous s’il vous plaît! Par email: [email protected]

Par téléphone: 010 47 83 74

22/9/2005 P. Van Roy, FSAB1402 14

Questions et freins!

Posez des questions quand ce n’est pas clair Pour répéter une explication

Pour donner une meilleure explication

Pour donner un exemple

Dites-moi quand je vais trop vite!

Dites-moi quand je vais trop lentement!

Page 8: Résumé du premier cours - UCLouvain

8

22/9/2005 P. Van Roy, FSAB1402 15

Résumé du cours

22/9/2005 P. Van Roy, FSAB1402 16

Objectif du cours

1. La programmation fonctionnelle (3 semaines)• Un programme est une fonction mathématique

2. Les techniques de programmation (3 semaines)• La complexité calculatoire• Les algorithmes sur les listes et les arbres

3. La sémantique formelle des langages (1 semaine)• On ne peut pas maîtriser ce qu’on ne comprend pas

4. L’abstraction de données (4 semaines)• Partitionner un problème pour maîtriser la complexité• Les deux approches: objets et types abstraits• Le langage Java

5. La concurrence et les systèmes multi-agents (1 semaine)

Donner une introduction à la discipline de laprogrammation, en cinq thèmes:

Page 9: Résumé du premier cours - UCLouvain

9

22/9/2005 P. Van Roy, FSAB1402 17

Il y a beaucoup de manièresde programmer un ordinateur!

Programmation déclarative Programmation fonctionnelle ou

programmation logique

Programmation concurrente Par envoi de messages ou par données

partagées

Programmation avec état

Programmation orientée objet

Programmation par composants logiciels

22/9/2005 P. Van Roy, FSAB1402 18

Modèles de programmation(“paradigmes”)

Mettre ensemble Des types de données et leurs opérations Un langage pour écrire des programmes

Chaque modèle/paradigme permet d’autrestechniques de programmation

Les paradigmes sont complémentaires

Le terme “paradigme de programmation” Très utilisé dans le monde commercial; attention au sens

(buzzword)!

Page 10: Résumé du premier cours - UCLouvain

10

22/9/2005 P. Van Roy, FSAB1402 19

Langages de programmation

Différents langages soutiennent différentsmodèles/paradigmes Java: programmation orientée objet Haskell: programmation fonctionnelle Erlang: programmation concurrente pour systèmes fiables Prolog: programmation logique …

Nous voudrions étudier plusieurs paradigmes! Est-ce qu’on doit étudier plusieurs langages?

Nouvelle syntaxe… Nouvelle sémantique… Nouveau logiciel…

22/9/2005 P. Van Roy, FSAB1402 20

La solution pragmatique…

Un seul langage de programmation Qui soutient plusieurs modèles de programmation Parfois appelé un langage “multi-paradigme”

Notre choix est Oz Soutient ce qu’on voit dans le cours, et plus encore

L’accent sera mis sur Les modèles de programmation! Les techniques et les concepts! Pas le langage en soi!

Page 11: Résumé du premier cours - UCLouvain

11

22/9/2005 P. Van Roy, FSAB1402 21

Comment présenter plusieursmodèles de programmation?

Basé sur un langage noyau Un langage simple

Un petit nombre de concepts significatifs

Buts: simple, minimaliste

Langage plus riche au dessus du langagenoyau

Exprimé en le traduisant vers le langage noyau

But: soutenir la programmation pratique

22/9/2005 P. Van Roy, FSAB1402 22

Approche incrémentale

Commencer par un langage noyau simple Programmation fonctionnelle

Ajouter des concepts Pour obtenir les autres modèles de programmation Très peu de concepts! Très peu à comprendre!

En FSAB1402 nous ne verrons que quelques modèles, àcause de la taille limitée du cours

Les autres modèles peuvent être vus dans d’autres cours (parexemple, en INGI2131 ou INGI2365) ou en lisant plus loin dansle livre

Page 12: Résumé du premier cours - UCLouvain

12

22/9/2005 P. Van Roy, FSAB1402 23

Les modèles que vousconnaissez!

Vous connaissez tous le langage Java, quisoutient

La programmation avec état

La programmation orientée objet

C’est clair que ces deux modèles sontimportants!

22/9/2005 P. Van Roy, FSAB1402 24

Pourquoi les autres modèles? Deux nouveaux modèles qu’on verra dans ce cours

Programmation déclarative (fonctionnelle) Programmation concurrente (multi-agent) avec dataflow

D’autres modèles pas vu dans ce cours Programmation concurrente par envoi de messages ou par données

partagées Programmation logique (déterministe et nondéterministe) Programmation par contraintes Programmation par composants …

Est-ce que tous ces modèles sont importants? Bien sûr! Ils sont importants dans beaucoup de cas, par exemple pour les

systèmes complexes, les systèmes multi-agents, les systèmes àgrande taille, les systèmes à haute disponibilité, etc.

On reviendra sur ce point plusieurs fois dans le cours

Page 13: Résumé du premier cours - UCLouvain

13

22/9/2005 P. Van Roy, FSAB1402 25

Notre premier modèle La programmation déclarative

Deux formes: programmation fonctionnelle et programmationlogique

On peut considérer la programmation fonctionnelle comme labase de la plupart des autres modèles On regardera uniquement la programmation fonctionnelle

Approche Introduction informelle aux concepts et techniques importants,

avec exemples interactifs Introduction au langage noyau Sémantique formelle basée sur le langage noyau Étude des techniques de programmation, surtout la récursion

(sur entiers et sur listes) et la complexité calculatoire

22/9/2005 P. Van Roy, FSAB1402 26

La programmation déclarative

L’idéal de la programmation déclarative Dire uniquement ce que vous voulez calculez

Laissez l’ordinateur trouvez comment le calculer

De façon plus pragmatique Demandez plus de soutien de l’ordinateur

Libérez le programmeur d’une partie du travail

Page 14: Résumé du premier cours - UCLouvain

14

22/9/2005 P. Van Roy, FSAB1402 27

Propriétésdu modèle déclaratif

Un programme est une fonction ou une relation ausens mathématique

Un calcul est l’évaluation d’une fonction ou une relationsur des arguments qui sont des structures de données

Très utilisé Langages fonctionnels: LISP, Scheme, ML, Haskell, … Langages logiques (relationnels): Prolog, Mercury, … Langages de représentation: XML, XSL, …

Programmation “sans état” Aucune mise à jour des structures de données! Permet la simplicité

22/9/2005 P. Van Roy, FSAB1402 28

L’utilité du modèle déclaratif

Propriété clé: “Un programme qui marcheaujourd’hui, marchera demain” Les fonctions ne changent pas de comportement, les

variables ne changent pas d’affectation

Un style de programmation qui est à encouragerdans tous les langages “Stateless server” dans un contexte client/server “Stateless component”

Pour comprendre ce style, nous utilisons le modèlefonctionnel! Tous les programmes écrits dans ce modèle sont ipso

facto déclaratif: une excellent manière de l’apprendre

Page 15: Résumé du premier cours - UCLouvain

15

22/9/2005 P. Van Roy, FSAB1402 29

Introduction auxConcepts de Base

22/9/2005 P. Van Roy, FSAB1402 30

Un langage de programmation

Réalise un modèle de programmation

Peut décrire des programmes Avec des instructions

Pour calculer avec des valeurs

Regardons de plus près instructions

valeurs

Page 16: Résumé du premier cours - UCLouvain

16

22/9/2005 P. Van Roy, FSAB1402 31

Système interactif

Sélectionner la région dans le buffer Emacs

Donner la région sélectionnée au système La région est compilée

La région compilée est exécutée

Système interactif: à utiliser comme une calculatrice

Essayez vous-même après ce cours!

declareX = 1234 * 5678{Browse X}

22/9/2005 P. Van Roy, FSAB1402 32

Système interactif:Qu’est-ce qui se passe?

Déclarer (“créer”) une variable désignée par X Affecter à la variable la valeur 7006652

Obtenu en faisant le calcul 1234*5678 Appeler la procédure Browse avec l’argument

désignée par X Fait apparaître une fenêtre qui montre 7006652

declareX = 1234 * 5678{Browse X}

Page 17: Résumé du premier cours - UCLouvain

17

22/9/2005 P. Van Roy, FSAB1402 33

Variables Des raccourcis pour des valeurs Peuvent être affectées une fois au plus

Variables mathématiques (Note: l’affectation multiple est un autre concept; on la verra plus loin dans

le cours sous le nom de “cellule”)

Sont dynamiquement typées (type connu pendant l’exécution) En Java elles sont statiquement typées: type connu avant

l’exécution (à la compilation)

Attention: il y a deux concepts cachés ici! L’identificateur: le nom que vous tapez sur le clavier, c’est

une chaine de caractères qui commence avec une majusculeVar, A, X123, OnlyIfFirstIsCapital

La variable en mémoire: une partie de la mémoire du système

22/9/2005 P. Van Roy, FSAB1402 34

Déclaration d’une variable

declare est une instruction (“statement”) Crée une nouvelle variable en mémoire

Fait le lien entre l’identificateur X et la variable en mémoire

Troisième concept: l’environnement Une fonction des identificateurs vers les variables

Fait la correspondance entre chaque identificateur et une variable(et donc sa valeur aussi)

Le même identificateur peut correspondre à différentes variablesen différents endroits du programme!

declareX = …

Page 18: Résumé du premier cours - UCLouvain

18

22/9/2005 P. Van Roy, FSAB1402 35

Affectation

L’affectation prend une variable en mémoireet la lie avec une valeur

Dans le texte d’un programme, l’affectationest exprimée avec les identificateurs!

Après l’affectation X=42, la variable quicorrespond à l’identificateur X sera liée à 42

declareX = 42

22/9/2005 P. Van Roy, FSAB1402 36

Affectation unique

Une variable ne peut être affectée qu’à une seulevaleur

On dit: variable à affectation unique Pourquoi? Parce que nous sommes en modèle déclaratif!

Affectation incompatible: signale une erreurX = 43

Affectation compatible: ne rien faireX = 42

Page 19: Résumé du premier cours - UCLouvain

19

22/9/2005 P. Van Roy, FSAB1402 37

La redéclaration d’une variable(en fait: d’un identificateur!)

Un identificateur peut être redéclaré Ça marche parce qu’il s’agit des variables en mémoire différentes!

Les deux occurrences de l’identificateur correspondent à desvariables en mémoire différentes.

L’environnement interactif ne gardera que la dernière variable Ici, X correspondera à 11

declareX = 42declareX = 11

22/9/2005 P. Van Roy, FSAB1402 38

La portée d’une occurrenced’un identificateur

L’instruction local X in <stmt> enddéclare X qui existera entre in et end

La portée d’une occurrence d’unidentificateur est la partie d’unprogramme pour laquelle cetidentificateur correspond à la mêmevariable en mémoire.

(Si la portée est déterminée par uneinspection du code d’un programme, elles’appelle portée lexicale ou portée statique.)

Pourquoi il n’y a pas de conflit entreX=42 et X=11?

Le troisième Browse affichera quoi?

local Xin X = 42 {Browse X} local X in X = 11 {Browse X} end {Browse X}end

Page 20: Résumé du premier cours - UCLouvain

20

22/9/2005 P. Van Roy, FSAB1402 39

Structures de données(valeurs)

Structures de données simples Entiers 42, ~1, 0

Notez: “~” pour entier négatif (!)

Virgule flottante 1.01, 3.14, 0.5, ~3.2 Atomes (constantes) foo, ‘Paul’, nil

Structures de données composées Listes

Tuples, enregistrements (“records”)

Dans ce cours on utilisera principalement les entiers et leslistes

22/9/2005 P. Van Roy, FSAB1402 40

Fonctions

Définir une fonction Donner une instruction qui définit ce que doit faire

la fonction

Appeler une fonction Utiliser la fonction pour faire un calcul selon sa

définition

On dit aussi: appliquer une fonction

Page 21: Résumé du premier cours - UCLouvain

21

22/9/2005 P. Van Roy, FSAB1402 41

Notre première fonction

Pour calculer la négation d’un entier Prend un argument: l’entier

Rend une valeur: la négation de l’entier

En notation mathématique:Integer → Integer

minus:n |→ ~n

22/9/2005 P. Van Roy, FSAB1402 42

La définition de la fonctionMinus

L’identificateur Minus sera lié à la fonction Déclarer une variable qui est liée à l’identificateur Minus

Affecter cette variable à la fonction en mémoire

La portée de l’argument X est le corps de la fonction

declarefun {Minus X} ~Xend

Page 22: Résumé du premier cours - UCLouvain

22

22/9/2005 P. Van Roy, FSAB1402 43

L’application de la fonctionMinus

Y est affecté à la valeur calculée parl’application de Minus à l’argument ~42

declareY = {Minus ~42}{Browse Y}

22/9/2005 P. Van Roy, FSAB1402 44

Syntaxe

Définition d’une fonction

fun {Identificateur Arguments} Corps de la fonction

end

Appel d’une fonction

X = {Identificateur Arguments}

Page 23: Résumé du premier cours - UCLouvain

23

22/9/2005 P. Van Roy, FSAB1402 45

Fonction de maximum

Calculer le maximum de deux entiers Prend deux arguments: entiers Rend une valeur: l’entier le plus grand

En notation mathématique:Integer x Integer → Integer

max:n, m |→ n, n>m

m, otherwise

22/9/2005 P. Van Roy, FSAB1402 46

Définition de la fonction Max

declarefun {Max X Y} if X>Y then X else Y endend

• Nouvelle instruction: conditionnel (if-then-else)• Le conditionnel renvoie un résultat

Page 24: Résumé du premier cours - UCLouvain

24

22/9/2005 P. Van Roy, FSAB1402 47

Application de la fonction Max

declareX = {Max 42 11}Y = {Max X 102}{Browse Y}

22/9/2005 P. Van Roy, FSAB1402 48

Maintenant le minimum

Une possibilité: couper et coller Répéter ce qu’on a fait pour Max

Mieux: la composition de fonctions Reutiliser ce qu’on a fait avant C’est une bonne idée de reutiliser des fonctions

compliquées

Pour le minimum de deux entiers:min(n,m) = ~max(~n,~m)

Page 25: Résumé du premier cours - UCLouvain

25

22/9/2005 P. Van Roy, FSAB1402 49

Définition de la fonction Min

declarefun {Min X Y} {Minus {Max {Minus X} {Minus Y}}}end

22/9/2005 P. Van Roy, FSAB1402 50

Définition de la fonction Min(avec ~)

declarefun {Min X Y} ~ {Max ~X ~Y}end

Page 26: Résumé du premier cours - UCLouvain

26

22/9/2005 P. Van Roy, FSAB1402 51

Définition inductived’une fonction

Fonction de factorielle n! La définition inductive est

0! = 1n! = n * ((n-1)!)

Programmer ceci en tant que fonction Fact

Comment procéder? Utiliser l’application récursive de Fact!

22/9/2005 P. Van Roy, FSAB1402 52

Définition de la fonction Fact

fun {Fact N} if N==0 then % Test d’égalité 1 else N * {Fact N-1} % Appel récursif endend

Page 27: Résumé du premier cours - UCLouvain

27

22/9/2005 P. Van Roy, FSAB1402 53

Récursion

Structure générale Cas de base Cas récursif

Pour un nombre naturel n, souvent: Cas de base: n est zéro Cas récursif: n est différent de zéro

n est plus grand que zéro

Beaucoup plus: la semaine prochaine! La récursion c’est la manière de faire une boucle en

modèle déclaratif

22/9/2005 P. Van Roy, FSAB1402 54

Une fonction est un casparticulier d’une procédure

Le vrai concept de base est la procédure

Une fonction est une procédure avec unargument en plus, qui est utilisée pourrenvoyer le résultat

Z={Max X Y} (fonction Max) est équivalent à:{Max X Y Z} (procédure Max, avec un argument de plus)

Page 28: Résumé du premier cours - UCLouvain

28

22/9/2005 P. Van Roy, FSAB1402 55

Résumé

Système interactif “Variables”

Déclaration Affectation unique Identificateur Variable en mémoire Environnement Portée d’une occurrence d’un identificateur

Structures de données Entiers

Fonctions Définition Appel (application)

Récursion

22/9/2005 P. Van Roy, FSAB1402 56

A la prochaine fois!

Les séances pratiques Mercredi 8h30-10h30 pour Bac FSA

Mardi 16h15-18h15 pour Bac SINF

La semaine prochaine, j’attends de vous que vousvous familiarisez avec la plate-forme Mozart et sonenvironnement

Vous pouvez déjà regarder l’énoncé du premier TPsur le Web

Je vous conseille d’installer Mozart chez vous! C’est facile!