OVH Cloud OVH Cloud

Classe et Attribut

9 réponses
Avatar
laurent sturm
Bonjour,

Une question me trotte.

Dans plusieurs documentations sur java, il est conseillé
de déclarer les attributs d'une classe en private, et d'accéder
à ceux-ci en utilisant des méthodes get() et set().

Ce qui veut dire que pour 10 champs déclarés en private dans une classe
il faudra coder 20 méthodes d'accés get() et set() (soit à peu prés 40
lignes),
si on veut que ceux-ci soient modifiable et éditable par classe.

Si on considére d'aprés la méthode COCOMO (Constructive Cost Model),
que le coût d'un logiciel qui ce calcule en partie par rapport aux nombres
de lignes codées livrables, il semble que cette technique augmente les coûts
de production.

Ne vaut t'il pas mieux déclarer les attributs en public et de ce fait
diminuer les coût de production ?

@+


--
______________________
Visitez mon site
http://laurent.sturm.free.fr
______________________

9 réponses

Avatar
Miguel Moquillon
laurent sturm wrote:
Bonjour,

Une question me trotte.

Dans plusieurs documentations sur java, il est conseillé
de déclarer les attributs d'une classe en private, et d'accéder
à ceux-ci en utilisant des méthodes get() et set().



Je ne sais pas quelles documentation tu as lu, même c'est n'importe
quoi.
D'abord, un petit rappel de l'approche objet :
- un objet est défini par des propriétés.
- Ces propriétés peuvent être classées en deux catégories :
-> les attributs (ce qui qualifie l'objet),
-> les opérations (ce que l'objet propose comme services, son
comportement)
Les attributs et les opérations font parties de l'interface de l'objet,
donc doivent être publics.
Par contre, l'implémentation des attributs et des opérations doivent
être encapsulées (que les attributs soient représentées par un ch amps
mémoire ou par un calcul importe peut l'utilisateur). Ce qui fait que l a
syntaxe d'un attribut doit être cohérente quelque soit son
implémentation.
De manière plus générale, la syntaxe des propriétés d'un objet, quelque
soit leur catégorie, doivent être cohérentes entre elles.

Ramenons ceci à Java (et aussi à C++) :
- Pour garantir une cohérence des attributs quelques soient leur
implémentation (mémoire ou calcul), et de façon plus générale, pour
garantir la cohérence des propriétés entre elles, les attributs et les
opérations sont représentées syntaxiquement en Java par des fonctio ns.
Ainsi, un changement de représentation d'un attribut n'impactera pas le
code appelant.
- La syntaxe particulière de Java concernant les attributs est :
<type retours> get<nom de l'attribut>()

En général, dans une bonne conception objet, un attribut doit être en
lecture seule. Sa modification ne peut intervenir que par un effet de
bord d'une opération, que cette dernière soit simple (juste une
affectation) ou compliquée. C'est la raison pour laquelle, bien que la
syntaxe courante en Java pour modifier un attribut est un "setteur", il
est aberrant d'utiliser la syntaxe des "setteur" dans ces opérations.
Exceptée faite évidemment de drapeaux (qui ne sont pas des attributs
mais une catégorie spéciale de propriétés).

En ccl :
Définis tes attributs comme des "getteurs".
Ses attributs ne peuvent être modifiées que par des opérations.
Justifie bien la raison des effets de bord de ces attributs.
Et n'oublie pas l'adage :
"Ne demande pas à un objet des infos pour travailler sur celles-ci, mai s
demande lui de faire la tâche avec les infos qu'il dispose"

Miguel

Avatar
JScoobyCed
laurent sturm wrote:

Ce qui veut dire que pour 10 champs déclarés en private dans une classe
il faudra coder 20 méthodes d'accés get() et set() (soit à peu prés 40
lignes),
si on veut que ceux-ci soient modifiable et éditable par classe.


Tout a fait.


Si on considére d'aprés la méthode COCOMO (Constructive Cost Model),
que le coût d'un logiciel qui ce calcule en partie par rapport aux nombres
de lignes codées livrables, il semble que cette technique augmente les coûts
de production.


Euh, je ne suis pas un pro de COCOMO... Cette methode est-elle utilisee
pour aider a calculer le prix que l'on vendra le logiciel ? Dans ce cas
augmentons les lignes :)
Plus serieusement, en effet, d'apres cette methode, le cout va
augmenter. Mais est-ce que cette methode prend en compte la difference
entre 200 lignes de codes get() et set(), et 200 lignes de code d'un
algorithme d'encryption SSL ? ( ce n'est qu'un exemple )


