« Informatique au lycée/Programmation et langages » : différence entre les versions

Une page de Wikiversité, la communauté pédagogique libre.
Contenu supprimé Contenu ajouté
.
m Robot : Changement de type cosmétique
Ligne 7 : Ligne 7 :
}}
}}


==Un peu d'histoire==
== Un peu d'histoire ==


En 1936, la publication de l'article fondateur de la science informatique « On Computable Numbers with an Application to the Entscheidungsproblem », par [[w:Alan_Mathison_Turing|Alan Mathison Turing]], allait donner le coup d'envoi à la création de l'ordinateur programmable. Il y présente sa [[w:Machine_de_Turing|machine de Turing]], le premier calculateur universel programmable, et invente les concepts et les termes de programmation et de programme.
En 1936, la publication de l'article fondateur de la science informatique « On Computable Numbers with an Application to the Entscheidungsproblem », par [[w:Alan_Mathison_Turing|Alan Mathison Turing]], allait donner le coup d'envoi à la création de l'ordinateur programmable. Il y présente sa [[w:Machine_de_Turing|machine de Turing]], le premier calculateur universel programmable, et invente les concepts et les termes de programmation et de programme.
Ligne 22 : Ligne 22 :
* [[w:James_Gosling|James Gosling]] et [[w:Patrick_Naughton|Patrick Naughton]], créateurs de [[w:Langage_de_programmation_Java|Java]] (1991).
* [[w:James_Gosling|James Gosling]] et [[w:Patrick_Naughton|Patrick Naughton]], créateurs de [[w:Langage_de_programmation_Java|Java]] (1991).


===Évolution des langages informatiques===
=== Évolution des langages informatiques ===
On distingue aujourd'hui cinq générations de langages.
On distingue aujourd'hui cinq générations de langages.
La '''première génération''' est le langage machine, ou code machine. On parle aussi de langage natif. Il est composé d'instructions et de données à traiter codées en binaire. C'est le seul langage qu'un ordinateur peut traiter directement. Voici à quoi peut ressembler un programme en langage machine :
La '''première génération''' est le langage machine, ou code machine. On parle aussi de langage natif. Il est composé d'instructions et de données à traiter codées en binaire. C'est le seul langage qu'un ordinateur peut traiter directement. Voici à quoi peut ressembler un programme en langage machine :
Ligne 63 : Ligne 63 :
Ce qui signifie que Sally et Erica sont sœurs. En effet, Sally et Erica ont le même père (Tom).
Ce qui signifie que Sally et Erica sont sœurs. En effet, Sally et Erica ont le même père (Tom).


===Quelques langages courants===
=== Quelques langages courants ===


===« Hello world ! »===
=== « Hello world ! » ===
C'est dans un memorandum interne de [[w:Brian Kernighan|Brian Kernighan]], ''Programming in C : A tutorial'', écrit en
C'est dans un memorandum interne de [[w:Brian Kernighan|Brian Kernighan]], ''Programming in C : A tutorial'', écrit en
1974 dans les [[w:Laboratoires_Bell|laboratoires Bell], que l'on trouve la première version d'un mini-programme affichant à
1974 dans les [[w:Laboratoires_Bell|laboratoires Bell], que l'on trouve la première version d'un mini-programme affichant à
l'écran « Hello World! ». Voici comment cela s'écrit dans divers langages :
l'écran « Hello World! ». Voici comment cela s'écrit dans divers langages :


====Ada====
==== Ada ====
<source lang="ada">
<source lang="ada">
with Ada.Text_IO;
with Ada.Text_IO;
Ligne 79 : Ligne 79 :
end Bonjour;
end Bonjour;
</source>
</source>
====Assembleur X86 sous DOS====
==== Assembleur X86 sous DOS ====
<source lang="asm">
<source lang="asm">
cseg segment
cseg segment
Ligne 96 : Ligne 96 :
end main
end main
</source>
</source>
====BASIC====
==== BASIC ====
<source lang="basic4gl">
<source lang="basic4gl">
10 PRINT "Hello world!"
10 PRINT "Hello world!"
20 END
20 END
</source>
</source>
====C====
==== C ====
<source lang="c">
<source lang="c">
#include <stdio.h>
#include <stdio.h>
Ligne 111 : Ligne 111 :
}
}
</source>
</source>
====C++====
==== C++ ====
<source lang="cpp">
<source lang="cpp">
#include <iostream>
#include <iostream>
Ligne 121 : Ligne 121 :
}
}
</source>
</source>
====FORTRAN 77====
==== FORTRAN 77 ====
<source lang="fortran">
<source lang="fortran">
PROGRAM BONJOUR
PROGRAM BONJOUR
Ligne 127 : Ligne 127 :
END
END
</source>
</source>
====Java====
==== Java ====
<source lang="java">
<source lang="java">
public class HelloWorld {
public class HelloWorld {
Ligne 135 : Ligne 135 :
}
}
</source>
</source>
====Javascript====
==== Javascript ====
<source lang="javascript">
<source lang="javascript">
document.write("Hello world!");
document.write("Hello world!");
</source>
</source>
====Python 1 et 2====
==== Python 1 et 2 ====
<source lang="python">
<source lang="python">
print "Hello world!"
print "Hello world!"
</source>
</source>
====Python 3====
==== Python 3 ====
<source lang="python">
<source lang="python">
print("Hello world!")
print("Hello world!")
</source>
</source>


