Description
Ce cours traite des caractéristiques présentes dans les langages à objets les plus avancés; principalement le typage statique, l'héritage et la méta-programmation. Fondements : objet, classe, spécialisation, héritage, propriété, envoi de message. 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. 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. Modules : hiérarchie de modules, modules vs classes, raffinement de classes, classes ouvertes, hiérarchies d'ordre supérieur. Méta-programmation : méta-modélisation, instrospection, réflexivité.