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 ?

1voto

tvanfosson Points 268301

J'ai eu du mal avec ça au début aussi, mais j'ai fini par vraiment les apprécier. À mon avis, les propriétés me permettent d'interagir avec les données exposées de manière naturelle sans perdre l'encapsulation fournie par les méthodes getter/setter. En d'autres termes, je peux traiter mes propriétés comme des champs, mais sans vraiment exposer les champs réels si je ne le souhaite pas. Avec les propriétés automatiques de C# 3.0, c'est encore mieux, car pour la plupart des champs - où je veux permettre au consommateur de lire/écrire les données - j'ai encore moins à écrire :

public string Prop { get; set; }

Dans le cas où je veux une visibilité partielle, je peux facilement restreindre l'accesseur que je veux.

public string Prop { get; private set; }

Tout cela peut être fait avec les méthodes getter/setter, mais le verbiage est beaucoup plus élevé et l'utilisation est beaucoup moins naturelle.

1voto

DefLog Points 846

Une règle générale de la programmation orientée objet est de ne jamais modifier une interface existante. Cela garantit que même si le contenu interne peut changer pour les objets appelant l'objet n'ont pas besoin de le savoir.

Dans d'autres langues, les propriétés sont des méthodes qui se font passer pour une caractéristique spécifique de la langue. En Java, une propriété n'est distinguée que par convention. Bien qu'en général cela fonctionne, il y a des cas où cela vous limite. Par exemple, il arrive que vous souhaitiez utiliser hasSomething au lieu de isSomething ou getSomething.

Cela permet donc la flexibilité des noms, tandis que les outils et autres codes qui en dépendent peuvent toujours faire la différence.

De plus, le code peut être plus compact et le get et le set sont regroupés par conception.

1voto

Bogdan Points 61

En Construction de logiciels orientés objet 2 Bertrand Meyer appelle cela le "principe d'accès uniforme" et l'idée générale est que lorsqu'une propriété passe d'une propriété simple (c'est-à-dire un simple entier) à une propriété dérivée (un appel de fonction), les personnes qui l'utilisent ne devraient pas avoir à le savoir.

Vous ne voulez pas que tous ceux qui utilisent votre code aient à changer de

int x = foo.y ;

à

int x = foo.y() ;

Cela brise l'encapsulation parce que vous n'avez pas changé votre "interface", juste votre "implémentation".

0voto

Chris J Points 955

Vous pouvez également créer des champs dérivés et des champs en lecture seule/écriture seule. La plupart des propriétés que j'ai vues dans les langues dans lesquelles j'ai travaillé vous permettent non seulement d'attribuer des champs simples, mais aussi des fonctions complètes aux propriétés.

0voto

John Baber-Lucero Points 2223

Les propriétés fournissent une méthode simple pour abstraire les détails derrière un ensemble de logique dans un objet jusqu'à une valeur unique pour le monde extérieur.

Bien que votre propriété ne soit au départ qu'une valeur, cette abstraction découple l'interface de sorte que les détails peuvent être modifiés ultérieurement avec un impact minimal.

En règle générale, l'abstraction et le couplage lâche sont de bonnes choses. Les propriétés sont un modèle qui permet de réaliser les deux.

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