Introduction à l`Informatique (INF 311) Amphi 4 : programmer avec

Introduction à l’Informatique (INF 311)
F. Morain
Amphi 4 : programmer avec des objets
3 juin 2013
Amphi 1 : introduction.
Amphi 2 : tableaux.
Amphi 3 : classes, objets.
Amphi 4 : programmer avec des objets.
Amphi 5 : récursivité.
F. Morain – École polytechnique – Introduction à l’Informatique (INF 311) – Promo X2012 1/60
Amphi 4 : programmer avec des objets
I. Préambule.
II. La programmation par objets.
III. Polymorphisme : interfaces.
IV. Modularité.
V. Étude de cas: le jour d’après.
F. Morain – École polytechnique – Introduction à l’Informatique (INF 311) – Promo X2012 2/60
I. Préambule
La programmation est une des activités les plus
complexes jamais entreprises par l’homme.
Navette spatiale: 1200 hommes années, 2200 Kisl (Kilo
Instructions Source Livrées), 6 ans.
B777: 4000 Kisl, 7 ans.
Quelques systèmes Windows
Date Produit # éq. dév. # éq. test LOC
Juillet-93 NT 1.0 200 140 4-5 millions
Septembre-94 NT 2.0 300 230 7-8 millions
Mai-95 NT 3.0 450 325 9-10 millions
Juillet-96 NT 4.0 800 700 11-12 millions
Déc-99 NT 5.0 1,400 1,700 29+ millions
Oct-01 NT 5.1 1,800 2,200 40 millions
Avril-03 NT 5.2 2,000 2,400 50 millions
Vista ? ? > 50 millions
F. Morain – École polytechnique – Introduction à l’Informatique (INF 311) – Promo X2012 3/60
Mais encore ?
Génie logiciel (Software engineering):
Spécification Programmation Correction
Question primordiale: comment passe-t-on à l’échelle?
Grands principes :
concision ;
modularité interne et externe ;
réutilisation.
Cf. The mythical Man-Month de F. P. Brooks (OS de l’IBM 360,
au début des années 1970).
F. Morain – École polytechnique – Introduction à l’Informatique (INF 311) – Promo X2012 4/60
Un programme ressemble à un pont
Plus le projet est grand, plus il faut soigner l’architecture
et le planning. Les problèmes humains ne peuvent être
négligés.
Découvrir les erreurs très vite est essentiel (la découverte
tardive est catastrophique).
Les erreurs peuvent être désastreuses (Ariane 5 – 1
milliard de dollars).
Utiliser des préfabriqués permet de gagner du temps.
Viaduc de Millau (Source: wikipedia).
F. Morain – École polytechnique – Introduction à l’Informatique (INF 311) – Promo X2012 5/60
Un programme n’est pas un pont
Le logiciel est purement abstrait; il est invisible, car il n’est
vu que par son action sur un matériel physique. Il est
difficile de le faire voir à autrui.
Le logiciel est écrit pour être changé, amélioré.
Le logiciel est en partie réutilisable.
Le logiciel peut/doit être testé à tout moment de sa
création.
F. Morain – École polytechnique – Introduction à l’Informatique (INF 311) – Promo X2012 6/60
La chaîne de production logicielle
Spécification du produit
Architecture du programme
Division en sous-systèmes
Structures de données
et algorithmes
Découpage en modules
-
Planification du travail
Architecture détaillée
Programmation
Débogage
Validation/Tests
Maintenance
F. Morain – École polytechnique – Introduction à l’Informatique (INF 311) – Promo X2012 7/60
Planification du travail
Répartition du temps :
1/3de spécification;
1/6de programmation;
1/4de test (alpha – par les développeurs);
1/4d’intégration et test (beta – par des extérieurs).
100%
90%
50%
Fonctionnalité
Temps
F. Morain – École polytechnique – Introduction à l’Informatique (INF 311) – Promo X2012 8/60
II. La programmation par objets
programmation procédurale 'Fortran, Algol, Pascal, C,
Ada, ML, Caml, Haskell, programmation fonctionnelle.
programmation dirigée par les données =programmation
par objets, Simula, Smalltalk, C++, Eiffel, Java, Ocaml.
Turing award 2001 pour Nygaard et Dahl: For ideas
fundamental to the emergence of object oriented
programming, through their design of the programming
languages Simula I and Simula 67.
F. Morain – École polytechnique – Introduction à l’Informatique (INF 311) – Promo X2012 9/60
Pourquoi la programmation par objets?
Modularité: les objets favorisent le regroupement des
fonctions et des données structuration.
Rem. Modularité 6⇒ programmation par objets (cf. Modula, ML).
Programmation incrémentale: on définit des classes
qu’on peut étendre par héritage a posteriori (e.g. AWT),
cf. INF421, INF431. très populaire dans l’industrie.
Très utilisée dans les boîtes à outils graphiques (look
commun à toutes les fenêtres) et réseau (données et
méthodes se déplacent simultanément).
F. Morain – École polytechnique – Introduction à l’Informatique (INF 311) – Promo X2012 10/60
Objets en Java
Les objets sont les instances d’une classe. Ils ont un état (la
valeur de leurs champs de données) et un ensemble de
méthodes attachées.
données
méthodes
données
méthodes
données
méthodes
code
données
statiques
F. Morain – École polytechnique – Introduction à l’Informatique (INF 311) – Promo X2012 11/60
Objets en Java: exemple
public class Rationnel{
public long num, den;
public Rationnel(long n, long d){
this.num = n;
this.den = d;
}
public static Rationnel mult(Rationnel r1,
Rationnel r2){
return new Rationnel(r1.num *r2.num,
r1.den *r2.den);
}
public Rationnel multiplierPar(Rationnel r){
return new Rationnel(this.num*r.num,
this.den*r.den);
}
}
Le compilateur différencie une méthode de classe, identifiée
par static, d’une méthode d’objet sans static. On
explique plus loin la raison de ces noms.
F. Morain – École polytechnique – Introduction à l’Informatique (INF 311) – Promo X2012 12/60
II. Polymorphisme : interfaces
Ex. Écrire une fonction qui retourne le minimum d’un tableau.
public static int minimum(int[] t){
int mini = 0;
for(int i = 1; i < t.length; i++)
if(t[i] <= t[mini])
mini = i;
return t[mini];
}
public static double minimum(double[] t){
int mini = 0;
for(int i = 1; i < t.length; i++)
if(t[i] <= t[mini])
mini = i;
return t[mini];
}
F. Morain – École polytechnique – Introduction à l’Informatique (INF 311) – Promo X2012 13/60
Pour des classes quelconques ?
Pb. Comment écrire des programmes réutilisables pour
plusieurs classes ?
Idéalement:
public static ELEMENT minimum(ELEMENT[] t){
int mini = 0;
for(int i = 1; i < t.length; i++)
if(t[i].estPlusPetit(t[mini]))
mini = i;
return t[mini];
}
Marche pour toute classe ELEMENT qui possède une méthode
estPlusPetit.
En Java, on peut définir un type spécial qui décrit les classes
ayant cette propriété, en utilisant des interfaces. C’est un
exemple de polymorphisme ad hoc.On verra le polymorphisme générique plus tard.
F. Morain – École polytechnique – Introduction à l’Informatique (INF 311) – Promo X2012 14/60
L’interface ELEMENT
Dans le fichier ELEMENT.java:
public interface ELEMENT{
public String toString();
public boolean estPlusPetit(ELEMENT v);
}
Une interface peut contenir:
des méthodes d’objets,
des variables de classe final;
mais ne peut pas contenir:
des champs;
des méthodes de classes.
F. Morain – École polytechnique – Introduction à l’Informatique (INF 311) – Promo X2012 15/60
Utilisation immédiate
public class Tableau{
public static ELEMENT minimum(ELEMENT[] t){
int mini = 0;
for(int i = 1; i < t.length; i++)
if(t[i].estPlusPetit(t[mini]))
mini = i;
return t[mini];
}
}
(dans Tableau.java).
F. Morain – École polytechnique – Introduction à l’Informatique (INF 311) – Promo X2012 16/60
Exemple 1
public class IntegerElt implements ELEMENT{
private int clef;
// pas requis par l’interface
public IntegerElt(int n){
this.clef = n;
}
// requis par l’interface
public String toString(){
return ""+this.clef;
}
// interface + compilation
public boolean estPlusPetit(ELEMENT w){
return this.clef <= ((IntegerElt) w).clef;
}
}
(dans IntegerElt.java).
F. Morain – École polytechnique – Introduction à l’Informatique (INF 311) – Promo X2012 17/60
Exemple 1 (suite)
import tc.TC;
public class TestTableau{
public static void main(String[] args){
IntegerElt[] t = new IntegerElt[10];
for(int i = 0; i < t.length; i++){
t[i] = new IntegerElt((int)(Math.random()*10));
TC.println(t[i]);
}
TC.println("min="+Tableau.minimum(t));
}
}
F. Morain – École polytechnique – Introduction à l’Informatique (INF 311) – Promo X2012 18/60
Exemple 2
public class ChaineElt implements ELEMENT{
private String clef;
public ChaineElt(String s){
this.clef = s;
}
public String toString(){
return this.clef;
}
public boolean estPlusPetit(ELEMENT w){
int cmp
=this.clef.compareTo(((ChaineElt) w).clef);
return cmp <= 0;
}
}
(dans ChaineElt.java).
F. Morain – École polytechnique – Introduction à l’Informatique (INF 311) – Promo X2012 19/60
Exemple 2 (suite)
import tc.TC;
public class TestTableau{
public static void Test(ELEMENT[] t){
TC.println("min="+Tableau.minimum(t));
}
public static void main(String[] args){
ChaineElt[] u = new ChaineElt[10];
for(int i = 0; i < u.length; i++){
u[i] = new ChaineElt("a"+(int)(Math.random()*10));
TC.println(u[i]);
}
Test(u);
}
}
F. Morain – École polytechnique – Introduction à l’Informatique (INF 311) – Promo X2012 20/60
1 / 15 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !