48
Coder

Les langages de programmation sont trop compliqués

Embed Size (px)

Citation preview

Page 1: Les langages de programmation sont trop compliqués

Coder

Page 2: Les langages de programmation sont trop compliqués

Coderj’adore ça !

Page 3: Les langages de programmation sont trop compliqués

Coder...mais c’est trop compliqué !

Page 4: Les langages de programmation sont trop compliqués

Apprenons le Java !

class MainClass {

public static void main(String[] args) {

System.out.println(“Hello, World!”);

}

}

Page 5: Les langages de programmation sont trop compliqués

Apprenons le Java !

class MainClass {

public static void main(String[] args) {

System.out.println(“Hello, World!”);

}

}

Page 6: Les langages de programmation sont trop compliqués

Apprenons le Java !

class MainClass {

public static void main(String[] args) {

System.out.println(“Hello, World!”);

}

}

? ? ??

? ?

??

? ? ? ?

Page 7: Les langages de programmation sont trop compliqués

Apprenons le Java !

class MainClass {

public static void main(String[] args) {

System.out.println(“Hello, World!”);

}

}

? ? ??

? ?

??

? ? ? ???!

Page 8: Les langages de programmation sont trop compliqués

puts “Hello World!”

print(“Hello World!”)

printStrLn “Hello World!”

print “Hello World!”

Page 9: Les langages de programmation sont trop compliqués

Alors comme ça c’est compliqué ?

Making Software: What Really Works and Why We Believe It

Why is it So Hard to Learn to Program?

Page 10: Les langages de programmation sont trop compliqués

Compliqué ?

Concevoir un algorithme est simple.

Communiquer un algorithme à un humain est simple.

Communiquer un algorithme à une machine est moins simple.

Page 11: Les langages de programmation sont trop compliqués

Pourquoi ?

Les langages de programmation !(?)

Page 12: Les langages de programmation sont trop compliqués

Plus précisément

Les langages de programmationorientés objet

java, c#, python, ruby...

Page 13: Les langages de programmation sont trop compliqués

Axiomes

Orienté-objet =

polymorphisme + encapsulation

Qualité=

testable / modulaire + maintenable / lisible

Page 14: Les langages de programmation sont trop compliqués

ranger == planquer sous le lit

Les méthodes privées

Page 15: Les langages de programmation sont trop compliqués

Une méthode publique trop imposante

Méthode publique

Interface

Implémentation

cp cp

Test

Page 16: Les langages de programmation sont trop compliqués

Des méthodes privées à la rescousse

mpubInterface

Implémentation

cp cp

Test

mpriv mpriv

Page 17: Les langages de programmation sont trop compliqués

Des problèmes

mpubInterface

Implémentation

cp cp

Test

mpriv mpriv

Page 18: Les langages de programmation sont trop compliqués

Deux styles de méthodes privées

// field equals x

updateField();

// field equals y

Parfum de variable globale

// field equals x

field = computeValue();

// field equals y

Méthode détachée de son objet

Page 19: Les langages de programmation sont trop compliqués

Des objets à la rescousse

mpubInterface

Implémentation

cp cp

Test

mpub mpub

Nouvelle dépendance

Nouvelle dépendance

Page 20: Les langages de programmation sont trop compliqués

Les méthodes privées

● Inutiles● Dangereuses

Page 21: Les langages de programmation sont trop compliqués

Coupling: it’s over 9000!

L’héritage de classe

Page 22: Les langages de programmation sont trop compliqués

Difficile à tester

Mère

Fille

TestMère

TestFille

Page 23: Les langages de programmation sont trop compliqués

Difficile à tester

Mère

Fille

TestMère

TestFille

super

Page 24: Les langages de programmation sont trop compliqués

Difficile à tester

Mère

Fille

TestMère

TestFille

Page 25: Les langages de programmation sont trop compliqués

Difficile à tester

Mère

Fille

TestMère

TestFille

Page 26: Les langages de programmation sont trop compliqués

Difficile à tester

Mère

Fille

TestMère

TestFille

Page 27: Les langages de programmation sont trop compliqués

Difficile à tester

Mère

Fille

TestMère

TestFille

Page 28: Les langages de programmation sont trop compliqués

Difficile à maintenir

public

Page 29: Les langages de programmation sont trop compliqués

Difficile à maintenir

public

protected

Page 30: Les langages de programmation sont trop compliqués

Difficile à maintenir

public

protected

Faible encapsulationCouplage fortDouble dépendance

Page 31: Les langages de programmation sont trop compliqués

Dépendences cycliques

Classeabstraite

Page 32: Les langages de programmation sont trop compliqués

Dépendences cycliques

Classeabstraite

?

Page 33: Les langages de programmation sont trop compliqués

Dépendences cycliques

Classeabstraite

Classe fille concrète

Page 34: Les langages de programmation sont trop compliqués

Dépendences cycliques

Classeabstraite

Classe fille concrète

??!

Page 35: Les langages de programmation sont trop compliqués

● Difficile à tester● Difficile à maintenir● Dépendances ‘cycliques’

C’est l’enfer !

Page 36: Les langages de programmation sont trop compliqués

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

C’est l’enfer !

Page 37: Les langages de programmation sont trop compliqués

● Difficile à tester● Difficile à maintenir● Dépendances ‘cycliques’● 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 38: Les langages de programmation sont trop compliqués

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 39: Les langages de programmation sont trop compliqués

Solution : compositionabstract class AbstractCollection<T>

implements Collection<T> {

boolean contains(Object o) {

...// appelle iterator()

}

abstract Iterator<T> iterator();

}

class CollectionDecorator<T>

implements Collection<T> {

final Iterable<T> iterable;

boolean contains(Object o) {

...// appelle iterator()

}

Iterator<T> iterator() {

return iterable.iterator();

}

}

Page 40: Les langages de programmation sont trop compliqués

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

Static dispatch

Page 41: Les langages de programmation sont trop compliqués

L’enfer 2.0

Page 42: Les langages de programmation sont trop compliqués

L’enfer 2.0

● Difficile à tester

Page 43: Les langages de programmation sont trop compliqués

L’enfer 2.0

● Difficile à tester● Difficile à maintenir

Page 44: Les langages de programmation sont trop compliqués

L’enfer 2.0

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

Page 45: Les langages de programmation sont trop compliqués

L’enfer 2.0

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

alors qu’elles sont globales !

Page 46: Les langages de programmation sont trop compliqués

Pragmatisme

Page 47: Les langages de programmation sont trop compliqués

Débutants

Page 48: Les langages de programmation sont trop compliqués

Questions ?

Merci !

[email protected] / @mercury_wood / elevatedabstractions.wordpress.com