Go Down

Topic: structure ou class question pratique? (Read 3931 times) previous topic - next topic

Heloderma-kris

Salut , voila je continue de bosser sur mon projet de gestion de terrariums (avec des sales bette dedans), et je veux faire evoluer mon code afin qu'il soit plus pratique a transformer et donc a adapter !

la question est la suivante :

est il plus judicieux de créé un tableau de structure et des fonctions avec des boucles qui execute un code , ou alors de cree une class et donc un objet terarium pour chaque terra que je créé , en fait je n'arive pas bien a voir ce qui pourrait etre le mieux !

quelle est votre avis et de quel element avez vous besoin pour me repondre
voici ce que je voulais faire comme structure :

Code: [Select]

typedef struct Terrarium  Terrarium;
struct  Terrarium
{
char nom[20];// non du terrarium
float Temp_Jour=25.0;// temperature du jour
float Temp_Nuit=20.0;// temperature de nuit
DeviceAddress adresse_sonde;/ adresse de sonde DS18B20 dallas
bool Pb_sonde=false;// detection de probleme avec la sonde
float Temp;// temperature mesuré
byte Pin;// pin de controle relais
byte index;// index de position
char Notification[20];// identifiant pushing box

};

skywodd

Bonjour,

En C++ une structure est une classe mais avec tout ses membres public par défaut.
La question ne se pose donc pas. C'est à toi de voir si tu veut faire de la vrai POO (classe + attributs privés) ou juste une structure "à la C" (structure, ou classe + attributs publics).
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Heloderma-kris

le truc c'est que j'aprend sur le site du zero j'ai pas de formation en programation et je pense que je passe a coté de certaine notion, est ce que l'une est plus simple que l'autre ?

je me dit que sa doit etre chiant a gere en POO lorsque l'on veu faire la meme action exemple

Code: [Select]

avec une structure :
une boucle for qui balaye un tableau de structure
for( i=0, i<nb_max,i++){
recuper_temperature(structure.temp[i]);
}


Code: [Select]
avec une poo
terra1.recuper_temperature();
terra2.recuper_temperature();
terra"n".recuper_temperature();


la premiere me parait plus simple a réalisé et plus flexible non?

skywodd

C'est une question d'habitude et de principe.
Soit tu code en POO et tu fait des getter/setter, soit tu code "à la C" avec des structures.
L'un n'est pas plus simple que l'autre, ni même "mieux".

Du reste tu peut très bien mettre des fonctions (constructeurs, ...) dans une structure C++ vu que c'est une classe.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Heloderma-kris

a la vue de ta reponse je pense que je vais me replonger dans le site du zero et qu'il va y avoir du boulot !
merci en tout cas
ps: je vais certainement avoir beaucoup de question !  ;)

vlp_arduino

Tu n'auras pas vraiment à faire:

Code: [Select]
terra1.recuper_temperature();
terra2.recuper_temperature();
terra"n".recuper_temperature();


Car tu feras un tableau de poiteurs de classes avec un code du type
Code: [Select]
for (...)
  terra[i]->recup_temp()


Les pro pourront confirmer ? ;-)
vlp

Heloderma-kris

bon je me suis commander les bouquins c et C++ car sur l'ordi c'est moins simple je trouve , pour le moment je me contente de me faire ma bibliotéque en C je verai aprés pour le C++. car les classe j'ai pas encor tout compris.
mais les structure me permete de faire la meme chose a priorie et avec quelque enumeration sa clarifie le code !
mais merci !

skywodd

vlp_arduino : pourquoi s'embêter à faire un tableau de pointeurs sur classe quand on peut faire un tableau d'objet.
Ça reviens à faire la même chose qu'un tableau de structure C en plus ...

Version C :
Code: [Select]
struct {
  int toto;
  // ...
} MaStruct_t;

MaStruct_t monTableau[10];

for (int i = 0; i < 10; ++i)
  maFonction(monTableau[i].toto);


Version C++ orienté objet :
Code: [Select]
classe {
private:
  int toto;
  // ...
public:
  int getToto() { return toto; }
  // ...
} MaStruct;

MaStruct monTableau[10];

for (int i = 0; i < 10; ++i)
  maFonction(monTableau[i].getToto());
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Heloderma-kris

la version c c'est exactement ce que je fait ( les classe tjs pas compris pour l'instant :smiley-roll:)

question il y a t'il une limite a l'inclusion de structure dans des structure par exemple:
Code: [Select]

structur terra
{
mes variable//
structure mesure
structure reglage
}

pour avoir queque chose comme terra.mes.temperature par exemple


je suis pas sur d'etre claire mais bon  :smiley-mr-green:

skywodd

Ya pas de limite.

Tu peut même faire une structure d'unions de structures d'unions de variables et de struct d'union de variables.
Non non j'essaye pas de t'embrouiller :smiley-mr-green:
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !


vlp_arduino

Hello,

@skywodd, mais un tableau de Classe devra être défini en global dans ton code, non ?

Tandis que le tableau de pointeur de Classe sera déclaré dans la fonction de setup.

Après, je ne sais pas si ca change grand chose en mémoire très concretement...

vlp

skywodd


c'est quoi union ?

C'est une syntaxe en C (et C++) qui permet de "voir" une variables sous plusieurs types.

Exemple :
Code: [Select]
union {
  int a;
  char b;
  long c;
} Plop_t;

En mémoire cette chose fait la taille du type le plus gros (ici long) mais peut être accéder suivant plusieurs types.

Ça permet des codes avec des types très avancés, exemple :
Code: [Select]
union {
  unsigned char bytes[4];
  long value;
} SuperLong_t;

SuperLong_t l;

l = 0xFFFFFFFF;

l[0] = 0;
// l vaut maintenant 0xFFFFFF00
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

skywodd


@skywodd, mais un tableau de Classe devra être défini en global dans ton code, non ?
Tandis que le tableau de pointeur de Classe sera déclaré dans la fonction de setup.
Après, je ne sais pas si ca change grand chose en mémoire très concretement...

Tout dépend de ce que tu veut comme visibilité pour tes classes !

Si elles ont pour but de durer toute le long du programme -> variable globale (ou locale static), sinon -> variable locale.
Les tableaux de pointeur sur classes c'est utile que si tu fait de l'allocation dynamique, sinon dans tout les autres cas c'est réalisable autrement.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Go Up