|
Postscript, PDF | Didier Rémy | Polytechnique, INRIA |
|
|
· | Cours EA de 13h45 à 15h15 en PC 38 |
· | Travaux dirigés EA de 15h30 à 17h30 en salle info 32. |
· | Projets EA de 10h15 à 12h15 en salle info 32? |
|
· | duplication du code, et des erreurs! |
· | difficulté de maintenance. |
|
· | Le cours présente et explique les différents mécanismes disponibles. |
· | Le projet permet leur mise en oeuvre en vraie grandeur. |
|
Abstraction
|
Compositionalité |
Extension |
Réutilisation
|
Partage |
Composants
|
Interface
|
Cacher |
Sûreté
|
Typage |
|
· | La modularité en général et dans les langages de programmation. |
· | Sécurité, abstraction, typage. |
· | La modularité du pauvre |
· | Les systèmes de modules |
· | Langages à objets et à classes |
|
Rendre les gros projets réalisables |
Rendre les gros projets compréhensibles |
Rendre les gros projets maintenables |
Rendre les projets réutilisables |
La modularité augmente la sûreté. |
|
|
· | Disparition des détails (bruit), rendant l'essentiel apparent. |
· | Meilleure appréhension de l'ensemble (vérification, évolution). |
|
|
|
|
|
|
|
° |
|
= |
|
|
|
|
Þ |
|
voire |
|
|
|
· | Construire des composants élémentaires, |
· | Combiner ces composants. |
· | Utiliser une structure pyramidale: les composants sont les éléments de composants plus complexes. |
|
|
· | 100 lignes: script, un seul fichier, mais utilisation intensive des librairies. |
· | 1000 lignes: petite application, quelques fichiers. La modularité facilite l'écriture et la maintenance. |
· | 10000 lignes: application sérieuse. La modularité permet de mieux organiser le code et le développement en parallèle de plusieurs parties, la réutilisation de certaines composantes... |
· | 100000 lignes et plus: système complexe, probablement développé par plusieurs personnes devant évolué dans le temps, nécessitant une architecture robuste bien conçue et probablement le développement de librairies spécialisées. |
|
|
· | augmente la sécurité |
· | augmente la réutilisabilité. |
· | cacher les valeurs |
· | cacher les types |
|
|
· | Prise 20A v.s. 5A. |
· | Prise mâle (entrée) v.s. femelle (sortie). |
· | Une prise mâle avec terre ne peut pas être branchée dans une prise femelle sans terre. |
· | L'inverse est possible (sous-typage au niveau des interfaces) |
|
· | Donner des noms aux constantes numériques. |
· | Partager le code en utilisant des fonctions auxiliaires.
Par exemple, remplacer C[A] ; ... ; C[B] par
c(x) { C[x] } c(A); ...; c(B)
let c(x) = C[x] in c(A) ... c(B) en ML.
|
|
|
|
naissance
, nom
,
... age
. sexe
:
|
|
|
|
|
Vierge
par exemple,
oblige à réécrire toutes les fonctions.
|
· | Les fonctions permettent de paramétrer par rapport aux valeurs, mais pas par rapport aux types. |
· | L'application de fonction est une opération dynamique de bas niveau, alors que l'assemblage de composants pourrait se faire pendant le chargement (link). Ce sont des opérations plus macroscopiques. |
· | L'utilisation de type abstraits sans support dans le langage permet de programmer de façon modulaire, sans bénéficier de la sécurité offerte par un mécanisme de typage. |
Il est important d'avoir des constructions (primitives) pour favoriser la modularité. |
|
· | langage d'assemblage de structures basé sur l'abstraction. |
· | n'aide pas à l'extensibilité, n'aime pas trop la récursion... |
· | horizontalement par construction (ajout de classes), verticalement par l'héritage. |
· | l'abstraction de valeur est obtenu par masquage de certaines composantes. |
· | c'est un style de programmation très rigide, qui a ses terrains de prédilection, mais aussi ses limites. En particulier, la paramétrisation est plus difficile. |
|
· | de structures récursives. |
· | d'extension, donc pas de réutilisation a posteriori. |
|
|
|
class Point { private int x = 0; Point (int x0) { x = x0; } int getx () { return x; } Point max (Point p) { if (p.getx() > getx()) return p; else return this; } } class Bipoint extends Point { private int y = 0; Bipoint (int x0, int y0) { super (x0); y = y0; } int gety () { return y; } Bipoint max (Bipoint p) { if (p.gety() > gety()) return p; else return super.max (p); } } |
|
· | Le soldat rend compte au général en s'identifiant (nom ou matricule) et en faisant un compte-rendu. |
· | Le général ordonne ou punit (le soldat). |
|
· | en prendre des instances. |
· | enrichir le modèle en raffinant le comportement de chaque classe, éventuellement en ajoutant des possibilités de communication entre les objets de chaque classe. |
· | enrichir le modèle en ajoutant de nouvelles classes interagissant avec les classes précédentes. |
|
· | deux étoiles au général pour augmenter son d'autorité. |
· | un fusil au soldat pour augmenter son d'agressivité. |
|
This document was translated from LATEX by HEVEA and HACHA.