SlideShare uma empresa Scribd logo
1 de 48
Baixar para ler offline
Coder
Coder
j’adore ça !
Coder
...mais c’est trop compliqué !
Apprenons le Java !

class MainClass {
public static void main(String[] args) {
System.out.println(“Hello, World!”);
}
}
Apprenons le Java !

class MainClass {
public static void main(String[] args) {
System.out.println(“Hello, World!”);
}
}
Apprenons le Java !
?
?

?

?

?

?

class MainClass {
public static void main(String[] args) {
System.out.println(“Hello, World!”);
}
}

?
?
?

?

?

?
Apprenons le Java !
?
?

?

?

?

?

??!

class MainClass {
public static void main(String[] args) {
System.out.println(“Hello, World!”);
}
}

?

?

?

?

?

?
puts “Hello World!”

print(“Hello World!”)

printStrLn “Hello World!”

print “Hello World!”
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?
Compliqué ?
Concevoir un algorithme est simple.
Communiquer un algorithme à un humain est
simple.
Communiquer un algorithme à une machine
est moins simple.
Pourquoi ?

Les langages de programmation !
(?)
Plus précisément

Les langages de programmation
orientés objet
java, c#, python, ruby...
Axiomes
Orienté-objet
=
polymorphisme + encapsulation

Qualité
=
testable / modulaire + maintenable / lisible
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
updateField();
// field equals y
Parfum de variable globale

// field equals x
field = computeValue();
// 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
● Inutiles
● Dangereuses
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

Faible encapsulation
Couplage fort
Double dépendance
Dépendences cycliques

Classe
abstraite
Dépendences cycliques

Classe
abstraite

?
Dépendences cycliques

Classe
abstraite

Classe fille
concrète
Dépendences cycliques

Classe
abstraite

??!

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

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

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
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 CollectionDecorator<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 ?

Hugo.Wood@sopragroup.com / @mercury_wood / elevatedabstractions.wordpress.com

Mais conteúdo relacionado

Destaque

Journalisme et programmation
Journalisme et programmationJournalisme et programmation
Journalisme et programmationPierre Tran
 
What Is Language
What Is LanguageWhat Is Language
What Is LanguageOtissia
 
Certificate of Academic Recognition - Outstanding performance in Pascal progr...
Certificate of Academic Recognition - Outstanding performance in Pascal progr...Certificate of Academic Recognition - Outstanding performance in Pascal progr...
Certificate of Academic Recognition - Outstanding performance in Pascal progr...arman o
 
Cypyth formation-programmation-objet-en-langage-python
Cypyth formation-programmation-objet-en-langage-pythonCypyth formation-programmation-objet-en-langage-python
Cypyth formation-programmation-objet-en-langage-pythonCERTyou Formation
 
OpenStack Havana, tour d'horizon
OpenStack Havana, tour d'horizonOpenStack Havana, tour d'horizon
OpenStack Havana, tour d'horizonYannick Foeillet
 
Vers des langues de programmation ?
Vers des langues de programmation ?Vers des langues de programmation ?
Vers des langues de programmation ?Nicolas Dubois
 
Programming paradigms c1
Programming paradigms c1Programming paradigms c1
Programming paradigms c1Omar Al-Sabek
 
SeSQL : un moteur de recherche en Python et PostgreSQL
SeSQL : un moteur de recherche en Python et PostgreSQLSeSQL : un moteur de recherche en Python et PostgreSQL
SeSQL : un moteur de recherche en Python et PostgreSQLParis, France
 
Généralités sur les réseaux informatiques – Protocoles ip
Généralités sur les réseaux informatiques – Protocoles ipGénéralités sur les réseaux informatiques – Protocoles ip
Généralités sur les réseaux informatiques – Protocoles ipClub Scientifique de l'ESI - CSE
 
7 étapes pour emmener la programmation dans la salle de classe
7 étapes pour emmener la programmation dans la salle de classe7 étapes pour emmener la programmation dans la salle de classe
7 étapes pour emmener la programmation dans la salle de classeMartine Paquet
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Pythonyboussard
 
Modelisation agile 03122011
Modelisation agile  03122011Modelisation agile  03122011
Modelisation agile 03122011agnes_crepet
 
Chp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesChp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesLilia Sfaxi
 
Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)salah fenni
 
Python et son intégration avec Odoo
Python et son intégration avec OdooPython et son intégration avec Odoo
Python et son intégration avec OdooHassan WAHSISS
 

Destaque (19)

Journalisme et programmation
Journalisme et programmationJournalisme et programmation
Journalisme et programmation
 
What Is Language
What Is LanguageWhat Is Language
What Is Language
 
Certificate of Academic Recognition - Outstanding performance in Pascal progr...
Certificate of Academic Recognition - Outstanding performance in Pascal progr...Certificate of Academic Recognition - Outstanding performance in Pascal progr...
Certificate of Academic Recognition - Outstanding performance in Pascal progr...
 
Cypyth formation-programmation-objet-en-langage-python
Cypyth formation-programmation-objet-en-langage-pythonCypyth formation-programmation-objet-en-langage-python
Cypyth formation-programmation-objet-en-langage-python
 
OpenStack Havana, tour d'horizon
OpenStack Havana, tour d'horizonOpenStack Havana, tour d'horizon
OpenStack Havana, tour d'horizon
 
La sabiduría
La sabiduríaLa sabiduría
La sabiduría
 
Vers des langues de programmation ?
Vers des langues de programmation ?Vers des langues de programmation ?
Vers des langues de programmation ?
 
Programming paradigms c1
Programming paradigms c1Programming paradigms c1
Programming paradigms c1
 
Solucion y Psicologia del Bienestar
Solucion y Psicologia del BienestarSolucion y Psicologia del Bienestar
Solucion y Psicologia del Bienestar
 
Python debugger
Python debuggerPython debugger
Python debugger
 
SeSQL : un moteur de recherche en Python et PostgreSQL
SeSQL : un moteur de recherche en Python et PostgreSQLSeSQL : un moteur de recherche en Python et PostgreSQL
SeSQL : un moteur de recherche en Python et PostgreSQL
 
Algorithme
AlgorithmeAlgorithme
Algorithme
 
Généralités sur les réseaux informatiques – Protocoles ip
Généralités sur les réseaux informatiques – Protocoles ipGénéralités sur les réseaux informatiques – Protocoles ip
Généralités sur les réseaux informatiques – Protocoles ip
 
7 étapes pour emmener la programmation dans la salle de classe
7 étapes pour emmener la programmation dans la salle de classe7 étapes pour emmener la programmation dans la salle de classe
7 étapes pour emmener la programmation dans la salle de classe
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Python
 
Modelisation agile 03122011
Modelisation agile  03122011Modelisation agile  03122011
Modelisation agile 03122011
 
Chp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesChp3 - Diagramme de Classes
Chp3 - Diagramme de Classes
 
Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)
 
Python et son intégration avec Odoo
Python et son intégration avec OdooPython et son intégration avec Odoo
Python et son intégration avec Odoo
 

Les langages de programmation sont trop compliqués