SlideShare uma empresa Scribd logo
1 de 45
Baixar para ler offline
Améliorer
la qualité du code
par restriction du langage
Java est trop compliqué !
Mais où est la qualité ?
●
●
●
●
●

Tests unitaires
Tests d’intégration
Intégration continue
Qualimétrie
Revues de code
Qualité : définition

Maintenabilité
Qualité : définition

Maintenabilité => Modularité
Qualité : définition

Maintenabilité => Modularité => Testabilité
Langage : définition

Java
et les langages orientés-classe
Restriction
null
wat?!
null
● non type-safe
● non OO
Les méthodes privées
ranger => planquer sous le lit
Une méthode publique trop imposante

Test

Interface

Méthode
publique

Implémentation

cp

cp
Des méthodes privées à la rescousse

Test

Interface
mpub
Implémentation

mpriv

mpriv

cp

cp
Des problèmes

Test

Interface
mpub
Implémentation

mpriv

mpriv

cp

cp
Deux styles de méthodes privées

// field equals x
doSomething();
// field equals y
Parfum variable globale

// field equals x
field = computeSomething();
// field equals y
Méthode détachée de son objet
Des objets à la rescousse
Test

Interface
mpub
Implémentation
Nouvelle
dépendance

Nouvelle
dépendance

mpub

mpub

cp

cp
Les méthodes privées
● Bancales
● Sournoises
● N’aide pas à encapsuler
L’héritage de classe
Coupling: it’s over 9000!
Difficile à tester

Mère

Test
Mère

Fille

Test
Fille
Difficile à tester

Mère

Test
Mère

super

Fille

Test
Fille
Difficile à tester

Mère

Test
Mère

Fille

Test
Fille
Difficile à tester

Mère

Test
Mère

Fille

Test
Fille
Difficile à tester

Mère

Test
Mère

Fille

Test
Fille
Difficile à tester

Mère

Test
Mère

Fille

Test
Fille
Difficile à maintenir
public
Difficile à maintenir
public

protected
Difficile à maintenir
public

protected

Rupture de l’
encapsulation
Couplage fort
Double dépendance
Dépendences étranges

Classe
abstraite
Dépendences étranges

Classe
abstraite

?
Dépendences étranges

Classe
abstraite

Classe fille
concrète
Dépendences étranges

Classe
abstraite

??!

Classe fille
concrète
C’est l’enfer !
● Difficile à tester
● Difficile à maintenir
● Dépendances étranges
C’est l’enfer !
●
●
●
●

Difficile à tester
Difficile à maintenir
Dépendances étranges
Et ça sert à...quoi exactement ?
C’est l’enfer !
●
●
●
●

Difficile à tester
Difficile à maintenir
Dépendances étranges
Et ça sert à...quoi exactement ?
■ L’héritage d’interfaces fournit déjà le
polymorphisme
■ La composition fournit déjà de quoi réutiliser les
implémentations
Solution : composition
interface MembreDeLaFamille {...}
class Mère implements MembreDeLaFamille {...}
class Fille implements MembreDeLaFamille {
private final MembreDeLaFamille mère;
public Fille(MembreDeLaFamille mère) {
this.mère = mère;
}
...
}
Solution : composition
abstract class AbstractCollection<T>

class CollectionIteratableDecorator<T>

implements Collection<T> {

implements Collection<T> {

boolean contains(Object o) {

final Iterable<T> iterable;

...// appelle iterator()
}

boolean contains(Object o) {
...// appelle iterator()

abstract Iterator<T> iterator();

}

}
Iterator<T> iterator() {
return iterable.iterator();
}
}
Static dispatch
It’s not a bug, it’s a feature!
L’enfer 2.0
L’enfer 2.0
● Difficile à tester
L’enfer 2.0
● Difficile à tester
● Difficile à maintenir
L’enfer 2.0
● Difficile à tester
● Difficile à maintenir
● Détruit tout polymorphisme
L’enfer 2.0
●
●
●
●

Difficile à tester
Difficile à maintenir
Détruit tout polymorphisme
Rend les classes potentiellement variables…
alors qu’elles sont globales !
Pragmatisme
Débutants
Merci !
Questions ?
@mercury_wood

ElevatedAbstractions.wordpress.com

Mais conteúdo relacionado

Mais procurados (14)

Language java
Language javaLanguage java
Language java
 
Introduction java
Introduction javaIntroduction java
Introduction java
 
Programmation orientée objet avancée
Programmation orientée objet avancéeProgrammation orientée objet avancée
Programmation orientée objet avancée
 
Memento java
Memento javaMemento java
Memento java
 
Polymorphisme
PolymorphismePolymorphisme
Polymorphisme
 
Programmation Java
Programmation JavaProgrammation Java
Programmation Java
 
c# programmation orientée objet (Classe & Objet)
c# programmation orientée objet (Classe & Objet)c# programmation orientée objet (Classe & Objet)
c# programmation orientée objet (Classe & Objet)
 
