Membre du Club
Merci à tous,
mention spéciale à Mous qui m'a donné la solution : pour ma problématique, un simple affectation des membres dans caddie et le tour est joué : j'avais zappé ça !
Désolé j'ai pas pensé à vous afficher mon modèle qui est très simple car c'est un projet test pour manipuler la POO. Voir ci-dessous.
Voroltinquo, merci pour les notions d'héritage, je suis pas encore au clair là-dessus, et oui on n’accède jamais aux membres des classes car normalement ils sont en privés.
Par contre quand tu dis que "3-Il est préférable de passer les paramètre d'une instance par le constructeur" ça se fait par défaut via les propriétés ?
Auriez vous des exemples de prog en objets ? Car windev est un peu à la ramasse avec leurs exemples la plupart sont en procédurale.
Encore merci pour votre temps et patience
Membre habitué
Je t'en prie, dans d'autres langages de programmation (mention spécial au C# Entity Framework et ado) la modélisation de ton analyse est gérée automatiquement, mais bon sache que lorsque dans ton analyse tu tombes sur des relations avec foreign key, la modélisation en POO c'est de déclaré un objet de cette classe dans la classe correspondante, et dans le cas d'une relation 1-n (Ligne produit par exemple) c'est un tableau de LigneProduit que tu as dans commandes, et dans LigneProduit tu peux déclaré un objet Commande avec une relation faible (<faible>) sinon tu tombes dans une relation cyclique, c'est un peu ambiguë je te l'accorde mais ça vient seul avec l'expérience
Hésite jamais si tu as des questions.
Expert confirmé
Dans un premier temps, tu ne nous fournit pas un diagramme de classe mais un MLD.
En ce qui concerne le propriété, il faut les programmer.
Un petit exemple, la classe CVecteur.
1 2 3 4 5 6 7 8 9 10 11 12 13
|
CVecteur est une Classe
PRIVÉ
m_xX est un numérique = 0 //Abscisse
m_xY est un numérique = 0 //Ordonnée
m_xRho est un numérique = 0 //Module
m_xThéta est un numérique = 0 //Phase
FIN
//Utilisé pour différencier les 2 types de coordonnées
ETypeCoord est une Enumération
Rectangulaire
Polaire
FIN |
Comme on ne doit pas accéder directement aux membres ils sont déclarés privés, il faut créer des propriété.
Le fonction trigonométrique utilisées sont des surchargées afin de travailler normalement (i.e. en Rad). PI a été définit dans cette collection de procédure (ou le composant qui en découle)
Propriétés:
Getter :
1 2 3 4
|
PROCÉDURE PUBLIQUE p_xX() : numérique
RENVOYER m_xX |
Setter :
1 2 3 4 5 6 7
|
PROCÉDURE PUBLIQUE p_xX(xValeur est un numérique)
:m_xX=xValeur
//Le fait de changer l'abscisse modifie le modue et la phase
:m_xRho=:CalculerModule(xValeur,:m_xY)
:m_xThéta=:CalculerPhase(xValeur,:m_xY) |
etc...
1 2 3 4
|
FONCTION PRIVÉE CalculerModule(xAbs est numérique,xOrd est numérique):numérique
RENVOYER Racine((Puissance(xAbs,2)+Puissance(xOrd,2)),2) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
FONCTION PRIVÉE CalculerPhase(xAbs est un numérique,xOrd est un numérique):numérique
SELON xAbs
CAS 0
SELON xOrd
CAS >0
RENVOYER PI/2
CAS 0
RENVOYER 0
CAS <0
RENVOYER 3*PI/2
FIN
CAS >0
SELON xOrd
CAS >=0
RENVOYER ArcTang(xOrd/xAbs)
CAS <0
RENVOYER ArcTang(xOrd/xAbs)+2*PI
FIN
CAS <0
RENVOYER ArcTang(xOrd/xAbs)+PI
FIN |
Il nous manque le constructeur :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
PROCÉDURE Constructeur(xParam1 est un numérique=0,xParam2 est numérique=0,eType est ETypeCoord=Rectangulaire)
SELON eType
CAS Rectangulaire
:m_xX=xParam1
:m_xY=xParam2
:m_xRho=:CalculerModule(xParam1,xParam2)
:m_xThéta=:CalculerPhase(xParam1,xParam2)
CAS Polaire
:m_xX=xParam1*Cosinus(xParam2)
:m_xY=xParam1*Sinus(xParam2)
:m_xRho=xParam1
:m_xThéta=xParam2
FIN |
On peut faire des opération sur les vecteur entre autre l'addition.
1 2 3 4 5 6 7 8
|
FONCTION Ajouter(clVecteur2 est CVecteur):CVecteur
clVectRes est CVecteur
clVectRes:p_xX=:p_xX+clVecteur2:p_xX
clVectRes:p_xX=:p_xY+clVecteur2:p_xY
RENVOYER clVectRes |
Utilisation :
1 2 3 4 5 6 7 8 9 10 11 12
|
clV1 est CVecteur
clV2 est CVecteur
clVRes est CVecteur
clV1=allouer un CVecteur(50,PI/4,CVecteur.Polaire) //Utilisation du constructeur
TracerVecteur(clV1,BleuFoncé)
clV2:p_xRho=107
clV2:p_xThéta=0.79
clVRes=clV1:Ajouter(clV2)
TracerVecteur(clVRes,VertFoncé)
dLigne(IMG_Vecteur,clV1:p_xX,clV1:p_xY,clVRes:p_xX,clVRes:p_xY,RougeFoncé) |
Avec
1 2
| PROCÉDURE TracerVecteur(clVecteur est CVecteur,nCouleur est entier)
dLigne(IMG_Vecteur,0,0,clVecteur:p_xX,clVecteur:p_xY,nCouleur) |
Il y a peut-être plus simple, mais ça tourne.
Quand tout a échoué utilisez l'option RTFM
Membre habitué
Membre actif
Membre habitué
Envoyé par
padbrain
Raison de plus pour ne pas les exposer en mettant leur visibilité en public.
En public les membres sont accessibles pour les liaisons et les affectations, pas besoin de getter/setter qui n'ont aucune règles métiers dedans frérot
Membre actif
Chacun fait bien comme il veut
Membre habitué
+ Répondre à la discussion
Cette discussion est résolue.
Discussions similaires
-
Réponses: 6
Dernier message: 23/11/2006, 16h10
-
Réponses: 4
Dernier message: 09/05/2005, 09h30
-
Réponses: 6
Dernier message: 21/03/2005, 13h22
-
Réponses: 3
Dernier message: 28/12/2004, 13h58
-
Réponses: 2
Dernier message: 29/10/2003, 11h05
Partager