module moocsi cours 2 - centre national de la recherche ... · qu’est-ce qu’un modèle ? •un...
TRANSCRIPT
Module MOOCSI
Cours 2 – Introduction Modélisation
Véronique DESLANDRES
Après l’homme augmenté, le « développeur augmenté »
Introduction à UML (suite)
• Pourquoi une méthode de modélisation§Qualité du logiciel coté des DEV• Les AGL•Qu’est-ce qu’un modèle ?• Pourquoi une modélisation « Orientée Objet » ?• UML1 et UML2
2
La qualité côté des dev• « … un logiciel capable de répondre parfaitement aux
attentes du client, le tout sans défaut d’exécution »
3
• Comment bien connaître les attentes du client ?• Quelles sont les tâches difficiles en
programmation ?
Développeur : 9 tâches les + difficiles(enquête : 4500 personnes)
• Ecrire les tests• Estimer le temps nécessaire pour chaque tâche• Ecrire la documentation• Expliquer ce que je fais (ou ne fais pas)• Implémenter une fonctionnalité que je
désapprouve• Travailler avec le code d’un autre• Nommer les choses• Concevoir une application• Négocier avec les autres
4Sauriez-vous les
classer ?
Développeur : 9 tâches les + difficilesRéponse (enquête : 4500 personnes)
1. Nommer les choses 49%2. Expliquer ce que je fais (ou ne fais pas) 16%3. Estimer le temps nécessaire pour chaque tâche 10%4. Négocier avec les autres 8%5. Travailler avec le code d’un autre 8%6. Implémenter une fonctionnalité que je désapprouve
(3%)7. Concevoir une application (2%)8. Ecrire les tests (2%)9. Ecrire la documentation (2%)
5Source : Quora / Ubuntu Forums
Capture besoins• Une activité difficile car– Les utilisateurs ne connaissent pas vraiment leurs
besoins– Les développeurs connaissent mal le domaine de
l’application– Utilisateurs et développeurs ont des langages
différents– Les besoins évoluent– Il faut trouver un compromis entre services, coûts
et délais
important
D’OÙ LE BESOIN DE MODÉLISER
7
On modélise pour…• Comprendre les besoins fonctionnels du
Client et mieux répondre à ses attentes
8
• Communiquer avec les autres développeurs, pour avancer
• Communiquer avec les responsables Système pour les besoins Techniques
important
Modéliser pour communiquer
• Communication ? Pas simplement pour tenir au courant de l’avancée d’un projet
• Permet aussi de générer de l’appropriation du client et des développeurs… avec une tactique d’ensemble.
9
Modélisation simplifiée
Modélisation OBJET : l’UML de base
10
UMLultra
simplifié
Dévincrémental
UML 2
Pourquoi une modélisation OBJET ?
• Connaissez-vous les 3 paradigmes de l’objet ?
12
Les piliers de l’objet•Encapsulation
• Regroupement du code (ce que fait une entité) et des informations• Masquage d’information au monde extérieur•Meilleure modularité (partie interface, partie
privée)•Meilleure sécurité, lisibilité
•Héritage• Construire une classe à partir d’une autre (réutilisation)• « Factoriser » dans une classe générique (abstraction)
•Polymorphisme• Unicité de nom de fonction pour des codes d’implémentation
différents• Liaison dynamique
13
importa
nt
14
Définition d’accesseurs(getter/setter):
pour private int nbPV :
public setNbPV(int n);public getNbPV();
Méthodes de classe,méthodes d’instance
…. QUEL INTÉRÊT ?
INTÉRÊT de l’ENCAPSULATION
• On ne met des getter/setter que quand
c’est nécessaire
• Les setter vérifient la validité des données
ajoutées
• Les getter garantissent la qualité des
données récupérées
• D’autre part la façon de coder/stocker les
données peut évoluer
– En tant que développeur (utilisateur de ces
données), on n’a pas besoin de savoir si c’est un
élément d’un conteneur ou d’une liste chaînée,
on connaît juste son type
– En tant que concepteur de la classe, on est libre
d’adapter le code interne tant que les signatures des méthodes restent les mêmes
– Ex. Frigidaire, liste d’ingrédients obtenue avec un
filtre pour lister les ingrédients : méthode
encapsulée filtrer(param) à modifier algo de tri ou le filtre, sans toucher au reste 15
Héritage
16
attributsméthodes
(propriétés communesqui sont héritées)
Dérivation
(propriétéspropres)
public class Cercle extends FigureCentree {private double rayon;
}
Eviter l’héritage multiple
Objectifs :
FigureCentrée varA;…varA = new Cercle();
type de la variable type réel de l’objetde référence (utilisé à
(utilisée à la compilation) l’exécution)
Héritage : usage• Rappel : on n’hérite pas des constructeurs• De fait, l’héritage entre classes concrètes est assez rare• Plus fréquemment on redéfinit des méthodes
– Ex. toString(), equals(), paintComponent()
• L’héritage multiple d’interfaces est autorisé en Java
17
public interface Channel {void close();
}public interface ReadChannel extends Channel {
int read(byte[] buffer);}public interface WriteChannel extends Channel {
int write(byte[] buffer);}public interface RWChannel extends ReadChannel,WriteChannel {}
public class TVChannel implements RWChannel {}
Au fait…
Pourquoi l’héritage multipled’interfaces est-il autorisé, dans un langage OO « propre » comme Java(et pas l’héritage multiple de classes) ?
Ouh, çafum
e !
Héritage dans la javadoc
L’héritage dans la javadoc
Validité
Pensez-vous que cet héritage est valide ?
Validité ?
Validité 2
Pensez-vous que cet héritage est valide ?public class Avion extends Vehicule {// ..
public void rouler() throws Exception {
if (altitude>0)throw new Exception( »Erreur : l'avion en vol ne
peut rouler");else super.rouler();
}}
Avion..
Véhicule
Interface
22
Le BON DEV préfèrera
toujours utiliser des interfaces plutôt que les
classes d’implémentation
À suivre…
• Classe avec des méthodes toutes abstraites• On implémente une interface pour définir :– Un ‘intermédiaire’ entre 2 modules du projet– une fonctionnalité transversale (Comparable, Cloneable)
– un ensemble de fonctionnalités pour lesquelles plusieurs implémentations sont possibles (ArrayList, LinkedList)
23
important
Rappel interface
• Définir un attribut dans une interface ?• uniquement des constantes publiques, statiques :final public static
24
Ex. héritage / interface API Java
On voit par exemple qu’ArrayList implémente List, Collection et Iterable
Polymorphisme• Une seule signature, n formes d’implémentation– Signature = nom, type de la donnée retournée, types
et séquence des arguments• (en Java et C++ : ne contient pas le type retourné)
• Avantages (considérable !) :– Les programmes gagnent en abstraction, car des
concepts non pertinents en sont retirés,– Moins de règles de nommage des fonctions (et donc
moins d’erreurs aussi)– L'écriture des programmes est facilitée
25
Un exemple ?Des animaux sachant se déplacer :
class Animal {void deplacer() {
System.out.println("Je bouge"); }class Chien extends Animal {
void deplacer() {System.out.println("Je marche"); } }
class Oiseau extends Animal {void deplacer(){
System.out.println("Je vole"); } }class Pigeon extends Oiseau {
void deplacer() {System.out.println("Je vole et en plus j’arrose les passants"); } }
26
public static void main(String[] args) {
Animal unAnimal = new Animal();
Animal unChien = new Chien();
Animal unPigeon= new Pigeon();
List<Animal> animaux = new ArrayList<Animal>();
animaux.add(unAnimal); ….
for (Animal animal : animaux)
animal.deplacer();
27
Je bougeJe marcheJe vole et en plus j’arrose les passants
Liaison dynamique
important
He he
Sans polymorphisme ?
• Définir les méthodes en static et les appeler selon le type d’objet considéré :if (animal.getClass() == Chien)
Chien.deplacer();else if (animal.getClass() == Pigeon)
Pigeon.deplacer();else if etc.
28
Code lourdLisibilité faible
QU’EST-CE QU’UN MODÈLE ?Mais au fait…
29
Qu’est-ce qu’un modèle ?•Un modèle est une vue subjective mais
pertinente de la réalité
•Un modèle définit une frontière entre la réalité et la perspective de l'observateur : subjective
•Un modèle reflète des aspects importants de la réalité, il en donne donc une vue juste et pertinente de ce qui nous intéresse
30
31
Braque, Baigneuse
Picasso, lectrice
Picasso, Femme à la mandoline
Matisse, Danseuse dans les roseaux Pica
sso, Ac
robate
Matisse
, Cheveu
x au v
ent
Ex.: modèles cubisme
Un modèle = des vues multiples
Vue du notaire
Vue du maçon
Vue du plombier
Vue de l'électricien
Vue du locataire
Vue dupropriétaire
Vue de l'architecte
Vue du service des impots locaux
Vue ducadastre
32
Autres exemples de modèles
33
} Modèle météorologique :à partir de données d'observation (satellite ...), permet de prévoir les conditions climatiques pour les jours à venir.
} Modèle économique :peut par exemple permettre de simuler l'évolution de cours boursiers en fonction d'hypothèses macro-économiques(évolution du chômage, taux de croissance...).
} Modèle démographique :définit la composition d'un panel d'une population et son comportement, dans le but de fiabiliser des études statistiques, d'augmenter l'impact de démarches commerciales, etc...
33
Modéliser, est-ce bien utile ?
34
Méthode, rigueur
35
Se mettre d’acc
ord sur
le périmètre
Définir les objectifs min et max
Se donner d
es
indicateurs
Modéliser
UML 1 ou 2 ?En 2003, l’OMG déclare UML 2.0 et OCL (ObjectConstraint Language) comme les nouveauxstandards du développement logiciel.
Néanmoins pour démarrer UML 1 suffitamplement. UML2 propose 13 diagrammes(9 pour UML1) et est nettement plus orientéConception
(modélise le code ! C’est inutile)
Nous évoquerons simplement certainsaspects utiles d’UML2 dans la présentation.
36
Les AGL• l’AGL PowerAMC• Cher à l’achat (2800€ la version avec le seul modèle UML, 8000€
tous les modèles)• Version d’essai sur le site de SYBASE (30j)
• Eclipse + plugin UML : fonctions intégrées de modélisation, génération de code, test, intégration, déploiement, gestion de configuration : idéal pour J2EE
• Visual Paradigm : version free sans génération de code
• StarUML opensource très complet (avec Design Patterns et génération de codes)
• Modelio Soft : modeliosoft.com• Enterprise Architect (EA) version
d’essai, avec toutes les fonctionnalités– Impression ? Durée ?
37
Visual Paradigm
38
À pr
ivilé
gier
!
StarUML
39
Poseidon (ex argoUML)
40
Modelio Soft
41
Enterprise Architect (EA)
42
Je retiens de ce cours...• Les évolutions des développements logiciels– Architecture logicielle : fondamentale
• Qualimétrie logicielle : citer 3 indicateurs et connaître leur fonctionnement– Ex. SIX, RMI, DMS, VG
• Tâche la plus difficile pour les développeurs ?• 5 raisons qui font que la capture des besoins est
ardue• Pourquoi modéliser ? 3 raisons• Les 3 paradigmes de l’OO• Qu’est-ce qu’un modèle
43