Ne vaut t'il pas mieux déclarer les attributs en public et de ce fait
diminuer les coût de production ?



Du point de vu Business Logic, oui. Du point de vue System et
Maintenance, et tout plein d'avantage qu'offre Java: non.


--
JScoobyCed
What about a JScooby snack Shaggy ? ... Shaggy ?!

Avatar
julien
salut,
je ne connais pas la méthode COCOMO, mais dire que le cout de dévelopement
d'un logiciel ce cacul en partie par raport au ligne de code me semble un
peu exagéré
Enfin tout dépend de ce que tu appel un logiciel, si il ne s'agit que d'une
suite d'instruction fournit au processeur sans autre but que de le faire
travailler... la je suis d'accord ;)
Blague mise à part, ien evidement il y aura une difference de coup entre un
programme de 10 000 ligne et un de 500 000,
mais de nombreuse ligne permette aussi de debugguer plus rapidement, de
faire evoluer le logiciel sans avoir à le réécrire dans sa totalité (c'est
le cas des accesseur),
bref c'est ligne la diminue beaucoup plus le cout du logiciel qu'elle ne
l'augmente, d'autant plus qu'il est dificil de proquer un un bug avec un
accesseur, et que ca ne prend quasiment pas de temp a écrire, voir pas du
tout car la plupart des IDE les ecrivent automatiquement.
Avatar
Rémi COCULA
La question du côut de développement calculé en fonction du nombre de ligne
de codes ne tiens absolument pas dans le cas que tu cite dans la mesure ou
un IDE digne de ce nom (Eclipse ppur ne citer que celui que je connais) peut
générer en un simple click de souris automatiquement tous les getters et
setters de tes attributs.

"laurent sturm" a écrit dans le message de news:
4153e7aa$0$751$
Bonjour,

Une question me trotte.

Dans plusieurs documentations sur java, il est conseillé
de déclarer les attributs d'une classe en private, et d'accéder
à ceux-ci en utilisant des méthodes get() et set().

Ce qui veut dire que pour 10 champs déclarés en private dans une classe
il faudra coder 20 méthodes d'accés get() et set() (soit à peu prés 40
lignes),
si on veut que ceux-ci soient modifiable et éditable par classe.

Si on considére d'aprés la méthode COCOMO (Constructive Cost Model),
que le coût d'un logiciel qui ce calcule en partie par rapport aux nombres
de lignes codées livrables, il semble que cette technique augmente les
coûts

de production.

Ne vaut t'il pas mieux déclarer les attributs en public et de ce fait
diminuer les coût de production ?

@+


--
______________________
Visitez mon site
http://laurent.sturm.free.fr
______________________




Avatar
Herve Alavoine
Pour repartir vers COCOMO, je pense que le cout des fonctions get() et
set() est null car tout bon editeur (Netbeans le fait) sait générer sans
problèmes les fonctions d'après les attributs que tu a définie. Donc tu
n'a que le coût associé aux attributs.
Cordialement.

Le Wed,
06 Oct 2004 15:10:18 +0000, mounirlyon a écrit :

une solution c'est que ta fonction get ou set a en paramètre le nom
d'attribut que tu tu désire modifier ou afficher

du coup t'auras qu'une seul fonction

par rapport a la solution de rendre les attribut publique
l'inconvénient c'est que si tu modifie tes variable dans la classe il faudra
que tu change dans toutes les lignes ou tu faits appel a tes fonction

mais si tu utilise la première solution tu modifiera que la méthode

mais en général utiliser des paramètre en publique ça peut arriver mais il
faut le justifier
avec la première solution que j'ai donner je suppose que t'as plus de
justification

Cordialement

"laurent sturm" a écrit dans le message de
news:4153e7aa$0$751$
Bonjour,

Une question me trotte.

Dans plusieurs documentations sur java, il est conseillé
de déclarer les attributs d'une classe en private, et d'accéder
à ceux-ci en utilisant des méthodes get() et set().

Ce qui veut dire que pour 10 champs déclarés en private dans une classe
il faudra coder 20 méthodes d'accés get() et set() (soit à peu prés 40
lignes),
si on veut que ceux-ci soient modifiable et éditable par classe.

Si on considére d'aprés la méthode COCOMO (Constructive Cost Model),
que le coût d'un logiciel qui ce calcule en partie par rapport aux nombres
de lignes codées livrables, il semble que cette technique augmente les
coûts

de production.

Ne vaut t'il pas mieux déclarer les attributs en public et de ce fait
diminuer les coût de production ?

@+


--
______________________
Visitez mon site
http://laurent.sturm.free.fr
______________________





