Spécialisation et sous-typage : thème et variations
La spécialisation de classes constitue la caractéristique la plus remarquable de l'approche objet mais son assimilation au sous-typage, dans le cadre de la programmation par objets, conduit à la problématique bien connue du caractère covariant ou contravariant de la redéfinition. Pour que le typage soit sûr, le sous-typage impose une redéfinition contravariante contraire à la sémantique covariante de la spécialisation. Ce problème est bien connu, mais le point de vue du typage sûr est resté dominant. Cet article a pour objet d'analyser précisément le problème, de montrer l'irréductibilité du conflit, et la nécessité du risque d'erreur de type. La plupart des langages reconnaissent d'ailleurs implicitement cette nécessité en permettant une coercition de types contraire à la sûreté du typage. Nous montrons aussi que les nombreuses alternatives comme la sélection multiple, la généricité ou le filtrage restent illusoires ou insuffisantes pour traiter le problème. La solution réaliste est alors d'adopter la redéfinition covariante en rajoutant aux langages les éléments permettant de circonscrire précisément les erreurs de type, et en complétant les méthodes d'analyse et de conception pour qu'elles les prennent en compte.
Class specialization is the most original feature of object orientation, but identifying it to subtyping leads to the well known covariance-contravariance controversy. Type safety requires contravariance while specialization needs covariance. This paper aims to precisely analyse this problem, to show how irreductible it is and the need for type errors. We show that many alternatives as multiple dispatch, genericity or matching cannot solve the problem. Thus, a realistic solution is to adopt covariant redefinition as the basis of a type system where type errors are explicited, as they should be at the analysis and design stages.
R.DUCOURNAU
langage à objets, spécialisation, sous-typage, généricité, héritage, sélection multiple, covariance, contravariance.
object-oriented languages, specialization, subtyping, genericity, inheritance, multiple dispatch, covariance, contravariance.
Français
|