“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 305 — #315
i
i
i
i
i
i
i
i
6.5 Le langage Java (partie séquentielle)
305
6.5.1 Le modèle de calcul
Java fait de la programmation orientée objet statiquement typé avec des classes, des
objets passifs (qui ne contiennent pas de fils) et des fils. Le modèle de calcul de Java
est un modèle avec état et concurrence, sans les variables dataflow, le calcul paresseux
et les noms. Le passage de paramètres est toujours par valeur, pour les types primitifs
et les références aux objets. Les variables déclarées ont une valeur initiale par défaut
qui dépend de leur type. Il y a un soutien pour l’affectation unique : les variables et les
attributs d’objets peuvent être déclarés comme final, ce qui veut dire que la variable
peut être affectée exactement une fois. Les variables finales doivent être affectées
avant leur utilisation.
Java introduit sa propre terminologie pour certains concepts. Les classes contiennent
des champs (attributs, dans notre terminologie), des méthodes, d’autres classes ou des
interfaces, qui sont connus collectivement sous le nom de membres de classe. Les
variables sont des champs ou des variables locales (déclarées dans les blocs locaux
aux méthodes) ou des paramètres des méthodes. Les variables sont déclarées avec
leur type, leur identificateur et un jeu facultatif de modificateurs (comme par exemple
final). Le concept de self s’appelle this.
Les interfaces
Java a une solution élégante aux problèmes de l’héritage multiple (voir sections 6.4.2
et 6.4.3). Java introduit le concept d’interface, qui ressemble syntaxiquement à une
classe avec seulement des déclarations de méthodes. Une interface n’a pas d’implémentation. Une classe peut implémenter une interface, ce qui veut simplement dire
qu’elle définit toutes les méthodes spécifiées par l’interface. Java permet l’héritage
simple pour les classes, ce qui évite les problèmes de l’héritage multiple. Mais pour
garder les avantages de l’héritage multiple, Java permet l’héritage multiple pour les
interfaces.
Java peut faire de la programmation d’ordre supérieur par un codage (les objets
sont codés comme valeurs procédurales). Java a aussi un soutien plus direct pour la
programmation d’ordre supérieur avec les classes internes (« inner classes »). Une
classe interne est une définition de classe qui est imbriquée dans une autre classe ou
dans un bloc de code (par exemple un corps de méthode). Une instance d’une classe
interne peut sortir d’une méthode ou d’un bloc de code. Une classe interne peut avoir
des références externes, mais il y a une restriction si elle est imbriquée dans un bloc
de code : dans ce cas elle ne pourra pas référencer des variables non finales. Nous
pouvons dire qu’une instance d’une classe interne est presque une valeur procédurale.
La restriction existe vraisemblablement parce que les concepteurs du langage voulaient
que les variables non finales dans les blocs de code puissent être implémentées sur
une pile, et enlevées à la sortie de la méthode. Sans la restriction, cela pourrait créer
des pointeurs détachés.
© Dunod – La photocopie non autorisée est un délit
i
i
i
i
i
i
i
i
6.5 Le langage Java (partie séquentielle)
305
6.5.1 Le modèle de calcul
Java fait de la programmation orientée objet statiquement typé avec des classes, des
objets passifs (qui ne contiennent pas de fils) et des fils. Le modèle de calcul de Java
est un modèle avec état et concurrence, sans les variables dataflow, le calcul paresseux
et les noms. Le passage de paramètres est toujours par valeur, pour les types primitifs
et les références aux objets. Les variables déclarées ont une valeur initiale par défaut
qui dépend de leur type. Il y a un soutien pour l’affectation unique : les variables et les
attributs d’objets peuvent être déclarés comme final, ce qui veut dire que la variable
peut être affectée exactement une fois. Les variables finales doivent être affectées
avant leur utilisation.
Java introduit sa propre terminologie pour certains concepts. Les classes contiennent
des champs (attributs, dans notre terminologie), des méthodes, d’autres classes ou des
interfaces, qui sont connus collectivement sous le nom de membres de classe. Les
variables sont des champs ou des variables locales (déclarées dans les blocs locaux
aux méthodes) ou des paramètres des méthodes. Les variables sont déclarées avec
leur type, leur identificateur et un jeu facultatif de modificateurs (comme par exemple
final). Le concept de self s’appelle this.
Les interfaces
Java a une solution élégante aux problèmes de l’héritage multiple (voir sections 6.4.2
et 6.4.3). Java introduit le concept d’interface, qui ressemble syntaxiquement à une
classe avec seulement des déclarations de méthodes. Une interface n’a pas d’implémentation. Une classe peut implémenter une interface, ce qui veut simplement dire
qu’elle définit toutes les méthodes spécifiées par l’interface. Java permet l’héritage
simple pour les classes, ce qui évite les problèmes de l’héritage multiple. Mais pour
garder les avantages de l’héritage multiple, Java permet l’héritage multiple pour les
interfaces.
Java peut faire de la programmation d’ordre supérieur par un codage (les objets
sont codés comme valeurs procédurales). Java a aussi un soutien plus direct pour la
programmation d’ordre supérieur avec les classes internes (« inner classes »). Une
classe interne est une définition de classe qui est imbriquée dans une autre classe ou
dans un bloc de code (par exemple un corps de méthode). Une instance d’une classe
interne peut sortir d’une méthode ou d’un bloc de code. Une classe interne peut avoir
des références externes, mais il y a une restriction si elle est imbriquée dans un bloc
de code : dans ce cas elle ne pourra pas référencer des variables non finales. Nous
pouvons dire qu’une instance d’une classe interne est presque une valeur procédurale.
La restriction existe vraisemblablement parce que les concepteurs du langage voulaient
que les variables non finales dans les blocs de code puissent être implémentées sur
une pile, et enlevées à la sortie de la méthode. Sans la restriction, cela pourrait créer
des pointeurs détachés.
© Dunod – La photocopie non autorisée est un délit
