va - Page ouèbe de Sébastien Jean

publicité
Conception et programmation orientées objet,
rappels
Sébastien Jean
IUT de Valence
Département Informatique
v2.2, 4 septembre 2016
Introduction
Objectifs de ce cours
Revoir les notions fondamentales objets . . .
Classe, objet, abstraction, . . .
. . . à travers le prisme de la COO (UML) et de la POO (Java)
source : www.bonkersworld.net/object-world
Sébastien Jean (IUT Valence)
M3105, introduction
v2.2, 4 septembre 2016
1 / 24
Rappels
Classes/objets
Notion de classe
Une classe encapsule des données
(attributs) et des traitements
(méthodes) communs à un ensemble
d’objets, et définit un type
Notation UML
Code Java
public class Americaine
{
}
Les objets sont appelés instances de classe
Sébastien Jean (IUT Valence)
M3105, introduction
v2.2, 4 septembre 2016
2 / 24
Rappels
Classes/objets
Attributs
Les attributs sont des « données » élémentaires
L’ensemble des attributs constitue un état
Les attributs sont typés
Type primitif ou défini par une classe
Leurs valeurs peuvent être uniques ou multiples (collections)
Les attributs peuvent être masqués ou non à l’extérieur de la classe
Les attributs peuvent être :
Partagés entre toutes les instances → attributs de classe
Propres à chaque instance → attributs d’instance
Sébastien Jean (IUT Valence)
M3105, introduction
v2.2, 4 septembre 2016
3 / 24
Rappels
Classes/objets
Exemple
La couleur d’un pixel est caractérisée par des
niveaux RVB
Notation UML
Code Java
public class
{
public int
public int
public int
}
Sébastien Jean (IUT Valence)
M3105, introduction
Color
red ;
green ;
blue ;
v2.2, 4 septembre 2016
4 / 24
Rappels
Classes/objets
Association
Dépendance forte entre classes
Relation de type « utilise un » ou « a un »
Nommage, cardinalité, navigabilité
Notation UML
Code Java
public class Shape
{
public int opacityLevel ;
public Color color ;
}
Sébastien Jean (IUT Valence)
M3105, introduction
v2.2, 4 septembre 2016
5 / 24
Rappels
Classes/objets
Attributs statiques
Notation UML
Code Java
public class System
{
public static PrintStream out ;
}
N.B. : l’attribut out est aussi qualifié avec le mot clé final
Sébastien Jean (IUT Valence)
M3105, introduction
v2.2, 4 septembre 2016
6 / 24
Rappels
Classes/objets
Aggregation
Association forte
Relation de type « possède »
Partage possible
Notation UML
Code Java
public class Canvas
{
public List < Shape > shapeList ;
}
Sébastien Jean (IUT Valence)
M3105, introduction
v2.2, 4 septembre 2016
7 / 24
Rappels
Classes/objets
Composition
Aggrégation forte
Le « contenu » disparait avec le « contenant »
Notation UML
Code Java
public class Canvas
{
public List < Shape > shapeList ;
}
Sébastien Jean (IUT Valence)
M3105, introduction
v2.2, 4 septembre 2016
8 / 24
Rappels
Classes/objets
Méthodes
Paramètres et valeur de retour typés
void dénote un type inconnu
Code Java
public class Color
{
private int r ;
...
public int getR () { return this . r ;}
public void setR ( int r ) { this . r = r ;}
...
}
Sébastien Jean (IUT Valence)
M3105, introduction
v2.2, 4 septembre 2016
9 / 24
Rappels
Classes/objets
Méthodes
Méthodes statiques
Code Java
public class System
{
public static PrintStream out ;
...
public static void setOut ( PrintStream out ) {...}
...
}
Sébastien Jean (IUT Valence)
M3105, introduction
v2.2, 4 septembre 2016
10 / 24
Rappels
Classes/objets
Objet
Un objet est une instance de classe, il
n’existe qu’à l’exécution
La classe définit le type d’un objet,
ainsi que l’ensemble des traitements
associés
Certains de ces traitements peuvent
être masqués à l’extérieur
Un objet possède un état interne,
constitué de l’ensemble des valeurs
des attributs d’instance
cyan : Color
r=0
v = 255
b = 255
L’état n’évolue idéalement qu’à
travers des appels de méthodes
Un objet possède une identité propre et unique
En Java, cette identité s’appelle référence
Sébastien Jean (IUT Valence)
M3105, introduction
v2.2, 4 septembre 2016
11 / 24
Rappels
Classes/objets
Constructeur
La création d’un objet
(instanciation) passe
par la définition et
l’invocation d’un
constructeur
Code Java
public class Color
{
...
public Color ( int r , int v , int b )
{
this . r = r ;
this . v = v ;
this . b = b ;
}
...
}
Code Java
Color cyan
Sébastien Jean (IUT Valence)
= new Color (0 ,255 ,255) ;
M3105, introduction
v2.2, 4 septembre 2016
12 / 24
Rappels
Concepts objets avancés
Héritage, polymorphisme
Réutilisation par raffinement de concept
Ajout d’attribut(s)
Ajout de méthode(s)
Redéfinition de méthode(s)
Le polymorphisme est la capacité d’un objet a pouvoir être vu à
travers plusieurs types
Sébastien Jean (IUT Valence)
M3105, introduction
v2.2, 4 septembre 2016
13 / 24
Rappels
Concepts objets avancés
Héritage, polymorphisme
Code Java
public class Loy al ty Ban kA cc oun t extends BankAccount
{
private int points ;
public Loyalt yBa nk Ac cou nt ( int initialBalance )
{
super ( initialBalance ) ;
this . points = 0;
}
...
public void deposit ( int amount )
{
super . deposit ( amount ) ;
...
}
}
Sébastien Jean (IUT Valence)
M3105, introduction
v2.2, 4 septembre 2016
14 / 24
Rappels
Concepts objets avancés
Interfaces, classes abstraites
Exemple (à ne pas forcément suivre . . . )
Dépendance vis-à-vis de l’implémentation
L’instance de MessageReceiver possède un attribut de type
SystemOutLogger dont la valeur est une référence vers une instance
de SystemOutLogger
Sébastien Jean (IUT Valence)
M3105, introduction
v2.2, 4 septembre 2016
15 / 24
Rappels
Concepts objets avancés
Interfaces, classes abstraites (suite)
Une interface est un type purement abstrait, et ne définit (sauf
depuis Java 8) que des signatures de méthodes
Les interfaces sont implémentées par des classes (devant définir
l’implémentation de toutes les méthodes) qui peuvent se substituer
Indépendance vis-à-vis de l’implémentation
L’instance de MessageReceiver possède un attribut de type abstrait
Logger dont la valeur peut-être une référence vers une instance de
SystemOutLogger, NullLogger, FileLogger, . . .
Référence passée en général en paramètre du constructeur
Sébastien Jean (IUT Valence)
M3105, introduction
v2.2, 4 septembre 2016
16 / 24
Rappels
Concepts objets avancés
Interfaces, classes abstraites (fin)
Une classe abstraite permet de factoriser les attributs et
méthodes communes à toutes les sous-classes
Sébastien Jean (IUT Valence)
M3105, introduction
v2.2, 4 septembre 2016
17 / 24
Rappels
Concepts objets avancés
Notion de framework
Collection de classes (concrètes/abstraites) et d’interfaces liées
permettant la conception de sous-systèmes
Exemple : JDBC
API (Application Provider Interface) : ensemble de points d’entrées
pour la construction d’applications
SPI (Service Provider Interface) : ensemble de points d’entrées
pour l’extension du framework
Sébastien Jean (IUT Valence)
M3105, introduction
v2.2, 4 septembre 2016
18 / 24
Production de logiciel
Qualité
Du logiciel qui marche ou du logiciel qui dure ?
Ecrire du logiciel qui marche est à la portée du premier venu ;-)
Mais il n’y a pas de pérennité sans qualité !
1983
Sébastien Jean (IUT Valence)
2016
M3105, introduction
v2.2, 4 septembre 2016
19 / 24
Production de logiciel
Qualité
Qu’est ce qu’un code de qualité ?
Conforme aux exigences et exempt de bug
Lisible et facile à comprendre, facile à utiliser
Aisément maintenable et réutilisable
Efficace
Sébastien Jean (IUT Valence)
M3105, introduction
v2.2, 4 septembre 2016
20 / 24
Production de logiciel
Qualité
Entropie logicielle et dette technique
Entropie logicielle (Lehman, 1980)
"As an evolving program is continually changed, its
complexity, reflecting deteriorating structure, increases
unless work is done to maintain or reduce it."
Dette technique (Cunningham, 1992)
"Shipping first time code is like going into debt. A little
debt speeds development so long as it is paid back
promptly with a rewrite... The danger occurs when the
debt is not repaid. Every minute spent on not-quite-right
code counts as interest on that debt. Entire engineering
organizations can be brought to a stand-still under the
debt load of an unconsolidated implementation, objectoriented or otherwise."
Sébastien Jean (IUT Valence)
M3105, introduction
v2.2, 4 septembre 2016
21 / 24
Production de logiciel
Outillage
Les outils indispensables du développeur moderne
Un IDE qui se respecte
Java : Eclipse, IDEA IntelliJ, NetBeans
Un atelier de génie logiciel efficace
UML : Modelio, Visual Paradigm, . . .
Un framework de test unitaires
Java : JUnit
Un outil d’automatisation de production de projets
Ant, Maven, . . .
Un gestionnaire de versions
SVN, Git, Mercurial
Une plateforme d’intégration continue
Jenkins, . . .
...
Sébastien Jean (IUT Valence)
M3105, introduction
v2.2, 4 septembre 2016
22 / 24
Production de logiciel
Agilité
Méthodes agiles ?
Agilité → philosophie de développement de projets (2000)
Développement iteratif, incrémental et adaptatif
Au coeur de plusieurs méthodologies : RAD, XP, SCRUM
Méthodologies associées :
Test-Driven Development (TDD)
Behavior-Driven Development (BDD)
Sébastien Jean (IUT Valence)
M3105, introduction
v2.2, 4 septembre 2016
23 / 24
Production de logiciel
Agilité
Fin !
Sébastien Jean (IUT Valence)
M3105, introduction
v2.2, 4 septembre 2016
24 / 24
Téléchargement