Les détails du plan comprennent l'amélioration du protocole par lequel les programmes Java sont lancés pour être flexibles, en particulier pour permettre l'omission du paramètre String[] des méthodes principales et pour permettre à ces dernières de n'être ni publiques ni statiques ; le programme "Hello World" serait simplifié. Des classes principales anonymes pourraient être introduites pour rendre la déclaration de classe implicite.
Il s'agit actuellement d'une fonctionnalité du langage désactivée par défaut dans le JDK 21 (dont la disponibilité générale est prévue pour septembre), incluse pour provoquer un retour d'information de la part des développeurs sur la base d'une utilisation réelle (ce qui pourrait conduire à la rendre permanente à l'avenir). Il ne s'agit pas d'introduire un dialecte ou une chaîne d'outils Java distincts pour les débutants, souligne la proposition d'amélioration de Java (JEP) 445. "Les programmes des étudiants devraient être compilés et exécutés avec les mêmes outils que ceux qui compilent et exécutent n'importe quel programme Java."
Mais elle affirme qu'un simple programme "Hello World" a aujourd'hui "trop d'encombrement... trop de code, trop de concepts, trop de constructions - pour ce que fait le programme".
Code : | Sélectionner tout |
1 2 3 4 5 | public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World !") ; } } |
Les classes main anonymes rendraient la déclaration de la classe publique implicite (tout en épargnant aux néophytes le "mystérieux" modificateur static et le paramètre args String[] ). Le programme est simplifié comme suit :
Code : | Sélectionner tout |
1 2 3 | void main() { System.out.println("Hello, World !") ; } |
La proposition soutient que ce changement réduit "la cérémonie d'écriture de programmes simples tels que les scripts et les utilitaires de ligne de commande". Et puisque Java est destiné à être un premier langage de programmation, ce changement signifierait que les étudiants "peuvent écrire leurs premiers programmes sans avoir besoin de comprendre les caractéristiques du langage conçues pour les grands programmes", en utilisant à la place "des déclarations simplifiées pour les programmes à classe unique". (Cela permet aux étudiants et aux éducateurs d'explorer plus progressivement les fonctionnalités du langage).
Un programme Hello, World ! écrit sous la forme d'une classe principale anonyme se concentre beaucoup plus sur ce que le programme fait réellement, en omettant les concepts et les constructions dont il n'a pas besoin. Malgré cela, tous les membres sont interprétés de la même manière que dans une classe ordinaire. Pour transformer une classe principale anonyme en classe ordinaire, il suffit d'envelopper sa déclaration, à l'exclusion des déclarations d'importation, dans une déclaration de classe explicite.
JEP 445 : Des méthodes main flexibles et des classes principales anonymes
Résumé
Faire évoluer le langage Java pour que les étudiants puissent écrire leurs premiers programmes sans avoir besoin de comprendre les caractéristiques du langage conçues pour les gros programmes. Loin d'utiliser un dialecte Java distinct, les étudiants peuvent écrire des déclarations simplifiées pour des programmes à classe unique, puis étendre leurs programmes de manière transparente pour utiliser des fonctionnalités plus avancées au fur et à mesure que leurs compétences augmentent. Il s'agit d'une fonctionnalité preview du langage.
Objectifs
Motivation
Java est un langage multi-paradigme qui excelle dans les applications complexes et de grande envergure développées et maintenues pendant de nombreuses années par de grandes équipes. Il possède de riches caractéristiques pour le masquage des données, la réutilisation, le contrôle d'accès, la gestion des espaces de noms et la modularité qui permettent de composer proprement des composants tout en les développant et en les maintenant de manière indépendante. Grâce à ces caractéristiques, les composants peuvent exposer des interfaces bien définies pour leur interaction avec d'autres composants et masquer les détails de leur mise en œuvre interne afin de permettre l'évolution indépendante de chacun d'entre eux.
En effet, le paradigme orienté objet lui-même est conçu pour assembler des éléments qui interagissent par le biais de protocoles bien définis et qui font abstraction des détails de mise en œuvre. Cette composition de grands composants s'appelle la programmation en grand. Java offre également de nombreuses constructions utiles pour la programmation en petit, c'est-à-dire tout ce qui est interne à un composant. Ces dernières années, Java a amélioré à la fois ses capacités de programmation en grand avec les modules et ses capacités de programmation en petit avec la programmation orientée données.
Cependant, Java est également conçu pour être un premier langage de programmation. Lorsque les programmeurs débutent, ils n'écrivent pas de grands programmes, en équipe - ils écrivent de petits programmes, seuls. Ils n'ont pas besoin d'encapsulation et d'espaces de noms, utiles pour faire évoluer séparément des composants écrits par des personnes différentes. Lorsqu'ils enseignent la programmation, les instructeurs commencent par les concepts de base de la programmation en petit, à savoir les variables, le flux de contrôle et les sous-programmes. À ce stade, il n'est pas nécessaire d'utiliser les concepts de programmation en grand que sont les classes, les paquets et les modules. Rendre le langage plus accueillant pour les nouveaux venus est dans l'intérêt des vétérans de Java, mais eux aussi peuvent trouver agréable d'écrire des programmes simples de manière plus concise, sans aucun échafaudage de programmation dans les grandes dimensions.
Prenons le programme classique Hello, World ! qui est souvent utilisé comme premier programme pour les étudiants de Java :
Il y a trop d'encombrement ici - trop de code, trop de concepts, trop de constructions - pour ce que fait le programme.
La déclaration de classe et le modificateur d'accès public obligatoire sont des constructions de programmation à grande échelle. Ils sont utiles pour encapsuler une unité de code avec une interface bien définie vers des composants externes, mais plutôt inutiles dans ce petit exemple.
Le paramètre String[] args existe également pour interfacer le code avec un composant externe, dans ce cas le shell du système d'exploitation. Il est mystérieux et inutile ici, d'autant plus qu'il n'est jamais utilisé.
Le modificateur static fait partie du modèle classe-objet de Java. Pour le novice, static n'est pas seulement mystérieux, il est aussi nuisible : Pour ajouter des méthodes ou des champs que main peut appeler et utiliser, l'étudiant doit soit les déclarer tous comme statiques - propageant ainsi un idiome qui n'est ni commun ni une bonne habitude - soit affronter la différence entre les membres statiques et les membres d'instance et apprendre à instancier un objet.
Le nouveau programmeur rencontre ces concepts au pire moment possible, avant d'avoir appris les variables et le flux de contrôle, et alors qu'il ne peut pas apprécier l'utilité des constructions de programmation en grand pour maintenir un programme de grande taille bien organisé. Les éducateurs leur disent souvent : "Ne t'inquiète pas pour ça, tu comprendras plus tard". Cela n'est satisfaisant ni pour eux, ni pour leurs étudiants, et laisse à ces derniers l'impression durable que Java est compliqué.
La motivation de ce JEP n'est pas seulement de réduire la cérémonie, mais d'aider les programmeurs qui sont nouveaux à Java, ou à la programmation en général, à apprendre Java d'une manière qui introduit les concepts dans le bon ordre : Commencer par les concepts fondamentaux de la programmation en petit, puis passer aux concepts avancés de la programmation en grand lorsqu'ils sont réellement bénéfiques et peuvent être plus facilement appréhendés.
Nous proposons de le faire non pas en changeant la structure du langage Java - le code est toujours enfermé dans des méthodes, qui sont enfermées dans des classes, qui sont enfermées dans des paquets, qui sont enfermés dans des modules - mais en cachant ces détails jusqu'à ce qu'ils soient utiles dans des programmes plus importants. Nous offrons une rampe d'accès, une pente graduelle qui s'insère gracieusement dans l'autoroute. Lorsque les étudiants passent à des programmes plus importants, ils n'ont pas besoin d'abandonner ce qu'ils ont appris au cours des premières étapes, mais ils voient plutôt comment tout cela s'inscrit dans un cadre plus large.
Les changements que nous proposons ici ne sont qu'une étape pour rendre Java plus facile à apprendre. Ils n'abordent même pas tous les problèmes de vitesse du programme Hello, World ! ci-dessus : Le débutant peut encore être déconcerté par la mystérieuse incantation System.out.println, et il a encore besoin d'importer des classes et des méthodes utilitaires de base pour des fonctionnalités essentielles, même dans les programmes des premières semaines. Nous nous pencherons peut-être sur ces problèmes dans un prochain JEP.
Résumé
Faire évoluer le langage Java pour que les étudiants puissent écrire leurs premiers programmes sans avoir besoin de comprendre les caractéristiques du langage conçues pour les gros programmes. Loin d'utiliser un dialecte Java distinct, les étudiants peuvent écrire des déclarations simplifiées pour des programmes à classe unique, puis étendre leurs programmes de manière transparente pour utiliser des fonctionnalités plus avancées au fur et à mesure que leurs compétences augmentent. Il s'agit d'une fonctionnalité preview du langage.
Objectifs
- Offrir une rampe d'accès en douceur à Java afin que les enseignants puissent introduire les concepts de programmation de manière graduelle.
- Aider les étudiants à écrire des programmes de base de manière concise et à faire évoluer leur code au fur et à mesure que leurs compétences se développent.
- Réduire la cérémonie d'écriture de programmes simples tels que les scripts et les utilitaires de ligne de commande.
- Ne pas introduire de dialecte Java distinct pour les débutants.
- Ne pas introduire de chaîne d'outils distincte pour les débutants ; les programmes des étudiants devraient être compilés et exécutés avec les mêmes outils que ceux qui compilent et exécutent tout programme Java.
Motivation
Java est un langage multi-paradigme qui excelle dans les applications complexes et de grande envergure développées et maintenues pendant de nombreuses années par de grandes équipes. Il possède de riches caractéristiques pour le masquage des données, la réutilisation, le contrôle d'accès, la gestion des espaces de noms et la modularité qui permettent de composer proprement des composants tout en les développant et en les maintenant de manière indépendante. Grâce à ces caractéristiques, les composants peuvent exposer des interfaces bien définies pour leur interaction avec d'autres composants et masquer les détails de leur mise en œuvre interne afin de permettre l'évolution indépendante de chacun d'entre eux.
En effet, le paradigme orienté objet lui-même est conçu pour assembler des éléments qui interagissent par le biais de protocoles bien définis et qui font abstraction des détails de mise en œuvre. Cette composition de grands composants s'appelle la programmation en grand. Java offre également de nombreuses constructions utiles pour la programmation en petit, c'est-à-dire tout ce qui est interne à un composant. Ces dernières années, Java a amélioré à la fois ses capacités de programmation en grand avec les modules et ses capacités de programmation en petit avec la programmation orientée données.
Cependant, Java est également conçu pour être un premier langage de programmation. Lorsque les programmeurs débutent, ils n'écrivent pas de grands programmes, en équipe - ils écrivent de petits programmes, seuls. Ils n'ont pas besoin d'encapsulation et d'espaces de noms, utiles pour faire évoluer séparément des composants écrits par des personnes différentes. Lorsqu'ils enseignent la programmation, les instructeurs commencent par les concepts de base de la programmation en petit, à savoir les variables, le flux de contrôle et les sous-programmes. À ce stade, il n'est pas nécessaire d'utiliser les concepts de programmation en grand que sont les classes, les paquets et les modules. Rendre le langage plus accueillant pour les nouveaux venus est dans l'intérêt des vétérans de Java, mais eux aussi peuvent trouver agréable d'écrire des programmes simples de manière plus concise, sans aucun échafaudage de programmation dans les grandes dimensions.
Prenons le programme classique Hello, World ! qui est souvent utilisé comme premier programme pour les étudiants de Java :
Code : | Sélectionner tout |
1 2 3 4 5 | public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } |
Il y a trop d'encombrement ici - trop de code, trop de concepts, trop de constructions - pour ce que fait le programme.
La déclaration de classe et le modificateur d'accès public obligatoire sont des constructions de programmation à grande échelle. Ils sont utiles pour encapsuler une unité de code avec une interface bien définie vers des composants externes, mais plutôt inutiles dans ce petit exemple.
Le paramètre String[] args existe également pour interfacer le code avec un composant externe, dans ce cas le shell du système d'exploitation. Il est mystérieux et inutile ici, d'autant plus qu'il n'est jamais utilisé.
Le modificateur static fait partie du modèle classe-objet de Java. Pour le novice, static n'est pas seulement mystérieux, il est aussi nuisible : Pour ajouter des méthodes ou des champs que main peut appeler et utiliser, l'étudiant doit soit les déclarer tous comme statiques - propageant ainsi un idiome qui n'est ni commun ni une bonne habitude - soit affronter la différence entre les membres statiques et les membres d'instance et apprendre à instancier un objet.
Le nouveau programmeur rencontre ces concepts au pire moment possible, avant d'avoir appris les variables et le flux de contrôle, et alors qu'il ne peut pas apprécier l'utilité des constructions de programmation en grand pour maintenir un programme de grande taille bien organisé. Les éducateurs leur disent souvent : "Ne t'inquiète pas pour ça, tu comprendras plus tard". Cela n'est satisfaisant ni pour eux, ni pour leurs étudiants, et laisse à ces derniers l'impression durable que Java est compliqué.
La motivation de ce JEP n'est pas seulement de réduire la cérémonie, mais d'aider les programmeurs qui sont nouveaux à Java, ou à la programmation en général, à apprendre Java d'une manière qui introduit les concepts dans le bon ordre : Commencer par les concepts fondamentaux de la programmation en petit, puis passer aux concepts avancés de la programmation en grand lorsqu'ils sont réellement bénéfiques et peuvent être plus facilement appréhendés.
Nous proposons de le faire non pas en changeant la structure du langage Java - le code est toujours enfermé dans des méthodes, qui sont enfermées dans des classes, qui sont enfermées dans des paquets, qui sont enfermés dans des modules - mais en cachant ces détails jusqu'à ce qu'ils soient utiles dans des programmes plus importants. Nous offrons une rampe d'accès, une pente graduelle qui s'insère gracieusement dans l'autoroute. Lorsque les étudiants passent à des programmes plus importants, ils n'ont pas besoin d'abandonner ce qu'ils ont appris au cours des premières étapes, mais ils voient plutôt comment tout cela s'inscrit dans un cadre plus large.
Les changements que nous proposons ici ne sont qu'une étape pour rendre Java plus facile à apprendre. Ils n'abordent même pas tous les problèmes de vitesse du programme Hello, World ! ci-dessus : Le débutant peut encore être déconcerté par la mystérieuse incantation System.out.println, et il a encore besoin d'importer des classes et des méthodes utilitaires de base pour des fonctionnalités essentielles, même dans les programmes des premières semaines. Nous nous pencherons peut-être sur ces problèmes dans un prochain JEP.
Et vous ?
Quel est votre avis sur le sujet ?
Pensez-vous que cette approche permettra aux néophytes de mieux maîtriser les particularités du langage Java ?
Voir aussi
Java 21 devrait inclure des collections séquencées et des modèles de chaînes de caractères, le framework des collections de Java manque d'un type de collection qui représente une séquence
JDK 20 : la prochaine version de Java embarque six fonctionnalités phares parmi lesquelles Scoped Values, une API qui permet de partager des données immuables au sein d'un même thread
Oracle publie Java 20 avec des fonctionnalités en incubation et en prévisualisation, dont les threads virtuels et la concurrence structurée, ainsi que des améliorations en matière de performances