Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Dépendance de classes

4 réponses
Avatar
Miguel
Bonjour,
ma question n'a rien à voir directement avec le C++, mais plutôt avec la
programmation objet, je pense cependant ne pas être trop HS et que je
trouverai mes réponses ici.

Voila, je compte faire un petit jeu (un Puissance4-like) en C++.
Je compte utiliser 2 classes principales:
- une classe Game qui contient tout ce qui est lié au jeu pur et dur
(matrice, fonction de vérification pour le gagnant...)
- une classe d'affichage qui serait ds un premier temps juste en console
pour le débogage et les tests, et dans un second temps plus élaboré, avec
une vraie interface graphique.

Le problème, c'est que j'ai du mal à établir la relation entre ces 2
classes, je ne sais pas laquelle utilise l'autre (en fait, j'ai l'impression
que ca dépend des fois), et donc par conséquent je ne sais pas si je dois
mettre une classe affichage comme membre de Game ou l'inverse.
J'aimerais donc que vous me donniez votre avis sur la façon de voir les
choses, et savoir d'il y a une pratique courante ou si la dépendance dépend
des cas.
Merci d'avance
Miguel

4 réponses

Avatar
Loïc Joly
Miguel wrote:
Bonjour,
ma question n'a rien à voir directement avec le C++, mais plutôt avec la
programmation objet, je pense cependant ne pas être trop HS et que je
trouverai mes réponses ici.


As-tu essayé dans fr.comp.objet ?

--
Loïc

Avatar
drkm
"Miguel" writes:

Je compte utiliser 2 classes principales:
- une classe Game
- une classe d'affichage


C'est un sujet tout désigné pour f.c.objet (qui y a d'ailleurs été
traité plus d'une fois).

--drkm

Avatar
Alexandre
bonjour,

Bonjour,
ma question n'a rien à voir directement avec le C++, mais plutôt avec la
programmation objet, je pense cependant ne pas être trop HS et que je
trouverai mes réponses ici.


un peu HS quand même, mais bon, moi je ne lis jamais fr.(...).objet alors
;-)


Voila, je compte faire un petit jeu (un Puissance4-like) en C++.
Je compte utiliser 2 classes principales:
- une classe Game qui contient tout ce qui est lié au jeu pur et dur
(matrice, fonction de vérification pour le gagnant...)
- une classe d'affichage qui serait ds un premier temps juste en console
pour le débogage et les tests, et dans un second temps plus élaboré, avec
une vraie interface graphique.


je te conseille une classe abstraite pour l'affichage (ie une interface) ce
qui t'éviterait des grosses modifs dans l'autre classe pour passer d'une
console à une interface graph.


Le problème, c'est que j'ai du mal à établir la relation entre ces 2
classes, je ne sais pas laquelle utilise l'autre (en fait, j'ai
l'impression que ca dépend des fois), et donc par conséquent je ne sais
pas si je dois mettre une classe affichage comme membre de Game ou
l'inverse.
J'aimerais donc que vous me donniez votre avis sur la façon de voir les
choses, et savoir d'il y a une pratique courante ou si la dépendance
dépend des cas.


dans ce cas : la classe Game utilise la classe Affiche. Surtout si Affiche
est une interface (donc en fait Game utilise un pointeur sur Affiche). C'est
déjà une question de logique : passe de l'abstrait au concret, pas
l'inverse. D'abord parce que ta classe Affiche pourrait être utilisée par
d'autres objets, ensuite parce que c'est mieux ;-)

par ex :
class Game
{
Affiche* pEcran;
void AffichePion(){pEcran->AffichePion();}
};

struct Affiche
{
virtual void AffichePion()=0;
};

class AfficheVCL:public Affiche // exemple en utilisant la VCL sous C++
builder
{
TCanvas *Canvas;
public:
AfficheVCL(TCanvas* C):Canvas(C){}
void AffichePion(){Canvas->Ellipse(10,10,25,30);}
};

normalement, dans Game, tu n'utilises que les méthodes d'Affiche, et donc à
part la ligne où tu fais l'initialisation de ton "écran", le reste du code
ne dépend pas de ton interface (et donc de ta plate-forme entre autres).

Avatar
kanze
Alexandre wrote:

ma question n'a rien à voir directement avec le C++, mais
plutôt avec la programmation objet, je pense cependant ne
pas être trop HS et que je trouverai mes réponses ici.


un peu HS quand même, mais bon, moi je ne lis jamais
fr.(...).objet alors ;-)

Voila, je compte faire un petit jeu (un Puissance4-like) en
C++. Je compte utiliser 2 classes principales:
- une classe Game qui contient tout ce qui est lié au jeu
pur et dur (matrice, fonction de vérification pour le
gagnant...)
- une classe d'affichage qui serait ds un premier temps
juste en console pour le débogage et les tests, et dans un
second temps plus élaboré, avec une vraie interface
graphique.


je te conseille une classe abstraite pour l'affichage (ie une
interface) ce qui t'éviterait des grosses modifs dans l'autre
classe pour passer d'une console à une interface graph.


En fait, il se pose une question classique, à laquelle la
réponse classique est MVC. En gros, il définit un ensemble
model-view dans lequel le modèle représente la position dans le
jeu. Ensuite, il se sert du modèle listener pour que le modèle
soit informé des changements dans le jeu.

Le problème, c'est que j'ai du mal à établir la relation
entre ces 2 classes, je ne sais pas laquelle utilise l'autre
(en fait, j'ai l'impression que ca dépend des fois), et donc
par conséquent je ne sais pas si je dois mettre une classe
affichage comme membre de Game ou l'inverse.
J'aimerais donc que vous me donniez votre avis sur la façon
de voir les choses, et savoir d'il y a une pratique courante
ou si la dépendance dépend des cas.


dans ce cas : la classe Game utilise la classe Affiche.


Je ne crois pas. La classe Game supporte des listeners. Le
modèle dans l'affichage (qui aurait besion de bien plus qu'une
seule classe) s'inscrit comme listener. La classe Game ne
connaît rien de l'affichage ; même pas qu'on l'affiche.

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34