Tout est dans les fixations
Il fut un temps où je considérais que les propriétés n'étaient que du sucre syntaxique (c'est-à-dire qu'elles aidaient le développeur en lui permettant de taper un peu moins). En développant de plus en plus d'interfaces graphiques et en commençant à utiliser des cadres de liaison (JGoodies, JSR295), j'ai découvert que les propriétés au niveau du langage sont bien plus que du sucre syntaxique.
Dans un scénario de liaison, vous définissez essentiellement des règles qui disent "la propriété X de l'objet A doit toujours être égale à la propriété Y de l'objet B". L'abréviation est : A.x <-> B.y
Maintenant, imaginez comment vous pourriez écrire une bibliothèque de liaisons en Java. À l'heure actuelle, il est absolument impossible de faire référence à "x" ou "y" directement en tant que primitives du langage. Vous pouvez uniquement vous y référer en tant que chaînes de caractères (et y accéder par réflexion). En substance, A. "x" <-> B. "y"
Cela cause d'énormes, énormes problèmes quand on veut refactoriser le code.
Il existe d'autres considérations, notamment la mise en œuvre correcte des notifications de changement de propriété. Si vous regardez mon code, chaque setter béni nécessite un minimum de 3 lignes pour faire quelque chose qui est incroyablement simple. De plus, l'une de ces 3 lignes comprend encore une autre chaîne :
public void setFoo(Foo foo){
Foo old = getFoo();
this.foo = foo;
changeSupport.firePropertyChange("foo", old, foo);
}
toutes ces cordes flottant autour est un cauchemar complet.
Maintenant, imaginez qu'une propriété soit un citoyen de première classe dans la langue. Cela commence à fournir des possibilités presque infinies (par exemple, imaginez enregistrer un écouteur avec une propriété directement au lieu de devoir vous embêter avec PropertyChangeSupport et ses 3 méthodes mystérieuses qui doivent être ajoutées à chaque classe). Imaginez pouvoir passer la propriété elle-même (pas la valeur de la propriété, mais l'objet Property) dans un cadre de liaison.
Pour les développeurs web, imaginez un framework web capable de construire ses propres valeurs d'identification de formulaire à partir des noms des propriétés elles-mêmes (quelque chose comme registerFormProperties(myObject.firstname, myObject.lastname, someOtherObject.amount) pour permettre la population aller-retour des valeurs des propriétés de l'objet lorsque le formulaire est soumis au serveur. Actuellement, pour faire cela, il faut passer des chaînes de caractères, et le refactoring devient un casse-tête (le refactoring devient même carrément effrayant une fois que l'on s'appuie sur les chaînes de caractères et la réflexion pour câbler les choses).
Quoi qu'il en soit, pour ceux d'entre nous qui ont affaire à des mises à jour de données dynamiques via des liaisons, les propriétés sont une fonctionnalité indispensable du langage - bien plus qu'un simple sucre syntaxique.