3 votes

Quelle est la motivation des propriétés ?

Je suis un peu confus quant à la raison pour laquelle les langues en ont. Je suis un programmeur Java et je suis au début de ma carrière. Java est donc le seul langage dans lequel j'ai écrit depuis que j'ai commencé à le comprendre.

En Java, bien sûr, nous n'avons pas de propriétés et nous écrivons des méthodes getThis() et setThat(...).

Que gagnerions-nous à avoir des propriétés ?

Merci.

EDIT : autre question : quelles sont les conventions de dénomination dans les langues avec des propriétés ?

0voto

sproketboy Points 1821

Les propriétés au niveau du langage sont une mauvaise idée. Il n'y a pas de bonne convention pour elles et elles cachent des déficits de performance dans le code.

0voto

Kevin Day Points 9446

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X