[WD11 et autre] Programmation objet.

Le
Daireaux Jean-Baptiste
Bonjour,

j'ai un petit problème de conception objet.

j'ai une classe A qui contient des membres et des méthodes.

soit A:meth1, A:meth2 et A:meth3 les méthodes de A
Et A:champ1 et A:champ2 deux membres 'PROTÉGÉ' de A (correspondant a des
détails d'implémentation masqué à l'utilisateur de la classe mais utile
au développement des classes qui hériterons de A)

La classe A dispose aussi d'une méthode A:copie qui permet de faire une
copie.

Donc j'ai le code suivant :

aa est un A dynamique
ab est un A dynamique

aa=allouer un A
aa:meth1()

ab:copie(aa)



Bien tout va bien jusque la.

J'ai ensuite une classe B qui hérite de A.
Pour des raisons d'implémentation, dans la classe B je surcharge la
méthode copie venant de A

soit le code suivant :


PROCEDURE VIRTUELLE copie ( elt est un objet B dynamique )

:champ1=elt:champ1
:champ2=elt:champ2


mon problème est le message d'erreur suivant :

Erreur :Le membre 'champ1' de la classe 'A' est protégé; il n'est pas
accessible hors des méthodes de la classe 'A' ou des classes dérivées de
'A'.

Il n'accepte pas mon code !!!

Comment puis-je résoudre le problème sans rendre les champs de A 'public'

Merci.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
patrice
Le #14546811
d'apres l'aide, la lecture est autorisé et l'écriture est interdite
donc faudrait faire des fonctions SetXXX public pour chaque élément à écrire

SetChamp1(elt:champ1)
SetChamp2(elt:champ1)



"Daireaux Jean-Baptiste" dans le message de news:47a738fa$0$852$
Bonjour,

j'ai un petit problème de conception objet.

j'ai une classe A qui contient des membres et des méthodes.

soit A:meth1, A:meth2 et A:meth3 les méthodes de A
Et A:champ1 et A:champ2 deux membres 'PROTÉGÉ' de A (correspondant a des
détails d'implémentation masqué à l'utilisateur de la classe mais utile
au développement des classes qui hériterons de A)

La classe A dispose aussi d'une méthode A:copie qui permet de faire une
copie.

Donc j'ai le code suivant :

aa est un A dynamique
ab est un A dynamique

aa=allouer un A
aa:meth1()

ab:copie(aa)

...

Bien tout va bien jusque la.

J'ai ensuite une classe B qui hérite de A.
Pour des raisons d'implémentation, dans la classe B je surcharge la
méthode copie venant de A

soit le code suivant :


PROCEDURE VIRTUELLE copie ( elt est un objet B dynamique )

:champ1=elt:champ1
:champ2=elt:champ2
...

mon problème est le message d'erreur suivant :

Erreur :Le membre 'champ1' de la classe 'A' est protégé; il n'est pas
accessible hors des méthodes de la classe 'A' ou des classes dérivées de
'A'.

Il n'accepte pas mon code !!!

Comment puis-je résoudre le problème sans rendre les champs de A 'public'

Merci.


Daireaux Jean-Baptiste
Le #14546791
Ps: j'ai remis le message en ordre...

"Daireaux Jean-Baptiste" dans le message de news:47a738fa$0$852$
Bonjour,

j'ai un petit problème de conception objet.

j'ai une classe A qui contient des membres et des méthodes.

soit A:meth1, A:meth2 et A:meth3 les méthodes de A
Et A:champ1 et A:champ2 deux membres 'PROTÉGÉ' de A (correspondant a des
détails d'implémentation masqué à l'utilisateur de la classe mais utile
au développement des classes qui hériterons de A)

La classe A dispose aussi d'une méthode A:copie qui permet de faire une
copie.

Donc j'ai le code suivant :

aa est un A dynamique
ab est un A dynamique

aa=allouer un A
aa:meth1()

ab:copie(aa)

...

Bien tout va bien jusque la.

J'ai ensuite une classe B qui hérite de A.
Pour des raisons d'implémentation, dans la classe B je surcharge la
méthode copie venant de A

soit le code suivant :


PROCEDURE VIRTUELLE copie ( elt est un objet B dynamique )

:champ1=elt:champ1
:champ2=elt:champ2
...

mon problème est le message d'erreur suivant :

Erreur :Le membre 'champ1' de la classe 'A' est protégé; il n'est pas
accessible hors des méthodes de la classe 'A' ou des classes dérivées de
'A'.

Il n'accepte pas mon code !!!

Comment puis-je résoudre le problème sans rendre les champs de A 'public'

Merci.








patrice a écrit :
> d'apres l'aide, la lecture est autorisé et l'écriture est interdite
> donc faudrait faire des fonctions SetXXX public pour chaque élément à
> écrire
>
> SetChamp1(elt:champ1)
> SetChamp2(elt:champ1)
>
>
>

Bonjour,

Je n'écrit pas dans elt:champ, Je le lis.
Et comme vous l'indiquez, je devrai pouvoir le faire non ?

de plus la méthode copie de la classe A écrite comme ceci :

PROCEDURE VIRTUELLE copie ( elt est un objet A dynamique )

:champ1=elt:champ1
:champ2=elt:champ2
...

fonctionne parfaitement.

Je site aussi la documentation :

<Accès> : Optionnel

Permet de restreindre l'accès à ce membre de la classe. 3 niveaux sont
disponibles :
- Privé : accès autorisé depuis un code de la classe
- Protégé : accès autorisé depuis un code de la classe ou un code d'une
classe dérivée (et "héritée")
- Public (par défaut) : accès autorisé depuis n'importe quel code de la
classe ou du projet.

--fin citation

merci quand même.
J.B.D.
Romain PETIT
Le #14546761
Il se trouve que patrice a formulé :
d'apres l'aide, la lecture est autorisé et l'écriture est interdite



Non, ses membres sont "protégés" (accès autorisé depuis un code de la
classe ou un code d'une classe dérivée)

Ne type pas les arguments de ta méthode dérivée, ça devrait marcher :

// méthode de la classe B
PROCEDURE VIRTUELLE copie ( elt)
:champ1=elt:champ1
:champ2=elt:champ2
...


A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
patrice
Le #14546751
"Romain PETIT" news:
Il se trouve que patrice a formulé :
> d'apres l'aide, la lecture est autorisé et l'écriture est interdite

Non, ses membres sont "protégés" (accès autorisé depuis un code de la
classe ou un code d'une classe dérivée)



autant pour moi, j'ai lu l'aide de "proctected CONSTANT" qq ligne trop bas
donc le code de JB devrait compiler
que dit le ST ?
Daireaux Jean-Baptiste
Le #14546721
Romain PETIT a écrit :
Il se trouve que patrice a formulé :
d'apres l'aide, la lecture est autorisé et l'écriture est interdite



Non, ses membres sont "protégés" (accès autorisé depuis un code de la
classe ou un code d'une classe dérivée)

Ne type pas les arguments de ta méthode dérivée, ça devrait marcher :

// méthode de la classe B
PROCEDURE VIRTUELLE copie ( elt)
:champ1=elt:champ1
:champ2=elt:champ2
...


A+





Effectivement cela débloque mon problème.

Quelqu'un aurai la possibilité de leur signaler le problème à PC-SOFT.
Car j'ai pas le temps de me lancer dans un mini projet...


Merci beaucoup pour le coup de main.
J.B.D.
Publicité
Poster une réponse
Anonyme