---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.772 / Virus Database: 519 - Release Date: 01/10/2004



Avatar
Valdo Tschantre
Dans plusieurs documentations sur java, il est conseillé
de déclarer les attributs d'une classe en private, et d'accéder
à ceux-ci en utilisant des méthodes get() et set().


Une classe tableau a un attribut taille. Cette attribut est-il
représenté en interne par un champs ou par une opération ? L'acces à
cette attribut ce fait-il par référence ou par copie de sa valeur ?...

Les réponces à ces questions sont des choix d'implémentation. Or, dans
le modèle objet, les interfaces DOIVENT être indépendantes de leurs
implémentations.

De plus, en java, si l'appel d'une méthode (obj.meth();) peut tout aussi
bien déclancher des opérations que des acces à des champs pour le retour
de leurs valeurs (copié ou pas), l'acces à un champs (obj,champ;) ne
peut pas d'éclancher en soit une opération et impose en plus un acces
par référence sur ce champs en ecriture et en lecture.

Ce faisant, en java, pour unifier les modalités d'acces au attributs,
seul l'appel de méthodes, est valable.


Valdo.


--


Avatar
mounirlyon
une solution c'est que ta fonction get ou set a en paramètre le nom
d'attribut que tu tu désire modifier ou afficher

du coup t'auras qu'une seul fonction

par rapport a la solution de rendre les attribut publique
l'inconvénient c'est que si tu modifie tes variable dans la classe il faudra
que tu change dans toutes les lignes ou tu faits appel a tes fonction

mais si tu utilise la première solution tu modifiera que la méthode

mais en général utiliser des paramètre en publique ça peut arriver mais il
faut le justifier
avec la première solution que j'ai donner je suppose que t'as plus de
justification

Cordialement

"laurent sturm" a écrit dans le message de
news:4153e7aa$0$751$
Bonjour,

Une question me trotte.

Dans plusieurs documentations sur java, il est conseillé
de déclarer les attributs d'une classe en private, et d'accéder
à ceux-ci en utilisant des méthodes get() et set().

Ce qui veut dire que pour 10 champs déclarés en private dans une classe
il faudra coder 20 méthodes d'accés get() et set() (soit à peu prés 40
lignes),
si on veut que ceux-ci soient modifiable et éditable par classe.

Si on considére d'aprés la méthode COCOMO (Constructive Cost Model),
que le coût d'un logiciel qui ce calcule en partie par rapport aux nombres
de lignes codées livrables, il semble que cette technique augmente les
coûts

de production.

Ne vaut t'il pas mieux déclarer les attributs en public et de ce fait
diminuer les coût de production ?

@+


--
______________________
Visitez mon site
http://laurent.sturm.free.fr
______________________





---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.772 / Virus Database: 519 - Release Date: 01/10/2004

Avatar
Valdo Tschantre
Si on considére d'aprés la méthode COCOMO (Constructive Cost Model),
que le coût d'un logiciel qui ce calcule en partie par rapport aux nombres
de lignes codées livrables, il semble que cette technique augmente les coûts
de production.


Si cette méthode dit que le coût d'un logiciel *est calculer en partie*
par rapport aux nombres de lignes codées, la question est de savoir ce
qui coûte le plus cher : le nombre de ligne codée ou le fait de rogner
sur le modèle Objet ?

A mon sens, plus le système est complexe, plus il faut privilégier le
modèle... De plus, comme le dit Rémi, la génération des méthodes get et
set est souvent automatisée dans les IDEs, du coup, elles ne sont plus
/codées/ à proprement parlé.


Valdo.


--


Avatar
Wismerhill
laurent sturm ecrivit le 24/09/2004 11:23 :
Bonjour,

Une question me trotte.

Dans plusieurs documentations sur java, il est conseillé
de déclarer les attributs d'une classe en private, et d'accéder
à ceux-ci en utilisant des méthodes get() et set().

Ce qui veut dire que pour 10 champs déclarés en private dans une classe
il faudra coder 20 méthodes d'accés get() et set() (soit à peu prés 40
lignes),
si on veut que ceux-ci soient modifiable et éditable par classe.

Si on considére d'aprés la méthode COCOMO (Constructive Cost Model),
que le coût d'un logiciel qui ce calcule en partie par rapport aux nombres
de lignes codées livrables, il semble que cette technique augmente les coûts
de production.


Non, car elle diminue sensiblement le coût de maintenance.

Ne vaut t'il pas mieux déclarer les attributs en public et de ce fait
diminuer les coût de production ?


Il faudrait commencer par comprendre pourquoi on conseille d'utiliser
des accesseurs.