Transcript
Page 1: Améliorer la qualité du code par restriction du langage

par restriction du langage

Améliorer la qualité du code

Page 2: Améliorer la qualité du code par restriction du langage

Java est trop compliqué !

Page 3: Améliorer la qualité du code par restriction du langage

● Tests unitaires● Tests d’intégration● Intégration continue● Qualimétrie● Revues de code

Mais où est la qualité ?

Page 4: Améliorer la qualité du code par restriction du langage

Maintenabilité

Qualité : définition

Page 5: Améliorer la qualité du code par restriction du langage

Maintenabilité => Modularité

Qualité : définition

Page 6: Améliorer la qualité du code par restriction du langage

Maintenabilité => Modularité => Testabilité

Qualité : définition

Page 7: Améliorer la qualité du code par restriction du langage

Langage : définition

Javaet les langages orientés-classe

Page 8: Améliorer la qualité du code par restriction du langage

Restriction

Page 9: Améliorer la qualité du code par restriction du langage

nullwat?!

Page 10: Améliorer la qualité du code par restriction du langage

● non type-safe● non OO

null

Page 11: Améliorer la qualité du code par restriction du langage

ranger => planquer sous le lit

Les méthodes privées

Page 12: Améliorer la qualité du code par restriction du langage

Une méthode publique trop imposante

Méthode publique

Interface

Implémentation

cp cp

Test

Page 13: Améliorer la qualité du code par restriction du langage

Des méthodes privées à la rescousse

mpubInterface

Implémentation

cp cp

Test

mpriv mpriv

Page 14: Améliorer la qualité du code par restriction du langage

Des problèmes

mpubInterface

Implémentation

cp cp

Test

mpriv mpriv

Page 15: Améliorer la qualité du code par restriction du langage

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

Page 16: Améliorer la qualité du code par restriction du langage

Des objets à la rescousse

mpubInterface

Implémentation

cp cp

Test

mpub mpub

Nouvelle dépendance

Nouvelle dépendance

Page 17: Améliorer la qualité du code par restriction du langage

Les méthodes privées

● Bancales● Sournoises● N’aide pas à encapsuler

Page 18: Améliorer la qualité du code par restriction du langage

Coupling: it’s over 9000!

L’héritage de classe

Page 19: Améliorer la qualité du code par restriction du langage

Difficile à tester

Mère

Fille

TestMère

TestFille

Page 20: Améliorer la qualité du code par restriction du langage

Difficile à tester

Mère

Fille

TestMère

TestFille

super

Page 21: Améliorer la qualité du code par restriction du langage

Difficile à tester

Mère

Fille

TestMère

TestFille

Page 22: Améliorer la qualité du code par restriction du langage

Difficile à tester

Mère

Fille

TestMère

TestFille

Page 23: Améliorer la qualité du code par restriction du langage

Difficile à tester

Mère

Fille

TestMère

TestFille

Page 24: Améliorer la qualité du code par restriction du langage

Difficile à tester

Mère

Fille

TestMère

TestFille

Page 25: Améliorer la qualité du code par restriction du langage

Difficile à maintenir

public

Page 26: Améliorer la qualité du code par restriction du langage

Difficile à maintenir

public

protected

Page 27: Améliorer la qualité du code par restriction du langage

Difficile à maintenir

public

protected

Rupture de l’encapsulationCouplage fortDouble dépendance

Page 28: Améliorer la qualité du code par restriction du langage

Dépendences étranges

Classeabstraite

Page 29: Améliorer la qualité du code par restriction du langage

Dépendences étranges

Classeabstraite

?

Page 30: Améliorer la qualité du code par restriction du langage

Dépendences étranges

Classeabstraite

Classe fille concrète

Page 31: Améliorer la qualité du code par restriction du langage

Dépendences étranges

Classeabstraite

Classe fille concrète

??!

Page 32: Améliorer la qualité du code par restriction du langage

● Difficile à tester● Difficile à maintenir● Dépendances étranges

C’est l’enfer !

Page 33: Améliorer la qualité du code par restriction du langage

● Difficile à tester● Difficile à maintenir● Dépendances étranges● Et ça sert à...quoi exactement ?

C’est l’enfer !

Page 34: Améliorer la qualité du code par restriction du langage

● 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

C’est l’enfer !

Page 35: Améliorer la qualité du code par restriction du langage

Solution : compositioninterface 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;

}

...

}

Page 36: Améliorer la qualité du code par restriction du langage

Solution : compositionabstract class AbstractCollection<T>

implements Collection<T> {

boolean contains(Object o) {

...// appelle iterator()

}

abstract Iterator<T> iterator();

}

class CollectionIteratableDecorator<T>

implements Collection<T> {

final Iterable<T> iterable;

boolean contains(Object o) {

...// appelle iterator()

}

Iterator<T> iterator() {

return iterable.iterator();

}

}

Page 37: Améliorer la qualité du code par restriction du langage

It’s not a bug, it’s a feature!

Static dispatch

Page 38: Améliorer la qualité du code par restriction du langage

L’enfer 2.0

Page 39: Améliorer la qualité du code par restriction du langage

L’enfer 2.0

● Difficile à tester

Page 40: Améliorer la qualité du code par restriction du langage

L’enfer 2.0

● Difficile à tester● Difficile à maintenir

Page 41: Améliorer la qualité du code par restriction du langage

L’enfer 2.0

● Difficile à tester● Difficile à maintenir● Détruit tout polymorphisme

Page 42: Améliorer la qualité du code par restriction du langage

L’enfer 2.0

● Difficile à tester● Difficile à maintenir● Détruit tout polymorphisme● Rend les classes potentiellement variables…

alors qu’elles sont globales !

Page 43: Améliorer la qualité du code par restriction du langage

Pragmatisme

Page 44: Améliorer la qualité du code par restriction du langage

Débutants

Page 45: Améliorer la qualité du code par restriction du langage

Questions ?

Merci !

@mercury_wood

ElevatedAbstractions.wordpress.com


Top Related