les langages de programmation sont trop compliqués
TRANSCRIPT
![Page 1: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/1.jpg)
Coder
![Page 2: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/2.jpg)
Coderj’adore ça !
![Page 3: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/3.jpg)
Coder...mais c’est trop compliqué !
![Page 4: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/8.jpg)
puts “Hello World!”
print(“Hello World!”)
printStrLn “Hello World!”
print “Hello World!”
![Page 9: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/11.jpg)
Pourquoi ?
Les langages de programmation !(?)
![Page 12: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/12.jpg)
Plus précisément
Les langages de programmationorientés objet
java, c#, python, ruby...
![Page 13: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/13.jpg)
Axiomes
Orienté-objet =
polymorphisme + encapsulation
Qualité=
testable / modulaire + maintenable / lisible
![Page 14: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/14.jpg)
ranger == planquer sous le lit
Les méthodes privées
![Page 15: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/17.jpg)
Des problèmes
mpubInterface
Implémentation
cp cp
Test
mpriv mpriv
![Page 18: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/20.jpg)
Les méthodes privées
● Inutiles● Dangereuses
![Page 21: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/21.jpg)
Coupling: it’s over 9000!
L’héritage de classe
![Page 22: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/22.jpg)
Difficile à tester
Mère
Fille
TestMère
TestFille
![Page 23: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/23.jpg)
Difficile à tester
Mère
Fille
TestMère
TestFille
super
![Page 24: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/24.jpg)
Difficile à tester
Mère
Fille
TestMère
TestFille
![Page 25: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/25.jpg)
Difficile à tester
Mère
Fille
TestMère
TestFille
![Page 26: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/26.jpg)
Difficile à tester
Mère
Fille
TestMère
TestFille
![Page 27: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/27.jpg)
Difficile à tester
Mère
Fille
TestMère
TestFille
![Page 28: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/28.jpg)
Difficile à maintenir
public
![Page 29: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/29.jpg)
Difficile à maintenir
public
protected
![Page 30: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/30.jpg)
Difficile à maintenir
public
protected
Faible encapsulationCouplage fortDouble dépendance
![Page 31: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/31.jpg)
Dépendences cycliques
Classeabstraite
![Page 32: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/32.jpg)
Dépendences cycliques
Classeabstraite
?
![Page 33: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/33.jpg)
Dépendences cycliques
Classeabstraite
Classe fille concrète
![Page 34: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/34.jpg)
Dépendences cycliques
Classeabstraite
Classe fille concrète
??!
![Page 35: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/35.jpg)
● Difficile à tester● Difficile à maintenir● Dépendances ‘cycliques’
C’est l’enfer !
![Page 36: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/36.jpg)
● 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](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/37.jpg)
● 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](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/38.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/39.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/40.jpg)
It’s not a bug, it’s a feature!
Static dispatch
![Page 41: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/41.jpg)
L’enfer 2.0
![Page 42: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/42.jpg)
L’enfer 2.0
● Difficile à tester
![Page 43: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/43.jpg)
L’enfer 2.0
● Difficile à tester● Difficile à maintenir
![Page 44: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/44.jpg)
L’enfer 2.0
● Difficile à tester● Difficile à maintenir● Détruit tout polymorphisme
![Page 45: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/45.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/46.jpg)
Pragmatisme
![Page 47: Les langages de programmation sont trop compliqués](https://reader034.vdocuments.mx/reader034/viewer/2022052507/558691d6d8b42ac1788b470f/html5/thumbnails/47.jpg)
Débutants