UP | HOME

Programmation modulaire - Présentation du cours


Module : Élément conçu pour être juxtaposé à d'autres ou combiné avec d'autres, afin de former des ensembles répondant à des besoins spécifiques. (Acad. fr.)


Table of Contents

Motivations et objectifs


Panorama rapide


  • 1950' - Assembleur
    • Langage pour programmer les processeurs
      section .data
          helloMsg:     db 'Hello world!',10 
          helloSize:    equ $-helloMsg
      section .text
          global _start
      _start:
          mov eax,4             ; Appel système "write" (sys_write)
          mov ebx,1             ; File descriptor, 1 pour STDOUT (sortie standard)
          mov ecx, helloMsg     ; Adresse de la chaîne a afficher
          mov edx, helloSize    ; Taille de la chaîne
          int 80h               ; Exécution de l'appel système
                                ; Sortie du programme
          mov eax,1             ; Appel système "exit"
          mov ebx,0             ; Code de retour
          int 80h
      

  • 1970' - C (Kernighan et Ritchie @ Bell)
    • Assembleur + abstraction des instructions + abstraction des fonctions
    • Programmation de systèmes (UNIX)
      #include <stdio.h>
      
      int main()
      {
        printf("Hello, world!\n");
      }
      

  • 1980' - C++ (Stroustrup @ Bell)
    • C + abstraction de données (classes)
    • Programmation de systèmes et d'applications
      #include <iostream>
      int main()
      {
        std::cout << "Hello, world!\n";
      }
      

  • 1995' - Java (Gosling @ Sun) | 2000' - C# (Hejlsberg @ Microsoft)
    • C++ + sûreté + machine virtuelle
    • Programmation d'applications pour réseaux (internet) apportant l'interopérabilité, la portabilité et la sécurité
      public class HelloWorld {
        public static void main(String[] args) {
          System.out.println("Hello, world!");
        }
      }
      
      using System;
      class Program
      {
        public static void Main(string[] args)
        {
          Console.WriteLine("Hello, world!");
        }
      }
      

Programmer en Java ?


Oui, plutôt utile !

Question: combien de machines virtuelles ?
  • Million
  • Milliard
  • Billion