Les bases de la programmation en JAVA
Les bases de la programmation  en JAVA   Les bases de la programmation  en JAVA
Les bases de la programmation en JAVA
 
Csharp2014
Csharp2014Csharp2014
Csharp2014
 
C# langage & syntaxe
C#   langage & syntaxeC#   langage & syntaxe
C# langage & syntaxe
 
Formation C# - Cours 3 - Programmation objet
Formation C# - Cours 3 - Programmation objetFormation C# - Cours 3 - Programmation objet
Formation C# - Cours 3 - Programmation objet
 
Exceptions
ExceptionsExceptions
Exceptions
 
POO
POOPOO
POO
 
Langage C#
Langage C#Langage C#
Langage C#
 

Semelhante a Améliorer la qualité du code par restriction du langage

Les langages de programmation sont trop compliqués
Les langages de programmation sont trop compliquésLes langages de programmation sont trop compliqués
Les langages de programmation sont trop compliquésmercury_wood
 
Tester c'est douter - Linkvalue tech
Tester c'est douter - Linkvalue techTester c'est douter - Linkvalue tech
Tester c'est douter - Linkvalue techMarine Karam
 
Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Guillaume Laforge
 
Tdd en action - découverte
Tdd en action - découverteTdd en action - découverte
Tdd en action - découverteEric Mignot
 
Csharp3 heritage-polymorphisme-interface
Csharp3 heritage-polymorphisme-interfaceCsharp3 heritage-polymorphisme-interface
Csharp3 heritage-polymorphisme-interfaceAbdoulaye Dieng
 
Langage Java et Programmation Orienté Objet
Langage Java et Programmation Orienté ObjetLangage Java et Programmation Orienté Objet
Langage Java et Programmation Orienté ObjetMohammed Jaafar
 
intro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPintro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPfrwebhelp
 
La qualité au meilleur prix grâce aux tests unitaires
La qualité au meilleur prix grâce aux tests unitairesLa qualité au meilleur prix grâce aux tests unitaires
La qualité au meilleur prix grâce aux tests unitairesGauthier Delamarre
 
Enib cours c.a.i. web - séance #5 : scala play! framework
Enib   cours c.a.i. web - séance #5 : scala play! frameworkEnib   cours c.a.i. web - séance #5 : scala play! framework
Enib cours c.a.i. web - séance #5 : scala play! frameworkHoracio Gonzalez
 
Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8Jean-Michel Doudoux
 
Programmation fonctionnelle
Programmation fonctionnelleProgrammation fonctionnelle
Programmation fonctionnelleJean Detoeuf
 
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Ippon
 
Formation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratifFormation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratifkemenaran
 

Semelhante a Améliorer la qualité du code par restriction du langage (20)

Les langages de programmation sont trop compliqués
Les langages de programmation sont trop compliquésLes langages de programmation sont trop compliqués
Les langages de programmation sont trop compliqués
 
Tester c'est douter - Linkvalue tech
Tester c'est douter - Linkvalue techTester c'est douter - Linkvalue tech
Tester c'est douter - Linkvalue tech
 
Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013
 
Tdd en action - découverte
Tdd en action - découverteTdd en action - découverte
Tdd en action - découverte
 
Csharp3 heritage-polymorphisme-interface
Csharp3 heritage-polymorphisme-interfaceCsharp3 heritage-polymorphisme-interface
Csharp3 heritage-polymorphisme-interface
 
XB-Java.ppt
XB-Java.pptXB-Java.ppt
XB-Java.ppt
 
Langage Java et Programmation Orienté Objet
Langage Java et Programmation Orienté ObjetLangage Java et Programmation Orienté Objet
Langage Java et Programmation Orienté Objet
 
Pensez objets avec java
Pensez objets avec javaPensez objets avec java
Pensez objets avec java
 
test doc
test doctest doc
test doc
 
intro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPintro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APP
 
La qualité au meilleur prix grâce aux tests unitaires
La qualité au meilleur prix grâce aux tests unitairesLa qualité au meilleur prix grâce aux tests unitaires
La qualité au meilleur prix grâce aux tests unitaires
 
Ruby Pour RoR
Ruby Pour RoRRuby Pour RoR
Ruby Pour RoR
 
Enib cours c.a.i. web - séance #5 : scala play! framework
Enib   cours c.a.i. web - séance #5 : scala play! frameworkEnib   cours c.a.i. web - séance #5 : scala play! framework
Enib cours c.a.i. web - séance #5 : scala play! framework
 
Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8
 
Programmation fonctionnelle
Programmation fonctionnelleProgrammation fonctionnelle
Programmation fonctionnelle
 
Des tests modernes pour Drupal
Des tests modernes pour DrupalDes tests modernes pour Drupal
Des tests modernes pour Drupal
 
Valider par des tests - Blend
Valider par des tests - BlendValider par des tests - Blend
Valider par des tests - Blend
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
 
Formation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratifFormation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratif
 

Améliorer la qualité du code par restriction du langage