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.