Quatre versions officielles de Java dédiées à quatre contextes d'utilisation

  • Java Enterprise Edition pour les entreprises : programmes pour les serveurs utilisés dans les systèmes d'information
  • Java Standard pour les postes de travail : certains programmes clients, dits riches, environnements de développement (Eclipse), applettes Java (petites applications s'exécutant dans un navigateur)
  • Java Micro Edition pour les systèmes mobiles, pour l'Internet des objets : programmes embarqués sur des objets physiques (téléphones, etc.) (à distinguer des programmes Java pour Android, qui sont compilés vers une machine virtuelle non Java)
  • Java Card pour les cartes à puces : programmes embarqués sur des cartes bancaires, SIM, etc.

Note : cf. Wikipedia pour plus d'informations.


Pourquoi un tel succès ?


Avantages tirés du langage Java

  • Simplicité des concepts utilisés
  • Grande richesse et stabilité des bibliothèques
  • Relative efficacité (toujours en amélioration)
  • Sûreté : réduction du nombre d'erreurs à l'exécution grâce à la sûreté de typage et à des contrôles réalisés par la machine virtuelle (comme par exemple l'impossibilité d'exploiter une faille de type buffer overflow)

La sûreté en pratique : du Heartbeat au Heartbleed (du battement au saignement)

../../../images/heartbleed_explanation1.png

Heartbeat (un client s'assure de la présence du serveur)

../../../images/heartbleed_explanation2.png

Heartbleed (un client récupère des données privées du serveur)

  • Les tableaux en C ou C++ : une suite de valeurs
    • Pas de longueur
    • Bonne pratique pour le programmeur : accompagner le tableau de sa longueur et toujours vérifier que les indices sont dans l'intervalle [0, longueur - 1].
  • Les tableaux en Java : une suite de valeurs et sa longueur
    • Une construction plus abstraite et plus modulaire
    • Une construction plus sûre : la machine virtuelle vérifie automatiquement que les indices sont dans l'intervalle [0, longueur - 1].

Avantages tirés de la machine virtuelle Java

  • Portabilité : la machine virtuelle est implémentée sur un très grand nombre de support.
  • Légèreté : la machine virtuelle peut être implémentée sur un nouveau support sans trop d'efforts.

Machine virtuelle Java : une nouvelle plate-forme d'intégration des programmes, disponible partout et permettant de s'affranchir des infrastructures matérielles (machines et réseaux physiques)

Une tendance actuelle : l'important, c'est la machine virtuelle Java, et son langage appelé le bytecode Java, et non le langage Java lui-même, qui peut être remplacé par d'autres langages traduits ensuite en bytecode Java.

  • Scala
    object HelloWorld extends App {
      println("Hello, world!")
    } 
    
  • Groovy
    println "Hello, world!"
    

Objectifs du cours


  • Apprendre à construire ses propres types de données de manière modulaire.
  • Améliorer la compréhension de l'interprétation des programmes.
  • Comprendre et savoir utiliser la bibliothèque standard du langage Java.

Plan indicatif du cours


Cours magistraux

Pédagogie inversée

  • Avant
    • Lire / regarder le cours en ligne.
    • Préparer des questions.
  • Pendant le cours
    • Suivre la démo.
    • Poser des questions.

27 avril : sur les interfaces

  • Interfaces comme types
  • Interfaces comme propriétés
  • Interfaces génériques

8 juin : sur la réutilisation modulaire

  • Architectures en couches
  • Généricité : quantification existentielle et universelle

Session 1 : classes, objets et interfaces


  • Se rappeler la notion de type abstrait de données.
  • Construire des objets et des classes.
  • Construire des interfaces et les implémenter.

Session 2 : agrégation et héritage


  • Comprendre les deux moyens fondamentaux pour définir des interfaces et des classes et construire des objets.
    • Agrégation
    • Héritage

Sessions 3 et 4 : réutilisation modulaire


  • Comprendre le polymorphisme.
    • Sous-typage et subsomption
    • Liaison tardive et spécialisation
  • Comprendre la généricité.
    • Données génériques
    • Calculs génériques
  • Concevoir des bibliothèques.
    • Hiérarchies d'interfaces
    • Architectures en couches
    • Définitions génériques
  • Utiliser la bibliothèque standard de Java.

Dispositifs d'apprentissage et évaluations


Calendrier


CMI27/4/1516:3017:451:15Amphi Charpak
TD14/5/1516:3017:451:15
TP118/5/1513:3016:152:45
TD218/5/1516:3017:451:15
TP21/6/1515:0017:452:45
CMII8/6/1515:0016:151:15Amphi Charpak
TD38/6/1516:3017:451:15
TP315/6/1513:3016:152:45
TD415/6/1516:3017:451:15
TP422/6/1515:0017:452:45

Les sessions


  • Distribution des documents de cours et des sujets de TD et TP avant les séances dédiées
    • Documents à lire et étudier
    • Préparation du TD
    • Préparation du TP
  • Séance 1 (1h15 en groupes) : TD
    • Exercices de programmation
  • Séance 2 (2h45 en groupes) : TP
    • Réalisation guidée d'une petite application avec test

Les évaluations


Quatre évaluations courtes (test écrit) - 70% de la note finale

Session 118/5/1517:2517:4500:20
Session 28/6/1517:2517:4500:20
Session 315/6/1517:2517:4500:20
Session 422/6/1517:2517:4500:20

Un TP noté - 30% de la note finale


L'équipe pédagogique


  • Responsable du cours :
    • Hervé Grall (enseignant-chercheur EC)
  • Encadrants
    • Hervé Grall (EC)
    • Rémi Douence (EC)
    • Romuald Debruyne (EC)
    • Abbas El Dor (post-doc)
    • Jonathan Lejeune (post-doc)
    • Salvador Martinez (post-doc)
    • Frederico Alvares (post-doc)

Communication


  • Sur Campus : programmation modulaire
    • Forum de discussion : inscription obligatoire
      • Moyen principal de communication
    • Documents pédagogiques : cours, sujets, corrections
  • Rendez-vous avec le responsable du cours ou les encadrants
    • Questions sur le cours
    • Questions sur le TP
  • Vive l'entraide !
    • Ne restez pas bloqué. Demandez autour de vous.
    • Vous comprenez. Expliquez aux autres.

Last Updated 2015-04-22T19:10+0200. Comments or questions: Send a mail.