cpoa conception et programmation objet avancéesnowak/teaching/cpoa/pod.pdf · 2020. 12. 11. ·...
Post on 09-Sep-2021
3 Views
Preview:
TRANSCRIPT
CPOA Conception et programmation
objet avancéesProgrammation orientée données et langages
modernes
Thomas NowakUniversité Paris-Saclay
Object-Relational Mapping
code Java base de données
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); … }
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
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; … }
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 !
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)
Suite de valeurs immuables
Valeurs pures
• propriétés constantes en temps
• égalité = identité
• pas de copies défensives
• copies plates
• partage gratuit
Valeurs pures
Map<String,Integer> stuff = new HashMap<String,Integer>(); stuff.put(“a", 1); stuff.put(“b", 2); {“a”: 1, “b”: 2}
Valeurs pures• testabilité
• fonctions pures
• tests génératifs
• tests de simulation
• debugging
• indépendance du langage
JSON
{ "type": "success", "value": { "id": 166, "joke": "Chuck Norris doesn't play god. Playing is for children.", "categories": [] } }
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)
Langages en évolution• version récentes de langages de programmation :
• Java 15
• C++ 17
• C 18
• Python 3.9
• Kotlin 1.4
Quelques aspects récurrents de langages modernes
• déduction automatique de types
• lambdas
• littéraux pour des collections
• deconstruction structurelle
• string templates
• REPL
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 !
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
Kotlin
• langage POO sur la JVM
• compatible avec Java
• récemment adopté pour la programmation Android
• statiquement typé
• nullabilité explicite
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)
Java
Trajectoire du cours
langages
objetsJVM
langages modernes
top related