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
- Langage pour programmer les processeurs
- 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 !
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)
Heartbeat (un client s'assure de la présence du serveur)
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
CMI | 27/4/15 | 16:30 | 17:45 | 1:15 | Amphi Charpak |
TD1 | 4/5/15 | 16:30 | 17:45 | 1:15 | |
TP1 | 18/5/15 | 13:30 | 16:15 | 2:45 | |
TD2 | 18/5/15 | 16:30 | 17:45 | 1:15 | |
TP2 | 1/6/15 | 15:00 | 17:45 | 2:45 | |
CMII | 8/6/15 | 15:00 | 16:15 | 1:15 | Amphi Charpak |
TD3 | 8/6/15 | 16:30 | 17:45 | 1:15 | |
TP3 | 15/6/15 | 13:30 | 16:15 | 2:45 | |
TD4 | 15/6/15 | 16:30 | 17:45 | 1:15 | |
TP4 | 22/6/15 | 15:00 | 17:45 | 2: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 1 | 18/5/15 | 17:25 | 17:45 | 00:20 |
Session 2 | 8/6/15 | 17:25 | 17:45 | 00:20 |
Session 3 | 15/6/15 | 17:25 | 17:45 | 00:20 |
Session 4 | 22/6/15 | 17:25 | 17:45 | 00: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
- Forum de discussion : inscription obligatoire
- 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.