INF7845

Transcription

INF7845
Jean Privat
Session d’hiver
INF7845
Principes avancés
des langages à objets
Description
Ce cours traite de caractéristiques présentes
dans les langages à objets les plus avancés.
Les caractéristiques couvertes concernent
principalement le typage statique, l’héritage
et la méta-programmation.
Concepts
fondamentaux
Objet
Syllogisme
Classe
Mortel
Mortel
Spécialisation
Homme
Homme
Héritage
Socrate
socrate
Homme
Homme
Propriété
Socrate
socrate
Envoi de
« Tous les hommes sont
message
mortel
mortel
mortels or Socrate est un
homme donc Socrate est
mortel » [Aristote]
→ 4 façons de voir les
choses
Quadrilatère
D
l
d
Rectangle
Losange
a=L*l
Contravariance
Animal
mange(n: Nourriture)
Vache
mange(h: Herbe)
Animal a = new Vache() ;
a.mange(new Saucisse()) ;
→ la vache folle est-elle
une erreur de typage ?
Héritage multiple et variations
Conflits de propriétés
Techniques de linéarisation
Héritage d’interface
Héritage non conforme
Héritage de mixins, de traits
Conflit de propriétés
L
Objectifs
Connaı̂tre les caractéristiques avancées des
langages à objets.
Comprendre les liens entre ces différentes
caractéristiques.
Être capable d’apprécier et de mettre en
œuvre ces caractéristiques.
Typage et sélection de
méthodes
Sous-typage vs.
spécialisation
Covariance vs.
contravariance
Types paramétrés et
généricité
Coercitions
Sélection multiple et
multiméthodes
Surcharge statique
Appel à super
Réflexivité
Noyau du modèle réflexif
ObjVlisp [Cointe 1987]
a=(D*d)/2
Méta-programmation
Méta-modélisation
Introspection
Réflexivité
Carré
Comment calculer l’aire d’un carré ?
Hiérarchies de modules
et raffinement de classes
Modules vs. classes
Classes ouvertes
Hiérarchies d’ordre
supérieur
Classe
Modules kernel et string de Nit
module kernel
Object
id: Integer
module string
Object
to_s: String
Integer
+(Integer): Integer
Légende
Objet
String
import string
123.to s.length
# result is 3
→ Étonnant, non ?
len: Integer
Classe
propriété
SousClasse
instance
Langages
C++, C#, Clos, Eiffel, Java, Nit, Python, Ruby, Smalltalk, etc.