CPOA Conception et programmation objet avancéesnowak/teaching/cpoa/POD.pdf · 2020. 12. 11. ·...

20
CPOA Conception et programmation objet avancées Programmation orientée données et langages modernes Thomas Nowak Université Paris-Saclay

Transcript of CPOA Conception et programmation objet avancéesnowak/teaching/cpoa/POD.pdf · 2020. 12. 11. ·...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Java

Trajectoire du cours

langages

objetsJVM

langages modernes