PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → POO - Héritage sur 3 niveau qui n'abouti pas
POO - Héritage sur 3 niveau qui n'abouti pas
Iniciado por Gurdarr, 18,mar. 2019 18:22 - 3 respuestas
Miembro registrado
237 mensajes
Publicado el 18,marzo 2019 - 18:22
Bonjour,

J'ai 3 classes qui hérite l'une de l'autre (jusqu'à la tous va bien ) que l'on nommera GrandMere / Mere / fille

J’instancie volontairement l'objet Fille qui ne surcharge que deux méthodes de la classe Mere qui elle même surcharge le traitement principale de la classe GRandMère

Ce qui donne le shéma suivant
GRandMère est un classe
Traitementprincipal() est une propriété
{
:TraitementSecondaire()
}

TraitementSecondaire() est une propriété protégé

Mere est une classe
hérite de GRandMère
TraitementSecondaire() est une propriété 
{
//pour faire simple
ancetre:TraitementSecondaire()
:TraitementSuplémentaire()
}
TraitementSuplémentaire() est une propriété protégé

Fille est une classe
hérite de Mère
TraitementSuplémentaire() est une propriété protégé 



Du coup mon erreur est quand j'exécute le code suivant c'est TraitementSuplémentaire() de la Mére qui est joué ;(
MonTest est un Fille
MonTest:Traitementprincipal() //éxécute Mere:TraitementSuplémentaire() au lieu de Fille:TraitementSuplémentaire()

//Idem si je fais
MonTest est un GRandMère dynamique
MonTest = new Fille
MonTest:Traitementprincipal() //éxécute Mere:TraitementSuplémentaire() au lieu de Fille:TraitementSuplémentaire()


En fait je sais pas si c'est normal mais j'aimerai bien comprendre pourquoi si vous vous savez.

Amicalement
Miembro registrado
1.640 mensajes
Publicado el 18,marzo 2019 - 18:47
Hello,

Je viens d'essayer et je constate pas le défaut.
Je suis en windev23 (dernière version)

















OnClick :



Miembro registrado
237 mensajes
Publicado el 20,marzo 2019 - 11:22
Merci François C.

Mais je ne surcharge pas traitementPrincipal dans cFille

J'ai deux propriétés traitementPrincipal et traitementSecondaire seul traitementSecondaire est surchargée

Cfille.traitementPrincipal() passe par cMere.traitementPrincipal ce qui est parfaitement logique car je n'ai pas changer cette partie

Cependant cMere.traitementPrincipal exécute la propriété traitementSecondaire qui elle est surchargée

Hors je ne redescend pas dans cfille.traitementSecondaire() mais je reste bien dans cMere.traitementSecondaire()


JE devrais avoir

Cfille.traitementPrincipal() ==> cMere.traitementPrincipal ==> cfille.traitementSecondaire()
et j'ai
Cfille.traitementPrincipal() ==> cMere.traitementPrincipal ==> cMere.traitementSecondaire()


Ma surcharge de traitementSecondaire n'est plus pris en compte


Je pense que je peux solutionner mon problème en faisant une surcharge de traitementPrincipal dans cfille mais sa va doubler mon code pour rien...
Publicado el 20,marzo 2019 - 15:47
De mon expérience de POO en Windev, une bonne recompilation du projet
règle parfois les comportements bizarres ;)

eric l.

> Le 20/03/2019 à 10:22, Gurdarr a écrit :
Merci  François C.

Mais je ne surcharge pas traitementPrincipal dans cFille
J'ai deux propriétés traitementPrincipal  et traitementSecondaire  seul
traitementSecondaire  est surchargée

Cfille.traitementPrincipal() passe par cMere.traitementPrincipal  ce qui
est parfaitement logique car je n'ai pas changer cette partie
Cependant cMere.traitementPrincipal exécute la propriété
traitementSecondaire  qui elle est surchargée

Hors je ne redescend pas dans cfille.traitementSecondaire() mais je
reste bien dans cMere.traitementSecondaire()


JE devrais avoir

Cfille.traitementPrincipal() ==> cMere.traitementPrincipal ==>
cfille.traitementSecondaire()
et j'ai Cfille.traitementPrincipal() ==> cMere.traitementPrincipal ==>
cMere.traitementSecondaire()


Ma surcharge de traitementSecondaire n'est plus pris en compte

Je pense que je peux solutionner mon problème en faisant  une surcharge
de traitementPrincipal dans cfille mais sa va doubler mon code pour rien...