==La machine de Turing==
== La machine de Turing ==


==Pseudo-code==
== Pseudo-code ==


===Conventions===
=== Conventions ===


===En pratique===
=== En pratique ===


===Exemple de pseudo-code===
=== Exemple de pseudo-code ===


==Transformation du code source==
== Transformation du code source ==


===Compilation===
=== Compilation ===


===Interprétation===
=== Interprétation ===


===Avantages, inconvénients===
=== Avantages, inconvénients ===


==Paradigmes==
== Paradigmes ==


===Programmation impérative===
=== Programmation impérative ===


===Programmation structurée (ou procédurale)===
=== Programmation structurée (ou procédurale) ===


===Programmation orientée objet===
=== Programmation orientée objet ===


===Programmation fonctionnelle===
=== Programmation fonctionnelle ===


==Les notions principales de la programmation==
== Les notions principales de la programmation ==


===L'affectation===
=== L'affectation ===


===Les tests===
=== Les tests ===


===Les boucles===
=== Les boucles ===


===Les sous-programmes===
=== Les sous-programmes ===


===La récursivité===
=== La récursivité ===


==La programmation orientée objet==
== La programmation orientée objet ==


===Encapsulation===
=== Encapsulation ===


===Héritage===
=== Héritage ===


===Polymorphisme===
===Polymorphisme===

Version du 21 mai 2012 à 11:22

Début de la boite de navigation du chapitre
Programmation et langages
Icône de la faculté
Chapitre no 6
Leçon : Informatique au lycée
Chap. préc. :Algèbre booléenne et circuits logiques
Chap. suiv. :Structures de données avancées
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « Informatique au lycée : Programmation et langages
Informatique au lycée/Programmation et langages
 », n'a pu être restituée correctement ci-dessus.

Un peu d'histoire

En 1936, la publication de l'article fondateur de la science informatique « On Computable Numbers with an Application to the Entscheidungsproblem », par Alan Mathison Turing, allait donner le coup d'envoi à la création de l'ordinateur programmable. Il y présente sa machine de Turing, le premier calculateur universel programmable, et invente les concepts et les termes de programmation et de programme. En 1948, Konrad Zusee publie un article sur son langage de programmation qu'il a développé entre 1943 et 1945 : le Plankalkül. Zuse le considère comme étant le premier langage de haut niveau. C'est à partir des années 50 que l'on verra apparaître les premiers langages de programmation modernes. Voici les créateurs des langages les plus utilisés :

Évolution des langages informatiques

On distingue aujourd'hui cinq générations de langages. La première génération est le langage machine, ou code machine. On parle aussi de langage natif. Il est composé d'instructions et de données à traiter codées en binaire. C'est le seul langage qu'un ordinateur peut traiter directement. Voici à quoi peut ressembler un programme en langage machine :

 A1 01 10 03 06 01 12 A3 01 14

Il s'agit de la représentation hexadécimale d'un programme permettant d'additionner les valeurs de deux cases mémoire et de stocker le résultat dans une troisième case. On voit immédiatement la difficulté d'un tel langage.

