![Page 1: CPOA Conception et programmation objet avancéesnowak/teaching/cpoa/POD.pdf · 2020. 12. 11. · Conception et programmation objet avancées Programmation orientée données et langages](https://reader036.vdocuments.us/reader036/viewer/2022081623/614a6a4212c9616cbc696679/html5/thumbnails/1.jpg)
CPOA Conception et programmation
objet avancéesProgrammation orientée données et langages
modernes
Thomas NowakUniversité Paris-Saclay
![Page 2: CPOA Conception et programmation objet avancéesnowak/teaching/cpoa/POD.pdf · 2020. 12. 11. · Conception et programmation objet avancées Programmation orientée données et langages](https://reader036.vdocuments.us/reader036/viewer/2022081623/614a6a4212c9616cbc696679/html5/thumbnails/2.jpg)
Object-Relational Mapping
code Java base de données
![Page 3: CPOA Conception et programmation objet avancéesnowak/teaching/cpoa/POD.pdf · 2020. 12. 11. · Conception et programmation objet avancées Programmation orientée données et langages](https://reader036.vdocuments.us/reader036/viewer/2022081623/614a6a4212c9616cbc696679/html5/thumbnails/3.jpg)
Object-Relational MappingString query = "SELECT * FROM etudiants”; Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(query); while (rs.next()) { int id = rs.getInt("id"); String nom = rs.getString("nom"); String diplome = rs.getString("diplome"); Etudiant etud = new Etudiant(id, nom, diplome); … }
![Page 4: CPOA Conception et programmation objet avancéesnowak/teaching/cpoa/POD.pdf · 2020. 12. 11. · Conception et programmation objet avancées Programmation orientée données et langages](https://reader036.vdocuments.us/reader036/viewer/2022081623/614a6a4212c9616cbc696679/html5/thumbnails/4.jpg)
Object-Relational Mapping
• libraries pour la conversion objets-relation
• la plus populaire en Java : Hibernate
• annotations aux champs qui expliquent le lien avec la relation dans la BD
• opérations explicites de synchronisation avec la BD
![Page 5: CPOA Conception et programmation objet avancéesnowak/teaching/cpoa/POD.pdf · 2020. 12. 11. · Conception et programmation objet avancées Programmation orientée données et langages](https://reader036.vdocuments.us/reader036/viewer/2022081623/614a6a4212c9616cbc696679/html5/thumbnails/5.jpg)
Object-Relational Mapping@Entity @Table(name="etudiants") public class Etudiant { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") private int id; @Column(name="nom", length=100, nullable=false) private String nom; @Column(name="diplome", length=100) private String diplome; … }
![Page 6: CPOA Conception et programmation objet avancéesnowak/teaching/cpoa/POD.pdf · 2020. 12. 11. · Conception et programmation objet avancées Programmation orientée données et langages](https://reader036.vdocuments.us/reader036/viewer/2022081623/614a6a4212c9616cbc696679/html5/thumbnails/6.jpg)
Le temps perdu
• quel est le diplôme préparé par un étudiant ?
• en ce moment
• l’année dernière ?
• pas de notion de temps !
![Page 7: CPOA Conception et programmation objet avancéesnowak/teaching/cpoa/POD.pdf · 2020. 12. 11. · Conception et programmation objet avancées Programmation orientée données et langages](https://reader036.vdocuments.us/reader036/viewer/2022081623/614a6a4212c9616cbc696679/html5/thumbnails/7.jpg)
PLOP
• PLace Oriented Programming
• on ne parle pas d’une donnée, mais de la place où on la trouve
• distance importante entre code et données
• ORM aide (un peu)
• détruit de l’information (historique)
![Page 8: CPOA Conception et programmation objet avancéesnowak/teaching/cpoa/POD.pdf · 2020. 12. 11. · Conception et programmation objet avancées Programmation orientée données et langages](https://reader036.vdocuments.us/reader036/viewer/2022081623/614a6a4212c9616cbc696679/html5/thumbnails/8.jpg)
Suite de valeurs immuables
![Page 9: CPOA Conception et programmation objet avancéesnowak/teaching/cpoa/POD.pdf · 2020. 12. 11. · Conception et programmation objet avancées Programmation orientée données et langages](https://reader036.vdocuments.us/reader036/viewer/2022081623/614a6a4212c9616cbc696679/html5/thumbnails/9.jpg)
Valeurs pures
• propriétés constantes en temps
• égalité = identité
• pas de copies défensives
• copies plates
• partage gratuit
![Page 10: CPOA Conception et programmation objet avancéesnowak/teaching/cpoa/POD.pdf · 2020. 12. 11. · Conception et programmation objet avancées Programmation orientée données et langages](https://reader036.vdocuments.us/reader036/viewer/2022081623/614a6a4212c9616cbc696679/html5/thumbnails/10.jpg)
Valeurs pures
Map<String,Integer> stuff = new HashMap<String,Integer>(); stuff.put(“a", 1); stuff.put(“b", 2); {“a”: 1, “b”: 2}
![Page 11: CPOA Conception et programmation objet avancéesnowak/teaching/cpoa/POD.pdf · 2020. 12. 11. · Conception et programmation objet avancées Programmation orientée données et langages](https://reader036.vdocuments.us/reader036/viewer/2022081623/614a6a4212c9616cbc696679/html5/thumbnails/11.jpg)
Valeurs pures• testabilité
• fonctions pures
• tests génératifs
• tests de simulation
• debugging
• indépendance du langage
![Page 12: CPOA Conception et programmation objet avancéesnowak/teaching/cpoa/POD.pdf · 2020. 12. 11. · Conception et programmation objet avancées Programmation orientée données et langages](https://reader036.vdocuments.us/reader036/viewer/2022081623/614a6a4212c9616cbc696679/html5/thumbnails/12.jpg)
JSON
{ "type": "success", "value": { "id": 166, "joke": "Chuck Norris doesn't play god. Playing is for children.", "categories": [] } }
![Page 13: CPOA Conception et programmation objet avancéesnowak/teaching/cpoa/POD.pdf · 2020. 12. 11. · Conception et programmation objet avancées Programmation orientée données et langages](https://reader036.vdocuments.us/reader036/viewer/2022081623/614a6a4212c9616cbc696679/html5/thumbnails/13.jpg)
Programmation orientée données
• orientation données vs. orientation place
• mutation comme suite de valeurs immuables (pures)
• idéalement description littérale de valeurs
• avantages de valeurs pures
• pas toujours raisonnable si resources limitées (ex : systèmes embarqués)
![Page 14: CPOA Conception et programmation objet avancéesnowak/teaching/cpoa/POD.pdf · 2020. 12. 11. · Conception et programmation objet avancées Programmation orientée données et langages](https://reader036.vdocuments.us/reader036/viewer/2022081623/614a6a4212c9616cbc696679/html5/thumbnails/14.jpg)
Langages en évolution• version récentes de langages de programmation :
• Java 15
• C++ 17
• C 18
• Python 3.9
• Kotlin 1.4
![Page 15: CPOA Conception et programmation objet avancéesnowak/teaching/cpoa/POD.pdf · 2020. 12. 11. · Conception et programmation objet avancées Programmation orientée données et langages](https://reader036.vdocuments.us/reader036/viewer/2022081623/614a6a4212c9616cbc696679/html5/thumbnails/15.jpg)
Quelques aspects récurrents de langages modernes
• déduction automatique de types
• lambdas
• littéraux pour des collections
• deconstruction structurelle
• string templates
• REPL
![Page 16: CPOA Conception et programmation objet avancéesnowak/teaching/cpoa/POD.pdf · 2020. 12. 11. · Conception et programmation objet avancées Programmation orientée données et langages](https://reader036.vdocuments.us/reader036/viewer/2022081623/614a6a4212c9616cbc696679/html5/thumbnails/16.jpg)
Typage statique vs. dynamique
• types statiques = chaque expression est affectée un type lors de la compilation
• types dynamiques = les types des expressions sont déterminés lors de l’exécution
• types statiques ≠ types déclarés dans le code !
![Page 17: CPOA Conception et programmation objet avancéesnowak/teaching/cpoa/POD.pdf · 2020. 12. 11. · Conception et programmation objet avancées Programmation orientée données et langages](https://reader036.vdocuments.us/reader036/viewer/2022081623/614a6a4212c9616cbc696679/html5/thumbnails/17.jpg)
Python• langage orienté objet avec des classes
• focus sur brévité et lisibilité
• programmation fonctionnelle possible
• REPL
• dynamiquement typé
• collections de base mutables avec littéraux
• pas de restrictions d’accès : tout est publique
![Page 18: CPOA Conception et programmation objet avancéesnowak/teaching/cpoa/POD.pdf · 2020. 12. 11. · Conception et programmation objet avancées Programmation orientée données et langages](https://reader036.vdocuments.us/reader036/viewer/2022081623/614a6a4212c9616cbc696679/html5/thumbnails/18.jpg)
Kotlin
• langage POO sur la JVM
• compatible avec Java
• récemment adopté pour la programmation Android
• statiquement typé
• nullabilité explicite
![Page 19: CPOA Conception et programmation objet avancéesnowak/teaching/cpoa/POD.pdf · 2020. 12. 11. · Conception et programmation objet avancées Programmation orientée données et langages](https://reader036.vdocuments.us/reader036/viewer/2022081623/614a6a4212c9616cbc696679/html5/thumbnails/19.jpg)
Clojure• purement fonctionnel
• compatible avec Java ; réutilise beaucoup de types de Java (ex : types numériques, strings)
• collections immuables avec des littéraux
• dynamiquement typé
• toutes les données sont immuables, seuls des références changes (et les objets Java)
![Page 20: CPOA Conception et programmation objet avancéesnowak/teaching/cpoa/POD.pdf · 2020. 12. 11. · Conception et programmation objet avancées Programmation orientée données et langages](https://reader036.vdocuments.us/reader036/viewer/2022081623/614a6a4212c9616cbc696679/html5/thumbnails/20.jpg)
Java
Trajectoire du cours
langages
objetsJVM
langages modernes