Looking for Computer Science  & Information Technology online courses ?
Check my new web site: https://www.yesik.it !

Un programme est l'ensemble des instructions nécessaires à la réalisation d'une tâche.

Pour écrire des programmes, les programmeurs utilisent des langages de programmation. Afin qu'un programme soit compréhensible par un ordinateur, il doit être écrit en respectant des règles qui varient selon le langage de programmation utilisé.

Programme principal

Vous le verrez dans quelques instants, un programme est découpé en plusieurs parties. L'une d'entre-elles est très importante, puisque c'est par elle que va commencer l'exécution du programme. Cette partie porte le nom de programme principal.

La manière dont est identifié le programme principal va dépendre du langage utilisé.

Langages informatiques

Un programme écrit en langage machine peut directement être traité par le processeur central de l'ordinateur. Néanmoins, il est extrêmement rare aujourd'hui d'écrire des programmes ainsi. Dans l'immense majorité des cas, on privilégie l'utilisation de langages de plus haut niveau. Ceux-ci ont pour avantage d'être plus lisible (par un humain), de nécessiter moins d'instructions ... et donc de permettre d'écrire plus vite des programmes plus complexes et globalement de meilleure qualité. Leur gros désavantage étant qu'ils ne sont pas directement compréhensibles par le processeur central.

Pour être exécuté, un programme écrit dans un langage de haut niveau doit:

Remarque:

Si les deux approches semblent bien distinctes, la réalité est plus subtile. En effet, il existe tout un tas d'approches intermédiaires. Ainsi, par exemple, certains interpréteurs transforment le code source en une représentation plus efficace avant de commencer l'interprétation (wikipedia:Abstract Systax Tree). A l'inverse, certains compilateurs génèrent non pas du langage machine, mais une représentation intermédiaire indépendante du matériel – et qui nécessite donc un interpréteur spécifique, appelé machine virtuelle, pour être exécuté (wikipedia:Virtual Machine).

Remarque:

Qu'il soit interprété ou compilé est un détail de mise en oeuvre indépendant du langage lui-même. Autrement dit, rien n'empèche d'utiliser tantôt un compilateur, tantôt un interpréteur pour le même langage. Néanmoins, dans la pratique, pour un langage donné, les mises en oeuvre tendent à toutes privilégier la même approche. Dans la suite, quand on indiquera si un langage est "compilé" ou "interprété", ce sera sous-entendu "dans les mises en oeuvre conventionnelles".

Pseudo-code

Généralement, en informatique, un programme est exprimé de manière à pouvoir être exécuté par un ordinateur. Néanmoins, il peut aussi servir à décrire un algorithme à un autre programmeur. Quand on recherche uniquement ce dernier but, on recours parfois à un langage fictif et/ou approximatif. Dans ce cas, on parle de pseudo-code.

L'avantage du pseudo-code est de pouvoir se concentrer sur le message à communiquer, sans obscurcir le code avec les détails de mise en oeuvre ou les contraintes liées à un vrai langage de programmation. Le pseudo-code permet également de décrire un programme de façon indépendante du langage cible – permettant ainsi à un programmeur habitué à un langage d'expliquer son programme à une personne habituée à un autre langage. L'inconvénient majeur du pseudo code est qu'il est uniquement destiné à la communication humain à humain. Un algorithme décrit ainsi doit souvent être adapté pour prendre en compte les contraintes ou les possibilités du langage cible.

Si le Dr Frankenstein avait été programmeur, il aurait pu écrire le programme suivant:

chaque Créature
    sait que saluer c'est:
        afficher "A vos ordres maîîître..."

Le pseudo-code ci-dessus n'a rien de très formel. L'important est surtout qui puisse être lu et facilement compris. Il commence par décrire ce qu'est une "Créature". Comme vous le constatez, la seule chose que sait faire toute créature du Dr Frankenstein est de "saluer". Vous voyez également que pour ces "créatures", "saluer" se résume à afficher un message (toujours le même).

Cette première partie n'est que la déclaration de ce que peut faire une "Créature". A elle toute seule, elle ne fait rien. Pour savoir ce que va faire le programme, il faudra examiner la seconde partie du programme, qui constitue le programme principal. Elle décrit ce qui va effectivement se passer quand on lancera le programme. En l'occurence, il s'agira ici de créer une nouvelle créature (c'est à dire un exemplaire), puis de lui demander de dire bonjour.

le programme principal fait:
    définir monstre ← créer une nouvelle Créature
    demander au monstre de saluer

Notez aussi l'utilisation du mot monstre. Il s'agit d'une variable locale, c'est à dire une boîte ou une étiquette qui permet d'accéder à une donnée du programme – ici une instance de "Créature". C'est au travers de ce nom que le programme (et le programmeur) font référence à l'objet à manipuler.

En mémoire

Avant de passer au codage dans un langage de programmation formel, nous allons rapidement observer ce qui se passe en mémoire pendant l'éxécution de ce programme.

Avant tout, il faut savoir que pendant l'exécution, la mémoire de l'ordinateur est divisée en plusieurs parties (appelées parfois segments ou zones). Les variables manipulées par le programme sont réparties dans deux zones appelées la pile et le tas:

Dans la plupart des langages impératifs orientés objets, les objets créés dynamiquement (par l'opérateur new par exemple) sont créés dans le tas. A l'inverse, les variables locales sont crées sur la pile.

Par conséquent, une instruction comme:

    définir monstre ← une nouvelle Créature

Fait en réalité trois choses:

  1. Créer un nouvel objet dans le tas,
  2. Définir une variable sur la pile,
  3. Indiquer que la variable locale référence l'objet.

PHP

PHP (pour PHP: Hypertext Processing) est un langage de programmation interprété spécifiquement conçu pour le développement d'application web côté serveur (server side). C'est à dire que les programmes PHP seront interprétés sur le serveur Web, et que c'est le résultat de ces programmes qui sera renvoyé au navigateur client.

Voici la version PHP de notre programme, enregistrée dans la fichier PrometheeNumerique.php:

<?php
class Creature {
        public function saluer() {
                print("A vos ordres Maîîître..\n");
        }
}
 
 
header("content-type: text/plain");
$monstre = new Creature;
$monstre->saluer();
?>

Avant d'envisager d'exécuter ce programme, il faut d'abord l'installer à un endroit où l'interpréteur PHP associé à votre serveur web pourra le trouver. Selon votre système d'exploitation, votre serveur Web ou encore la manière dont celui-ci a été installé, la procédure exacte varie. Reportez-vous à la documentation de votre serveur pour plus d'information.

Sur mon système Debian/Linux - et avec le serveur web Apache2 installé par le gestionnaire de paquets, il me suffit de copier le fichier dans le répertoire /var/www:

sh$ cp PrometheeNumerique.php /var/www/

Enfin, pour l'exécuter, il faut charger l'adresse correspondant à ce programme dans un client http (un navigateur web, par exemple). Toujours sur mon système, il s'agit de l'adresse http://localhost/PrometheeNumerique.php

JavaScript

Tout comme PHP, JavaScript est un langage de programmation interprété. Tout comme PHP, son domaine de prédilection est le développement Web. Par contre, à l'inverse de PHP, JavaScript est interprété côté client.

Remarque:

Tout ceci s'entend en général: en effet, on trouve aussi des serveurs web capables d'interpréter du JavaScript. Et il est possible d'utiliser JavaScript dans un contexte tout autre que celui du développement Web!

JavaScript diffère des autres langages étudiés ici sur plusieurs points:

Note:

A part quelques éléments de syntaxe, et leur naissance qui remonte au milieu des années 1990, JavaScript et Java n'ont quasiment rien à voir ensemble. Ne faites pas la confusion entre ces deux langages!

Nous l'avons dit, un programme JavaScript n'est pas autonome. Il doit s'exécuter dans une autre application. L'application la plus courante pour exécuter "du JavaScript" est un navigateur Web: Firefox ou Internet Explorer, par exemple.

Vous le savez, un navigateur charge des pages web. Pour votre premier programme JavaScript, vous allez devoir créer non pas un mais deux fichiers. Le premier n'a quasiment rien à voir avec JavaScript à proprement parlé: c'est juste un document HTML à charger dans le navigateur (l'application hôte). C'est ce document qui va demander au navigateur de charger – et exécuter – le programme JavaScript.

Voici le code source du fichier PrometheeNumerique.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
             xml:lang="fr"
             lang="fr"
             dir="ltr">
<head>
        <title>Prométhée Numérique</title>
</head>
<body>
        <script type= "text/javascript" src="PrometheeNumerique.js">
        </script>
</body>
</html>

Comme vous l'avez remarqué (puisque vous ne vous contentez pas de faire du copier-coller sans même regarder ce que vous copiez), ce fichier contient un élément script. Celui-ci précise le langage dans lequel le script à exécuter va être écrit (text/javascript) et le nom du fichier de script à exécuter (PrometheeNumerique.js). Reste à écrire ce fichier.

Et maintenant le fichier PrometheeNumerique.js:

var Creature = function () {
        var that = {};
 
        that.saluer = function(){
                document.write("A vos ordres maîîître...");
        };
 
        return that;
};
 
var monstre = Creature();
monstre.saluer();

Pour exécuter ce programme JavaScript, il suffit de le mettre dans le même répertoire que le fichier HTML précédent, puis d'ouvrir ce dernier avec votre navigateur préféré (Sous Firefox, il faut aller dans le menu "Fichier > Ouvrir un fichier...").

C++

C++ est un langage compilé qui peut être utilisé pour écrire une grande variété de logiciels. C++ se veut proche de la machine et est donc très performant.

Voici un exemple de programme C++:

#include <iostream>
 
class Creature
{
        public:
        void    saluer()
        {
                std::cout << "A vos ordres maîîître..." << std::endl;
        }
};
 
int main()
{
        Creature   *monstre = new Creature;
        monstre->saluer();
 
        delete monstre;
 
        return 0;
}

Point de syntaxe: (C++)

En C++, c'est au programmeur de supprimer du tas les objets qui ne sont plus utiles:

delete monstre;

A l'inverse, les autres langages décrits ici disposent tous d'un ramasse miette (garbage collector). Autrement dit, dans ces langages, les objets inutiles sont automatiquement détruits.

Egalement à l'inverse des autres langages présentés ici, C++ permet aussi de créer des objets sur la pile. Dans ce cas là, leur durée de vie est limitée par le bloc entre accolades où ils sont définis:

int main()
{
        Creature   monstre; // pas de 'new': monstre sur le 'pile'
        monstre.saluer();
 
        return 0;
} // Le bloc se termine: le monstre sur la pile est détruit automatiquement

Avant de pouvoir être exécuté, ce programme doit être compilé. Ici encore, la procédure exacte dépend de votre système d'exploitation et du compilateur C++ que vous avez installé. Sur ma machine Debian/Linux, j'utilise g++:

sh$ g++ -Wall -Werror PrometheeNumerique.cc -o PrometheeNumerique

Une fois cette étape passée, le programme compilé peut être directement exécuté à partir du shell:

sh$ ./PrometheeNumerique
A vos ordres maîîître...

Java

Avec Java, la frontière entre programme compilé et programme interprété s'estompe: en effet, le compilateur java produit un code intermédiaire (appelé byte-code) qui nécessite un logiciel (appelé machine virtuelle) pour être interprété.

L'approche peut sembler curieuse au premier abord, mais elle répond à un double-besoin: avoir des performances d'exécution comparables à celles d'un programme compilé tout en permettant d'exécuter un même programme sur n'importe quelle architecture. Seule la machine virtuelle est dépendante de l'architecture d'exécution. Les ingénieurs de Sun ont résumé cette idée en un slogan: Write Once, Run Everywhere.

En guise d'exemple, voici le programme Java PrometheeNumerique.java

class Creature {
    public void saluer() {
        System.out.println("A vos ordres maîîître...");
    }
}
 
public class PrometheeNumerique {
    public static void main(String[] argv) {
        Creature   monstre = new Creature();
        monstre.saluer();
    }
}

Attention aux majuscules!

Le fichier source doit s'appeler PrometheeNumerique.java – en respectant les majuscules et minuscules. En effet, Java impose que le fichier source porte le même nom que la classe publique (public class ...) qu'il contient.

La compilation de ce programme se fait avec javac:

sh$ javac PrometheeNumerique.java

Si le compilateur ne donne aucun message d'erreur (en fait si le compilateur ne signale rien du tout), c'est que la compilation s'est bien passée. Vous pouvez vérifier en examinant le contenu du répertoire courant:

sh$ ls -l
-rw-r--r--  1 sylvain sylvain  424 jui  8 00:03 Creature.class
-rw-r--r--  1 sylvain sylvain  339 jui  8 00:03 PrometheeNumerique.class
-rw-r--r--  1 sylvain sylvain  270 jui  8 00:03 PrometheeNumerique.java

L'exécution du programme se fait en invoquant la machine virtuelle Java et en lui donnant le nom de la classe (pas le nom du fichier!) contenant le programme principal (main):

sh$ java PrometheeNumerique
A vos ordres maîîître...

Groovy

Groovy est un langage alternatif pour la plate-forme Java. Il offre une syntaxe compacte et une plus grande expressivité que le langage Java, ainsi que des comportements dynamiques similaires à ceux de langages interprétés comme PHP ou Ruby.

Par contre, il conserve une compatibilité binaire avec Java, puisqu'un programme Groovy peut être compilé en byte-code Java, puis exécuté sur une machine virtuelle Java. Offrant par là une grande intégration dans le riche environnement de développement qui existe autour de la plate-forme Java.

Cette compatibilité permet également d'intégrer en toute transparence dans la même application du code écrit en Java et du code écrit en Groovy.

Voici le code source du fichier PrometheeNumerique.groovy:

class Creature {
    public void saluer() {
        println "A vos ordres maîîître...";
    }
}
 
def monstre = new Creature();
monstre.saluer();

Pour exécuter ce programme, vous pouvez utiliser la commande Groovy:

sh$ groovy PrometheeNumerique.groovy
A vos ordres maîîître...

Cette commande compile et exécute le programme contenu dans le fichier PrometheeNumerique.groovy. Accessoirement, vous pouvez aussi effectuer ces deux phases séparément:

sh$ groovyc PrometheeNumerique.groovy
sh$ groovy PrometheeNumerique
A vos ordres maîîître...

A vous de jouer

Ecrivez le programme principal...

  1. Ecrivez le programme principal qui utilise la classe ci-dessous pour saluer dans le dialecte du Nord:
    class Chti {
        public void saluer() {
            System.out.println("Salut biloute!");
        }
    }
  2. Re-ecrivez ce programme dans un des autres langages que vous connaissez.

Ecrivez la classe...

Dans la série "Le Prisonnier", les habitants du "Village" se saluent par le célèbre "Bonjour chez vous!".

  1. Ecrivez la classe Prisonnier correspondant au programme principal ci-dessous:
    header("Content-type: text/plain");
    $numero6 = new Prisonnier();
    $numero6->saluer();
  2. Re-ecrivez ce programme dans un des autres langages que vous connaissez.