La deuxième génération est le langage assembleur : le code devient lisible et compréhensible par un plus grand nombre d'initiés. Il existe en fait un langage assembleur par type de processeur. Le programme précédent écrit en assembleur donnerait ceci :

MOV AX, [0110]
ADD AX, [0112]
MOV [0114], AX

Il reste utilisé dans le cadre d'optimisations, mais a été supplanté en popularité par les langages plus accessibles de troisième génération.

La troisième génération utilise une syntaxe proche de l'anglais. Proposés autour de 1960, ces langages ont permis un gain énorme en lisibilité et en productivité. Ils ne dépendent plus du processeur, comme c'était le cas des générations précédentes, mais d'un compilateur spécifique du processeur. L'idée de portabilité des programmes était lancée. La plupart des langages de programmation actuels sont de troisième génération. On trouve dans cette catégorie tous les grands langages : Ada, Algol, Basic, Cobol, Eiffel, Fortran, C, C++, Java, Perl, Pascal, Python, Ruby, ... Cette génération couvre d'ailleurs tant de langages qu'elle est souvent subdivisée en catégories, selon le paradigme particulier des langages.

Les langages de quatrième génération, abrégés L4G, souvent associée à des bases de données, se situent un niveau au-dessus, en intégrant la gestion de l'interface utilisateur et en proposant un langage moins technique, plus proche de la syntaxe naturelle. Ils sont conçus pour un travail spécifique : gestion de base de données (Microsoft Access, SQL), production graphique (Postscript), création d'interface (4D).

La cinquième génération de langages sont des langages destinés à résoudre des problèmes à l'aide de contraintes, et non d'algorithmes écrits. Ces langages reposent beaucoup sur la logique et sont particulièrement utilisés en intelligence artificielle. Parmi les plus connus, on trouve Prolog, dont voici un exemple :

frère_ou_soeur(X,Y) :- parent(Z,X), parent(Z,Y), X \= Y.
parent(X,Y) :- père(X,Y).
parent(X,Y) :- mère(X,Y).
mère(trude, sally).
père(tom, sally).
père(tom, erica).
père(mike, tom).

Il en résulte que la demande suivante est évaluée comme vraie :

?- frère_ou_soeur(sally, erica).
oui.

Ce qui signifie que Sally et Erica sont sœurs. En effet, Sally et Erica ont le même père (Tom).

Quelques langages courants

« Hello world ! »

C'est dans un memorandum interne de Brian Kernighan, Programming in C : A tutorial, écrit en 1974 dans les [[w:Laboratoires_Bell|laboratoires Bell], que l'on trouve la première version d'un mini-programme affichant à l'écran « Hello World! ». Voici comment cela s'écrit dans divers langages :

Ada

with Ada.Text_IO;
  use Ada.Text_IO;
  procedure Bonjour is
  begin -- Bonjour
    Put("Hello world!");
  end Bonjour;

Assembleur X86 sous DOS

cseg segment
  assume cs:cseg, ds:cseg
  org 100h
  main proc
  jmp debut
  mess db 'Hello world!$'
  debut:
  mov dx, offset mess
  mov ah, 9
  int 21h
  ret
  main endp
  cseg ends
  end main

BASIC

10 PRINT "Hello world!"
20 END

C

#include <stdio.h>

int main()/* ou int argc, char *argv[] */
{
  printf("Hello world!\n");
  return 0;
}

C++

#include <iostream>

int main()
{
  std::cout << "Hello world!" << std::endl;
  return 0;
}

FORTRAN 77

PROGRAM BONJOUR
WRITE (*,*) 'Hello world!'
END

Java

public class HelloWorld {
  public static void main(String[] args) {
    System.out.println("Hello world!");
  }
}

Javascript

document.write("Hello world!");

Python 1 et 2

print "Hello world!"

Python 3

print("Hello world!")

La machine de Turing

Pseudo-code

Conventions

En pratique

Exemple de pseudo-code

Transformation du code source

Compilation

Interprétation

Avantages, inconvénients

Paradigmes

Programmation impérative

Programmation structurée (ou procédurale)

Programmation orientée objet

Programmation fonctionnelle

Les notions principales de la programmation

L'affectation

Les tests

Les boucles

Les sous-programmes

La récursivité

La programmation orientée objet

Encapsulation

Héritage

Polymorphisme